First step of drag and drop annotation from a timeline to an other player
authorcavaliet
Wed, 07 Oct 2009 17:16:46 +0200
changeset 135 84b3bf5ee3d2
parent 134 f5108a598aa7
child 136 8b513df1b446
First step of drag and drop annotation from a timeline to an other player
src/FingersDance.ActionFactory/ActionFactory.cs
src/FingersDance.ActionFactory/ActionGenerator.cs
src/FingersDance.ActionFactory/FingersDance.ActionFactory.csproj
src/FingersDance.Actions/ActionAddAnnotation.cs
src/FingersDance.Actions/FingersDance.Actions.csproj
src/FingersDance.Control.Player/FingersDance.Control.Player.csproj
src/FingersDance.Control.Player/UserControlPlayer.xaml
src/FingersDance.Control.Player/UserControlPlayer.xaml.cs
src/FingersDance.Control.TimeLine/UserControlTimeLine.xaml.cs
src/FingersDance.Views/FingersDance.Views.csproj
src/FingersDance.Views/TimelineView.xaml.cs
src/FingersDance/Resources/menu.xml
--- a/src/FingersDance.ActionFactory/ActionFactory.cs	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance.ActionFactory/ActionFactory.cs	Wed Oct 07 17:16:46 2009 +0200
@@ -2,7 +2,6 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
-using FingersDance.Control.Player;
 
 namespace FingersDance.ActionFactory
 {
--- a/src/FingersDance.ActionFactory/ActionGenerator.cs	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance.ActionFactory/ActionGenerator.cs	Wed Oct 07 17:16:46 2009 +0200
@@ -17,6 +17,7 @@
             actionDict.Add("ActionOpenMedia", typeof(FingersDance.Actions.ActionOpenMedia));
             actionDict.Add("ActionStopMedia", typeof(FingersDance.Actions.ActionStopMedia));
 
+            actionDict.Add("ActionStartOrEndAnnotation", typeof(FingersDance.Actions.ActionStartOrEndAnnotation));
             actionDict.Add("ActionAddAnnotation", typeof(FingersDance.Actions.ActionAddAnnotation));
         }
 
--- a/src/FingersDance.ActionFactory/FingersDance.ActionFactory.csproj	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance.ActionFactory/FingersDance.ActionFactory.csproj	Wed Oct 07 17:16:46 2009 +0200
@@ -3,7 +3,7 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.21022</ProductVersion>
+    <ProductVersion>9.0.30729</ProductVersion>
     <SchemaVersion>2.0</SchemaVersion>
     <ProjectGuid>{C7B905EA-0678-4DA0-8EF8-7F9CBD22818E}</ProjectGuid>
     <OutputType>Library</OutputType>
@@ -74,10 +74,6 @@
       <Project>{1E80D5A1-C45C-443B-8992-4A4D78D280FC}</Project>
       <Name>FingersDance.Actions</Name>
     </ProjectReference>
-    <ProjectReference Include="..\FingersDance.Control.Player\FingersDance.Control.Player.csproj">
-      <Project>{D5625AA4-362F-4E46-9916-65F3B173ECBE}</Project>
-      <Name>FingersDance.Control.Player</Name>
-    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
--- a/src/FingersDance.Actions/ActionAddAnnotation.cs	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance.Actions/ActionAddAnnotation.cs	Wed Oct 07 17:16:46 2009 +0200
@@ -4,6 +4,7 @@
 using System.Text;
 
 using FingersDance.Control.TimeLine;
+using FingersDance.ViewModels;
 
 namespace FingersDance.Actions
 {
@@ -11,6 +12,7 @@
     {
         private string _Text = "";
         private UserControlTimeLine myTimeline;
+        private AnnotationViewModel myAnnotationViewModel;
 
         public ActionAddAnnotation()
         {
@@ -22,15 +24,16 @@
             _Text = text;
         }
 
-        public ActionAddAnnotation(UserControlTimeLine uct)
+        public ActionAddAnnotation(List<Object> args)
         {
-            myTimeline = uct;
+            myTimeline = (UserControlTimeLine)args[0];
+            myAnnotationViewModel = (AnnotationViewModel)args[1];
         }
 
         public void Execute()
         {
             if (myTimeline != null)
-                myTimeline.addAnnotation();
+                myTimeline.addAnnotation(myAnnotationViewModel);
         }
     }
 }
--- a/src/FingersDance.Actions/FingersDance.Actions.csproj	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance.Actions/FingersDance.Actions.csproj	Wed Oct 07 17:16:46 2009 +0200
@@ -82,6 +82,7 @@
     <Compile Include="ActionOpenMedia.cs" />
     <Compile Include="ActionPlayMedia.cs" />
     <Compile Include="ActionShowMessage.cs" />
