[longomatch] Add a base class for time lines



commit 0be36d4d4642610e16f54631dcd4c9f90d790583
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Thu Nov 24 22:50:48 2011 +0100

    Add a base class for time lines

 LongoMatch.GUI/Gui/Base/TimelineWidgetBase.cs      |  200 ++++++++++++
 LongoMatch.GUI/Gui/Component/TimeLineWidget.cs     |  147 +--------
 LongoMatch.GUI/LongoMatch.GUI.mdp                  |    3 +-
 LongoMatch.GUI/Makefile.am                         |    5 +-
 ...s => LongoMatch.Gui.Base.TimelineWidgetBase.cs} |   22 +-
 .../gtk-gui/LongoMatch.Gui.MainWindow.cs           |    2 +-
 LongoMatch.GUI/gtk-gui/gui.stetic                  |  341 ++++++++++----------
 LongoMatch.GUI/gtk-gui/objects.xml                 |   58 +++-
 8 files changed, 442 insertions(+), 336 deletions(-)
---
diff --git a/LongoMatch.GUI/Gui/Base/TimelineWidgetBase.cs b/LongoMatch.GUI/Gui/Base/TimelineWidgetBase.cs
new file mode 100644
index 0000000..0c5a20b
--- /dev/null
+++ b/LongoMatch.GUI/Gui/Base/TimelineWidgetBase.cs
@@ -0,0 +1,200 @@
+// 
+//  Copyright (C) 2011 Andoni Morales Alastruey
+// 
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation; either version 2 of the License, or
+//  (at your option) any later version.
+// 
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//  GNU General Public License for more details.
+//  
+//  You should have received a copy of the GNU General Public License
+//  along with this program; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+// 
+using System;
+using System.Collections.Generic;
+
+using LongoMatch.Interfaces;
+using LongoMatch.Gui.Base;
+using LongoMatch.Gui.Component;
+using Gtk;
+
+namespace LongoMatch.Gui.Base
+{
+	[System.ComponentModel.ToolboxItem(true)]
+	public partial class TimelineWidgetBase : Gtk.Bin
+	{
+		protected TimeReferenceWidget tr;
+		protected CategoriesScale cs;
+		protected uint currentFrame, pixelRatio, frames;
+		protected bool loaded;
+		
+		public TimelineWidgetBase ()
+		{
+			this.Build ();
+			
+			tr = new TimeReferenceWidget();
+			cs = new CategoriesScale();
+			
+			cs.WidthRequest = 100;
+			toolsbox.HeightRequest = 50 - leftbox.Spacing;
+			tr.HeightRequest = 50 - leftbox.Spacing;
+			
+			categoriesbox.PackStart(cs, false, false, 0);
+			timelinebox.PackStart(tr,false,false,0);
+			
+			zoomscale.CanFocus = false;
+			loaded = false;
+			frames = 0;
+			
+			ScrolledWindow.Vadjustment.ValueChanged += HandleScrollEvent;
+			ScrolledWindow.Hadjustment.ValueChanged += HandleScrollEvent;
+			ScrolledWindow.HScrollbar.SizeAllocated += OnSizeAllocated;
+		}
+		
+		public ScrolledWindow ScrolledWindow {
+			get {
+				return GtkScrolledWindow;
+			}
+		}
+		
+		public Box TimelineBox {
+			get{
+				return timelinebox;
+			}
+		}
+		
+		public Scale ZoomScale {
+			get{
+				return zoomscale;
+			}
+		}
+		
+		public Alignment Alignment {
+			get{
+				return categoriesalignment1;
+			}
+		}
+
+		public void AdjustPostion(uint currentframe) {
+			int visibleWidth;
+			int realWidth;
+			uint pos;
+			int scrollbarWidth;
+			if(Visible) {
+				scrollbarWidth= ScrolledWindow.VScrollbar.Allocation.Width;
+				visibleWidth = ScrolledWindow.Allocation.Width-scrollbarWidth;
+				realWidth = TimelineBox.Allocation.Width;
+				pos = currentframe/pixelRatio;
+				if(pos+visibleWidth < realWidth) {
+					ScrolledWindow.Hadjustment.Value = pos;
+				}
+				else {
+					ScrolledWindow.Hadjustment.Value = realWidth-visibleWidth-20;
+				}
+			}
+		}
+
+		protected virtual void HandleScrollEvent(object sender, System.EventArgs args)
+		{
+			if(sender == ScrolledWindow.Vadjustment)
+				cs.Scroll = ScrolledWindow.Vadjustment.Value;
+			else if(sender == ScrolledWindow.Hadjustment)
+				tr.Scroll = ScrolledWindow.Hadjustment.Value;
+		}
+
+		protected virtual void OnSizeAllocated(object sender, SizeAllocatedArgs e)
+		{
+			/* Align the categories list widget on top of the timeline's horizontal bar */
+			if(sender == ScrolledWindow.HScrollbar)
+				Alignment.BottomPadding = (uint) ScrolledWindow.HScrollbar.Allocation.Height;
+		}
+		
+	}
+	
+	[System.ComponentModel.ToolboxItem(true)]
+	public partial class TimelineBase <W, Z> : TimelineWidgetBase where Z:ITimelineNode where W: TimeScaleBase<Z>
+	{
+		protected Dictionary<object, W> tsList;
+		protected Z selected;
+		
+		public TimelineBase (): base()
+		{
+			SetPixelRatio(10);
+			tsList = new Dictionary<object, W>();
+		}
+
+		public Z SelectedTimeNode {
+			get {
+				return selected;
+			}
+			set {
+				if(!loaded)
+					return;
+
+				selected = value;
+				foreach(W  ts in tsList.Values)
+					ts.SelectedTimeNode = value;
+				if(selected != null) {
+					if(SelectedTimeNode.StartFrame/pixelRatio < ScrolledWindow.Hadjustment.Value ||
+					                SelectedTimeNode.StartFrame/pixelRatio > ScrolledWindow.Hadjustment.Value +
+					                ScrolledWindow.Allocation.Width - ScrolledWindow.VScrollbar.Allocation.Width)
+						AdjustPostion(SelectedTimeNode.StartFrame);
+				}
+				QueueDraw();
+			}
+		}
+
+		public uint CurrentFrame {
+			get {
+				return currentFrame;
+			}
+			set {
+				if(!loaded)
+					return;
+
+				currentFrame = value;
+				foreach(W ts in tsList.Values)
+					ts.CurrentFrame = value;
+				tr.CurrentFrame = value;
+				QueueDraw();
+			}
+		}
+
+		protected void SetPixelRatio(uint pixelRatio) {
+			if(!loaded)
+				return;
+
+			this.pixelRatio = pixelRatio;
+			tr.PixelRatio = pixelRatio;
+			foreach(W  ts in tsList.Values)
+				ts.PixelRatio = pixelRatio;
+			ZoomScale.Value=pixelRatio;
+		}
+
+		protected void ResetGui() {
+			//Unrealize all children
+			foreach(Widget w in TimelineBox.AllChildren) {
+				TimelineBox.Remove(w);
+				w.Destroy();
+			}
+		}
+
+		protected virtual void OnFitbuttonClicked(object sender, System.EventArgs e)
+		{
+			AdjustPostion(currentFrame);
+		}
+
+		protected virtual void OnZoomscaleValueChanged(object sender, System.EventArgs e)
+		{
+			SetPixelRatio((uint)(ZoomScale.Value));
+			QueueDraw();
+			AdjustPostion(currentFrame);
+		}
+	}
+}
+
diff --git a/LongoMatch.GUI/Gui/Component/TimeLineWidget.cs b/LongoMatch.GUI/Gui/Component/TimeLineWidget.cs
index 5efd169..aec0c2a 100644
--- a/LongoMatch.GUI/Gui/Component/TimeLineWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/TimeLineWidget.cs
@@ -20,6 +20,8 @@
 using System;
 using System.Collections.Generic;
 using Gtk;
