client/src/Iri.Modernisation.Controls/View/ContextualBinderLayer/ContextualBinderLayer.xaml.cs
author totetm <>
Mon, 25 Jan 2010 09:30:22 +0100
changeset 35 43bb1b8ed555
parent 28 2d4ec5ab2a40
permissions -rw-r--r--
IRIFiles Class Web Loader and Sender
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
     1
using System;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
     2
using System.Collections.Generic;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
     3
using System.Linq;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
     4
using System.Net;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
     5
using System.Windows;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
     6
using System.Windows.Controls;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
     7
using System.Windows.Documents;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
     8
using System.Windows.Input;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
     9
using System.Windows.Media;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    10
using System.Windows.Media.Animation;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    11
using System.Windows.Shapes;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    12
using System.Threading;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    13
using Iri.Modernisation.BaseMVVM.Commands;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    14
using Iri.Modernisation.Controls.Converter;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    15
using Iri.Modernisation.Data.Models;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    16
namespace Iri.Modernisation.Controls.View
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    17
{
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    18
    public partial class ContextualBinderLayer : UserControl
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    19
    {
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    20
        private ContextualLinkBinder _movingBinder;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    21
        private Line _linkLine;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    22
        private bool _active = false;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    23
        private System.Windows.Threading.DispatcherTimer myDispatcherTimer;
13
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    24
        private Point _menuAnnotationPoint;
0
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    25
        public ContextualBinderLayer()
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    26
        {
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    27
            InitializeComponent();
13
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    28
            Commands.PolemicElement.ElementSelected.Executed += new EventHandler<SLExtensions.Input.ExecutedEventArgs>(ElementSelected_Executed);
0
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    29
            Commands.ContextualBinderLayer.EndBind.Executed += new EventHandler<SLExtensions.Input.ExecutedEventArgs>(EndBind_Executed);
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 28
diff changeset
    30
            Commands.EscapeKeyPressed.Executed += Commands.ContextualBinderLayer.EndBind.Execute;
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 28
diff changeset
    31
            
0
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    32
            MouseLeftButtonUp += new MouseButtonEventHandler(ContextualBinderLayer_MouseLeftButtonUp);
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    33
            MouseMove += new MouseEventHandler(ContextualBinderLayer_MouseMove);
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    34
            Commands.ContextualBinderLayer.BeginBind.Executed += new EventHandler<SLExtensions.Input.ExecutedEventArgs>(BeginBind_Executed);  
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    35
            myDispatcherTimer = new System.Windows.Threading.DispatcherTimer();
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    36
            myDispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 0);
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    37
            myDispatcherTimer.Tick +=new EventHandler(myDispatcherTimer_Tick);
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    38
        }
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    39
13
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    40
        void ElementSelected_Executed(object sender, SLExtensions.Input.ExecutedEventArgs e)
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    41
        {
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    42
            _menuAnnotationPoint = ((MouseButtonEventArgs)e.Parameter).GetPosition(Application.Current.RootVisual);
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    43
        }
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    44
0
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    45
        void  myDispatcherTimer_Tick(object sender, EventArgs e)
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    46
        {
28
2d4ec5ab2a40 Commit Before SL4
Matthieu Totet
parents: 13
diff changeset
    47
            LayoutRoot.Background = new SolidColorBrush(_movingBinder.PolemicType.Color);
0
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    48
                    LayoutRoot.Background.Opacity = 0.0;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    49
                    _movingBinder.Visibility = Visibility.Visible;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    50
                    _linkLine.Visibility = Visibility.Visible;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    51
        }
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    52
        void EndBind_Executed(object sender, SLExtensions.Input.ExecutedEventArgs e)
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    53
        {
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    54
            if (_active)
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    55
            {
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    56
                FlushDisplay();
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    57
            }
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    58
        }
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    59
        
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    60
        void ContextualBinderLayer_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    61
        {
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    62
            FlushDisplay();
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    63
        }
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    64
        private void FlushDisplay()
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    65
        {
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    66
            LayoutRoot.Children.Clear();
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    67
            _movingBinder.ReleaseMouseCapture();
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    68
            LayoutRoot.Background = null;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    69
            _active = false;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    70
            myDispatcherTimer.Stop();
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    71
            Commands.ContextualBinderLayer.DesactiveBind.Execute();
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    72
        }
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    73
       
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    74
        void ContextualBinderLayer_MouseMove(object sender, MouseEventArgs e)
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    75
        { 
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    76
            LayoutRoot.Background = null;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    77
            _movingBinder.Visibility = Visibility.Collapsed;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    78
            _linkLine.Visibility = Visibility.Collapsed;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    79
            LayoutRoot.UpdateLayout();
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    80
            _movingBinder.Margin = new Thickness(
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    81
                                       e.GetPosition(this).X - _movingBinder.Width/2,
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    82
                                       e.GetPosition(this).Y - _movingBinder.Height / 2,
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    83
                                        0,
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    84
                                        0);
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    85
            _linkLine.X2 = e.GetPosition(this).X ;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    86
            _linkLine.Y2 = e.GetPosition(this).Y;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    87
        }
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    88
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    89
        void BeginBind_Executed(object sender, SLExtensions.Input.ExecutedEventArgs e)
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
    90
        {
13
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    91
            Point temp;
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    92
            if(e.Source ==null)
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    93
            {
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    94
               temp = _menuAnnotationPoint;
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    95
            }
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    96
            else
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    97
            {
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    98
                temp  =  ((MouseButtonEventArgs)e.Source).GetPosition(Application.Current.RootVisual);
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
    99
            }
0
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   100
            LayoutRoot.Children.Clear();
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   101
            _movingBinder =new ContextualLinkBinder( ((ContextualLinkBinder)e.Parameter));  
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   102
            _movingBinder.Margin = new Thickness(
13
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
   103
             temp.X - _movingBinder.Width/ 2,
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
   104
             temp.Y - _movingBinder.Height / 2,
0
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   105
              _movingBinder.Margin.Right,
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   106
               _movingBinder.Margin.Bottom);
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   107
            _linkLine = new Line()
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   108
            {
13
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
   109
                X1 = temp.X,
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
   110
                Y1 = temp.Y,
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
   111
                X2 = temp.X,
b5ee436add3d ContextualLinkBinder From ClickMenu
Matthieu Totet
parents: 0
diff changeset
   112
                Y2 = temp.Y,
28
2d4ec5ab2a40 Commit Before SL4
Matthieu Totet
parents: 13
diff changeset
   113
                Stroke = new SolidColorBrush(_movingBinder.PolemicType.Color),
0
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   114
                StrokeThickness = 2
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   115
            };
28
2d4ec5ab2a40 Commit Before SL4
Matthieu Totet
parents: 13
diff changeset
   116
            LayoutRoot.Background = new SolidColorBrush(_movingBinder.PolemicType.Color);
0
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   117
            LayoutRoot.Background.Opacity = 0.0;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   118
            LayoutRoot.Children.Add(_movingBinder);
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   119
            LayoutRoot.Children.Add(_linkLine);
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   120
            _active = true;
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   121
            Commands.ContextualBinderLayer.ActiveBind.Execute();
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   122
            myDispatcherTimer.Start();  
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   123
        }
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   124
    }
249d70e7b32d Create Directories & Project
Matthieu Totet
parents:
diff changeset
   125
}