src/FingersDance.Control.TimeLine/UserControlTimeLine.xaml.cs
author cavaliet
Wed, 14 Oct 2009 17:08:43 +0200
changeset 150 569925b65604
parent 146 dd8ed4d3beb6
child 160 e940ca798fe3
permissions -rw-r--r--
Annotations are now colored with the same color as the pivot's button
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
     1
using System;
69
a4c44555f205 First Data binding for annotations and timeline
cavaliet
parents: 34
diff changeset
     2
using System.Collections.Generic;
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
     3
using System.IO;
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
     4
using System.Net;
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
     5
using System.Windows;
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
     6
using System.Windows.Controls;
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
     7
using System.Windows.Data;
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
     8
using System.Windows.Input;
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
     9
using System.Windows.Media;
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
    10
using System.Windows.Media.Animation;
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
    11
using System.Windows.Navigation;
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    12
using System.Windows.Controls.Primitives;
140
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
    13
using Microsoft.Surface.Presentation;
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    14
using Microsoft.Surface.Presentation.Controls;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    15
using System.Windows.Threading;
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
    16
69
a4c44555f205 First Data binding for annotations and timeline
cavaliet
parents: 34
diff changeset
    17
using FingersDance.Data;
a4c44555f205 First Data binding for annotations and timeline
cavaliet
parents: 34
diff changeset
    18
using FingersDance.ViewModels;
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
    19
using FingersDance.Views;
140
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
    20
using FingersDance.Control.Close;
69
a4c44555f205 First Data binding for annotations and timeline
cavaliet
parents: 34
diff changeset
    21
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
    22
