[longomatch] Add a new widget to view plays by position tags



commit 6ebd471da11939502fb61623b988f1825fdef67b
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Thu Jun 19 14:47:38 2014 +0200

    Add a new widget to view plays by position tags

 LongoMatch.GUI/Gui/Component/AnalysisComponent.cs  |   12 -
 LongoMatch.GUI/Gui/Component/CategoryProperties.cs |  110 ++++-----
 LongoMatch.GUI/Gui/Component/CodingWidget.cs       |   13 +-
 LongoMatch.GUI/Gui/Component/CoordinatesTagger.cs  |  247 +-----------------
 .../Gui/Component/PlaysCoordinatesTagger.cs        |  170 ++-----------
 .../Gui/Component/PlaysListTreeWidget.cs           |    5 +-
 .../Gui/Component/PlaysPositionViewer.cs           |  100 +++++++
 .../Gui/Component/Stats/CategoriesViewer.cs        |    4 +-
 .../Gui/Component/Stats/CategoryViewer.cs          |   24 +--
 .../Gui/Component/Stats/PlayerCategoriesViewer.cs  |    4 +-
 .../Gui/Component/Stats/PlayerCategoryViewer.cs    |   10 +-
 .../Gui/Component/Stats/PlayersViewer.cs           |    2 +-
 LongoMatch.GUI/Gui/Component/Timeline.cs           |    1 +
 LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs    |   24 +--
 LongoMatch.GUI/Gui/Dialog/StatsViewer.cs           |    2 +-
 LongoMatch.GUI/Gui/Panel/SportsTemplatesPanel.cs   |    2 +-
 LongoMatch.GUI/LongoMatch.GUI.mdp                  |    2 +
 .../LongoMatch.Gui.Component.AnalysisComponent.cs  |   30 +--
 .../LongoMatch.Gui.Component.CategoryProperties.cs |  118 ++++------
 .../LongoMatch.Gui.Component.CodingWidget.cs       |   22 ++-
 ...goMatch.Gui.Component.PlaysCoordinatesTagger.cs |   36 +++-
 ...LongoMatch.Gui.Component.PlaysPositionViewer.cs |   58 ++++
 .../LongoMatch.Gui.Component.ProjectPeriods.cs     |   39 ++--
 ...ongoMatch.Gui.Component.Stats.CategoryViewer.cs |    2 +-
 .../LongoMatch.Gui.Panel.NewProjectPanel.cs        |  147 +++++++-----
 .../LongoMatch.Gui.Panel.ProjectsManagerPanel.cs   |    1 -
 LongoMatch.GUI/gtk-gui/gui.stetic                  |  272 +++++++++++++-------
 LongoMatch.GUI/gtk-gui/objects.xml                 |   37 +---
 28 files changed, 674 insertions(+), 820 deletions(-)
---
diff --git a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs 
b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
index 551c8cd..3b27897 100644
--- a/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
+++ b/LongoMatch.GUI/Gui/Component/AnalysisComponent.cs
@@ -46,7 +46,6 @@ namespace LongoMatch.Gui.Component
 
                        playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
                        ConnectSignals();