+
+using LongoMatch.Gui.Base;
 using LongoMatch.Handlers;
 using LongoMatch.Store;
 using LongoMatch.Store.Templates;
@@ -28,113 +30,18 @@ namespace LongoMatch.Gui.Component {
 
 	[System.ComponentModel.Category("LongoMatch")]
 	[System.ComponentModel.ToolboxItem(true)]
-	public partial class TimeLineWidget : Gtk.Bin
+	public class TimeLineWidget : TimelineBase<TimeScale, Play> 
 	{
 
 		public event TimeNodeChangedHandler TimeNodeChanged;
 		public event PlaySelectedHandler TimeNodeSelected;
 		public event PlaysDeletedHandler TimeNodeDeleted;
 		public event NewTagAtFrameHandler NewMarkEvent;
-		//public event PlayListNodeAddedHandler PlayListNodeAdded;
 
-		private Dictionary<Category,TimeScale> tsList;
 		private Categories categories;
-		private TimeReferenceWidget tr;
-		CategoriesScale cs;
-		private uint frames;
-		private uint pixelRatio;
-		private Play selected;
-		private uint currentFrame;
-		private bool hasProject;
-
 
-		public TimeLineWidget()
+		public TimeLineWidget(): base()
 		{
-			this.Build();
-			SetPixelRatio(10);
-			zoomscale.CanFocus = false;
-
-			GtkScrolledWindow.Vadjustment.ValueChanged += HandleScrollEvent;
-			GtkScrolledWindow.Hadjustment.ValueChanged += HandleScrollEvent;
-
-			GtkScrolledWindow.HScrollbar.SizeAllocated += OnSizeAllocated;
-
-			cs = new CategoriesScale();
-			cs.WidthRequest = 100;
-			categoriesbox.PackStart(cs, false, false, 0);
-
-			tr = new TimeReferenceWidget();
-			timescalebox.PackStart(tr,false,false,0);
-
-			tr.HeightRequest = 50 - leftbox.Spacing;
-			toolsbox.HeightRequest = 50 - leftbox.Spacing;
-		}
-
-		public Play SelectedTimeNode {
-			get {
-				return selected;
-			}
-			set {
-				if(!hasProject)
-					return;
-
-				selected = value;
-				foreach(TimeScale  ts in tsList.Values)
-					ts.SelectedTimeNode = value;
-				if(selected != null) {
-					if(SelectedTimeNode.StartFrame/pixelRatio < GtkScrolledWindow.Hadjustment.Value ||
-					                SelectedTimeNode.StartFrame/pixelRatio > GtkScrolledWindow.Hadjustment.Value +
-					                GtkScrolledWindow.Allocation.Width - GtkScrolledWindow.VScrollbar.Allocation.Width)
-						AdjustPostion(SelectedTimeNode.StartFrame);
-				}
-				QueueDraw();
-			}
-		}
-
-		public uint CurrentFrame {
-			get {
-				return currentFrame;
-			}
-			set {
-				if(!hasProject)
-					return;
-
-				currentFrame = value;
-				foreach(TimeScale  ts in tsList.Values)
-					ts.CurrentFrame = value;
-				tr.CurrentFrame = value;
-				QueueDraw();
-			}
-		}
-
-		public void AdjustPostion(uint currentframe) {
-			int visibleWidth;
-			int realWidth;
-			uint pos;
-			int scrollbarWidth;
-			if(Visible) {
-				scrollbarWidth= GtkScrolledWindow.VScrollbar.Allocation.Width;
-				visibleWidth = GtkScrolledWindow.Allocation.Width-scrollbarWidth;
-				realWidth = vbox1.Allocation.Width;
-				pos = currentframe/pixelRatio;
-				if(pos+visibleWidth < realWidth) {
-					GtkScrolledWindow.Hadjustment.Value = pos;
-				}
-				else {
-					GtkScrolledWindow.Hadjustment.Value = realWidth-visibleWidth-20;
-				}
-			}
-		}
-
-		private void SetPixelRatio(uint pixelRatio) {
-			if(!hasProject)
-				return;
-
-			this.pixelRatio = pixelRatio;
-			tr.PixelRatio = pixelRatio;
-			foreach(TimeScale  ts in tsList.Values)
-				ts.PixelRatio = pixelRatio;
-			zoomscale.Value=pixelRatio;
 		}
 
 		public Project Project {
@@ -145,12 +52,12 @@ namespace LongoMatch.Gui.Component {
 					categories = null;
 					tsList.Clear();
 					tsList=null;
-					hasProject = false;
+					loaded = false;
 					return;
 				}
-				hasProject = true;
+				loaded = true;
 				categories = value.Categories;
-				tsList = new Dictionary<Category, TimeScale>();
+				tsList.Clear(); 
 				frames = value.Description.File.GetFrames();
 
 				cs.Categories = categories;
@@ -168,7 +75,7 @@ namespace LongoMatch.Gui.Component {
 					ts.TimeNodeSelected += new PlaySelectedHandler(OnTimeNodeSelected);
 					ts.TimeNodeDeleted += new PlaysDeletedHandler(OnTimeNodeDeleted);
 					ts.NewMarkAtFrameEvent += new NewTagAtFrameHandler(OnNewMark);
-					vbox1.PackStart(ts,true,true,0);
+					TimelineBox.PackStart(ts,true,true,0);
 					ts.Show();
 				}
 				SetPixelRatio(3);
@@ -187,16 +94,8 @@ namespace LongoMatch.Gui.Component {
 				if(tsList.TryGetValue(play.Category, out ts))
 					ts.RemovePlay(play);
 			}
-
-		}
-		private void ResetGui() {
-			//Unrealize all children
-			foreach(Widget w in vbox1.AllChildren) {
-				vbox1.Remove(w);
-				w.Destroy();
-			}
 		}
-
+		
 		protected virtual void OnNewMark(Category category, int frame) {
 			if(NewMarkEvent != null)
 				NewMarkEvent(category,frame);
@@ -211,36 +110,10 @@ namespace LongoMatch.Gui.Component {
 			if(TimeNodeSelected != null)
 				TimeNodeSelected(tn);
 		}
+		
 		protected virtual void OnTimeNodeDeleted(List<Play> plays) {
 			if(TimeNodeDeleted != null)
 				TimeNodeDeleted(plays);
 		}
-
-		protected virtual void OnFitbuttonClicked(object sender, System.EventArgs e)
-		{
-			AdjustPostion(currentFrame);
-		}
-
-		protected virtual void OnZoomscaleValueChanged(object sender, System.EventArgs e)
-		{
-			SetPixelRatio((uint)(zoomscale.Value));
-			QueueDraw();
-			AdjustPostion(currentFrame);
-		}
-
-		protected virtual void HandleScrollEvent(object sender, System.EventArgs args)
-		{
-			if(sender == GtkScrolledWindow.Vadjustment)
-				cs.Scroll = GtkScrolledWindow.Vadjustment.Value;
-			else if(sender == GtkScrolledWindow.Hadjustment)
-				tr.Scroll = GtkScrolledWindow.Hadjustment.Value;
-		}
-
-		protected virtual void OnSizeAllocated(object sender, SizeAllocatedArgs e)
-		{
-			/* Align the categories list widget on top of the timeline's horizontal bar */
-			if(sender == GtkScrolledWindow.HScrollbar)
-				categoriesalignment1.BottomPadding = (uint) GtkScrolledWindow.HScrollbar.Allocation.Height;
-		}
 	}
 }
diff --git a/LongoMatch.GUI/LongoMatch.GUI.mdp b/LongoMatch.GUI/LongoMatch.GUI.mdp
index 91e3bad..31ad85c 100644
--- a/LongoMatch.GUI/LongoMatch.GUI.mdp
+++ b/LongoMatch.GUI/LongoMatch.GUI.mdp
@@ -80,7 +80,6 @@
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.CategoryProperties.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.PlayListWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.EntryDialog.cs" />
-    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.TimeLineWidget.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.VideoEditionProperties.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Dialog.SnapshotsDialog.cs" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Component.NotesWidget.cs" />
@@ -147,6 +146,8 @@
     <File subtype="Directory" buildaction="Compile" name="Gui/Component" />
     <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Base.TemplatesEditorBase.cs" />
     <File subtype="Code" buildaction="Compile" name="Gui/Component/GameUnitTimeScale.cs" />
+    <File subtype="Code" buildaction="Compile" name="Gui/Base/TimelineWidgetBase.cs" />
+    <File subtype="Code" buildaction="Compile" name="gtk-gui/LongoMatch.Gui.Base.TimelineWidgetBase.cs" />
   </Contents>
   <MonoDevelop.Autotools.MakefileInfo RelativeMakefileName="../CesarPlayer/Makefile.am" RelativeConfigureInPath="../">
     <BuildFilesVar Name="FILES" />
diff --git a/LongoMatch.GUI/Makefile.am b/LongoMatch.GUI/Makefile.am
index e15620c..cc3a394 100644
--- a/LongoMatch.GUI/Makefile.am
+++ b/LongoMatch.GUI/Makefile.am
@@ -6,6 +6,7 @@ LINK = $(REF_DEP_LONGOMATCH_GUI)
 SOURCES = \
 	gtk-gui/generated.cs \
 	gtk-gui/LongoMatch.Gui.Base.TemplatesEditorBase.cs \
+	gtk-gui/LongoMatch.Gui.Base.TimelineWidgetBase.cs \
 	gtk-gui/LongoMatch.Gui.Component.ButtonsWidget.cs \
 	gtk-gui/LongoMatch.Gui.Component.CategoryProperties.cs \
 	gtk-gui/LongoMatch.Gui.Component.DrawingToolBox.cs \
@@ -26,7 +27,6 @@ SOURCES = \
 	gtk-gui/LongoMatch.Gui.Component.TaggerWidget.cs \
 	gtk-gui/LongoMatch.Gui.Component.TagsTreeWidget.cs \
 	gtk-gui/LongoMatch.Gui.Component.TeamTaggerWidget.cs \
-	gtk-gui/LongoMatch.Gui.Component.TimeLineWidget.cs \
 	gtk-gui/LongoMatch.Gui.Dialog.BusyDialog.cs \
 	gtk-gui/LongoMatch.Gui.Dialog.DrawingTool.cs \
 	gtk-gui/LongoMatch.Gui.Dialog.EditCategoryDialog.cs \
@@ -52,8 +52,9 @@ SOURCES = \
 	gtk-gui/LongoMatch.Gui.MainWindow.cs \
 	gtk-gui/LongoMatch.Gui.Popup.CalendarPopup.cs \
 	gtk-gui/LongoMatch.Gui.Popup.TransparentDrawingArea.cs \
-	Gui/Base/TimeScaleBase.cs \
 	Gui/Base/TemplatesEditorBase.cs \
+	Gui/Base/TimelineWidgetBase.cs \
+	Gui/Base/TimeScaleBase.cs \
 	Gui/Component/ButtonsWidget.cs \
 	Gui/Component/CategoriesScale.cs \
 	Gui/Component/CategoriesTemplateEditor.cs \
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.TimeLineWidget.cs b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Base.TimelineWidgetBase.cs
similarity index 91%
rename from LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.TimeLineWidget.cs
rename to LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Base.TimelineWidgetBase.cs
index 4c72a59..880813a 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.TimeLineWidget.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Base.TimelineWidgetBase.cs
@@ -1,8 +1,8 @@
 
 // This file has been generated by the GUI designer. Do not modify.
-namespace LongoMatch.Gui.Component
+namespace LongoMatch.Gui.Base
 {
-	public partial class TimeLineWidget
+	public partial class TimelineWidgetBase
 	{
 		private global::Gtk.VBox vbox3;
 		private global::Gtk.HSeparator hseparator1;
@@ -17,15 +17,15 @@ namespace LongoMatch.Gui.Component
 		private global::Gtk.VBox vbox2;
 		private global::Gtk.VBox timescalebox;
 		private global::Gtk.ScrolledWindow GtkScrolledWindow;
-		private global::Gtk.VBox vbox1;
+		private global::Gtk.VBox timelinebox;
         
 		protected virtual void Build ()
 		{
 			global::Stetic.Gui.Initialize (this);
-			// Widget LongoMatch.Gui.Component.TimeLineWidget
+			// Widget LongoMatch.Gui.Base.TimelineWidgetBase
 			global::Stetic.BinContainer.Attach (this);
-			this.Name = "LongoMatch.Gui.Component.TimeLineWidget";
-			// Container child LongoMatch.Gui.Component.TimeLineWidget.Gtk.Container+ContainerChild
+			this.Name = "LongoMatch.Gui.Base.TimelineWidgetBase";
+			// Container child LongoMatch.Gui.Base.TimelineWidgetBase.Gtk.Container+ContainerChild
 			this.vbox3 = new global::Gtk.VBox ();
 			this.vbox3.Name = "vbox3";
 			this.vbox3.Spacing = 6;
@@ -137,9 +137,9 @@ namespace LongoMatch.Gui.Component
 			global::Gtk.Viewport w18 = new global::Gtk.Viewport ();
 			w18.ShadowType = ((global::Gtk.ShadowType)(0));
 			// Container child GtkViewport.Gtk.Container+ContainerChild
-			this.vbox1 = new global::Gtk.VBox ();
-			this.vbox1.Name = "vbox1";
-			w18.Add (this.vbox1);
+			this.timelinebox = new global::Gtk.VBox ();
+			this.timelinebox.Name = "timelinebox";
+			w18.Add (this.timelinebox);
 			this.GtkScrolledWindow.Add (w18);
 			this.vbox2.Add (this.GtkScrolledWindow);
 			global::Gtk.Box.BoxChild w21 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.GtkScrolledWindow]));
@@ -154,9 +154,7 @@ namespace LongoMatch.Gui.Component
 			if ((this.Child != null)) {
 				this.Child.ShowAll ();
 			}
-			this.Show ();
-			this.fitbutton.Clicked += new global::System.EventHandler (this.OnFitbuttonClicked);
-			this.zoomscale.ValueChanged += new global::System.EventHandler (this.OnZoomscaleValueChanged);
+			this.Hide ();
 		}
 	}
 }
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
index 030c9c6..fd091c9 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
@@ -139,7 +139,7 @@ namespace LongoMatch.Gui
 			this.ImportProjectAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("_Import Project");
 			w1.Add (this.ImportProjectAction, "<Control>i");
 			this.ManualTaggingViewAction = new global::Gtk.RadioAction ("ManualTaggingViewAction", global::Mono.Unix.Catalog.GetString ("Manual tagging view"), null, null, 0);