+    <Compile Include="ActionStartOrEndAnnotation.cs" />
     <Compile Include="ActionStopMedia.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <EmbeddedResource Include="Properties\Resources.resx">
@@ -121,6 +122,10 @@
       <Project>{2BCEE1BF-D3AC-478C-A26B-DFDB7420E965}</Project>
       <Name>FingersDance.Control.TimeLine</Name>
     </ProjectReference>
+    <ProjectReference Include="..\FingersDance.ViewModel\FingersDance.ViewModels.csproj">
+      <Project>{E81BB080-0598-43AC-90CE-54D6570C4E9E}</Project>
+      <Name>FingersDance.ViewModels</Name>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
 </Project>
\ No newline at end of file
--- a/src/FingersDance.Control.Player/FingersDance.Control.Player.csproj	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance.Control.Player/FingersDance.Control.Player.csproj	Wed Oct 07 17:16:46 2009 +0200
@@ -142,6 +142,10 @@
     <Resource Include="Resources\WindowBackground.jpg" />
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\FingersDance.ActionFactory\FingersDance.ActionFactory.csproj">
+      <Project>{C7B905EA-0678-4DA0-8EF8-7F9CBD22818E}</Project>
+      <Name>FingersDance.ActionFactory</Name>
+    </ProjectReference>
     <ProjectReference Include="..\FingersDance.Actions\FingersDance.Actions.csproj">
       <Project>{1E80D5A1-C45C-443B-8992-4A4D78D280FC}</Project>
       <Name>FingersDance.Actions</Name>
--- a/src/FingersDance.Control.Player/UserControlPlayer.xaml	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance.Control.Player/UserControlPlayer.xaml	Wed Oct 07 17:16:46 2009 +0200
@@ -125,20 +125,18 @@
 			</Style.BasedOn>
 		</Style>
 	</UserControl.Resources>
-    <Grid x:Name="LayoutRoot" Width="{Binding ActualWidth, ElementName=UserControl, Mode=Default}" Height="{Binding ActualHeight, ElementName=UserControl, Mode=Default}" Background="{x:Null}"
-          AllowDrop="True">
+    <Grid x:Name="LayoutRoot" Width="{Binding ActualWidth, ElementName=UserControl, Mode=Default}" Height="{Binding ActualHeight, ElementName=UserControl, Mode=Default}" Background="{x:Null}">
     	<Viewbox Margin="0,0,0,0" Width="{Binding ActualWidth, ElementName=UserControl, Mode=Default}" Height="{Binding ActualHeight, ElementName=UserControl, Mode=Default}" Stretch="Uniform" AllowDrop="True">
-    		<Grid Width="560" Height="400" HorizontalAlignment="Left" x:Name="GridPlayer" AllowDrop="True">
+    		<Grid Width="560" Height="400" HorizontalAlignment="Left" x:Name="GridPlayer">
     			<MediaElement x:Name="MediaElementVideo" MediaOpened="MediaElementVideo_MediaOpened" Stretch="Fill" ScrubbingEnabled="False" StretchDirection="Both" Margin="0,0,50,0" />
     			<Custom:SurfaceButton x:Name="Rewind_area" Content="" ContactDown="ButtonRewind_ContactDown" 
                                       Click="ButtonRewind_Click" Foreground="{x:Null}" Background="#FFFFFFFF" BorderBrush="{x:Null}" 
-                                      Opacity="0" Width="72" HorizontalAlignment="Left" Style="{DynamicResource FingersDance.Control.PlayerButton}" Margin="0,0,0,196"/>
+                                      Opacity="0" Width="72" HorizontalAlignment="Left" Style="{DynamicResource FingersDance.Control.PlayerButton}" Margin="0,0,0,0"/>
     			<Custom:SurfaceButton x:Name="Fast_Forward_area" Content="" ContactDown="ButtonFastForward_ContactDown" Click="ButtonFastForward_Click" 
                                       Foreground="{x:Null}" Background="#FFFFFFFF" BorderBrush="{x:Null}" Opacity="0" Width="72" HorizontalAlignment="Right" 
-                                      Style="{DynamicResource FingersDance.Control.PlayerButton}" Margin="0,0,54,196"/>
+                                      Style="{DynamicResource FingersDance.Control.PlayerButton}" Margin="0,0,54,0"/>
     			<Custom:SurfaceButton x:Name="Play_Pause_area" ContactDown="ButtonPlayPause_ContactDown" Click="ButtonPlayPause_Click" Foreground="{x:Null}" 