-                       postagger.SetMode (false);
                }
                
                public IPlayerBin Player{
@@ -148,9 +147,6 @@ namespace LongoMatch.Gui.Component
                        
                        codingwidget.SetProject (project, isLive, filter);
                        playsSelection.SetProject (project, isLive, filter);
-                       postagger.LoadBackgrounds (openedProject.Categories.FieldBackground,
-                                                  openedProject.Categories.HalfFieldBackground,
-                                                  openedProject.Categories.GoalBackground);
                }
                
                void CreateCodingUI () {
@@ -166,7 +162,6 @@ namespace LongoMatch.Gui.Component
                        
                        playsSelection = new PlaysSelectionWidget ();
                        codingwidget = new CodingWidget();
-                       postagger = new PlaysCoordinatesTagger();
                        periodsrecorder = new PeriodsRecoder ();
                        playercapturer = null;
                        
@@ -175,13 +170,11 @@ namespace LongoMatch.Gui.Component
                        vbox.Show();
                        playsSelection.Show ();
                        codingwidget.Show ();
-                       postagger.Show ();
                        periodsrecorder.Show ();
                        
                        centralpane.Pack1 (playsSelection, true, true);
                        centralpane.Pack2 (rightpane, true, true);
                        rightpane.Pack1 (vbox, true, true);
-                       rightpane.Pack2 (postagger, true, true);
                        vbox.PackStart (periodsrecorder, false, true, 0);
                        vbox.PackEnd (codingwidget, true, true, 0);
                        Add (centralpane);
@@ -199,7 +192,6 @@ namespace LongoMatch.Gui.Component
                        
                        playsSelection = new PlaysSelectionWidget ();
                        codingwidget = new CodingWidget();
-                       postagger = new PlaysCoordinatesTagger();
                        playercapturer = new PlayerCapturerBin ();
                        if(projectType == ProjectType.FileProject) {
                                playercapturer.Mode = PlayerCapturerBin.PlayerOperationMode.Player;
@@ -212,7 +204,6 @@ namespace LongoMatch.Gui.Component
                        rightpane.Show ();
                        playsSelection.Show ();
                        codingwidget.Show ();
-                       postagger.Show ();
                        playercapturer.Show ();
                        
                        centralpane.Pack1 (uppane, true, true);
@@ -220,7 +211,6 @@ namespace LongoMatch.Gui.Component
                        uppane.Pack1 (playsSelection, true, true);
                        uppane.Pack2 (rightpane, true, true);
                        rightpane.Pack1 (playercapturer, true, true);
-                       rightpane.Pack2 (postagger, true, true);
                        Add (centralpane);
                }
                
@@ -231,8 +221,6 @@ namespace LongoMatch.Gui.Component
                                playsSelection.Destroy();
                        if (codingwidget != null)
                                codingwidget.Destroy();
-                       if (postagger != null)
-                               postagger.Destroy();
                        if (playercapturer != null) {
                                playercapturer.Destroy();
                        }
diff --git a/LongoMatch.GUI/Gui/Component/CategoryProperties.cs 
b/LongoMatch.GUI/Gui/Component/CategoryProperties.cs
index 92e3728..6699eae 100644
--- a/LongoMatch.GUI/Gui/Component/CategoryProperties.cs
+++ b/LongoMatch.GUI/Gui/Component/CategoryProperties.cs
@@ -45,19 +45,26 @@ namespace LongoMatch.Gui.Component
 
                public event HotKeyChangeHandler HotKeyChanged;
 
-               private Category cat;
-               private ListStore model;
+               Category cat;
+               ListStore model;
+               CoordinatesTagger fieldcoordinatestagger;
+               CoordinatesTagger halffieldcoordinatestagger;
+               CoordinatesTagger goalcoordinatestagger;
 
                public CategoryProperties()
                {
                        this.Build();
+                       vbox2.Sensitive = false;
                        subcategoriestreeview1.SubCategoriesDeleted += OnSubcategoriesDeleted;
                        subcategoriestreeview1.SubCategorySelected += OnSubcategorySelected;
                        leadtimebutton.ValueChanged += OnLeadTimeChanged;;
                        lagtimebutton.ValueChanged += OnLagTimeChanged;
-                       fieldcoordinatestagger.Background = Config.FieldBackground.Value;
-                       halffieldcoordinatestagger.Background = Config.HalfFieldBackground.Value;
-                       goalcoordinatestagger.Background = Config.GoalBackground.Value;
+                       fieldcoordinatestagger = new CoordinatesTagger ();
+                       halffieldcoordinatestagger = new CoordinatesTagger ();
+                       goalcoordinatestagger = new CoordinatesTagger ();
+                       table1.Attach (fieldcoordinatestagger, 0, 1, 0, 1);
+                       table1.Attach (halffieldcoordinatestagger, 1, 2, 0, 1);
+                       table1.Attach (goalcoordinatestagger, 2, 3, 0, 1);
                }
                
                public bool CanChangeHotkey {
@@ -70,6 +77,7 @@ namespace LongoMatch.Gui.Component
                public Category Category {
                        set {
                                cat = value;
+                               vbox2.Sensitive = true;
                                UpdateGui();
                        }
                        get {
@@ -84,22 +92,14 @@ namespace LongoMatch.Gui.Component
                
                public Categories Template {
                        set {
-                               if (value.FieldBackground != null) {
-                                       fieldcoordinatestagger.Background = value.FieldBackground.Value;
-                               }
-                               if (value.HalfFieldBackground != null) {
-                                       halffieldcoordinatestagger.Background = 
value.HalfFieldBackground.Value;
-                               }
-                               if (value.GoalBackground != null) {
-                                       goalcoordinatestagger.Background = value.GoalBackground.Value;
-                               }
+                               fieldcoordinatestagger.Tagger.Background = value.FieldBackground;
+                               halffieldcoordinatestagger.Tagger.Background = value.HalfFieldBackground;
+                               goalcoordinatestagger.Tagger.Background = value.GoalBackground;
                        }
                }
 
                private void  UpdateGui() {
                        ListStore list;
-                       List<Coordinates> coords;
-                       Coordinates c;
                        
                        if(cat == null)
                                return;
@@ -113,34 +113,16 @@ namespace LongoMatch.Gui.Component
                        
                        tagfieldcheckbutton.Active = cat.TagFieldPosition;
                        fieldcoordinatestagger.Visible = cat.TagFieldPosition;
-                       coords = new List<Coordinates>();
-                       c = new Coordinates();
-                       c.Points.Add (new Point (300, 300));
-                       coords.Add (c);
-                       if (cat.FieldPositionIsDistance) {
-                               c.Points.Add (new Point (400, 500));
-                       }
-                       fieldcoordinatestagger.Coordinates = coords;
+                       UpdatePosition (FieldPositionType.Field);
                        trajectorycheckbutton.Active = cat.FieldPositionIsDistance;
                        
                        taghalffieldcheckbutton.Active = cat.TagHalfFieldPosition;
                        halffieldcoordinatestagger.Visible = cat.TagHalfFieldPosition;
-                       coords = new List<Coordinates>();
-                       c = new Coordinates();
-                       c.Points.Add (new Point (300, 300));
-                       coords.Add (c);
-                       if (cat.FieldPositionIsDistance) {
-                               c.Points.Add (new Point (400, 500));
-                       }
-                       halffieldcoordinatestagger.Coordinates = coords;
+                       UpdatePosition (FieldPositionType.HalfField);
                        trajectoryhalfcheckbutton.Active = cat.HalfFieldPositionIsDistance;
                        
                        taggoalcheckbutton.Active = cat.TagGoalPosition;
-                       coords = new List<Coordinates>();
-                       c = new Coordinates();
-                       c.Points.Add (new Point (100, 100));
-                       coords.Add (c);
-                       goalcoordinatestagger.Coordinates = coords;
+                       UpdatePosition (FieldPositionType.Goal);
                        goalcoordinatestagger.Visible = cat.TagGoalPosition;
                        
                        if(cat.HotKey.Defined)
@@ -153,6 +135,34 @@ namespace LongoMatch.Gui.Component
                                list.AppendValues(subcat);
                }
                
+               void UpdatePosition (FieldPositionType position) {
+                       CoordinatesTagger tagger;
+                       List<Point> points;
+                       bool isDistance;
+                       
+                       switch (position) {
+                       case FieldPositionType.Field:
+                               tagger = fieldcoordinatestagger;
+                               isDistance = cat.FieldPositionIsDistance;
+                               break;
+                       case FieldPositionType.HalfField:
+                               tagger = halffieldcoordinatestagger;
+                               isDistance = cat.HalfFieldPositionIsDistance;
+                               break;
+                       default:
+                       case FieldPositionType.Goal:
+                               tagger = goalcoordinatestagger;
+                               isDistance = false;
+                               break;
+                       }
+                       points = new List<Point> ();
+                       points.Add (new Point (0.5, 0.5));
+                       if (isDistance) {
+                               points.Add (new Point (0.5, 0.1));
+                       }
+                       tagger.Tagger.Points = points;
+               }
+               
                private void RenderSubcat(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel 
model, Gtk.TreeIter iter)
                {
                        (cell as Gtk.CellRendererText).Markup =(string)model.GetValue(iter, 0);
@@ -266,36 +276,14 @@ namespace LongoMatch.Gui.Component
                
                protected void OnTrajectoryhalffieldcheckbuttonClicked (object sender, EventArgs e)
                {
-                       List<Coordinates> coords;
-                       Coordinates c;
-                       
                        cat.HalfFieldPositionIsDistance = trajectoryhalfcheckbutton.Active;
-                       
-                       coords = new List<Coordinates>();
-                       c = new Coordinates();
-                       c.Points.Add (new Point (300, 300));
-                       coords.Add (c);
-                       if (cat.HalfFieldPositionIsDistance) {
-                               c.Points.Add (new Point (400, 500));
-                       }
-                       halffieldcoordinatestagger.Coordinates = coords;
+                       UpdatePosition (FieldPositionType.HalfField);
                }
                
                protected void OnTrajectorycheckbuttonClicked (object sender, EventArgs e)
                {
-                       List<Coordinates> coords;
-                       Coordinates c;
-                       
                        cat.FieldPositionIsDistance = trajectorycheckbutton.Active;
-                       
-                       coords = new List<Coordinates>();
-                       c = new Coordinates();
-                       c.Points.Add (new Point (300, 300));
-                       coords.Add (c);
-                       if (cat.FieldPositionIsDistance) {
-                               c.Points.Add (new Point (400, 500));
-                       }
-                       fieldcoordinatestagger.Coordinates = coords;
+                       UpdatePosition (FieldPositionType.Field);
                }
        }
 }
diff --git a/LongoMatch.GUI/Gui/Component/CodingWidget.cs b/LongoMatch.GUI/Gui/Component/CodingWidget.cs
index 7bffd51..a4d47fd 100644
--- a/LongoMatch.GUI/Gui/Component/CodingWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/CodingWidget.cs
@@ -36,7 +36,9 @@ namespace LongoMatch.Gui.Component
                {
                        this.Build ();
 
-                       autoTaggingMode.Toggled += HandleViewToggled;
+                       autoTaggingMode.Activated += HandleViewToggled;
+                       timelineMode.Activated += HandleViewToggled;
+                       positionMode.Activated += HandleViewToggled;
                        autoTaggingMode.Active = true;
                        
                        teamtagger = new TeamTagger (new WidgetWrapper (drawingarea1));
@@ -45,6 +47,8 @@ namespace LongoMatch.Gui.Component
 
                        drawingarea1.HeightRequest = 200;
                        drawingarea1.WidthRequest = 300;
+                       timeline.HeightRequest = 200;
+                       playspositionviewer1.HeightRequest = 200;
                        
                        Config.EventsBroker.Tick += HandleTick;
                        Config.EventsBroker.PlaySelected += HandlePlaySelected;
@@ -54,6 +58,9 @@ namespace LongoMatch.Gui.Component
                {
                        Config.EventsBroker.Tick -= HandleTick;
                        Config.EventsBroker.PlaySelected -= HandlePlaySelected;
+                       buttonswidget.Destroy ();
+                       timeline.Destroy ();
+                       playspositionviewer1.Destroy ();
                        base.OnDestroyed ();
                }
 
@@ -66,6 +73,7 @@ namespace LongoMatch.Gui.Component
                        teamtagger.LoadTeams (project.LocalTeamTemplate, project.VisitorTeamTemplate,
                                              project.Categories.FieldBackground);
                        timeline.SetProject (project, filter);
+                       playspositionviewer1.LoadProject (project);
                }
                
                public AnalysisComponent AnalysisComponentParent {
@@ -75,10 +83,12 @@ namespace LongoMatch.Gui.Component
                
                public void AddPlay(Play play) {
                        timeline.AddPlay(play);
+                       playspositionviewer1.AddPlay (play);
                }
                
                public void DeletePlays (List<Play> plays) {
                        timeline.RemovePlays(plays);
+                       playspositionviewer1.RemovePlays (plays);
                }
 
                public void UpdateCategories () {
@@ -117,6 +127,7 @@ namespace LongoMatch.Gui.Component
                        buttonswidget.Visible = autoTaggingMode.Active;
                        drawingarea1.Visible = buttonswidget.Visible;
                        timeline.Visible = timelineMode.Active;
+                       playspositionviewer1.Visible = positionMode.Active;
                }
                
                void HandlePlaySelected (Play play)
diff --git a/LongoMatch.GUI/Gui/Component/CoordinatesTagger.cs 
b/LongoMatch.GUI/Gui/Component/CoordinatesTagger.cs
index a5b4244..adc33bd 100644
--- a/LongoMatch.GUI/Gui/Component/CoordinatesTagger.cs
+++ b/LongoMatch.GUI/Gui/Component/CoordinatesTagger.cs
@@ -16,263 +16,26 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 //
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using Gdk;
-using Gtk;
-using Cairo;
-using Point = LongoMatch.Common.Point;
-
-using LongoMatch.Common;
+using LongoMatch.Drawing.Widgets;
 using LongoMatch.Store;
+using LongoMatch.Common;
+using LongoMatch.Drawing.Cairo;
 
 namespace LongoMatch.Gui.Component
 {
        [System.ComponentModel.ToolboxItem(true)]
        public partial class CoordinatesTagger : Gtk.Bin
        {
-               Surface source;
-               List<Coordinates> coordinatesList;
-               Coordinates selectedCoords;
-               Point selectedPoint;
-               int sourceWidth, sourceHeight;
-               double sourceDAR;
-               double xScale, yScale;
-               int yOffset, xOffset;
-               const double ARROW_DEGREES = 0.5;
-               const int ARROW_LENGHT = 3, LINE_WIDTH = 3;
-                                               
                public CoordinatesTagger ()
                {
-                       Coordinates = new List<Coordinates>();
                        this.Build ();
-                       drawingarea.ExposeEvent += OnDrawingareaExposeEvent;
-                       drawingarea.ButtonPressEvent += OnDrawingareaButtonPressEvent;
-                       drawingarea.ButtonReleaseEvent += OnDrawingareaButtonReleaseEvent;
-                       drawingarea.MotionNotifyEvent += OnDrawingareaMotionNotifyEvent;
-                       HeightRequest = 100;
-                       WidthRequest = 100;
-                       Sensitive = true;
+                       Tagger = new PositionTagger (new WidgetWrapper (drawingarea));
                }
                
-               public new bool Sensitive {
+               public PositionTagger Tagger {
                        get;
                        set;
                }
-
-               public Pixbuf Background {
-                       set {
-                               if (value == null || value.Width == -1 || value.Height == -1)
-                                       return;
-                               sourceWidth = value.Width;
-                               sourceHeight = value.Height;
-                               sourceDAR = (double) sourceWidth / sourceHeight;
-                               source = new ImageSurface(Format.ARGB32,sourceWidth,sourceHeight);
-                               using(Context sourceCR = new Context(source)) {
-                                       CairoHelper.SetSourcePixbuf(sourceCR,value,0,0);
-                                       sourceCR.Paint();
-                               }
-                               QueueDraw();
-                       }
-               }
-               
-               public List<Coordinates> Coordinates {
-                       set {
-                               coordinatesList = value;
-                               QueueDraw ();
-                       }
-                       get {
-                               return coordinatesList;
-                       }
-               }
-               
-               double Distance (Point p1, Point p2) {
-                       double xd = Math.Abs (p1.X - p2.X);
-                       double yd = Math.Abs (p1.Y - p2.Y);
-                       return Math.Sqrt (Math.Pow (xd, 2) + Math.Pow (yd, 2));
-               }
-               
-               void TranslateToOriginCoords (Point point) {
-                       point.X = Math.Max (0, point.X - xOffset);
-                       point.Y = Math.Max (0, point.Y - yOffset);
-                       point.X = Math.Min (sourceWidth, (int) (point.X / xScale));
-                       point.Y = Math.Min (sourceHeight, (int) (point.Y / yScale));
-               }
-               
-               Point TranslateToDestCoords (Point point) {
-                       return new Point ((int) (point.X * xScale),
-                                         (int) (point.Y * yScale));
-               }
-               
-               void FindNearestPoint (Point cursor, out Coordinates coords, out Point point) {
-                       double minDistance = Int32.MaxValue;
-                       coords = null;
-                       point = null;
-                       
-                       TranslateToOriginCoords (cursor);
-                       foreach (Coordinates c in Coordinates) {
-                               foreach (Point p in c.Points) {
-                                       double dist = Distance (cursor, p);
-                                       if (dist < minDistance) {
-                                               minDistance = dist;
-                                               coords = c;
-                                               point = p;
-                                       }
-                               }
-                       }
-               }
-               
-               void SetContextProperties(Context c, bool selected) {
-                       c.LineCap = LineCap.Round;
-                       c.LineJoin = LineJoin.Round;
-                       if (selected) {
-                               c.Color = new Cairo.Color (255, 0, 0, 1);
-                       } else {
-                               c.Color = new Cairo.Color (0, 0, 0, 1);
-                       }
-                       c.LineWidth = LINE_WIDTH;
-                       c.Operator = Operator.Source;
-               }
-               
-               void DrawLine(Context c, Point src, Point dest) {
-                       c.MoveTo(src.X, src.Y);
-                       c.LineTo(dest.X, dest.Y);
-                       c.Stroke();
-               }
-               
-               void DrawPoint (Context c, Point location) {
-                       c.Arc (location.X, location.Y, LINE_WIDTH, 0, 2 * Math.PI);
-                       c.StrokePreserve();
-                       c.Fill();
-               }
-               
-               void DrawArrow(Context c, Point src, Point dest) {
-                       double vx1,vy1,vx2,vy2;
-                       double angle = Math.Atan2(dest.Y - src.Y, dest.X - src.X) + Math.PI;
-
-                       vx1 = dest.X + (ARROW_LENGHT + LINE_WIDTH) * Math.Cos(angle - ARROW_DEGREES);
-                       vy1 = dest.Y + (ARROW_LENGHT + LINE_WIDTH) * Math.Sin(angle - ARROW_DEGREES);
-                       vx2 = dest.X + (ARROW_LENGHT + LINE_WIDTH) * Math.Cos(angle + ARROW_DEGREES);
-                       vy2 = dest.Y + (ARROW_LENGHT + LINE_WIDTH) * Math.Sin(angle + ARROW_DEGREES);
-
-                       c.MoveTo(dest.X, dest.Y);
-                       c.LineTo(vx1, vy1);
-                       c.MoveTo(dest.X, dest.Y);
-                       c.LineTo(vx2, vy2);
-                       c.Stroke();
-                       c.Fill();
-               }
-
-               
-               void DrawCoordinates (Context context, Coordinates coords) {
-                       SetContextProperties(context, coords == selectedCoords);
-                       for (int i=0; i < coords.Points.Count; i++) {
-                               if (i != 0 && i == coords.Points.Count - 1) {
-                                       DrawArrow (context, TranslateToDestCoords(coords.Points[i -1]),
-                                                  TranslateToDestCoords (coords.Points [i]));
-                               } else {
-                                       DrawPoint (context, TranslateToDestCoords (coords.Points[i]));
-                               }
-                               if (i>0) {
-                                       DrawLine (context, TranslateToDestCoords(coords.Points[i-1]),
-                                                 TranslateToDestCoords (coords.Points[i]));
-                               }
-                       } 
-               }
-               
-               void RedrawAllCoordinates (Context ctx) {
-                       foreach (Coordinates c in Coordinates) {
-                               if (c == selectedCoords)
-                                       continue;
-                               DrawCoordinates (ctx, c);
-                       }
-               }
-               
-               protected override void OnDestroyed ()
-               {
-                       base.OnDestroyed ();
-                       if (source != null)
-                               source.Destroy();
-               }
-               
-               protected virtual void OnDrawingareaButtonPressEvent(object o, Gtk.ButtonPressEventArgs args)
-               {
-                       if (!Sensitive)
-                               return;
-                               
-                       FindNearestPoint (new Point((int) args.Event.X, (int) args.Event.Y),
-                                         out selectedCoords, out selectedPoint);
-
-                       QueueDraw ();
-               }
-
-               protected virtual void OnDrawingareaButtonReleaseEvent(object o, Gtk.ButtonReleaseEventArgs 
args)
-               {
-                       if (!Sensitive)
-                               return;
-                               
-                       selectedCoords = null;
-                       QueueDraw ();
-               }
-               
-               protected virtual void OnDrawingareaMotionNotifyEvent(object o, Gtk.MotionNotifyEventArgs 
args)
-               {
-                       Point point;
-                       
-                       if (!Sensitive)
-                               return;
-                               
-                       if (selectedCoords == null) {
-                               return;
-                       }
-                       point = new Point ((int) args.Event.X, (int) args.Event.Y);
-                       TranslateToOriginCoords (point);
-                       selectedPoint.Y = point.Y;
-                       selectedPoint.X = point.X;
-                       QueueDraw();
-               }
-               
-               protected virtual void OnDrawingareaExposeEvent(object o, Gtk.ExposeEventArgs args)
-               {
-                       double dar;
-                       int w,h, destH, destW;
-                       
-                       if (source == null) {
-                               return;
-                       }
-                       drawingarea.GdkWindow.Clear();
-
-                       using(Context c = CairoHelper.Create(drawingarea.GdkWindow)) {
-                               w = drawingarea.Allocation.Width;
-                               h = drawingarea.Allocation.Height;
-                               dar = (double) w / h;
-                               
-                               if (sourceDAR > dar) {
-                                       destW = w;
-                                       destH = (int) (w / sourceDAR);
-                                       xOffset = 0;
-                                       yOffset = (h - destH) / 2;
-                               } else {
-                                       destH = h;
-                                       destW = (int) (h * sourceDAR);
-                                       xOffset = (w - destW) / 2;
-                                       yOffset = 0;
-                               }
-                               c.Translate (xOffset, yOffset);
-                               xScale = (double) destW / sourceWidth;
-                               yScale = (double) destH / sourceHeight;
-                               
-                               c.Save ();
-                               c.Scale(xScale, yScale);
-                               c.SetSourceSurface(source, 0, 0);
-                               c.Paint();
-                               c.Restore();
-                               RedrawAllCoordinates (c);
-                               if (selectedCoords != null) {
-                                       DrawCoordinates (c, selectedCoords);
-                               }
-                       }
-               }
        }
 }
 
diff --git a/LongoMatch.GUI/Gui/Component/PlaysCoordinatesTagger.cs 
b/LongoMatch.GUI/Gui/Component/PlaysCoordinatesTagger.cs
index c66783c..09d49c1 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysCoordinatesTagger.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysCoordinatesTagger.cs
@@ -26,6 +26,7 @@ using LongoMatch.Common;
 
 using Point = LongoMatch.Common.Point;
 using Image = LongoMatch.Common.Image;
+using LongoMatch.Stats;
 
 namespace LongoMatch.Gui.Component
 {
@@ -33,175 +34,46 @@ namespace LongoMatch.Gui.Component
        public partial class PlaysCoordinatesTagger : Gtk.Bin
        {
                
-               CoordinatesTagger field, hfield, goal;
-               Pixbuf fieldPixbuf, hFieldPixbuf, goalPixbuf;
-               Box box;
-               
                public PlaysCoordinatesTagger ()
                {
                        this.Build ();
-                       SetMode (true);
-                       Config.EventsBroker.PlaySelected += HandlePlaySelected;
-               }
-
-               public bool CoordinatesSensitive {
-                       set {
-                               field.Sensitive = value;
-                               hfield.Sensitive = value;
-                               goal.Sensitive = value;
-                       }
-               }
-               
-               public void SetMode (bool horizontal) {
-                       if (box != null) {
-                               mainbox.Remove (box);
-                               box.Destroy();
-                       }
-                       if (horizontal) {
-                               box = new HBox ();
-                       } else {
-                               box = new VBox ();
-                       }
-                       field = new CoordinatesTagger ();
-                       hfield = new CoordinatesTagger ();
-                       goal = new CoordinatesTagger ();
-                       box.PackStart (field, true, true, 0);
-                       box.PackStart (hfield, true, true, 0);
-                       box.PackStart (goal, true, true, 0);
-                       mainbox.PackStart (box, true, true, 0);
-                       box.Show ();
-               }
-               
-               public void LoadPlay (Play play, bool horizontal=true) {
-                       field.Visible = hfield.Visible = goal.Visible = false;
-                       AddPlay (play, true);
-               }
-               
-               public void LoadFieldCoordinates (List<Coordinates> coords) {
-                       field.Coordinates = coords;
-                       field.Visible = coords.Count != 0;
+                       HeightRequest = 300;
+                       WidthRequest = 500;
+                       field.Tagger.EmitSignals = false;
+                       hfield.Tagger.EmitSignals = false;
+                       goal.Tagger.EmitSignals = false;
                }
 
-               public void LoadHalfFieldCoordinates (List<Coordinates> coords) {
-                       hfield.Coordinates = coords;
-                       hfield.Visible = coords.Count != 0;
-               }
-               
-               public void LoadGoalCoordinates (List<Coordinates> coords) {
-                       goal.Coordinates = coords;
-                       goal.Visible = coords.Count != 0;
-               }
-               
-               public void LoadBackgrounds (Image fieldImage, Image halfFieldImage, Image goalImage) {
-                       if (fieldImage != null) {
-                               fieldPixbuf = fieldImage.Value;
-                       } else {
-                               fieldPixbuf = Config.FieldBackground.Value;
-                       }
-                       field.Background = fieldPixbuf;
-                       if (halfFieldImage != null) {
-                               hFieldPixbuf = halfFieldImage.Value;
-                       } else {
-                               hFieldPixbuf = Config.HalfFieldBackground.Value;
-                       }
-                       hfield.Background = hFieldPixbuf;
-                       if (goalImage != null) {
-                               goalPixbuf = goalImage.Value;
-                       } else {
-                               goalPixbuf = Config.GoalBackground.Value;
-                       }
-                       goal.Background = goalPixbuf;
+               public void LoadBackgrounds (Project project) {
+                       field.Tagger.Background = project.GetBackground (FieldPositionType.Field);
+                       hfield.Tagger.Background = project.GetBackground (FieldPositionType.HalfField);
+                       goal.Tagger.Background = project.GetBackground (FieldPositionType.Goal);
                }
                
-               void AddPlay (Play play, bool fill) {
-                       if (play.Category.TagFieldPosition) {
-                               AddFieldPosTagger (play, fill);                         
-                       }
-                       if (play.Category.TagHalfFieldPosition) {
-                               AddHalfFieldPosTagger (play, fill);
-                       }
-                       if (play.Category.TagGoalPosition) {
-                               AddGoalPosTagger (play, fill);
-                       }
+               public void LoadStats (CategoryStats stats) {
                }
                
-               void AddFieldPosTagger (Play play, bool fill) {
-                       List<Coordinates> coords = new List<Coordinates>();
+               public void LoadPlay (Play play) {
+                       field.Visible = play.Category.TagFieldPosition;
+                       hfield.Visible = play.Category.TagHalfFieldPosition;
+                       goal.Visible = play.Category.TagGoalPosition;
                        
+                       play.AddDefaultPositions ();
+
                        if (play.FieldPosition != null) {
-                               coords.Add (play.FieldPosition);
-                       } else if (fill) {
-                               Coordinates c = new Coordinates ();
-                               c.Points.Add (new Point((int) (fieldPixbuf.Width * 0.25),
-                                                (int) (fieldPixbuf.Height * 0.25)));
-                               if (play.Category.FieldPositionIsDistance) {
-                                       c.Points.Add (new Point((int) (fieldPixbuf.Width * 0.75),
-                                                        (int) (fieldPixbuf.Height * 0.75)));
-                               }
-                               coords.Add (c);
-                               play.FieldPosition = c;
-                       } else {
-                               return;
+                               field.Tagger.Points = play.FieldPosition.Points;
                        }
-                       field.Coordinates = coords;
-                       field.Visible = true;
-               }
-               
-               void AddHalfFieldPosTagger (Play play, bool fill) {
-                       List<Coordinates> coords = new List<Coordinates>();
-                       
                        if (play.HalfFieldPosition != null) {
-                               coords.Add (play.HalfFieldPosition);
-                       } else  if (fill) {
-                               Coordinates c = new Coordinates ();
-                               c.Points.Add (new Point((int) (hFieldPixbuf.Width * 0.25),
-                                                (int) (hFieldPixbuf.Height * 0.25)));
-                               if (play.Category.HalfFieldPositionIsDistance) {
-                                       c.Points.Add (new Point((int) (hFieldPixbuf.Width * 0.75),
-                                                        (int) (hFieldPixbuf.Height * 0.75)));
-                               }
-                               coords.Add (c);
-                               play.HalfFieldPosition = c;
-                       } else {
-                               return;
+                               hfield.Tagger.Points = play.HalfFieldPosition.Points;
                        }
-                       hfield.Coordinates = coords;
-                       hfield.Visible = true;
-               }
-               
-               void AddGoalPosTagger (Play play, bool fill) {
-                       List<Coordinates> coords = new List<Coordinates>();
-                       
-                       if (play.GoalPosition != null) {
-                               coords.Add (play.GoalPosition);
-                       } else if (fill) {
-                               Coordinates c = new Coordinates ();
-                               c.Points.Add (new Point((int) (goalPixbuf.Width * 0.25),
-                                                (int) (goalPixbuf.Height * 0.25)));
-                               coords.Add (c);
-                               play.GoalPosition = c;
-                       } else {
-                               return;
+                       if (play.GoalPosition != null ) {
+                               goal.Tagger.Points = play.GoalPosition.Points;
                        }
-                       goal.Coordinates = coords; 
-                       goal.Visible = true;
-               }
-               
-               void HandlePlaySelected (Play play)
-               {
-                       LoadPlay (play, false);
                }
                
                protected override void OnDestroyed ()
                {
                        base.OnDestroyed ();
-                       Config.EventsBroker.PlaySelected -= HandlePlaySelected;
-                       if (fieldPixbuf != null)
-                               fieldPixbuf.Dispose();
-                       if (hFieldPixbuf != null)
-                               hFieldPixbuf.Dispose();
-                       if (goalPixbuf != null)
-                               goalPixbuf.Dispose();
                }
        }
 }
diff --git a/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs 
b/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
index 5790af7..4a67336 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
@@ -155,10 +155,7 @@ namespace LongoMatch.Gui.Component
                }
                
                protected virtual void OnEditProperties(TimeNode tNode, object val) {
-                       EditCategoryDialog dialog = new EditCategoryDialog();
-                       dialog.Category = tNode as Category; 
-                       dialog.Template = project.Categories;
-                       dialog.Project = project;
+                       EditCategoryDialog dialog = new EditCategoryDialog(project, tNode as Category);
                        dialog.Run();
                        dialog.Destroy();
                        Config.EventsBroker.EmitTimeNodeChanged (tNode, tNode.Name);
diff --git a/LongoMatch.GUI/Gui/Component/PlaysPositionViewer.cs 
b/LongoMatch.GUI/Gui/Component/PlaysPositionViewer.cs
new file mode 100644
index 0000000..11ba49e
--- /dev/null
+++ b/LongoMatch.GUI/Gui/Component/PlaysPositionViewer.cs
@@ -0,0 +1,100 @@
+//
+//  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.Common;
+using LongoMatch.Store;
+using LongoMatch.Gui.Menus;
+using System.Collections.Generic;
+
+namespace LongoMatch.Gui.Component
+{
+       [System.ComponentModel.ToolboxItem(true)]
+       public partial class PlaysPositionViewer : Gtk.Bin
+       {
+       
+               PlaysMenu menu;
+
+               public PlaysPositionViewer ()
+               {
+                       this.Build ();
+                       field.Tagger.FieldPosition = FieldPositionType.Field;
+                       hfield.Tagger.FieldPosition = FieldPositionType.HalfField;
+                       goal.Tagger.FieldPosition = FieldPositionType.Goal;
+                       field.Tagger.ShowMenuEvent += HandleShowMenuEvent;
+                       hfield.Tagger.ShowMenuEvent += HandleShowMenuEvent;
+                       goal.Tagger.ShowMenuEvent += HandleShowMenuEvent;
+                       Config.EventsBroker.PlaySelected += HandlePlaySelected;
+                       Config.EventsBroker.SegmentClosed += HandleSegmentClosed;
+                       menu = new PlaysMenu ();
+               }
+
+               public void LoadProject (Project project) {
+                       if (project != null) {
+                               field.Tagger.Background = project.GetBackground (FieldPositionType.Field);
+                               hfield.Tagger.Background = project.GetBackground 
(FieldPositionType.HalfField);
+                               goal.Tagger.Background = project.GetBackground (FieldPositionType.Goal);
+                               field.Tagger.Plays = project.Timeline;
+                               hfield.Tagger.Plays = project.Timeline;
+                               goal.Tagger.Plays = project.Timeline;
+                       }
+               }
+               
+               public void AddPlay (Play play) {
+                       field.Tagger.AddPlay (play);
+                       hfield.Tagger.AddPlay (play);
+                       goal.Tagger.AddPlay (play);
+                       QueueDraw ();
+               }
+               
+               public void RemovePlays (List<Play> plays) {
+                       field.Tagger.RemovePlays (plays);
+                       hfield.Tagger.RemovePlays (plays);
+                       goal.Tagger.RemovePlays (plays);
+                       QueueDraw ();
+               }
+               
+               void HandlePlaySelected (Play play)
+               {
+                       field.Tagger.SelectPlay (play);
+                       hfield.Tagger.SelectPlay (play);
+                       goal.Tagger.SelectPlay (play);
+               }
+
+               void HandleSegmentClosed ()
+               {
+                       field.Tagger.ClearSelection ();
+                       hfield.Tagger.ClearSelection ();
+                       goal.Tagger.ClearSelection ();
+               }
+
+               void HandleShowMenuEvent (System.Collections.Generic.List<Play> plays)
+               {
+                       if (plays == null || plays.Count == 0) {
+                               return;
+                       }
+                       menu.ShowMenu (plays);
+               }
+
+               protected override void OnDestroyed ()
+               {
+                       base.OnDestroyed ();
+                       Config.EventsBroker.PlaySelected -= HandlePlaySelected;
+               }
+       }
+}
+
diff --git a/LongoMatch.GUI/Gui/Component/Stats/CategoriesViewer.cs 
b/LongoMatch.GUI/Gui/Component/Stats/CategoriesViewer.cs
index 792b482..786acea 100644
--- a/LongoMatch.GUI/Gui/Component/Stats/CategoriesViewer.cs
+++ b/LongoMatch.GUI/Gui/Component/Stats/CategoriesViewer.cs
@@ -42,10 +42,10 @@ namespace LongoMatch.Gui.Component.Stats
                        treeview.EnableTreeLines = false;
                }
                
-               public void LoadStats (ProjectStats pstats) {
+               public void LoadStats (ProjectStats pstats, Project project) {
                        categoryviewer1.HomeName = pstats.LocalTeam;
                        categoryviewer1.AwayName = pstats.VisitorTeam;
-                       categoryviewer1.LoadBackgrounds (pstats.Field, pstats.HalfField, pstats.Goal);
+                       categoryviewer1.LoadBackgrounds (project);
                        this.pstats = pstats;
                        ReloadStats();
                }
diff --git a/LongoMatch.GUI/Gui/Component/Stats/CategoryViewer.cs 
b/LongoMatch.GUI/Gui/Component/Stats/CategoryViewer.cs
index 222e9e2..07a42fd 100644
--- a/LongoMatch.GUI/Gui/Component/Stats/CategoryViewer.cs
+++ b/LongoMatch.GUI/Gui/Component/Stats/CategoryViewer.cs
@@ -21,6 +21,7 @@ using LongoMatch.Stats;
 using System.Collections.Generic;
 using LongoMatch.Common;
 using Image = LongoMatch.Common.Image;
+using LongoMatch.Store;
 
 namespace LongoMatch.Gui.Component.Stats
 {
@@ -39,34 +40,25 @@ namespace LongoMatch.Gui.Component.Stats
                public string HomeName { get; set; }
                public string AwayName { get; set; }
                
-               public void LoadBackgrounds (Image field, Image halfField, Image goal) {
-                       alltagger.LoadBackgrounds (field, halfField, goal);
-                       hometagger.LoadBackgrounds (field, halfField, goal);
-                       awaytagger.LoadBackgrounds (field, halfField, goal);
+               public void LoadBackgrounds (Project project) {
+                       alltagger.LoadBackgrounds (project);
+                       hometagger.LoadBackgrounds (project);
+                       awaytagger.LoadBackgrounds (project);
                }
 
                public void LoadStats (CategoryStats stats) {
                        homeLabel.Text = HomeName;
                        awayLabel.Text = AwayName;
                        
-                       alltagger.LoadFieldCoordinates (stats.FieldCoordinates);
-                       alltagger.LoadHalfFieldCoordinates (stats.HalfFieldCoordinates);
-                       alltagger.LoadGoalCoordinates (stats.GoalCoordinates);
-                       alltagger.CoordinatesSensitive = false;
+                       alltagger.LoadStats (stats);
                        allframe.Visible = stats.FieldCoordinates.Count + stats.HalfFieldCoordinates.Count +
                            stats.GoalCoordinates.Count != 0;
                        
-                       hometagger.LoadFieldCoordinates (stats.HomeFieldCoordinates);
-                       hometagger.LoadHalfFieldCoordinates (stats.HomeHalfFieldCoordinates);
-                       hometagger.LoadGoalCoordinates (stats.HomeGoalCoordinates);
-                       hometagger.CoordinatesSensitive = false;
+                       hometagger.LoadStats (stats);
                        homeframe.Visible = stats.HomeFieldCoordinates.Count + 
stats.HomeHalfFieldCoordinates.Count +
                            stats.HomeGoalCoordinates.Count != 0;
                            
-                       awaytagger.LoadFieldCoordinates (stats.AwayFieldCoordinates);
-                       awaytagger.LoadHalfFieldCoordinates (stats.AwayHalfFieldCoordinates);
-                       awaytagger.LoadGoalCoordinates (stats.AwayGoalCoordinates);
-                       awaytagger.CoordinatesSensitive = false;
+                       awaytagger.LoadStats (stats);
                        awayframe.Visible = stats.AwayFieldCoordinates.Count + 
stats.AwayHalfFieldCoordinates.Count +
                            stats.AwayGoalCoordinates.Count != 0;
                        
diff --git a/LongoMatch.GUI/Gui/Component/Stats/PlayerCategoriesViewer.cs 
b/LongoMatch.GUI/Gui/Component/Stats/PlayerCategoriesViewer.cs
index 6fb6c88..b38b1a6 100644
--- a/LongoMatch.GUI/Gui/Component/Stats/PlayerCategoriesViewer.cs
+++ b/LongoMatch.GUI/Gui/Component/Stats/PlayerCategoriesViewer.cs
@@ -40,8 +40,8 @@ namespace LongoMatch.Gui.Component.Stats
                        treeview.EnableTreeLines = false;
                }
                
-               public void LoadStats (ProjectStats pstats) {
-                       categoryviewer.LoadBackgrounds (pstats.Field, pstats.HalfField, pstats.Goal);
+               public void LoadStats (ProjectStats pstats, Project project) {
+                       categoryviewer.LoadBackgrounds (project);
                        this.pstats = pstats;
                        ReloadStats();
                }
diff --git a/LongoMatch.GUI/Gui/Component/Stats/PlayerCategoryViewer.cs 
b/LongoMatch.GUI/Gui/Component/Stats/PlayerCategoryViewer.cs
index a168677..b5c69ce 100644
--- a/LongoMatch.GUI/Gui/Component/Stats/PlayerCategoryViewer.cs
+++ b/LongoMatch.GUI/Gui/Component/Stats/PlayerCategoryViewer.cs
@@ -22,6 +22,7 @@ using Gtk;
 using LongoMatch.Common;
 using LongoMatch.Stats;
 using Image = LongoMatch.Common.Image;
+using LongoMatch.Store;
 
 namespace LongoMatch.Gui.Component.Stats
 {
@@ -33,15 +34,12 @@ namespace LongoMatch.Gui.Component.Stats
                        this.Build ();
                }
 
-               public void LoadBackgrounds (Image field, Image halfField, Image goal) {
-                       tagger.LoadBackgrounds (field, halfField, goal);
+               public void LoadBackgrounds (Project project) {
+                       tagger.LoadBackgrounds (project);
                }
 
                public void LoadStats (CategoryStats stats) {
-                       tagger.LoadFieldCoordinates (stats.FieldCoordinates);
-                       tagger.LoadHalfFieldCoordinates (stats.HalfFieldCoordinates);
-                       tagger.LoadGoalCoordinates (stats.GoalCoordinates);
-                       tagger.CoordinatesSensitive = false;
+                       tagger.LoadStats (stats);
                        
                        foreach (Widget child in vbox1.AllChildren) {
                                if (!(child is PlaysCoordinatesTagger))
diff --git a/LongoMatch.GUI/Gui/Component/Stats/PlayersViewer.cs 
b/LongoMatch.GUI/Gui/Component/Stats/PlayersViewer.cs
index 49068c4..4c2dcdd 100644
--- a/LongoMatch.GUI/Gui/Component/Stats/PlayersViewer.cs
+++ b/LongoMatch.GUI/Gui/Component/Stats/PlayersViewer.cs
@@ -54,7 +54,7 @@ namespace LongoMatch.Gui.Component.Stats
                        filter = new PlaysFilter (project);
                        filter.PlayersFilterEnabled = true;
                        pstats.Filter = filter;
-                       categoriesviewer.LoadStats (pstats);
+                       categoriesviewer.LoadStats (pstats, project);
                        AddTeam (project.LocalTeamTemplate, project.Categories);
                        AddTeam (project.VisitorTeamTemplate, project.Categories);
                        filter.Update();
diff --git a/LongoMatch.GUI/Gui/Component/Timeline.cs b/LongoMatch.GUI/Gui/Component/Timeline.cs
index 1431403..a036343 100644
--- a/LongoMatch.GUI/Gui/Component/Timeline.cs
+++ b/LongoMatch.GUI/Gui/Component/Timeline.cs
@@ -26,6 +26,7 @@ using LongoMatch.Drawing.Cairo;
 using LongoMatch.Drawing;
 using Gtk;
 using Mono.Unix;
+using LongoMatch.Gui.Menus;
 
 namespace LongoMatch.Gui.Component
 {
diff --git a/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs b/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs
index 38fe706..7fb010c 100644
--- a/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs
+++ b/LongoMatch.GUI/Gui/Dialog/EditCategoryDialog.cs
@@ -37,29 +37,13 @@ namespace LongoMatch.Gui.Dialog
        {
                private List<HotKey> hkList;
 
-               public EditCategoryDialog()
+               public EditCategoryDialog(Project project, Category cat)
                {
                        this.Build();
+                       timenodeproperties2.Template = project.Categories;
+                       timenodeproperties2.Category = cat;
+                       timenodeproperties2.Project = project;
                        timenodeproperties2.HotKeyChanged += OnHotKeyChanged;
-//                     timenodeproperties2.LoadSubcategories();
-               }
-
-               public Category Category {
-                       set {
-                               timenodeproperties2.Category = value;
-                       }
-               }
-               
-               public Categories Template {
-                       set {
-                               timenodeproperties2.Template = value;
-                       }
-               }
-               
-               public Project Project {
-                       set {
-                               timenodeproperties2.Project = value;
-                       }
                }
 
                public List<HotKey> HotKeysList {
diff --git a/LongoMatch.GUI/Gui/Dialog/StatsViewer.cs b/LongoMatch.GUI/Gui/Dialog/StatsViewer.cs
index 3047da7..117f959 100644
--- a/LongoMatch.GUI/Gui/Dialog/StatsViewer.cs
+++ b/LongoMatch.GUI/Gui/Dialog/StatsViewer.cs
@@ -41,7 +41,7 @@ namespace LongoMatch.Gui.Dialog
                        if (stats != null)
                                stats.Dispose();
                        stats = new ProjectStats (project);
-                       categoriesviewer.LoadStats (stats);
+                       categoriesviewer.LoadStats (stats, project);
                        gameviewer.LoadProject (project, stats);
                        /* Player stats are filtered */
                        playersviewer.LoadProject (project, new ProjectStats (project));
diff --git a/LongoMatch.GUI/Gui/Panel/SportsTemplatesPanel.cs 
b/LongoMatch.GUI/Gui/Panel/SportsTemplatesPanel.cs
index cede9fd..bcd6b63 100644
--- a/LongoMatch.GUI/Gui/Panel/SportsTemplatesPanel.cs
+++ b/LongoMatch.GUI/Gui/Panel/SportsTemplatesPanel.cs
@@ -73,7 +73,7 @@ namespace LongoMatch.Gui.Panel
                        Load (null);
                        
                }
-
+               
                void Load (string templateName) {
                        TreeIter templateIter = TreeIter.Zero;
                        bool first = true;
diff --git a/LongoMatch.GUI/LongoMatch.GUI.mdp b/LongoMatch.GUI/LongoMatch.GUI.mdp
index f55a22b..e96014e 100644
--- a/LongoMatch.GUI/LongoMatch.GUI.mdp
+++ b/LongoMatch.GUI/LongoMatch.GUI.mdp
@@ -172,6 +172,8 @@
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.ProjectPeriods.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/PeriodsRecoder.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.PeriodsRecoder.cs" />
+    <File subtype="Code" buildaction="Compile" name="Gui/Component/PlaysPositionViewer.cs" />
+    <File subtype="Code" buildaction="Compile" 
name="gtk-gui/LongoMatch.Gui.Component.PlaysPositionViewer.cs" />
   </Contents>
   <References>
     <ProjectReference type="Package" 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 212b819..d0c1499 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.AnalysisComponent.cs
@@ -14,7 +14,6 @@ namespace LongoMatch.Gui.Component
                private global::LongoMatch.Gui.PlayerCapturerBin playercapturer;
                private global::Gtk.HBox righthbox;
                private global::Gtk.VBox tagsvbox;
-               private global::LongoMatch.Gui.Component.PlaysCoordinatesTagger postagger;
                private global::Gtk.Frame notesframe;
                private global::Gtk.Alignment GtkAlignment22;
                private global::LongoMatch.Gui.Component.NotesWidget notes;
@@ -86,13 +85,6 @@ namespace LongoMatch.Gui.Component
                        this.tagsvbox.Name = "tagsvbox";
                        this.tagsvbox.Spacing = 6;
                        // Container child tagsvbox.Gtk.Box+BoxChild
-                       this.postagger = new global::LongoMatch.Gui.Component.PlaysCoordinatesTagger ();
-                       this.postagger.Events = ((global::Gdk.EventMask)(256));
-                       this.postagger.Name = "postagger";
-                       this.tagsvbox.Add (this.postagger);
-                       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";
                        this.notesframe.ShadowType = ((global::Gtk.ShadowType)(0));
@@ -112,21 +104,21 @@ namespace LongoMatch.Gui.Component
                        this.GtkLabel31.UseMarkup = true;
                        this.notesframe.LabelWidget = this.GtkLabel31;
                        this.tagsvbox.Add (this.notesframe);
-                       global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.tagsvbox 
[this.notesframe]));
-                       w10.Position = 1;
+                       global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.tagsvbox 
[this.notesframe]));
+                       w9.Position = 0;
                        this.righthbox.Add (this.tagsvbox);
-                       global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.righthbox 
[this.tagsvbox]));
-                       w11.Position = 0;
+                       global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.righthbox 
[this.tagsvbox]));
+                       w10.Position = 0;
                        this.hpaned1.Add (this.righthbox);
-                       global::Gtk.Paned.PanedChild w12 = ((global::Gtk.Paned.PanedChild)(this.hpaned1 
[this.righthbox]));
-                       w12.Resize = false;
-                       w12.Shrink = false;
+                       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 w13 = ((global::Gtk.Paned.PanedChild)(this.hpaned 
[this.hpaned1]));
-                       w13.Shrink = false;
+                       global::Gtk.Paned.PanedChild w12 = ((global::Gtk.Paned.PanedChild)(this.hpaned 
[this.hpaned1]));
+                       w12.Shrink = false;
                        this.vpaned1.Add (this.hpaned);
-                       global::Gtk.Paned.PanedChild w14 = ((global::Gtk.Paned.PanedChild)(this.vpaned1 
[this.hpaned]));
-                       w14.Resize = false;
+                       global::Gtk.Paned.PanedChild w13 = ((global::Gtk.Paned.PanedChild)(this.vpaned1 
[this.hpaned]));
+                       w13.Resize = false;
                        // Container child vpaned1.Gtk.Paned+PanedChild
                        this.codingwidget = new global::LongoMatch.Gui.Component.CodingWidget ();
                        this.codingwidget.Events = ((global::Gdk.EventMask)(256));
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CategoryProperties.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CategoryProperties.cs
index 2ff75b2..8d168dc 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CategoryProperties.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CategoryProperties.cs
@@ -41,10 +41,7 @@ namespace LongoMatch.Gui.Component
                private global::Gtk.Alignment GtkAlignment9;
                private global::Gtk.CheckButton taggoalcheckbutton;
                private global::Gtk.Label GtkLabel13;
-               private global::Gtk.Table table3;
-               private global::LongoMatch.Gui.Component.CoordinatesTagger fieldcoordinatestagger;
-               private global::LongoMatch.Gui.Component.CoordinatesTagger goalcoordinatestagger;
-               private global::LongoMatch.Gui.Component.CoordinatesTagger halffieldcoordinatestagger;
+               private global::Gtk.Table table1;
                private global::Gtk.Label GtkLabel6;
                private global::Gtk.Frame frame3;
                private global::Gtk.Alignment GtkAlignment3;
@@ -402,43 +399,16 @@ namespace LongoMatch.Gui.Component
                        w29.Expand = false;
                        w29.Fill = false;
                        // Container child vbox5.Gtk.Box+BoxChild
-                       this.table3 = new global::Gtk.Table (((uint)(1)), ((uint)(3)), true);
-                       this.table3.Name = "table3";
-                       this.table3.RowSpacing = ((uint)(6));
-                       this.table3.ColumnSpacing = ((uint)(6));
-                       // Container child table3.Gtk.Table+TableChild
-                       this.fieldcoordinatestagger = new global::LongoMatch.Gui.Component.CoordinatesTagger 
();
-                       this.fieldcoordinatestagger.Sensitive = false;
-                       this.fieldcoordinatestagger.Events = ((global::Gdk.EventMask)(256));
-                       this.fieldcoordinatestagger.Name = "fieldcoordinatestagger";
-                       this.fieldcoordinatestagger.Sensitive = false;
-                       this.table3.Add (this.fieldcoordinatestagger);
-                       // Container child table3.Gtk.Table+TableChild
-                       this.goalcoordinatestagger = new global::LongoMatch.Gui.Component.CoordinatesTagger 
();
-                       this.goalcoordinatestagger.Sensitive = false;
-                       this.goalcoordinatestagger.Events = ((global::Gdk.EventMask)(256));
-                       this.goalcoordinatestagger.Name = "goalcoordinatestagger";
-                       this.goalcoordinatestagger.Sensitive = false;
-                       this.table3.Add (this.goalcoordinatestagger);
-                       global::Gtk.Table.TableChild w31 = ((global::Gtk.Table.TableChild)(this.table3 
[this.goalcoordinatestagger]));
-                       w31.LeftAttach = ((uint)(2));
-                       w31.RightAttach = ((uint)(3));
-                       // Container child table3.Gtk.Table+TableChild
-                       this.halffieldcoordinatestagger = new 
global::LongoMatch.Gui.Component.CoordinatesTagger ();
-                       this.halffieldcoordinatestagger.Sensitive = false;
-                       this.halffieldcoordinatestagger.Events = ((global::Gdk.EventMask)(256));
-                       this.halffieldcoordinatestagger.Name = "halffieldcoordinatestagger";
-                       this.halffieldcoordinatestagger.Sensitive = false;
-                       this.table3.Add (this.halffieldcoordinatestagger);
-                       global::Gtk.Table.TableChild w32 = ((global::Gtk.Table.TableChild)(this.table3 
[this.halffieldcoordinatestagger]));
-                       w32.LeftAttach = ((uint)(1));
-                       w32.RightAttach = ((uint)(2));
-                       this.vbox5.Add (this.table3);
-                       global::Gtk.Box.BoxChild w33 = ((global::Gtk.Box.BoxChild)(this.vbox5 [this.table3]));
-                       w33.Position = 1;
+                       this.table1 = new global::Gtk.Table (((uint)(1)), ((uint)(3)), false);
+                       this.table1.Name = "table1";
+                       this.table1.RowSpacing = ((uint)(6));
+                       this.table1.ColumnSpacing = ((uint)(6));
+                       this.vbox5.Add (this.table1);
+                       global::Gtk.Box.BoxChild w30 = ((global::Gtk.Box.BoxChild)(this.vbox5 [this.table1]));
+                       w30.Position = 1;
                        this.vbox3.Add (this.vbox5);
-                       global::Gtk.Box.BoxChild w34 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.vbox5]));
-                       w34.Position = 1;
+                       global::Gtk.Box.BoxChild w31 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.vbox5]));
+                       w31.Position = 1;
                        this.GtkAlignment1.Add (this.vbox3);
                        this.frame4.Add (this.GtkAlignment1);
                        this.GtkLabel6 = new global::Gtk.Label ();
@@ -447,10 +417,10 @@ namespace LongoMatch.Gui.Component
                        this.GtkLabel6.UseMarkup = true;
                        this.frame4.LabelWidget = this.GtkLabel6;
                        this.vbox2.Add (this.frame4);
-                       global::Gtk.Box.BoxChild w37 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.frame4]));
-                       w37.Position = 0;
-                       w37.Expand = false;
-                       w37.Fill = false;
+                       global::Gtk.Box.BoxChild w34 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.frame4]));
+                       w34.Position = 0;
+                       w34.Expand = false;
+                       w34.Fill = false;
                        // Container child vbox2.Gtk.Box+BoxChild
                        this.frame3 = new global::Gtk.Frame ();
                        this.frame3.Name = "frame3";