-			this.ManualTaggingViewAction.Group = this.TaggingViewAction.Group;
+			this.ManualTaggingViewAction.Group = this.TimelineViewAction.Group;
 			this.ManualTaggingViewAction.Sensitive = false;
 			this.ManualTaggingViewAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Free Capture Mode");
 			w1.Add (this.ManualTaggingViewAction, "<Control>f");
diff --git a/LongoMatch.GUI/gtk-gui/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index f217339..aca3d2c 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -3008,174 +3008,6 @@ new one.</property>
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.TimeLineWidget" design-size="535 229">
-    <property name="MemberName" />
-    <child>
-      <widget class="Gtk.VBox" id="vbox3">
-        <property name="MemberName" />
-        <property name="Spacing">6</property>
-        <child>
-          <widget class="Gtk.HSeparator" id="hseparator1">
-            <property name="MemberName" />
-          </widget>
-          <packing>
-            <property name="Position">0</property>
-            <property name="AutoSize">True</property>
-            <property name="Expand">False</property>
-            <property name="Fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.HBox" id="hbox3">
-            <property name="MemberName" />
-            <child>
-              <widget class="Gtk.VBox" id="leftbox">
-                <property name="MemberName" />
-                <property name="Spacing">6</property>
-                <child>
-                  <widget class="Gtk.HBox" id="toolsbox">
-                    <property name="MemberName" />
-                    <property name="Spacing">6</property>
-                    <child>
-                      <widget class="Gtk.Button" id="fitbutton">
-                        <property name="MemberName" />
-                        <property name="Type">TextAndIcon</property>
-                        <property name="Icon">stock:gtk-zoom-fit Button</property>
-                        <property name="Label" translatable="yes" />
-                        <property name="UseUnderline">True</property>
-                        <signal name="Clicked" handler="OnFitbuttonClicked" />
-                      </widget>
-                      <packing>
-                        <property name="Position">0</property>
-                        <property name="AutoSize">True</property>
-                        <property name="Expand">False</property>
-                        <property name="Fill">False</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="Gtk.HScale" id="zoomscale">
-                        <property name="MemberName" />
-                        <property name="CanFocus">True</property>
-                        <property name="UpdatePolicy">Discontinuous</property>
-                        <property name="Lower">1</property>
-                        <property name="Upper">100</property>
-                        <property name="PageIncrement">10</property>
-                        <property name="StepIncrement">1</property>
-                        <property name="Value">1</property>
-                        <property name="DrawValue">True</property>
-                        <property name="Digits">0</property>
-                        <property name="ValuePos">Top</property>
-                        <signal name="ValueChanged" handler="OnZoomscaleValueChanged" />
-                      </widget>
-                      <packing>
-                        <property name="Position">1</property>
-                        <property name="AutoSize">True</property>
-                      </packing>
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="Position">0</property>
-                    <property name="AutoSize">True</property>
-                    <property name="Expand">False</property>
-                    <property name="Fill">False</property>
-                  </packing>
-                </child>
-                <child>
-                  <widget class="Gtk.Alignment" id="categoriesalignment1">
-                    <property name="MemberName" />
-                    <child>
-                      <widget class="Gtk.HBox" id="categoriesbox">
-                        <property name="MemberName" />
-                        <property name="Spacing">6</property>
-                        <child>
-                          <placeholder />
-                        </child>
-                      </widget>
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="Position">1</property>
-                    <property name="AutoSize">True</property>
-                  </packing>
-                </child>
-              </widget>
-              <packing>
-                <property name="Position">0</property>
-                <property name="AutoSize">False</property>
-                <property name="Expand">False</property>
-                <property name="Fill">False</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="Gtk.VSeparator" id="vseparator1">
-                <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="Gtk.VBox" id="vbox2">
-                <property name="MemberName" />
-                <property name="Spacing">6</property>
-                <child>
-                  <widget class="Gtk.VBox" id="timescalebox">
-                    <property name="MemberName" />
-                    <property name="Spacing">6</property>
-                    <child>
-                      <placeholder />
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="Position">0</property>
-                    <property name="AutoSize">False</property>
-                    <property name="Expand">False</property>
-                    <property name="Fill">False</property>
-                  </packing>
-                </child>
-                <child>
-                  <widget class="Gtk.ScrolledWindow" id="GtkScrolledWindow">
-                    <property name="MemberName" />
-                    <property name="ShadowType">In</property>
-                    <child>
-                      <widget class="Gtk.Viewport" id="GtkViewport">
-                        <property name="MemberName" />
-                        <property name="ShadowType">None</property>
-                        <child>
-                          <widget class="Gtk.VBox" id="vbox1">
-                            <property name="MemberName" />
-                            <property name="ShowScrollbars">True</property>
-                            <child>
-                              <placeholder />
-                            </child>
-                          </widget>
-                        </child>
-                      </widget>
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="Position">1</property>
-                    <property name="AutoSize">True</property>
-                  </packing>
-                </child>
-              </widget>
-              <packing>
-                <property name="Position">2</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>
   <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.VideoEditionProperties" design-size="516 245">
     <property name="MemberName" />
     <property name="Title" translatable="yes">Video Properties</property>