-                                      Background="#FFFFFFFF" BorderBrush="{x:Null}" Margin="72,0,126,196" Style="{DynamicResource FingersDance.Control.PlayerButton}" Opacity="0"
-                                      AllowDrop="True" />
+                                      Background="#FFFFFFFF" BorderBrush="{x:Null}" Margin="72,0,126,0" Style="{DynamicResource FingersDance.Control.PlayerButton}" Opacity="0"/>
     			<StackPanel Opacity="1" HorizontalAlignment="Right" Width="50" Background="#FF0046F6" x:Name="StackPanelAnnotation" VerticalAlignment="Bottom" Height="Auto">
     				<Rectangle Width="50" Height="50" Fill="#FFFFFFFF" Stroke="#FF000000"/>
     				<Rectangle Width="50" Height="50" Fill="#FFFFFFFF" Stroke="#FF000000"/>
--- a/src/FingersDance.Control.Player/UserControlPlayer.xaml.cs	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance.Control.Player/UserControlPlayer.xaml.cs	Wed Oct 07 17:16:46 2009 +0200
@@ -10,8 +10,12 @@
 using System.Windows.Navigation;
 using System.ComponentModel;
 using System.Reflection;
+using System.Collections.Generic;
 
 using Microsoft.Surface.Presentation;
+using Microsoft.Surface.Presentation.Controls;
+using FingersDance.ActionFactory;
+using FingersDance.Actions;
 using FingersDance.Views;
 using FingersDance.ViewModels;
 
@@ -179,13 +183,13 @@
         private void Play_Pause_area_DragEnter(object sender, SurfaceDragDropEventArgs e)
         {
             //Console.WriteLine("Enter");
-            //Play_Pause_area.Opacity = 0.5;
+            Play_Pause_area.Opacity = 0.5;
         }
 
         private void Play_Pause_area_DragLeave(object sender, SurfaceDragDropEventArgs e)
         {
             //Console.WriteLine("Leave");
-            //Play_Pause_area.Opacity = 0;
+            Play_Pause_area.Opacity = 0;
         }
 
         private void Play_Pause_area_DragOver(object sender, SurfaceDragDropEventArgs e)
@@ -196,11 +200,36 @@
         private void Play_Pause_area_Drop(object sender, SurfaceDragDropEventArgs e)
         {
             //Console.WriteLine("Drop");
+            Play_Pause_area.Opacity = 0;
             // e.Cursor.Visual is the ContentControl, so its Content is the dragged TimelineAnnotationView
             AnnotationViewModel annotationDataVM = (AnnotationViewModel)((TimelineAnnotationView)((ContentControl)e.Cursor.Visual).Content).DataContext;
             int nbSeconds = (int)annotationDataVM.TcBegin;
             int nbMilliSec = (int)((annotationDataVM.TcBegin * 1000)%1000);
             MediaElementVideo.Position = new TimeSpan(0, 0, 0, nbSeconds, nbMilliSec);
+
+
+            // If the TimelineAnnotationView comes from a user control different from the current one, 
+            // it means that we want to add the annotation to the current list.
+            // So we generate the ActionAddAnnotation
+            // e.Cursor.DragSource is the SurfaceListBox where the drag started from
+            SurfaceListBox slb = (SurfaceListBox)e.Cursor.DragSource;
+            // We get the instance of the UserControlSyncSource
+            UserControl syncSrc = (UserControl)((Grid)((Grid)this.Parent).Parent).Parent;
+            // and its UserControlTimeline
+            UserControl tl = (UserControl)((Grid)((Grid)syncSrc.Content).Children[0]).Children[0];
+            if (((Grid)((UserControl)((Grid)slb.Parent).Parent).Parent).Parent != tl)
+            {
+                // Now we build the action arguments : a list holding the timeline and the annotation view models
+                List<Object> actionsArgs = new List<Object>();
+                actionsArgs.Add(tl);
+                actionsArgs.Add(annotationDataVM);
+
+                ActionGenerator ag = new ActionGenerator();
+                ActionBase ab = ag.GetAction("ActionAddAnnotation", actionsArgs);
+                if (ab != null)
+                    ab.Execute();
+            }
+
         }
 	}
 }
\ No newline at end of file
--- a/src/FingersDance.Control.TimeLine/UserControlTimeLine.xaml.cs	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance.Control.TimeLine/UserControlTimeLine.xaml.cs	Wed Oct 07 17:16:46 2009 +0200
@@ -14,6 +14,7 @@
 
 using FingersDance.Data;
 using FingersDance.ViewModels;
+using FingersDance.Views;
 
 namespace FingersDance.Control.TimeLine
 {
@@ -118,7 +119,10 @@
             CuttingVM = new CuttingViewModel(cut, AnnotWidth);
             tv.DataContext = CuttingVM;
 
-            slider_ContactTapGesture(this,null);
+            UserControlTimeLine_SizeChanged(null, null);
+
+            slider_ContactTapGesture(this, null);
+            
 
         }
 