@@ -473,8 +443,8 @@ namespace LongoMatch.Gui.Component
                        this.subcategoriestreeview1.Name = "subcategoriestreeview1";
                        this.GtkScrolledWindow.Add (this.subcategoriestreeview1);
                        this.vbox1.Add (this.GtkScrolledWindow);
-                       global::Gtk.Box.BoxChild w39 = ((global::Gtk.Box.BoxChild)(this.vbox1 
[this.GtkScrolledWindow]));
-                       w39.Position = 0;
+                       global::Gtk.Box.BoxChild w36 = ((global::Gtk.Box.BoxChild)(this.vbox1 
[this.GtkScrolledWindow]));
+                       w36.Position = 0;
                        // Container child vbox1.Gtk.Box+BoxChild
                        this.hbox3 = new global::Gtk.HBox ();
                        this.hbox3.Name = "hbox3";
@@ -501,10 +471,10 @@ namespace LongoMatch.Gui.Component
                        this.GtkLabel7.UseMarkup = true;
                        this.frame1.LabelWidget = this.GtkLabel7;
                        this.hbox3.Add (this.frame1);
-                       global::Gtk.Box.BoxChild w42 = ((global::Gtk.Box.BoxChild)(this.hbox3 [this.frame1]));
-                       w42.Position = 0;
-                       w42.Expand = false;
-                       w42.Fill = false;
+                       global::Gtk.Box.BoxChild w39 = ((global::Gtk.Box.BoxChild)(this.hbox3 [this.frame1]));
+                       w39.Position = 0;
+                       w39.Expand = false;
+                       w39.Fill = false;
                        // Container child hbox3.Gtk.Box+BoxChild
                        this.frame2 = new global::Gtk.Frame ();
                        this.frame2.Name = "frame2";