@@ -6798,4 +6630,177 @@ Defining &lt;b&gt; Game Units &lt;/b&gt; will help you during the analysis to in
       </widget>
     </child>
   </widget>
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Base.TimelineWidgetBase" design-size="687 300">
+    <property name="MemberName" />
+    <property name="Visible">False</property>
+    <child>
+      <widget class="Gtk.VBox" id="vbox3">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <child>
+          <widget class="Gtk.HSeparator" id="hseparator1">
+            <property name="MemberName" />
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.HBox" id="hbox3">
+            <property name="MemberName" />
+            <child>
+              <widget class="Gtk.VBox" id="leftbox">
+                <property name="MemberName" />
+                <property name="Spacing">6</property>
+                <child>
+                  <widget class="Gtk.HBox" id="toolsbox">
+                    <property name="MemberName" />
+                    <property name="Spacing">6</property>
+                    <child>
+                      <widget class="Gtk.Button" id="fitbutton">
+                        <property name="MemberName" />
+                        <property name="Type">TextAndIcon</property>
+                        <property name="Icon">stock:gtk-zoom-fit Button</property>
+                        <property name="Label" translatable="yes" />
+                        <property name="UseUnderline">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">0</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.HScale" id="zoomscale">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="UpdatePolicy">Discontinuous</property>
+                        <property name="Lower">1</property>
+                        <property name="Upper">100</property>
+                        <property name="PageIncrement">10</property>
+                        <property name="StepIncrement">1</property>
+                        <property name="Value">1</property>
+                        <property name="DrawValue">True</property>
+                        <property name="Digits">0</property>
+                        <property name="ValuePos">Top</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">1</property>
+                        <property name="AutoSize">True</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">True</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Alignment" id="categoriesalignment1">
+                    <property name="MemberName" />
+                    <child>
+                      <widget class="Gtk.HBox" id="categoriesbox">
+                        <property name="MemberName" />
+                        <property name="Spacing">6</property>
+                        <child>
+                          <placeholder />
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="AutoSize">True</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">False</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.VSeparator" id="vseparator1">
+                <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="Gtk.VBox" id="vbox2">
+                <property name="MemberName" />
+                <property name="Spacing">6</property>
+                <child>
+                  <widget class="Gtk.VBox" id="timescalebox">
+                    <property name="MemberName" />
+                    <property name="Spacing">6</property>
+                    <child>
+                      <placeholder />
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">False</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.ScrolledWindow" id="GtkScrolledWindow">
+                    <property name="MemberName" />
+                    <property name="ShadowType">In</property>
+                    <child>
+                      <widget class="Gtk.Viewport" id="GtkViewport">
+                        <property name="MemberName" />
+                        <property name="ShadowType">None</property>
+                        <child>
+                          <widget class="Gtk.VBox" id="timelinebox">
+                            <property name="MemberName" />
+                            <property name="ShowScrollbars">True</property>
+                            <child>
+                              <placeholder />
+                            </child>
+                          </widget>
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="AutoSize">True</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">2</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>
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.TimeLineWidget" design-size="535 229">
+    <property name="MemberName" />
+    <child>
+      <placeholder />
+    </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 22f1bc7..a3445d3 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -240,21 +240,6 @@
       </itemgroup>
     </signals>
   </object>