@@ -182,8 +186,7 @@
                 DragStarted(this, new EventArgs());
         }
 
-        private void sliderPosition_DragCompleted(
-            object sender, DragCompletedEventArgs e)
+        private void sliderPosition_DragCompleted(object sender, DragCompletedEventArgs e)
         {
             finishedDragging = true;
             OnDragCompleted();
@@ -196,10 +199,47 @@
 
         private void slider_ContactTapGesture(object sender, Microsoft.Surface.Presentation.ContactEventArgs e)
         {
-            //addAnnotation();
+            //startOrEndAnnotation();
         }
 
-        public void addAnnotation()
+        public void addAnnotation(AnnotationViewModel avm)
+        {
+            Console.WriteLine("addAnnotation = " + avm.TcBegin + ", " + avm.Dur + ", " + avm.GestureType);
+            Boolean annotOk = true;
+            // We check if the annotation's begin and end timecodes allow a new annotation creation
+            if (CuttingVM != null && AnnotWaiting == false)
+            {
+                foreach (Annotation a in AnnotList)
+                {
+                    //Console.WriteLine("a.TcBegin = " + a.TcBegin + ", avm.TcBegin = " + avm.TcBegin + ", tcOut = " + (a.TcBegin + a.Dur));
+                    // Check begin TC
+                    if (a.TcBegin <= avm.TcBegin && avm.TcBegin <= (a.TcBegin + a.Dur))
+                    {
+                        annotOk = false;
+                    }
+                    // Check end tc and if the new annotation will not cover any other
+                    float endTC = avm.TcBegin + avm.Dur;
+                    //Console.WriteLine("a.TcBegin = " + a.TcBegin + ", tcOut = " + (a.TcBegin + a.Dur) + ", AnnotTcBegin = " + AnnotTcBegin + ", currentTC = " + currentTC);
+                    if (a.TcBegin <= endTC && endTC <= (a.TcBegin + a.Dur) || (avm.TcBegin < a.TcBegin && (a.TcBegin + a.Dur) < endTC))
+                    {
+                        annotOk = false;
+                    }
+                }
+                // If everything's fine, we create the new one
+                if (annotOk == true)
+                {
+                    AnnotList.Add(new Annotation(avm.TcBegin, avm.Dur, avm.GestureType));
+                    CuttingVM.setListFromAnnotations(AnnotList, AnnotWidth);
+                    tv.DataContext = null;
+                    tv.DataContext = CuttingVM;
+                    AnnotWaiting = false;
+                }
+
+            }
+
+        }
+
+        public void startOrEndAnnotation()
         {
             Boolean annotOk = true;
             // We open a new annotation
--- a/src/FingersDance.Views/FingersDance.Views.csproj	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance.Views/FingersDance.Views.csproj	Wed Oct 07 17:16:46 2009 +0200
@@ -123,6 +123,10 @@
     </Page>
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\FingersDance.Data\FingersDance.Data.csproj">
+      <Project>{EAF384DB-2AE4-4132-839D-60F9DAFDEAD8}</Project>
+      <Name>FingersDance.Data</Name>
+    </ProjectReference>
     <ProjectReference Include="..\FingersDance.ViewModel\FingersDance.ViewModels.csproj">
       <Project>{E81BB080-0598-43AC-90CE-54D6570C4E9E}</Project>
       <Name>FingersDance.ViewModels</Name>
--- a/src/FingersDance.Views/TimelineView.xaml.cs	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance.Views/TimelineView.xaml.cs	Wed Oct 07 17:16:46 2009 +0200
@@ -14,8 +14,9 @@
 using Microsoft.Surface.Presentation.Controls;
 using Microsoft.Surface.Presentation;
 
+using FingersDance.Data;
+using FingersDance.ViewModels;
 using FingersDance.Views;
-using FingersDance.ViewModels;
 
 namespace FingersDance.Views
 {
--- a/src/FingersDance/Resources/menu.xml	Tue Oct 06 14:02:09 2009 +0200
+++ b/src/FingersDance/Resources/menu.xml	Wed Oct 07 17:16:46 2009 +0200
@@ -68,13 +68,13 @@
 							<Name>Saut 1</Name>
 							<Items/>
 							<Ressource>FingersDanceAnnotationButtonNiveau3</Ressource>
-							<Action>ActionAddAnnotation</Action>
+							<Action>ActionStartOrEndAnnotation</Action>
 						</Item>
 						<Item>
 							<Name>Pirouette 2</Name>
 							<Items/>
 							<Ressource>FingersDanceAnnotationButtonNiveau3</Ressource>
-							<Action>ActionAddAnnotation</Action>
+							<Action>ActionStartOrEndAnnotation</Action>
 						</Item>
 					</Items>
 					<Ressource>FingersDanceAnnotationButtonNiveau2</Ressource>