@@ -524,8 +494,8 @@ namespace LongoMatch.Gui.Component
                        this.GtkLabel8.UseMarkup = true;
                        this.frame2.LabelWidget = this.GtkLabel8;
                        this.hbox3.Add (this.frame2);
-                       global::Gtk.Box.BoxChild w45 = ((global::Gtk.Box.BoxChild)(this.hbox3 [this.frame2]));
-                       w45.Position = 1;
+                       global::Gtk.Box.BoxChild w42 = ((global::Gtk.Box.BoxChild)(this.hbox3 [this.frame2]));
+                       w42.Position = 1;
                        // Container child hbox3.Gtk.Box+BoxChild
                        this.addbutton = new global::Gtk.Button ();
                        this.addbutton.TooltipMarkup = "Add this subcategory";
@@ -534,31 +504,31 @@ namespace LongoMatch.Gui.Component
                        this.addbutton.Name = "addbutton";
                        this.addbutton.UseUnderline = true;
                        // Container child addbutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w46 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w43 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w47 = new global::Gtk.HBox ();
-                       w47.Spacing = 2;
+                       global::Gtk.HBox w44 = new global::Gtk.HBox ();
+                       w44.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w48 = new global::Gtk.Image ();
-                       w48.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-add", 
global::Gtk.IconSize.Menu);
-                       w47.Add (w48);
+                       global::Gtk.Image w45 = new global::Gtk.Image ();
+                       w45.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-add", 
global::Gtk.IconSize.Menu);
+                       w44.Add (w45);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w50 = new global::Gtk.Label ();
-                       w50.LabelProp = global::Mono.Unix.Catalog.GetString ("_Add subcategory");
-                       w50.UseUnderline = true;
-                       w47.Add (w50);
-                       w46.Add (w47);
-                       this.addbutton.Add (w46);
+                       global::Gtk.Label w47 = new global::Gtk.Label ();
+                       w47.LabelProp = global::Mono.Unix.Catalog.GetString ("_Add subcategory");
+                       w47.UseUnderline = true;
+                       w44.Add (w47);
+                       w43.Add (w44);
+                       this.addbutton.Add (w43);
                        this.hbox3.Add (this.addbutton);