-  <object type="LongoMatch.Gui.Component.TimeLineWidget" palette-category="LongoMatch" allow-children="false" base-type="Gtk.Bin">
-    <itemgroups>
-      <itemgroup label="TimeLineWidget Properties">
-        <property name="CurrentFrame" />
-      </itemgroup>
-    </itemgroups>
-    <signals>
-      <itemgroup label="TimeLineWidget Signals">
-        <signal name="TimeNodeChanged" />
-        <signal name="TimeNodeSelected" />
-        <signal name="TimeNodeDeleted" />
-        <signal name="NewMarkEvent" />
-      </itemgroup>
-    </signals>
-  </object>
   <object type="LongoMatch.Gui.Base.TimeScaleBase" palette-category="LongoMatch" allow-children="false" base-type="Gtk.DrawingArea">
     <itemgroups>
       <itemgroup label="TimeScaleBase Properties">
@@ -288,4 +273,47 @@
     </itemgroups>
     <signals />
   </object>
+  <object type="LongoMatch.Gui.Component.GameUnitTimeScale" palette-category="LongoMatch" allow-children="false" base-type="Gtk.DrawingArea">
+    <itemgroups>
+      <itemgroup label="TimeScaleBase[LongoMatch.Store.TimelineNode] Properties">
+        <property name="PixelRatio" />
+        <property name="CurrentFrame" />
+      </itemgroup>
+    </itemgroups>
+    <signals>
+      <itemgroup label="GameUnitTimeScale Signals">
+        <signal name="UnitChanged" />
+        <signal name="UnitSelected" />
+        <signal name="UnitDeleted" />
+        <signal name="UnitAdded" />
+      </itemgroup>
+    </signals>
+  </object>
+  <object type="LongoMatch.Gui.Base.TimelineBase" palette-category="General" allow-children="false" base-type="Gtk.Bin">
+    <itemgroups>
+      <itemgroup label="TimelineBase Properties">
+        <property name="CurrentFrame" />
+      </itemgroup>
+    </itemgroups>
+    <signals />
+  </object>
+  <object type="LongoMatch.Gui.Component.TimeLineWidget" palette-category="LongoMatch" allow-children="false" base-type="LongoMatch.Gui.Base.TimelineWidgetBase">
+    <itemgroups>
+      <itemgroup label="TimelineBase[LongoMatch.Gui.Component.TimeScale,LongoMatch.Store.Play] Properties">
+        <property name="CurrentFrame" />
+      </itemgroup>
+    </itemgroups>
+    <signals>
+      <itemgroup label="TimeLineWidget Signals">
+        <signal name="TimeNodeChanged" />
+        <signal name="TimeNodeSelected" />
+        <signal name="TimeNodeDeleted" />
+        <signal name="NewMarkEvent" />
+      </itemgroup>
+    </signals>
+  </object>
+  <object type="LongoMatch.Gui.Base.TimelineWidgetBase" palette-category="General" allow-children="false" base-type="Gtk.Bin">
+    <itemgroups />
+    <signals />
+  </object>
 </objects>
\ No newline at end of file



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