namespace FingersDance.Control.TimeLine
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
    23
{
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
    24
	public partial class UserControlTimeLine
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    25
    {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    26
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    27
        #region Variables
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    28
        private DispatcherTimer timer;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    29
        private bool isDragging = false;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    30
        private bool finishedDragging = false;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    31
        #endregion
140
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
    32
        
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    33
        public event EventHandler DragStarted;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    34
        public event EventHandler DragCompleted;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    35
        public event EventHandler TimerTick;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    36
124
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
    37
        private double totalmilliseconds;
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
    38
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
    39
        private List<Annotation> AnnotList = new List<Annotation>();
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
    40
        private float AnnotWidth = 300 + 15; // The surfaceListBox adds 15 pixels between each item
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
    41
        private CuttingViewModel CuttingVM;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
    42
        private Boolean AnnotWaiting = false;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
    43
        private float AnnotTcBegin;
150
569925b65604 Annotations are now colored with the same color as the pivot's button
cavaliet
parents: 146
diff changeset
    44
        private UInt32 IntColor;
74
7ce946833eae First step of data binding where we can add an annotation by clicking on the timeline
cavaliet
parents: 69
diff changeset
    45
140
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
    46
        private AnnotationViewModel canceledAnnotationVM;
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
    47
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    48
        #region Properties
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    49
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    50
        public SurfaceSlider Slider
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
    51
        {
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    52
            get
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    53
            {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    54
                return slider;
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
    55
            }
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    56
            set
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    57
            {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    58
                slider = value;
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
    59
            }
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
    60
        }
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
    61
        
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    62
        public bool IsDragging
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    63
        {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    64
            get
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    65
            {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    66
                return isDragging;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    67
            }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    68
            set
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    69
            {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    70
                isDragging = value;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    71
            }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    72
        }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    73
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    74
        public bool FinishedDragging
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    75
        {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    76
            get
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    77
            {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    78
                return finishedDragging;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    79
            }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    80
            set
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    81
            {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    82
                finishedDragging = value;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    83
            }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    84
        }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    85
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    86
        public DispatcherTimer Timer
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    87
        {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    88
            get
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    89
            {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    90
                return timer;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    91
            }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    92
            set
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    93
            {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    94
                timer = value;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    95
            }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    96
        }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    97
        #endregion
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    98
        
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
    99
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   100
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   101
        
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
   102
		public UserControlTimeLine()
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   103
		{
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
   104
			this.InitializeComponent();
140
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   105
            
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
   106
			// Insert code required on object creation below this point.
69
a4c44555f205 First Data binding for annotations and timeline
cavaliet
parents: 34
diff changeset
   107
            
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
   108
		}
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
   109
124
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   110
        public void initslider(double totalmillisecondsPar)
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   111
        {
124
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   112
            totalmilliseconds = totalmillisecondsPar;
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   113
            slider.Maximum = totalmilliseconds;
124
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   114
            // When the timeline is resized, we catch the resize event to define TimelineView's good scale
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   115
            this.SizeChanged += new SizeChangedEventHandler(UserControlTimeLine_SizeChanged);
69
a4c44555f205 First Data binding for annotations and timeline
cavaliet
parents: 34
diff changeset
   116
a4c44555f205 First Data binding for annotations and timeline
cavaliet
parents: 34
diff changeset
   117
            // TEMP FOR DATA BINDING
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   118
            AnnotList = new List<Annotation>();
150
569925b65604 Annotations are now colored with the same color as the pivot's button
cavaliet
parents: 146
diff changeset
   119
            AnnotList.Add(new Annotation(0, 10, "Axe Cam 1", IntColor));
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   120
            //AnnotList.Add(new Annotation(100 - (1 * AnnotWidth), 70, "Mvt Cam 2"));
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   121
            //AnnotList.Add(new Annotation(200 - (2 * AnnotWidth), 50, "Saut 3"));
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   122
            //AnnotList.Add(new Annotation(100 - (3 * AnnotWidth), 20, "Saut 4"));
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   123
            //AnnotList.Add(new Annotation(120 - (4 * AnnotWidth), 50, "Saut 5"));
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   124
            Cutting cut = new Cutting("titre de cutting", AnnotList);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   125
            CuttingVM = new CuttingViewModel(cut, AnnotWidth);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   126
            tv.DataContext = CuttingVM;
69
a4c44555f205 First Data binding for annotations and timeline
cavaliet
parents: 34
diff changeset
   127
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   128
            tv.listview.PreviewContactDown += listview_PreviewContactDown;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   129
            SurfaceDragDrop.AddDragCanceledHandler(tv.listview, onDragCanceled);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   130
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   131
            UserControlTimeLine_SizeChanged(null, null);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   132
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   133
            slider_ContactTapGesture(this, null);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   134
            
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   135
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   136
        }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   137
124
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   138
        void UserControlTimeLine_SizeChanged(object sender, SizeChangedEventArgs e)
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   139
        {
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   140
            // When scaleX = 1, 1 second = 1 pixel. To calculate the new scale, we take the real width in account.
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   141
            Double futurScale = (this.ActualWidth-30) / (totalmilliseconds / 1000);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   142
            //Double futurScale = this.ActualWidth / ((totalmilliseconds<30000) ? (totalmilliseconds/10) : (totalmilliseconds / 1000)); // TEMP FOR SHORT CONTENTS
124
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   143
            tv.RenderTransform = new ScaleTransform(futurScale,1);
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   144
            //Console.WriteLine("futurScale = " + futurScale);
124
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   145
            
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   146
        }
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   147
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   148
        #region Timer
150
569925b65604 Annotations are now colored with the same color as the pivot's button
cavaliet
parents: 146
diff changeset
   149
        public void initTimer(UInt32 intColorPar)
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   150
        {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   151
            timer = new DispatcherTimer();
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   152
            timer.Interval = new TimeSpan(0, 0, 0, 0, 100);
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   153
            timer.Tick += new EventHandler(timer_Tick);
150
569925b65604 Annotations are now colored with the same color as the pivot's button
cavaliet
parents: 146
diff changeset
   154
569925b65604 Annotations are now colored with the same color as the pivot's button
cavaliet
parents: 146
diff changeset
   155
            IntColor = intColorPar;
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   156
        }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   157
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   158
        public void timerStart()
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   159
        {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   160
            if (timer != null)
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   161
                timer.Start();
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   162
        }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   163
        void timer_Tick(object sender, EventArgs e)
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
   164
        {
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   165
            OnTimerTick();
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   166
            if (!isDragging)
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   167
            {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   168
                //slider.Value = media.Position.TotalMilliseconds;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   169
            }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   170
            if (finishedDragging)
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   171
            {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   172
                //int SliderValue = (int)slider.Value;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   173
                //TimeSpan ts = new TimeSpan(0, 0, 0, 0, SliderValue);
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   174
               // media.Position = ts;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   175
               // media.Play();
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   176
               // isDragging = false;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   177
                //finishedDragging = false;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   178
            }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   179
        }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   180
        protected virtual void OnTimerTick()
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   181
        {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   182
            if (TimerTick != null)
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   183
                TimerTick(this, new EventArgs());
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
   184
        }
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   185
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   186
        #endregion
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   187
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   188
        private void sliderPosition_DragStarted(object sender, DragStartedEventArgs e)
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   189
        {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   190
            isDragging = true;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   191
            OnDragStarted();
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   192
           // media.Pause();
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   193
        }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   194
        protected virtual void OnDragStarted()
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   195
        {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   196
            if (DragStarted != null)
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   197
                DragStarted(this, new EventArgs());
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   198
        }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   199
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   200
        private void sliderPosition_DragCompleted(object sender, DragCompletedEventArgs e)
34
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   201
        {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   202
            finishedDragging = true;
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   203
            OnDragCompleted();
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   204
        }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   205
        protected virtual void OnDragCompleted()
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   206
        {
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   207
            if (DragCompleted != null)
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   208
                DragCompleted(this, new EventArgs());
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   209
        }
9e222810f5b5 User Control Player
sarias
parents: 10
diff changeset
   210
74
7ce946833eae First step of data binding where we can add an annotation by clicking on the timeline
cavaliet
parents: 69
diff changeset
   211
        private void slider_ContactTapGesture(object sender, Microsoft.Surface.Presentation.ContactEventArgs e)
7ce946833eae First step of data binding where we can add an annotation by clicking on the timeline
cavaliet
parents: 69
diff changeset
   212
        {
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   213
            //startOrEndAnnotation();
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   214
        }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   215
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   216
        public Boolean isAnnotationAccepted(AnnotationViewModel avm)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   217
        {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   218
            Boolean annotOk = true;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   219
            // We check if the annotation's begin and end timecodes allow a new annotation creation
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   220
            if (CuttingVM != null && AnnotWaiting == false)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   221
            {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   222
                foreach (Annotation a in AnnotList)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   223
                {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   224
                    //Console.WriteLine("a.TcBegin = " + a.TcBegin + ", avm.TcBegin = " + avm.TcBegin + ", tcOut = " + (a.TcBegin + a.Dur));
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   225
                    // Check begin TC
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   226
                    if (a.TcBegin <= avm.TcBegin && avm.TcBegin <= (a.TcBegin + a.Dur))
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   227
                    {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   228
                        annotOk = false;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   229
                    }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   230
                    // Check end tc and if the new annotation will not cover any other
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   231
                    float endTC = avm.TcBegin + avm.Dur;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   232
                    //Console.WriteLine("a.TcBegin = " + a.TcBegin + ", tcOut = " + (a.TcBegin + a.Dur) + ", AnnotTcBegin = " + AnnotTcBegin + ", currentTC = " + currentTC);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   233
                    if (a.TcBegin <= endTC && endTC <= (a.TcBegin + a.Dur) || (avm.TcBegin < a.TcBegin && (a.TcBegin + a.Dur) < endTC))
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   234
                    {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   235
                        annotOk = false;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   236
                    }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   237
                }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   238
            }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   239
            else
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   240
            {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   241
                annotOk = false;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   242
            }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   243
            return annotOk;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   244
75
99d003723474 data binding second step. we can add annotation by clicking on menu buttons or timeline.
cavaliet
parents: 74
diff changeset
   245
        }
74
7ce946833eae First step of data binding where we can add an annotation by clicking on the timeline
cavaliet
parents: 69
diff changeset
   246
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   247
        public void addAnnotation(AnnotationViewModel avm)
75
99d003723474 data binding second step. we can add annotation by clicking on menu buttons or timeline.
cavaliet
parents: 74
diff changeset
   248
        {
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   249
            //Console.WriteLine("addAnnotation = " + avm.TcBegin + ", " + avm.Dur + ", " + avm.GestureType);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   250
            Boolean annotOk = true;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   251
            // We check if the annotation's begin and end timecodes allow a new annotation creation
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   252
            if (CuttingVM != null && AnnotWaiting == false)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   253
            {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   254
                foreach (Annotation a in AnnotList)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   255
                {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   256
                    //Console.WriteLine("a.TcBegin = " + a.TcBegin + ", avm.TcBegin = " + avm.TcBegin + ", tcOut = " + (a.TcBegin + a.Dur));
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   257
                    // Check begin TC
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   258
                    if (a.TcBegin <= avm.TcBegin && avm.TcBegin <= (a.TcBegin + a.Dur))
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   259
                    {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   260
                        annotOk = false;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   261
                    }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   262
                    // Check end tc and if the new annotation will not cover any other
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   263
                    float endTC = avm.TcBegin + avm.Dur;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   264
                    //Console.WriteLine("a.TcBegin = " + a.TcBegin + ", tcOut = " + (a.TcBegin + a.Dur) + ", AnnotTcBegin = " + AnnotTcBegin + ", currentTC = " + currentTC);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   265
                    if (a.TcBegin <= endTC && endTC <= (a.TcBegin + a.Dur) || (avm.TcBegin < a.TcBegin && (a.TcBegin + a.Dur) < endTC))
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   266
                    {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   267
                        annotOk = false;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   268
                    }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   269
                }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   270
                // If everything's fine, we create the new one
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   271
                if (annotOk == true)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   272
                {
150
569925b65604 Annotations are now colored with the same color as the pivot's button
cavaliet
parents: 146
diff changeset
   273
                    AnnotList.Add(new Annotation(avm.TcBegin, avm.Dur, avm.GestureType, avm.Color));
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   274
                    CuttingVM.setListFromAnnotations(AnnotList, AnnotWidth);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   275
                    tv.DataContext = null;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   276
                    tv.DataContext = CuttingVM;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   277
                    AnnotWaiting = false;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   278
                }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   279
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   280
            }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   281
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   282
        }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   283
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   284
        public void startOrEndAnnotation()
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   285
        {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   286
            Boolean annotOk = true;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   287
            // We open a new annotation
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   288
            if (CuttingVM != null && AnnotWaiting == false)
124
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   289
            {
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   290
                AnnotTcBegin = (float)slider.Value / 1000;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   291
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   292
                // First we check if the new annotation will not cover any
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   293
                foreach (Annotation a in AnnotList)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   294
                {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   295
                    //Console.WriteLine("a.TcBegin = " + a.TcBegin + ", AnnotTcBegin = " + AnnotTcBegin + ", tcOut = " + (a.TcBegin + a.Dur));
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   296
                    if (a.TcBegin <= AnnotTcBegin && AnnotTcBegin <= (a.TcBegin + a.Dur))
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   297
                    {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   298
                        annotOk = false;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   299
                    }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   300
                }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   301
                // if not, we mark the beginning
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   302
                if (annotOk == true)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   303
                {
150
569925b65604 Annotations are now colored with the same color as the pivot's button
cavaliet
parents: 146
diff changeset
   304
                    AnnotList.Add(new Annotation(AnnotTcBegin, 0, AnnotList.Count.ToString(), IntColor));
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   305
                    CuttingVM.setListFromAnnotations(AnnotList, AnnotWidth);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   306
                    //Console.WriteLine("BEGIN currentTimecode = " + AnnotTcBegin + ", nb = " + AnnotList.Count + ", res = " + (AnnotTcBegin - (AnnotList.Count * AnnotWidth)));
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   307
                    tv.DataContext = null;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   308
                    tv.DataContext = CuttingVM;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   309
                    AnnotWaiting = true;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   310
                }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   311
            }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   312
            // We close the current opened annotation...
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   313
            else if (CuttingVM != null && AnnotWaiting == true && (((float)slider.Value/1000)>AnnotTcBegin))
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   314
            {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   315
                // ... by setting setting the good beginning and the good duration
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   316
                float currentTC = (float)slider.Value / 1000;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   317
                float currentDuration = currentTC - AnnotTcBegin;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   318
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   319
                // First we check if the new annotation will not cover any (AnnotTcBegin was already checked)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   320
                foreach (Annotation a in AnnotList)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   321
                {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   322
                    //Console.WriteLine("a.TcBegin = " + a.TcBegin + ", tcOut = " + (a.TcBegin + a.Dur) + ", AnnotTcBegin = " + AnnotTcBegin + ", currentTC = " + currentTC);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   323
                    if (a.TcBegin <= currentTC && currentTC <= (a.TcBegin + a.Dur) || (AnnotTcBegin < a.TcBegin && (a.TcBegin + a.Dur) < currentTC))
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   324
                    {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   325
                        annotOk = false;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   326
                    }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   327
                }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   328
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   329
                if (annotOk == true)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   330
                {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   331
                    AnnotList.RemoveAt(AnnotList.Count - 1);
150
569925b65604 Annotations are now colored with the same color as the pivot's button
cavaliet
parents: 146
diff changeset
   332
                    AnnotList.Add(new Annotation(AnnotTcBegin, currentDuration, AnnotList.Count.ToString(), IntColor));
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   333
                    CuttingVM.setListFromAnnotations(AnnotList, AnnotWidth);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   334
                    //Console.WriteLine("currentTimecode = " + AnnotTcBegin + ", curDur = " + currentDuration + ", nb = " + AnnotList.Count + ", res = " + (AnnotTcBegin - (AnnotList.Count * AnnotWidth)));
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   335
                    tv.DataContext = null;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   336
                    tv.DataContext = CuttingVM;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   337
                    AnnotWaiting = false;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   338
                }
124
14b058fc64fc Modify TimelineView's scale on resize event
cavaliet
parents: 115
diff changeset
   339
            }
74
7ce946833eae First step of data binding where we can add an annotation by clicking on the timeline
cavaliet
parents: 69
diff changeset
   340
        }
7ce946833eae First step of data binding where we can add an annotation by clicking on the timeline
cavaliet
parents: 69
diff changeset
   341
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   342
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   343
        private void listview_PreviewContactDown(object sender, Microsoft.Surface.Presentation.ContactEventArgs e)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   344
        {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   345
            FrameworkElement findSource = e.OriginalSource as FrameworkElement;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   346
            SurfaceListBoxItem draggedElement = null;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   347
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   348
            // Find the touched SurfaceListBoxItem object.
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   349
            while (draggedElement == null && findSource != null)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   350
            {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   351
                if ((draggedElement = findSource as SurfaceListBoxItem) == null)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   352
                {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   353
                    findSource = VisualTreeHelper.GetParent(findSource) as FrameworkElement;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   354
                }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   355
            }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   356
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   357
            if (draggedElement == null)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   358
            {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   359
                return;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   360
            }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   361
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   362
            // Create the cursor visual.
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   363
            ContentControl cursorVisual = new ContentControl()
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   364
            {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   365
                Content = new TimelineAnnotationView()
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   366
                {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   367
                    DataContext = findSource.DataContext
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   368
                }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   369
            };
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   370
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   371
            // We apply the current scale to the dragged annotation
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   372
            ((TimelineAnnotationView)cursorVisual.Content).RenderTransform = this.RenderTransform;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   373
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   374
            // Add a handler. This will enable the application to change the visual cues. (NOT USEFUL IN FINGERSDANCE CASE)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   375
            //SurfaceDragDrop.AddTargetChangedHandler(cursorVisual, OnTargetChanged);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   376
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   377
            // Create a list of input devices. Add the contacts that
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   378
            // are currently captured within the dragged element and
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   379
            // the current contact (if it isn't already in the list).
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   380
            List<InputDevice> devices = new List<InputDevice>();
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   381
            devices.Add(e.Contact);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   382
            foreach (Contact contact in draggedElement.ContactsCapturedWithin)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   383
            {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   384
                if (contact != e.Contact)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   385
                {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   386
                    devices.Add(contact);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   387
                }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   388
            }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   389
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   390
            // Get the drag source object
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   391
            ItemsControl dragSource = ItemsControl.ItemsControlFromItemContainer(draggedElement);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   392
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   393
            bool startDragOkay =
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   394
                SurfaceDragDrop.BeginDragDrop(
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   395
                  dragSource,                 // The SurfaceListBox object that the cursor is dragged out from.
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   396
                  draggedElement,             // The SurfaceListBoxItem object that is dragged from the drag source.
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   397
                  cursorVisual,               // The visual element of the cursor.
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   398
                  draggedElement.DataContext, // The data associated with the cursor.
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   399
                  devices,                    // The input devices that start dragging the cursor.
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   400
                  DragDropEffects.Move);      // The allowed drag-and-drop effects of the operation.
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   401
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   402
            // If the drag began successfully, set e.Handled to true. 
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   403
            // Otherwise SurfaceListBoxItem captures the contact 
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   404
            // and causes the drag operation to fail.
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   405
            e.Handled = startDragOkay;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   406
        }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   407
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   408
        private void onDragCanceled(Object sender, SurfaceDragDropEventArgs e)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   409
        {
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   410
            Console.WriteLine("onDragCanceled = " + sender + ", ((ContentControl)e.Cursor.Visual).Content = " + ((ContentControl)e.Cursor.Visual).Content);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   411
            // We check if the annotation is well one of the current annotations
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   412
            if (CuttingVM != null)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   413
            {
140
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   414
                // e.Cursor.Visual is the ContentControl, so its Content is the dragged TimelineAnnotationView
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   415
                canceledAnnotationVM = (AnnotationViewModel)((TimelineAnnotationView)((ContentControl)e.Cursor.Visual).Content).DataContext;
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   416
                confirmCancelPopup.Visibility = Visibility.Visible;
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   417
            }
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   418
        }
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   419
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   420
        private void confirmCancelPopup_ConfirmYesOrNo(object sender, ConfirmEventArgs e)
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   421
        {
146
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 140 143
diff changeset
   422
            //Consolenfirm = " + e.Confirmed);
140
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   423
            // We check if the annotation is well one of the current annotations
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   424
            if (CuttingVM != null && canceledAnnotationVM != null && e.Confirmed == true)
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   425
            {
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   426
                foreach (Annotation a in AnnotList)
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   427
                {
140
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   428
                    // Check begin TcBegin, duration and gesture type
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   429
                    if (a.TcBegin == canceledAnnotationVM.TcBegin && a.Dur == canceledAnnotationVM.Dur && a.GestureType == canceledAnnotationVM.GestureType)
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   430
                    {
140
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   431
                        // We found the good annotation so we can remove it
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   432
                        AnnotList.Remove(a);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   433
                        // We redisplay the timeline
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   434
                        CuttingVM.setListFromAnnotations(AnnotList, AnnotWidth);
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   435
                        tv.DataContext = null;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   436
                        tv.DataContext = CuttingVM;
140
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   437
                        // We close the popup and return as soon as we removed the annotation to avoid an error on AnnotList, which is just modified
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   438
                        confirmCancelPopup.Visibility = Visibility.Hidden;
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   439
                        canceledAnnotationVM = null;
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   440
                        return;
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   441
                    }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   442
                }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   443
            }
140
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   444
            confirmCancelPopup.Visibility = Visibility.Hidden;
fc7c12f9da30 Add a confirm dialog box before deleting an annotation by drag and drop. Now the UserControlClose is a generic confirm dialog box sending a ConfirmYesOrNo Event.
cavaliet
parents: 136
diff changeset
   445
            canceledAnnotationVM = null;
143
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   446
        }
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   447
PAMPHILE Jonathan <pamphile@efrei.fr>
parents: 124
diff changeset
   448
10
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
   449
	}
e8bfe1102e03 Modif sur ControlPlayer pour les videos.
sarias
parents:
diff changeset
   450
}