-                       global::Gtk.Box.BoxChild w54 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.addbutton]));
-                       w54.Position = 2;
-                       w54.Expand = false;
-                       w54.Fill = false;
+                       global::Gtk.Box.BoxChild w51 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.addbutton]));
+                       w51.Position = 2;
+                       w51.Expand = false;
+                       w51.Fill = false;
                        this.vbox1.Add (this.hbox3);
-                       global::Gtk.Box.BoxChild w55 = ((global::Gtk.Box.BoxChild)(this.vbox1 [this.hbox3]));
-                       w55.Position = 1;
-                       w55.Expand = false;
-                       w55.Fill = false;
+                       global::Gtk.Box.BoxChild w52 = ((global::Gtk.Box.BoxChild)(this.vbox1 [this.hbox3]));
+                       w52.Position = 1;
+                       w52.Expand = false;
+                       w52.Fill = false;
                        this.GtkAlignment3.Add (this.vbox1);
                        this.frame3.Add (this.GtkAlignment3);
                        this.GtkLabel11 = new global::Gtk.Label ();
@@ -567,8 +537,8 @@ namespace LongoMatch.Gui.Component
                        this.GtkLabel11.UseMarkup = true;
                        this.frame3.LabelWidget = this.GtkLabel11;
                        this.vbox2.Add (this.frame3);
-                       global::Gtk.Box.BoxChild w58 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.frame3]));
-                       w58.Position = 1;
+                       global::Gtk.Box.BoxChild w55 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.frame3]));
+                       w55.Position = 1;
                        this.Add (this.vbox2);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
index d2365a9..5da0931 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.CodingWidget.cs
@@ -8,6 +8,8 @@ namespace LongoMatch.Gui.Component
                private global::Gtk.RadioAction timelineMode;
                private global::Gtk.RadioAction autoTaggingMode;
                private global::Gtk.Action zoomFitAction;
+               private global::Gtk.RadioAction convertAction;
+               private global::Gtk.RadioAction positionMode;
                private global::Gtk.VBox vbox2;
                private global::Gtk.HBox hbox1;
                private global::Gtk.Toolbar codingtoolbar;
@@ -15,6 +17,7 @@ namespace LongoMatch.Gui.Component
                private global::Gtk.DrawingArea drawingarea1;
                private global::LongoMatch.Gui.Component.ButtonsWidget buttonswidget;
                private global::LongoMatch.Gui.Component.Timeline timeline;
+               private global::LongoMatch.Gui.Component.PlaysPositionViewer playspositionviewer1;
 
                protected virtual void Build ()
                {
@@ -31,8 +34,14 @@ namespace LongoMatch.Gui.Component
                        w2.Add (this.autoTaggingMode, null);
                        this.zoomFitAction = new global::Gtk.Action ("zoomFitAction", null, null, 
"gtk-zoom-fit");
                        w2.Add (this.zoomFitAction, null);
+                       this.convertAction = new global::Gtk.RadioAction ("convertAction", null, null, 
"gtk-convert", 0);
+                       this.convertAction.Group = this.autoTaggingMode.Group;
+                       w2.Add (this.convertAction, null);
                        this.UIManager.InsertActionGroup (w2, 0);
                        global::Gtk.ActionGroup w3 = new global::Gtk.ActionGroup ("Timeline");
+                       this.positionMode = new global::Gtk.RadioAction ("positionMode", null, null, 
"gtk-justify-fill", 0);
+                       this.positionMode.Group = this.convertAction.Group;
+                       w3.Add (this.positionMode, null);
                        this.UIManager.InsertActionGroup (w3, 1);
                        this.Name = "LongoMatch.Gui.Component.CodingWidget";
                        // Container child LongoMatch.Gui.Component.CodingWidget.Gtk.Container+ContainerChild
@@ -44,7 +53,7 @@ namespace LongoMatch.Gui.Component
                        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.UIManager.AddUiFromString ("<ui><toolbar name='codingtoolbar'><toolitem 
name='autoTaggingMode' action='autoTaggingMode'/><toolitem name='timelineMode' 
action='timelineMode'/><toolitem name='positionMode' action='positionMode'/></toolbar></ui>");
                        this.codingtoolbar = ((global::Gtk.Toolbar)(this.UIManager.GetWidget 
("/codingtoolbar")));
                        this.codingtoolbar.Name = "codingtoolbar";
                        this.codingtoolbar.ShowArrow = false;
@@ -82,9 +91,16 @@ namespace LongoMatch.Gui.Component
                        this.hbox2.Add (this.timeline);
                        global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.timeline]));
                        w8.Position = 2;
+                       // Container child hbox2.Gtk.Box+BoxChild
+                       this.playspositionviewer1 = new global::LongoMatch.Gui.Component.PlaysPositionViewer 
();
+                       this.playspositionviewer1.Events = ((global::Gdk.EventMask)(256));
+                       this.playspositionviewer1.Name = "playspositionviewer1";
+                       this.hbox2.Add (this.playspositionviewer1);
+                       global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.playspositionviewer1]));
+                       w9.Position = 3;
                        this.vbox2.Add (this.hbox2);
-                       global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox2]));
-                       w9.Position = 1;
+                       global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox2]));
+                       w10.Position = 1;
                        this.Add (this.vbox2);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysCoordinatesTagger.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysCoordinatesTagger.cs
index 5bc98d6..185a488 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysCoordinatesTagger.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysCoordinatesTagger.cs
@@ -4,7 +4,11 @@ namespace LongoMatch.Gui.Component
 {
        public partial class PlaysCoordinatesTagger
        {
-               private global::Gtk.VBox mainbox;
+               private global::Gtk.HBox mainbox;
+               private global::LongoMatch.Gui.Component.CoordinatesTagger field;
+               private global::Gtk.VBox vbox2;
+               private global::LongoMatch.Gui.Component.CoordinatesTagger hfield;
+               private global::LongoMatch.Gui.Component.CoordinatesTagger goal;
 
                protected virtual void Build ()
                {
@@ -13,9 +17,37 @@ namespace LongoMatch.Gui.Component
                        global::Stetic.BinContainer.Attach (this);
                        this.Name = "LongoMatch.Gui.Component.PlaysCoordinatesTagger";
                        // Container child 
LongoMatch.Gui.Component.PlaysCoordinatesTagger.Gtk.Container+ContainerChild
-                       this.mainbox = new global::Gtk.VBox ();
+                       this.mainbox = new global::Gtk.HBox ();
                        this.mainbox.Name = "mainbox";
                        this.mainbox.Spacing = 6;
+                       // Container child mainbox.Gtk.Box+BoxChild
+                       this.field = new global::LongoMatch.Gui.Component.CoordinatesTagger ();
+                       this.field.Events = ((global::Gdk.EventMask)(256));
+                       this.field.Name = "field";
+                       this.mainbox.Add (this.field);
+                       global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.mainbox [this.field]));
+                       w1.Position = 0;
+                       // Container child mainbox.Gtk.Box+BoxChild
+                       this.vbox2 = new global::Gtk.VBox ();
+                       this.vbox2.Name = "vbox2";
+                       this.vbox2.Spacing = 6;
+                       // Container child vbox2.Gtk.Box+BoxChild
+                       this.hfield = new global::LongoMatch.Gui.Component.CoordinatesTagger ();
+                       this.hfield.Events = ((global::Gdk.EventMask)(256));
+                       this.hfield.Name = "hfield";
+                       this.vbox2.Add (this.hfield);
+                       global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hfield]));
+                       w2.Position = 0;
+                       // Container child vbox2.Gtk.Box+BoxChild
+                       this.goal = new global::LongoMatch.Gui.Component.CoordinatesTagger ();
+                       this.goal.Events = ((global::Gdk.EventMask)(256));
+                       this.goal.Name = "goal";
+                       this.vbox2.Add (this.goal);
+                       global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.goal]));
+                       w3.Position = 1;
+                       this.mainbox.Add (this.vbox2);
+                       global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.mainbox [this.vbox2]));
+                       w4.Position = 1;
                        this.Add (this.mainbox);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysPositionViewer.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysPositionViewer.cs
new file mode 100644
index 0000000..e75afba
--- /dev/null
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysPositionViewer.cs
@@ -0,0 +1,58 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace LongoMatch.Gui.Component
+{
+       public partial class PlaysPositionViewer
+       {
+               private global::Gtk.HBox hbox1;
+               private global::LongoMatch.Gui.Component.CoordinatesTagger field;
+               private global::Gtk.VBox vbox2;
+               private global::LongoMatch.Gui.Component.CoordinatesTagger hfield;
+               private global::LongoMatch.Gui.Component.CoordinatesTagger goal;
+
+               protected virtual void Build ()
+               {
+                       global::Stetic.Gui.Initialize (this);
+                       // Widget LongoMatch.Gui.Component.PlaysPositionViewer
+                       global::Stetic.BinContainer.Attach (this);
+                       this.Name = "LongoMatch.Gui.Component.PlaysPositionViewer";
+                       // Container child 
LongoMatch.Gui.Component.PlaysPositionViewer.Gtk.Container+ContainerChild
+                       this.hbox1 = new global::Gtk.HBox ();
+                       this.hbox1.Name = "hbox1";
+                       this.hbox1.Spacing = 6;
+                       // Container child hbox1.Gtk.Box+BoxChild
+                       this.field = new global::LongoMatch.Gui.Component.CoordinatesTagger ();
+                       this.field.Events = ((global::Gdk.EventMask)(256));
+                       this.field.Name = "field";
+                       this.hbox1.Add (this.field);
+                       global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.field]));
+                       w1.Position = 0;
+                       // 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.hfield = new global::LongoMatch.Gui.Component.CoordinatesTagger ();
+                       this.hfield.Events = ((global::Gdk.EventMask)(256));
+                       this.hfield.Name = "hfield";
+                       this.vbox2.Add (this.hfield);
+                       global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hfield]));
+                       w2.Position = 0;
+                       // Container child vbox2.Gtk.Box+BoxChild
+                       this.goal = new global::LongoMatch.Gui.Component.CoordinatesTagger ();
+                       this.goal.Events = ((global::Gdk.EventMask)(256));
+                       this.goal.Name = "goal";
+                       this.vbox2.Add (this.goal);
+                       global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.goal]));
+                       w3.Position = 1;
+                       this.hbox1.Add (this.vbox2);
+                       global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.vbox2]));
+                       w4.Position = 1;
+                       this.Add (this.hbox1);
+                       if ((this.Child != null)) {
+                               this.Child.ShowAll ();
+                       }
+                       this.Hide ();
+               }
+       }
+}
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ProjectPeriods.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ProjectPeriods.cs
index 3c810bf..1113cf5 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ProjectPeriods.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.ProjectPeriods.cs
@@ -6,10 +6,10 @@ namespace LongoMatch.Gui.Component
        {
                private global::Gtk.VBox vbox2;
                private global::LongoMatch.Gui.PlayerBin playerbin2;
+               private global::Gtk.Label synclabel;
                private global::Gtk.DrawingArea drawingarea1;
                private global::Gtk.ScrolledWindow scrolledwindow2;
                private global::Gtk.DrawingArea drawingarea2;
-               private global::Gtk.Label synclabel;
 
                protected virtual void Build ()
                {
@@ -29,12 +29,23 @@ namespace LongoMatch.Gui.Component
                        global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.playerbin2]));
                        w1.Position = 0;
                        // Container child vbox2.Gtk.Box+BoxChild
+                       this.synclabel = new global::Gtk.Label ();
+                       this.synclabel.Name = "synclabel";
+                       this.synclabel.UseMarkup = true;
+                       this.vbox2.Add (this.synclabel);
+                       global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.synclabel]));
+                       w2.Position = 1;
+                       w2.Expand = false;
+                       w2.Fill = false;
+                       w2.Padding = ((uint)(10));
+                       // Container child vbox2.Gtk.Box+BoxChild
                        this.drawingarea1 = new global::Gtk.DrawingArea ();
                        this.drawingarea1.Name = "drawingarea1";
                        this.vbox2.Add (this.drawingarea1);
-                       global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.drawingarea1]));
-                       w2.Position = 1;
-                       w2.Expand = false;
+                       global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.drawingarea1]));
+                       w3.Position = 2;
+                       w3.Expand = false;
+                       w3.Fill = false;
                        // Container child vbox2.Gtk.Box+BoxChild
                        this.scrolledwindow2 = new global::Gtk.ScrolledWindow ();
                        this.scrolledwindow2.HeightRequest = 50;
@@ -42,25 +53,15 @@ namespace LongoMatch.Gui.Component
                        this.scrolledwindow2.Name = "scrolledwindow2";
                        this.scrolledwindow2.ShadowType = ((global::Gtk.ShadowType)(1));
                        // Container child scrolledwindow2.Gtk.Container+ContainerChild
-                       global::Gtk.Viewport w3 = new global::Gtk.Viewport ();
-                       w3.ShadowType = ((global::Gtk.ShadowType)(0));
+                       global::Gtk.Viewport w4 = new global::Gtk.Viewport ();
+                       w4.ShadowType = ((global::Gtk.ShadowType)(0));
                        // Container child GtkViewport.Gtk.Container+ContainerChild
                        this.drawingarea2 = new global::Gtk.DrawingArea ();
                        this.drawingarea2.Name = "drawingarea2";
-                       w3.Add (this.drawingarea2);
-                       this.scrolledwindow2.Add (w3);
+                       w4.Add (this.drawingarea2);
+                       this.scrolledwindow2.Add (w4);
                        this.vbox2.Add (this.scrolledwindow2);
-                       global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.scrolledwindow2]));
-                       w6.Position = 2;
-                       w6.Expand = false;
-                       w6.Fill = false;
-                       // Container child vbox2.Gtk.Box+BoxChild
-                       this.synclabel = new global::Gtk.Label ();
-                       this.synclabel.Name = "synclabel";
-                       this.synclabel.UseMarkup = true;
-                       this.vbox2.Add (this.synclabel);
-                       global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.synclabel]));
-                       w7.PackType = ((global::Gtk.PackType)(1));
+                       global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.scrolledwindow2]));
                        w7.Position = 3;
                        w7.Expand = false;
                        w7.Fill = false;
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.Stats.CategoryViewer.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.Stats.CategoryViewer.cs
index b1e599a..5aa5c26 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.Stats.CategoryViewer.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.Stats.CategoryViewer.cs
@@ -42,7 +42,7 @@ namespace LongoMatch.Gui.Component.Stats
                        this.notebook1 = new global::Gtk.Notebook ();
                        this.notebook1.CanFocus = true;
                        this.notebook1.Name = "notebook1";
-                       this.notebook1.CurrentPage = 0;
+                       this.notebook1.CurrentPage = 1;
                        // Container child notebook1.Gtk.Notebook+NotebookChild
                        this.vbox1 = new global::Gtk.VBox ();
                        this.vbox1.Name = "vbox1";
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs
index 6ed0b62..9b7db32 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.NewProjectPanel.cs
@@ -77,6 +77,9 @@ namespace LongoMatch.Gui.Panel
                private global::Gtk.Image awayshieldimage;
                private global::Gtk.DrawingArea drawingarea1;
                private global::Gtk.Label label3;
+               private global::Gtk.VBox vbox6;
+               private global::Gtk.Label label8;
+               private global::Gtk.HSeparator hseparator4;
                private global::LongoMatch.Gui.Component.ProjectPeriods projectperiods1;
                private global::Gtk.Label label7;
                private global::Gtk.HButtonBox hbuttonbox2;
@@ -110,7 +113,7 @@ namespace LongoMatch.Gui.Panel
                        this.notebook1 = new global::Gtk.Notebook ();
                        this.notebook1.CanFocus = true;
                        this.notebook1.Name = "notebook1";
-                       this.notebook1.CurrentPage = 0;
+                       this.notebook1.CurrentPage = 1;
                        this.notebook1.ShowBorder = false;
                        this.notebook1.Scrollable = true;
                        // Container child notebook1.Gtk.Notebook+NotebookChild
@@ -769,24 +772,50 @@ namespace LongoMatch.Gui.Panel
                        this.notebook1.SetTabLabel (this.vbox4, this.label3);
                        this.label3.ShowAll ();
                        // Container child notebook1.Gtk.Notebook+NotebookChild
+                       this.vbox6 = new global::Gtk.VBox ();
+                       this.vbox6.Name = "vbox6";
+                       this.vbox6.Spacing = 6;
+                       // Container child vbox6.Gtk.Box+BoxChild
+                       this.label8 = new global::Gtk.Label ();
+                       this.label8.Name = "label8";
+                       this.label8.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>Video 
synchronization</b>");
+                       this.label8.UseMarkup = true;
+                       this.vbox6.Add (this.label8);
+                       global::Gtk.Box.BoxChild w93 = ((global::Gtk.Box.BoxChild)(this.vbox6 [this.label8]));
+                       w93.Position = 0;
+                       w93.Expand = false;
+                       w93.Fill = false;
+                       w93.Padding = ((uint)(30));
+                       // Container child vbox6.Gtk.Box+BoxChild
+                       this.hseparator4 = new global::Gtk.HSeparator ();
+                       this.hseparator4.Name = "hseparator4";
+                       this.vbox6.Add (this.hseparator4);
+                       global::Gtk.Box.BoxChild w94 = ((global::Gtk.Box.BoxChild)(this.vbox6 
[this.hseparator4]));
+                       w94.Position = 1;
+                       w94.Expand = false;
+                       w94.Fill = false;
+                       // Container child vbox6.Gtk.Box+BoxChild
                        this.projectperiods1 = new global::LongoMatch.Gui.Component.ProjectPeriods ();
                        this.projectperiods1.Events = ((global::Gdk.EventMask)(256));
                        this.projectperiods1.Name = "projectperiods1";
-                       this.notebook1.Add (this.projectperiods1);
-                       global::Gtk.Notebook.NotebookChild w93 = 
((global::Gtk.Notebook.NotebookChild)(this.notebook1 [this.projectperiods1]));
-                       w93.Position = 2;
+                       this.vbox6.Add (this.projectperiods1);
+                       global::Gtk.Box.BoxChild w95 = ((global::Gtk.Box.BoxChild)(this.vbox6 
[this.projectperiods1]));
+                       w95.Position = 2;
+                       this.notebook1.Add (this.vbox6);
+                       global::Gtk.Notebook.NotebookChild w96 = 
((global::Gtk.Notebook.NotebookChild)(this.notebook1 [this.vbox6]));
+                       w96.Position = 2;
                        // Notebook tab
                        this.label7 = new global::Gtk.Label ();
                        this.label7.Name = "label7";
                        this.label7.LabelProp = global::Mono.Unix.Catalog.GetString ("page3");
-                       this.notebook1.SetTabLabel (this.projectperiods1, this.label7);
+                       this.notebook1.SetTabLabel (this.vbox6, this.label7);
                        this.label7.ShowAll ();
                        this.hbox3.Add (this.notebook1);
-                       global::Gtk.Box.BoxChild w94 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.notebook1]));
-                       w94.Position = 1;
+                       global::Gtk.Box.BoxChild w97 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.notebook1]));
+                       w97.Position = 1;
                        this.vbox2.Add (this.hbox3);
-                       global::Gtk.Box.BoxChild w95 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox3]));
-                       w95.Position = 0;
+                       global::Gtk.Box.BoxChild w98 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox3]));
+                       w98.Position = 0;
                        // Container child vbox2.Gtk.Box+BoxChild
                        this.hbuttonbox2 = new global::Gtk.HButtonBox ();
                        this.hbuttonbox2.Name = "hbuttonbox2";
@@ -797,81 +826,81 @@ namespace LongoMatch.Gui.Panel
                        this.backbutton.Name = "backbutton";
                        this.backbutton.UseUnderline = true;
                        // Container child backbutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w96 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w99 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w97 = new global::Gtk.HBox ();
-                       w97.Spacing = 2;
+                       global::Gtk.HBox w100 = new global::Gtk.HBox ();
+                       w100.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w98 = new global::Gtk.Image ();
-                       w98.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-go-back", 
global::Gtk.IconSize.Dialog);
-                       w97.Add (w98);
+                       global::Gtk.Image w101 = new global::Gtk.Image ();
+                       w101.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-go-back", 
global::Gtk.IconSize.Dialog);
+                       w100.Add (w101);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w100 = new global::Gtk.Label ();
-                       w100.LabelProp = global::Mono.Unix.Catalog.GetString ("_Back");
-                       w100.UseUnderline = true;
-                       w97.Add (w100);
-                       w96.Add (w97);
-                       this.backbutton.Add (w96);
+                       global::Gtk.Label w103 = new global::Gtk.Label ();
+                       w103.LabelProp = global::Mono.Unix.Catalog.GetString ("_Back");
+                       w103.UseUnderline = true;
+                       w100.Add (w103);
+                       w99.Add (w100);
+                       this.backbutton.Add (w99);
                        this.hbuttonbox2.Add (this.backbutton);
-                       global::Gtk.ButtonBox.ButtonBoxChild w104 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox2 [this.backbutton]));
-                       w104.Expand = false;
-                       w104.Fill = false;
+                       global::Gtk.ButtonBox.ButtonBoxChild w107 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox2 [this.backbutton]));
+                       w107.Expand = false;
+                       w107.Fill = false;
                        // Container child hbuttonbox2.Gtk.ButtonBox+ButtonBoxChild
                        this.nextbutton = new global::Gtk.Button ();
                        this.nextbutton.CanFocus = true;
                        this.nextbutton.Name = "nextbutton";
                        this.nextbutton.UseUnderline = true;
                        // Container child nextbutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w105 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w108 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w106 = new global::Gtk.HBox ();
-                       w106.Spacing = 2;
+                       global::Gtk.HBox w109 = new global::Gtk.HBox ();
+                       w109.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w107 = new global::Gtk.Image ();
-                       w107.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-go-forward", 
global::Gtk.IconSize.Dialog);
-                       w106.Add (w107);
+                       global::Gtk.Image w110 = new global::Gtk.Image ();
+                       w110.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-go-forward", 
global::Gtk.IconSize.Dialog);
+                       w109.Add (w110);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w109 = new global::Gtk.Label ();
-                       w109.LabelProp = global::Mono.Unix.Catalog.GetString ("_Next");
-                       w109.UseUnderline = true;
-                       w106.Add (w109);
-                       w105.Add (w106);
-                       this.nextbutton.Add (w105);
+                       global::Gtk.Label w112 = new global::Gtk.Label ();
+                       w112.LabelProp = global::Mono.Unix.Catalog.GetString ("_Next");
+                       w112.UseUnderline = true;
+                       w109.Add (w112);
+                       w108.Add (w109);
+                       this.nextbutton.Add (w108);
                        this.hbuttonbox2.Add (this.nextbutton);
-                       global::Gtk.ButtonBox.ButtonBoxChild w113 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox2 [this.nextbutton]));
-                       w113.Position = 1;
-                       w113.Expand = false;
-                       w113.Fill = false;
+                       global::Gtk.ButtonBox.ButtonBoxChild w116 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox2 [this.nextbutton]));
+                       w116.Position = 1;
+                       w116.Expand = false;
+                       w116.Fill = false;
                        // Container child hbuttonbox2.Gtk.ButtonBox+ButtonBoxChild
                        this.createbutton = new global::Gtk.Button ();
                        this.createbutton.CanFocus = true;
                        this.createbutton.Name = "createbutton";
                        this.createbutton.UseUnderline = true;
                        // Container child createbutton.Gtk.Container+ContainerChild
-                       global::Gtk.Alignment w114 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+                       global::Gtk.Alignment w117 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
                        // Container child GtkAlignment.Gtk.Container+ContainerChild
-                       global::Gtk.HBox w115 = new global::Gtk.HBox ();
-                       w115.Spacing = 2;
+                       global::Gtk.HBox w118 = new global::Gtk.HBox ();
+                       w118.Spacing = 2;
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Image w116 = new global::Gtk.Image ();
-                       w116.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-new", 
global::Gtk.IconSize.Dialog);
-                       w115.Add (w116);
+                       global::Gtk.Image w119 = new global::Gtk.Image ();
+                       w119.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-new", 
global::Gtk.IconSize.Dialog);
+                       w118.Add (w119);
                        // Container child GtkHBox.Gtk.Container+ContainerChild
-                       global::Gtk.Label w118 = new global::Gtk.Label ();
-                       w118.LabelProp = global::Mono.Unix.Catalog.GetString ("Create project");
-                       w118.UseUnderline = true;
-                       w115.Add (w118);
-                       w114.Add (w115);
-                       this.createbutton.Add (w114);
+                       global::Gtk.Label w121 = new global::Gtk.Label ();
+                       w121.LabelProp = global::Mono.Unix.Catalog.GetString ("Create project");
+                       w121.UseUnderline = true;
+                       w118.Add (w121);
+                       w117.Add (w118);
+                       this.createbutton.Add (w117);
                        this.hbuttonbox2.Add (this.createbutton);
-                       global::Gtk.ButtonBox.ButtonBoxChild w122 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox2 [this.createbutton]));
-                       w122.Position = 2;
-                       w122.Expand = false;
-                       w122.Fill = false;
+                       global::Gtk.ButtonBox.ButtonBoxChild w125 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(this.hbuttonbox2 [this.createbutton]));
+                       w125.Position = 2;
+                       w125.Expand = false;
+                       w125.Fill = false;
                        this.vbox2.Add (this.hbuttonbox2);
-                       global::Gtk.Box.BoxChild w123 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.hbuttonbox2]));
-                       w123.Position = 1;
-                       w123.Expand = false;
+                       global::Gtk.Box.BoxChild w126 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.hbuttonbox2]));
+                       w126.Position = 1;
+                       w126.Expand = false;
                        this.Add (this.vbox2);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Panel.ProjectsManagerPanel.cs
index dc0a441..b6fbbb2 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/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index 2577b36..ed0d0dc 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -468,7 +468,7 @@
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.CategoryProperties" design-size="516 472">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.CategoryProperties" design-size="674 579">
     <property name="MemberName" />
     <child>
       <widget class="Gtk.VBox" id="vbox2">
@@ -996,66 +996,19 @@ Sort by duration</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="Gtk.Table" id="table3">
+                          <widget class="Gtk.Table" id="table1">
                             <property name="MemberName" />
                             <property name="NColumns">3</property>
-                            <property name="Homogeneous">True</property>
                             <property name="RowSpacing">6</property>
                             <property name="ColumnSpacing">6</property>
                             <child>
-                              <widget class="LongoMatch.Gui.Component.CoordinatesTagger" 
id="fieldcoordinatestagger">
-                                <property name="MemberName" />
-                                <property name="Sensitive">False</property>
-                                <property name="Events">ButtonPressMask</property>
-                                <property name="Sensitive">False</property>
-                              </widget>
-                              <packing>
-                                <property name="AutoSize">True</property>
-                                <property name="XExpand">True</property>
-                                <property name="XFill">True</property>
-                                <property name="XShrink">False</property>
-                                <property name="YExpand">True</property>
-                                <property name="YFill">True</property>
-                                <property name="YShrink">False</property>
-                              </packing>
+                              <placeholder />
                             </child>
                             <child>
-                              <widget class="LongoMatch.Gui.Component.CoordinatesTagger" 
id="goalcoordinatestagger">
-                                <property name="MemberName" />
-                                <property name="Sensitive">False</property>
-                                <property name="Events">ButtonPressMask</property>
-                                <property name="Sensitive">False</property>
-                              </widget>
-                              <packing>
-                                <property name="LeftAttach">2</property>
-                                <property name="RightAttach">3</property>
-                                <property name="AutoSize">True</property>
-                                <property name="XExpand">True</property>
-                                <property name="XFill">True</property>
-                                <property name="XShrink">False</property>
-                                <property name="YExpand">True</property>
-                                <property name="YFill">True</property>
-                                <property name="YShrink">False</property>
-                              </packing>
+                              <placeholder />
                             </child>
                             <child>
-                              <widget class="LongoMatch.Gui.Component.CoordinatesTagger" 
id="halffieldcoordinatestagger">
-                                <property name="MemberName" />
-                                <property name="Sensitive">False</property>
-                                <property name="Events">ButtonPressMask</property>
-                                <property name="Sensitive">False</property>
-                              </widget>
-                              <packing>
-                                <property name="LeftAttach">1</property>
-                                <property name="RightAttach">2</property>
-                                <property name="AutoSize">True</property>
-                                <property name="XExpand">True</property>
-                                <property name="XFill">True</property>
-                                <property name="XShrink">False</property>
-                                <property name="YExpand">True</property>
-                                <property name="YFill">True</property>
-                                <property name="YShrink">False</property>
-                              </packing>
+                              <placeholder />
                             </child>
                           </widget>
                           <packing>
@@ -4825,15 +4778,52 @@ You can continue with the current capture, cancel it or save your project.
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.PlaysCoordinatesTagger" design-size="300 300">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.PlaysCoordinatesTagger" design-size="352 364">
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
-      <widget class="Gtk.VBox" id="mainbox">
+      <widget class="Gtk.HBox" id="mainbox">
         <property name="MemberName" />
         <property name="Spacing">6</property>
         <child>
-          <placeholder />
+          <widget class="LongoMatch.Gui.Component.CoordinatesTagger" id="field">
+            <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="Gtk.VBox" id="vbox2">
+            <property name="MemberName" />
+            <property name="Spacing">6</property>
+            <child>
+              <widget class="LongoMatch.Gui.Component.CoordinatesTagger" id="hfield">
+                <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.CoordinatesTagger" id="goal">
+                <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>
       </widget>
     </child>
@@ -4854,7 +4844,7 @@ You can continue with the current capture, cancel it or save your project.
               <widget class="Gtk.Notebook" id="notebook1">
                 <property name="MemberName" />
                 <property name="CanFocus">True</property>
-                <property name="CurrentPage">0</property>
+                <property name="CurrentPage">1</property>
                 <child>
                   <widget class="Gtk.VBox" id="vbox1">
                     <property name="MemberName" />
@@ -5505,16 +5495,6 @@ You can continue with the current capture, cancel it or save your project.
                         <property name="Visible">False</property>
                         <property name="Spacing">6</property>
                         <child>
-                          <widget class="LongoMatch.Gui.Component.PlaysCoordinatesTagger" id="postagger">
-                            <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="Gtk.Frame" id="notesframe">
                             <property name="MemberName" />
                             <property name="ShadowType">None</property>
@@ -5544,7 +5524,7 @@ You can continue with the current capture, cancel it or save your project.
                             </child>
                           </widget>
                           <packing>
-                            <property name="Position">1</property>
+                            <property name="Position">0</property>
                             <property name="AutoSize">False</property>
                           </packing>
                         </child>
@@ -6004,7 +5984,7 @@ You can continue with the current capture, cancel it or save your project.
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Panel.NewProjectPanel" design-size="824 647">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Panel.NewProjectPanel" design-size="840 647">
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
@@ -6030,7 +6010,7 @@ You can continue with the current capture, cancel it or save your project.
               <widget class="Gtk.Notebook" id="notebook1">
                 <property name="MemberName" />
                 <property name="CanFocus">True</property>
-                <property name="CurrentPage">0</property>
+                <property name="CurrentPage">1</property>
                 <property name="ShowBorder">False</property>
                 <property name="Scrollable">True</property>
                 <child>
@@ -7054,9 +7034,44 @@ You can continue with the current capture, cancel it or save your project.
                   </packing>
                 </child>
                 <child>
-                  <widget class="LongoMatch.Gui.Component.ProjectPeriods" id="projectperiods1">
+                  <widget class="Gtk.VBox" id="vbox6">
                     <property name="MemberName" />
-                    <property name="Events">ButtonPressMask</property>
+                    <property name="Spacing">6</property>
+                    <child>
+                      <widget class="Gtk.Label" id="label8">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">&lt;b&gt;Video 
synchronization&lt;/b&gt;</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">0</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                        <property name="Padding">30</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.HSeparator" id="hseparator4">
+                        <property name="MemberName" />
+                      </widget>
+                      <packing>
+                        <property name="Position">1</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="LongoMatch.Gui.Component.ProjectPeriods" id="projectperiods1">
+                        <property name="MemberName" />
+                        <property name="Events">ButtonPressMask</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">2</property>
+                        <property name="AutoSize">True</property>
+                      </packing>
+                    </child>
                   </widget>
                   <packing>
                     <property name="Position">2</property>
@@ -8801,7 +8816,7 @@ Click 2 players to swap them</property>
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Panel.SportsTemplatesPanel" design-size="1087 503">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Panel.SportsTemplatesPanel" design-size="1087 513">
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
@@ -9244,7 +9259,6 @@ Click 2 players to swap them</property>
     </child>
   </widget>
   <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.CodingWidget" design-size="673 300">
-    <action-group name="Timeline" />
     <action-group name="Default">
       <action id="timelineMode">
         <property name="Type">Radio</property>
@@ -9271,6 +9285,26 @@ Click 2 players to swap them</property>
         <property name="Label" translatable="yes" />
         <property name="StockId">gtk-zoom-fit</property>
       </action>
+      <action id="convertAction">
+        <property name="Type">Radio</property>
+        <property name="Label" translatable="yes" />
+        <property name="StockId">gtk-convert</property>
+        <property name="DrawAsRadio">False</property>
+        <property name="Active">False</property>
+        <property name="Value">0</property>
+        <property name="Group">codingmode</property>
+      </action>
+    </action-group>
+    <action-group name="Timeline">
+      <action id="positionMode">
+        <property name="Type">Radio</property>
+        <property name="Label" translatable="yes" />
+        <property name="StockId">gtk-justify-fill</property>
+        <property name="DrawAsRadio">False</property>
+        <property name="Active">False</property>
+        <property name="Value">0</property>
+        <property name="Group">codingmode</property>
+      </action>
     </action-group>
     <property name="MemberName" />
     <property name="Visible">False</property>
@@ -9289,6 +9323,7 @@ Click 2 players to swap them</property>
                 <node name="codingtoolbar" type="Toolbar">
                   <node type="Toolitem" action="autoTaggingMode" />
                   <node type="Toolitem" action="timelineMode" />
+                  <node type="Toolitem" action="positionMode" />
                 </node>
               </widget>
               <packing>
@@ -9345,6 +9380,16 @@ Click 2 players to swap them</property>
                 <property name="AutoSize">True</property>
               </packing>
             </child>
+            <child>
+              <widget class="LongoMatch.Gui.Component.PlaysPositionViewer" id="playspositionviewer1">
+                <property name="MemberName" />
+                <property name="Events">ButtonPressMask</property>
+              </widget>
+              <packing>
+                <property name="Position">3</property>
+                <property name="AutoSize">True</property>
+              </packing>
+            </child>
           </widget>
           <packing>
             <property name="Position">1</property>
@@ -9372,13 +9417,27 @@ Click 2 players to swap them</property>
           </packing>
         </child>
         <child>
-          <widget class="Gtk.DrawingArea" id="drawingarea1">
+          <widget class="Gtk.Label" id="synclabel">
             <property name="MemberName" />
+            <property name="UseMarkup">True</property>
           </widget>
           <packing>
             <property name="Position">1</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+            <property name="Padding">10</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.DrawingArea" id="drawingarea1">
+            <property name="MemberName" />
+          </widget>
+          <packing>
+            <property name="Position">2</property>
             <property name="AutoSize">False</property>
             <property name="Expand">False</property>
+            <property name="Fill">False</property>
           </packing>
         </child>
         <child>
@@ -9400,21 +9459,8 @@ Click 2 players to swap them</property>
             </child>
           </widget>
           <packing>
-            <property name="Position">2</property>
-            <property name="AutoSize">False</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.Label" id="synclabel">
-            <property name="MemberName" />
-            <property name="UseMarkup">True</property>
-          </widget>
-          <packing>
-            <property name="PackType">End</property>
             <property name="Position">3</property>
-            <property name="AutoSize">True</property>
+            <property name="AutoSize">False</property>
             <property name="Expand">False</property>
             <property name="Fill">False</property>
           </packing>
@@ -9491,4 +9537,54 @@ Click 2 players to swap them</property>
       </widget>
     </child>
   </widget>
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.PlaysPositionViewer" design-size="300 300">
+    <property name="MemberName" />
+    <property name="Visible">False</property>
+    <child>
+      <widget class="Gtk.HBox" id="hbox1">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <child>
+          <widget class="LongoMatch.Gui.Component.CoordinatesTagger" id="field">
+            <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="Gtk.VBox" id="vbox2">
+            <property name="MemberName" />
+            <property name="Spacing">6</property>
+            <child>
+              <widget class="LongoMatch.Gui.Component.CoordinatesTagger" id="hfield">
+                <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.CoordinatesTagger" id="goal">
+                <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>
+      </widget>
+    </child>
+  </widget>
 </stetic-interface>
\ No newline at end of file
diff --git a/LongoMatch.GUI/gtk-gui/objects.xml b/LongoMatch.GUI/gtk-gui/objects.xml
index adc065c..7636673 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -143,9 +143,6 @@
   </object>
   <object type="LongoMatch.Gui.Component.CoordinatesTagger" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
     <itemgroups>
-      <itemgroup label="CoordinatesTagger Properties">
-        <property name="Sensitive" />
-      </itemgroup>
     </itemgroups>
     <signals />
   </object>
@@ -369,39 +366,7 @@
       </itemgroup>
     </signals>
   </object>
-  <object type="LongoMatch.Gui.Component.PlayersTaggerWidget" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
-  <object type="LongoMatch.Gui.Component.StringTaggerWidget" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
-  <object type="LongoMatch.Gui.Component.GameUnitsEditor" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
-  <object type="LongoMatch.Gui.Component.GameUnitsTagger" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals>
-      <itemgroup label="GameUnitsTagger Signals">
-        <signal name="GameUnitEvent" />
-      </itemgroup>
-    </signals>
-  </object>
-  <object type="LongoMatch.Gui.Component.GameUnitWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Frame">
-    <itemgroups />
-    <signals>
-      <itemgroup label="GameUnitWidget Signals">
-        <signal name="GameUnitEvent" />
-      </itemgroup>
-    </signals>
-  </object>
-  <object type="LongoMatch.Gui.Component.PlayersTagger" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
-    <itemgroups />
-    <signals />
-  </object>
-  <object type="LongoMatch.Gui.Component.TaggerWidget" palette-category="General" allow-children="false" 
base-type="Gtk.Bin">
+  <object type="LongoMatch.Gui.Component.PlaysPositionViewer" palette-category="General" 
allow-children="false" base-type="Gtk.Bin">
     <itemgroups />
     <signals />
   </object>


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