source: trunk/CrypPlugins/WorkspaceManager/View/Container/WorkSpaceEditorView.xaml.cs @ 2588

Last change on this file since 2588 was 2588, checked in by matkovic, 11 years ago

-WorkSpaceEditorView: Fullscreen -> Zoom is now working & a lot more space for 'presentations'

File size: 29.0 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows;
6using System.Windows.Controls;
7using System.Windows.Data;
8using System.Windows.Documents;
9using System.Windows.Input;
10using System.Windows.Media;
11using System.Windows.Media.Imaging;
12using System.Windows.Navigation;
13using System.Windows.Shapes;
14using WorkspaceManager.View.Converter;
15using WorkspaceManager.View.Interface;
16using WorkspaceManager.View.VisualComponents;
17using WorkspaceManager.Model;
18using Cryptool.PluginBase.Editor;
19using Cryptool.Core;
20using Cryptool.PluginBase;
21using System.Collections.ObjectModel;
22using System.Windows.Threading;
23
24namespace WorkspaceManager.View.Container
25{
26    public enum EditorState
27    {
28        READY,
29        BUSY
30    };
31    /// <summary>
32    /// Interaction logic for WorkSpaceEditorView.xaml
33    /// </summary>
34    ///
35    public partial class WorkSpaceEditorView : UserControl
36    {
37
38        private Point? lastCenterPositionOnTarget;
39        private Point? lastMousePositionOnTarget;
40        private Point? lastDragPoint;
41        private Point? startDrag;
42        private Point previousDragPoint = new Point();
43        private ConnectorView selectedConnector;
44        private PluginContainerView selectedPluginContainer;
45        private CryptoLineView dummyLine = new CryptoLineView();
46        private PluginContainerView currentFullViewContainer;
47        private Panel root { get { return (this.scrollViewer.Content as Panel); } }
48        private BottomBox bottomBox { get { return (BottomBoxParent.Child as BottomBox); } }
49        public bool IsCtrlToggled { get; set; }
50
51        //public ModifiedCanvas PrstPanel { get { return (ModifiedCanvas) PrstPanelRoot.Content; } }
52
53        public UserContentWrapper UserContentWrapper { get; set; }
54        public EditorState State;
55        public EditorState ConnectorState;
56        public List<CryptoLineView> ConnectionList = new List<CryptoLineView>();
57        public List<PluginContainerView> PluginContainerList = new List<PluginContainerView>();
58        private WorkspaceModel model;
59        public WorkspaceModel Model
60        {
61            get { return model; }
62            set { model = value; }
63        }
64
65        public WorkSpaceEditorView()
66        {
67            InitializeComponent();
68        }
69
70        private void Button_Click_Full_inc(object sender, RoutedEventArgs e)
71        {
72            FullScreenScaleSlider.Value += 0.15;
73        }
74
75        private void Button_Click_Full_dec(object sender, RoutedEventArgs e)
76        {
77            FullScreenScaleSlider.Value -= 0.15;
78        }
79
80        public WorkSpaceEditorView(WorkspaceModel WorkspaceModel)
81        {
82            setBaseControl(WorkspaceModel);                       
83            InitializeComponent();
84            CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
85
86            scrollViewer.ScrollChanged += OnScrollViewerScrollChanged;
87            scrollViewer.PreviewMouseWheel += OnPreviewMouseWheel;
88            scrollViewer.DataContext = root;
89
90            this.bottomBox.FitToScreen += new EventHandler<FitToScreenEventArgs>(bottomBox_FitToScreen);
91            this.UserContentWrapper = new UserContentWrapper(Model, bottomBox);
92            this.UserControlWrapperParent.Children.Clear();
93            this.UserControlWrapperParent.Children.Add(UserContentWrapper);       
94        }
95
96        private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
97        {
98            if (IsCtrlToggled)
99                return;
100
101            scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset - e.HorizontalChange);
102            scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - e.VerticalChange);
103            this.Cursor = Cursors.SizeAll;
104        }
105
106        void OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
107        {
108            lastMousePositionOnTarget = Mouse.GetPosition(scrollViewer);
109
110            if (e.Delta > 0)
111            {
112                Properties.Settings.Default.EditScale += 0.2;
113            }
114            if (e.Delta < 0)
115            {
116                Properties.Settings.Default.EditScale -= 0.2;
117            }
118
119            e.Handled = true;
120        }
121
122        private void Thumb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
123        {
124            if (!IsCtrlToggled)
125                return;
126
127            rectangle.Visibility = Visibility.Visible;
128            startDrag = e.GetPosition(root);
129            this.Cursor = Cursors.Cross;
130        }
131
132        private void Thumb_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
133        {
134            rectangle.Visibility = Visibility.Collapsed;
135            this.Cursor = Cursors.Arrow;
136            startDrag = null;
137            lastDragPoint = null;
138        }
139
140        void WorkSpaceEditorView_MouseMove(object sender, MouseEventArgs e)
141        {
142            if (IsCtrlToggled && startDrag.HasValue)
143            {
144                Point currentPoint = e.GetPosition(root);
145                Point hasValue = (Point)startDrag;
146
147                //Calculate the top left corner of the rectangle
148                //regardless of drag direction
149                double x = hasValue.X < currentPoint.X ? hasValue.X : currentPoint.X;
150                double y = hasValue.Y < currentPoint.Y ? hasValue.Y : currentPoint.Y;
151
152                //Move the rectangle to proper place
153                rectangle.RenderTransform = new TranslateTransform(x, y);
154                //Set its size
155                rectangle.Width = Math.Abs(e.GetPosition(root).X - hasValue.X);
156                rectangle.Height = Math.Abs(e.GetPosition(root).Y - hasValue.Y);
157            }
158            dummyLine.EndPoint = Mouse.GetPosition(root);
159        }
160
161        void OnScrollViewerScrollChanged(object sender, ScrollChangedEventArgs e)
162        {
163            if (IsCtrlToggled)
164                return;
165
166            if (e.ExtentHeightChange != 0 || e.ExtentWidthChange != 0)
167            {
168                Point? targetBefore = null;
169                Point? targetNow = null;
170
171                if (!lastMousePositionOnTarget.HasValue)
172                {
173                    if (lastCenterPositionOnTarget.HasValue)
174                    {
175                        var centerOfViewport = new Point(scrollViewer.ViewportWidth / 2,
176                                                         scrollViewer.ViewportHeight / 2);
177                        Point centerOfTargetNow =
178                              scrollViewer.TranslatePoint(centerOfViewport, scrollViewer);
179
180                        targetBefore = lastCenterPositionOnTarget;
181                        targetNow = centerOfTargetNow;
182                    }
183                }
184                else
185                {
186                    targetBefore = lastMousePositionOnTarget;
187                    targetNow = Mouse.GetPosition(scrollViewer);
188
189                    lastMousePositionOnTarget = null;
190                }
191
192                if (targetBefore.HasValue)
193                {
194                    double dXInTargetPixels = targetNow.Value.X - targetBefore.Value.X;
195                    double dYInTargetPixels = targetNow.Value.Y - targetBefore.Value.Y;
196
197                    double multiplicatorX = e.ExtentWidth / scrollViewer.Width;
198                    double multiplicatorY = e.ExtentHeight / scrollViewer.Height;
199
200                    double newOffsetX = scrollViewer.HorizontalOffset -
201                                        dXInTargetPixels * multiplicatorX;
202                    double newOffsetY = scrollViewer.VerticalOffset -
203                                        dYInTargetPixels * multiplicatorY;
204
205                    if (double.IsNaN(newOffsetX) || double.IsNaN(newOffsetY))
206                    {
207                        return;
208                    }
209
210                    scrollViewer.ScrollToHorizontalOffset(newOffsetX);
211                    scrollViewer.ScrollToVerticalOffset(newOffsetY);
212                }
213            }
214        }
215
216        void CompositionTarget_Rendering(object sender, EventArgs e)
217        {
218            if ((Keyboard.GetKeyStates(Key.LeftCtrl) & KeyStates.Down) > 0)
219            {
220                IsCtrlToggled = true;
221            }
222            else
223                IsCtrlToggled = false;
224
225            if ((Keyboard.GetKeyStates(Key.LeftCtrl) & Keyboard.GetKeyStates(Key.C) & KeyStates.Down) > 0)
226            {
227                Copy();
228            }
229
230            if ((Keyboard.GetKeyStates(Key.LeftCtrl) & Keyboard.GetKeyStates(Key.V) & KeyStates.Down) > 0)
231            {
232                Paste();
233            }
234        }
235
236        public void Copy()
237        {
238            if (IsMouseOver)
239            {
240                List<PluginModel> list = new List<PluginModel>();
241                foreach (PluginContainerView plugin in Model.SelectedPluginsList)
242                {
243                    list.Add(plugin.Model);
244                }
245
246                PluginCopyWrapper w = new PluginCopyWrapper(list.ToArray());
247                Clipboard.SetData("PluginCopy", w);
248                var v = Clipboard.GetData("PluginCopy");
249            }
250        }
251
252        public void Paste()
253        {
254            if (IsMouseOver)
255            {
256                PluginCopyWrapper v = (PluginCopyWrapper)Clipboard.GetData("PluginCopy");
257
258                if (!(v is PluginCopyWrapper))
259                    return;
260
261                foreach (PluginModel model in v.Model)
262                {
263                    //this.loadPluginContainerView(model);
264                    model.WorkspaceModel = this.Model;
265                    model.generateConnectors();
266                    this.AddPluginContainerView(model.Position, model);
267                }
268
269                //foreach (ConnectionModel connModel in Model.AllConnectionModels)
270                //{
271                //    CryptoLineView conn = new CryptoLineView(connModel);
272                //    connModel.UpdateableView = conn;
273                //    connModel.OnDelete += DeleteConnection;
274
275                //    foreach (UIElement element in root.Children)
276                //    {
277                //        PluginContainerView container = element as PluginContainerView;
278                //        if (container != null)
279                //        {
280                //            foreach (ConnectorView connector in container.ConnectorViewList)
281                //            {
282                //                if (connModel.From == connector.Model)
283                //                {
284                //                    conn.StartPointSource = connector;
285                //                    conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(connector));
286                //                }
287                //                else if (connModel.To == connector.Model)
288                //                {
289                //                    conn.EndPointSource = connector;
290                //                    conn.SetBinding(CryptoLineView.EndPointProperty, CreateConnectorBinding(connector));
291                //                }
292                //            }
293                //        }
294                //    }
295
296                //    root.Children.Add(conn);
297                //    ConnectionList.Add(conn);
298                //    Canvas.SetZIndex(conn, 0);
299                //}
300            }
301        }
302
303       
304
305        void bottomBox_FitToScreen(object sender, FitToScreenEventArgs e)
306        {
307
308            if (scrollViewer.ScrollableWidth > 0 || scrollViewer.ScrollableHeight > 0)
309            {
310                while (Properties.Settings.Default.EditScale > Properties.Settings.Default.MinScale && (scrollViewer.ScrollableHeight > 0 || scrollViewer.ScrollableWidth > 0))
311                {
312                    Properties.Settings.Default.EditScale -= 0.02;
313                    scrollViewer.UpdateLayout();
314                }
315            }
316            else
317            {
318                while (Properties.Settings.Default.EditScale < Properties.Settings.Default.MaxScale && scrollViewer.ScrollableHeight == 0 && scrollViewer.ScrollableWidth == 0)
319                {
320                    Properties.Settings.Default.EditScale += 0.02;
321                    scrollViewer.UpdateLayout();
322                }
323                if (scrollViewer.ScrollableHeight > 0 || scrollViewer.ScrollableWidth > 0)
324                    Properties.Settings.Default.EditScale -= 0.02;
325            }
326        }
327
328        private void setBaseControl(WorkspaceModel WorkspaceModel)
329        {
330            this.MouseMove +=new MouseEventHandler(WorkSpaceEditorView_MouseMove);
331            this.MouseLeave += new MouseEventHandler(WorkSpaceEditorView_MouseLeave);
332            this.Loaded += new RoutedEventHandler(WorkSpaceEditorView_Loaded);
333            this.DragEnter += new DragEventHandler(WorkSpaceEditorView_DragEnter);
334            this.Drop += new DragEventHandler(WorkSpaceEditorView_Drop);
335            this.PreviewMouseRightButtonDown += new MouseButtonEventHandler(WorkSpaceEditorView_PreviewMouseRightButtonDown);
336            this.Model = WorkspaceModel;
337            this.State = EditorState.READY;
338        }
339
340        void PluginDelete(object sender, PluginContainerViewDeleteViewEventArgs e)
341        {
342            if (this.State == EditorState.READY)
343            {
344                Model.deletePluginModel(e.container.Model);
345                root.Children.Remove(e.container);
346                Model.WorkspaceManagerEditor.HasChanges = true;
347            }
348        }
349
350        void WorkSpaceEditorView_Loaded(object sender, RoutedEventArgs e)
351        {
352        }
353
354        public void AddPluginContainerView(Point position, PluginModel model)
355        {
356            if (this.State == EditorState.READY)
357            {
358                PluginContainerView newPluginContainerView = new PluginContainerView(model);
359                newPluginContainerView.Delete += new EventHandler<PluginContainerViewDeleteViewEventArgs>(PluginDelete);
360                newPluginContainerView.FullScreen += new EventHandler<PluginContainerViewFullScreenViewEventArgs>(shape_FullScreen);
361                newPluginContainerView.MouseLeftButtonDown += new MouseButtonEventHandler(shape_MouseLeftButtonDown);
362                newPluginContainerView.MouseLeftButtonUp += new MouseButtonEventHandler(shape_MouseLeftButtonUp);
363                newPluginContainerView.ConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(shape_OnConnectorMouseLeftButtonDown);
364                newPluginContainerView.SetPosition(new Point((Math.Round((position.X) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale,
365                                                            (Math.Round((position.Y) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale));
366
367                this.root.Children.Add(newPluginContainerView);
368                Canvas.SetZIndex(newPluginContainerView, 100);
369                Model.WorkspaceManagerEditor.HasChanges = true;
370            }
371        }
372
373
374        void shape_FullScreen(object sender, PluginContainerViewFullScreenViewEventArgs e)
375        {
376            this.InformationPanel.Visibility = Visibility.Visible;
377            e.container.PrepareFullscreen();
378            this.PercentageTextPanel.Children.Add(e.container.ProgressPercentage);
379            this.PrstPanel.DataContext = e.container;
380            this.CtrPanel.DataContext = e.container;
381            this.CtrPanel.Children.Add(e.container.OptionPanel);
382            this.PrstPanel.Children.Add(e.container.ViewPanel);
383            this.ProgressbarPanel.Children.Add(e.container.ProgressbarParent);
384            this.currentFullViewContainer = e.container;
385        }
386
387        public void AddConnection(ConnectorView source, ConnectorView target)
388        {
389            if (this.State == EditorState.READY)
390            {
391                ConnectionModel connectionModel = this.Model.newConnectionModel(((ConnectorView)source).Model, ((ConnectorView)target).Model, ((ConnectorView)source).Model.ConnectorType);
392                CryptoLineView conn = new CryptoLineView(connectionModel,source,target);
393                conn.StartPointSource = source;
394                conn.EndPointSource = target;
395                connectionModel.UpdateableView = conn;
396                connectionModel.OnDelete += DeleteConnection;
397                conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(source));
398                conn.SetBinding(CryptoLineView.EndPointProperty, CreateConnectorBinding(target));
399                root.Children.Add(conn);
400                ConnectionList.Add(conn);
401                Canvas.SetZIndex(conn, 0);
402            }
403        }
404
405        public void DeleteConnection(Object sender, EventArgs args)
406        {
407            if (sender is ConnectionModel)
408            {
409                if(((ConnectionModel)sender).UpdateableView != null){
410                    UIElement uielement = (UIElement)((ConnectionModel)sender).UpdateableView;
411                    root.Children.Remove(uielement);
412                }
413            }
414        }
415
416        private void AddConnectionSource(ConnectorView source, CryptoLineView conn)
417        {
418            if (this.State == EditorState.READY)
419            {
420                Color color = ColorHelper.GetColor((source as ConnectorView).Model.ConnectorType);
421                conn.Stroke = new SolidColorBrush(color);
422                conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(source));
423                conn.EndPoint = Mouse.GetPosition(root);
424            }
425        }
426
427        private MultiBinding CreateConnectorBinding(ConnectorView connectable)
428        {
429            MultiBinding multiBinding = new MultiBinding();
430            multiBinding.Converter = new ConnectorBindingConverter();
431            multiBinding.ConverterParameter = connectable;
432
433            Binding binding = new Binding();
434            binding.Source = connectable.Parent;
435            binding.Path = new PropertyPath(PluginContainerView.X);
436            multiBinding.Bindings.Add(binding);
437
438            binding = new Binding();
439            binding.Source = connectable.Parent;
440            binding.Path = new PropertyPath(PluginContainerView.Y);
441            multiBinding.Bindings.Add(binding);
442
443            binding = new Binding();
444            binding.Source = connectable;
445            binding.Path = new PropertyPath(FrameworkElement.ActualHeightProperty);
446            multiBinding.Bindings.Add(binding);
447
448            binding = new Binding();
449            binding.Source = connectable;
450            binding.Path = new PropertyPath(FrameworkElement.ActualWidthProperty);
451            multiBinding.Bindings.Add(binding);
452
453            binding = new Binding();
454            binding.Source = connectable.Parent.West;
455            binding.Path = new PropertyPath(FrameworkElement.ActualHeightProperty);
456            multiBinding.Bindings.Add(binding);
457
458            binding = new Binding();
459            binding.Source = connectable.Parent.East;
460            binding.Path = new PropertyPath(FrameworkElement.ActualHeightProperty);
461            multiBinding.Bindings.Add(binding);
462
463            binding = new Binding();
464            binding.Source = connectable.Parent.North;
465            binding.Path = new PropertyPath(FrameworkElement.ActualWidthProperty);
466            multiBinding.Bindings.Add(binding);
467
468            binding = new Binding();
469            binding.Source = connectable.Parent.South;
470            binding.Path = new PropertyPath(FrameworkElement.ActualWidthProperty);
471            multiBinding.Bindings.Add(binding);
472
473            return multiBinding;
474        }
475
476        #region Controls
477
478        //void WorkSpaceEditorView_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
479        //{
480        //    UserContentWrapper.SelectedItem = null;
481        //    PluginChangedEventArgs args = new PluginChangedEventArgs(this.model.WorkspaceManagerEditor, "WorkspaceManager", DisplayPluginMode.Normal);
482        //    this.Model.WorkspaceManagerEditor.onSelectedPluginChanged(args);
483        //    e.Handled = false;
484        //}
485
486        void shape_OnConnectorMouseLeftButtonDown(object sender, ConnectorViewEventArgs e)
487        {
488            if (this.State == EditorState.READY)
489            {
490                if (selectedConnector != null && WorkspaceModel.compatibleConnectors(selectedConnector.Model, e.connector.Model))
491                {
492                    this.root.Children.Remove(dummyLine);
493                    this.AddConnection(selectedConnector, e.connector);
494                    this.selectedConnector = null;
495                    return;
496                }
497
498                if (selectedConnector == null && e.connector.Model.Outgoing)
499                {
500                    this.root.Children.Add(dummyLine);
501                    this.selectedConnector = e.connector;
502                    this.AddConnectionSource(e.connector, dummyLine);
503                    return;
504                }
505            }
506           
507        }
508
509        void WorkSpaceEditorView_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
510        {
511            UserContentWrapper.SelectedItem = null;
512
513            if (this.State == EditorState.READY)
514            {
515                this.selectedConnector = null;
516                this.root.Children.Remove(dummyLine);
517            }
518        }
519
520        void WorkSpaceEditorView_MouseLeave(object sender, MouseEventArgs e)
521        {
522            if (this.State == EditorState.READY)
523            {
524                this.selectedPluginContainer = null;
525            }
526        }     
527
528
529
530        void shape_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
531        {
532            Canvas.SetZIndex(sender as PluginContainerView, 100);
533            this.selectedPluginContainer = null;
534        }
535
536        void shape_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
537        {
538            this.selectedPluginContainer = sender as PluginContainerView;
539            this.previousDragPoint = Mouse.GetPosition(selectedPluginContainer); 
540            Canvas.SetZIndex(selectedPluginContainer, 101);
541
542            PluginChangedEventArgs args = new PluginChangedEventArgs(this.selectedPluginContainer.Model.Plugin, this.selectedPluginContainer.Model.Name, DisplayPluginMode.Normal);
543            this.Model.WorkspaceManagerEditor.onSelectedPluginChanged(args);
544
545            e.Handled = true;
546        }
547
548        void WorkSpaceEditorView_Drop(object sender, DragEventArgs e)
549        {
550            if (this.State == EditorState.READY)
551            {
552                if (e.Data.GetDataPresent("Cryptool.PluginBase.Editor.DragDropDataObject"))
553                {
554                    try
555                    {
556                        DragDropDataObject obj = e.Data.GetData("Cryptool.PluginBase.Editor.DragDropDataObject") as DragDropDataObject;
557                        PluginModel pluginModel = Model.newPluginModel(DragDropDataObjectToPluginConverter.CreatePluginInstance(obj.AssemblyFullName, obj.TypeFullName));
558                        if (obj != null)
559                            this.AddPluginContainerView(e.GetPosition(root), pluginModel);
560                        Model.WorkspaceManagerEditor.HasChanges = true;
561                    }
562                    catch (Exception ex)
563                    {
564                        this.Model.WorkspaceManagerEditor.GuiLogMessage("Could not add Plugin to Workspace:" + ex.Message, NotificationLevel.Error);
565                        this.Model.WorkspaceManagerEditor.GuiLogMessage(ex.StackTrace, NotificationLevel.Error);
566                        return;
567                    }
568                }
569                else
570                    return;
571            }
572        }
573
574        void WorkSpaceEditorView_DragEnter(object sender, DragEventArgs e)
575        {
576            if (this.State == EditorState.READY)
577            {
578                e.Effects = DragDropEffects.Copy;
579            }
580            else if (this.State == EditorState.BUSY)
581            {
582                e.Effects = DragDropEffects.None;
583            }
584        }
585
586        #endregion
587
588        private void CloseButton_Click(object sender, RoutedEventArgs e)
589        {
590            this.InformationPanel.Visibility = Visibility.Collapsed;
591            this.CtrPanel.Children.Clear();
592            this.PrstPanel.Children.Clear();
593            this.ProgressbarPanel.Children.Clear();
594            this.PercentageTextPanel.Children.Clear();
595            this.currentFullViewContainer.Reset();
596            this.currentFullViewContainer = null;
597            this.CtrPanel.DataContext = null;
598            this.PrstPanel.DataContext = null;
599        }
600
601        internal void Load(WorkspaceModel WorkspaceModel)
602        {
603            this.Model = WorkspaceModel;
604
605            foreach (PluginModel model in this.Model.AllPluginModels)
606            {
607                bool skip = false;
608                foreach (ConnectorModel connModel in model.InputConnectors)
609                {
610                    if (connModel.IControl && connModel.InputConnections.Count > 0)
611                    {
612                        skip = true;
613                        break;
614                    }
615                }
616                if(!skip)
617                    this.loadPluginContainerView(model);
618            }
619            foreach (ConnectionModel connModel in WorkspaceModel.AllConnectionModels)
620            {
621                if (connModel.To.IControl)
622                    continue;
623
624                CryptoLineView conn = new CryptoLineView(connModel,null,null);
625                connModel.UpdateableView = conn;
626                connModel.OnDelete += DeleteConnection;
627
628                foreach (UIElement element in root.Children)
629                {
630                    PluginContainerView container = element as PluginContainerView;
631                    if (container != null)
632                    {
633                        foreach (ConnectorView connector in container.ConnectorViewList)
634                        {
635                            if (connModel.From == connector.Model)
636                            {
637                                conn.StartPointSource = connector;
638                                conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(connector));
639                            }
640                            else if (connModel.To == connector.Model)
641                            {
642                                conn.EndPointSource = connector;
643                                conn.SetBinding(CryptoLineView.EndPointProperty, CreateConnectorBinding(connector));
644                            }
645                        }
646                    }
647                }
648
649                root.Children.Add(conn);
650                ConnectionList.Add(conn);
651                Canvas.SetZIndex(conn, 0);
652            }
653
654            this.UserContentWrapper = new UserContentWrapper(Model, bottomBox);
655            this.UserControlWrapperParent.Children.Clear();
656            this.UserControlWrapperParent.Children.Add(UserContentWrapper);   
657        }
658
659        private void loadPluginContainerView(PluginModel model)
660        {
661            PluginContainerView newPluginContainerView = new PluginContainerView(model);
662
663            newPluginContainerView.Delete += new EventHandler<PluginContainerViewDeleteViewEventArgs>(PluginDelete);
664            newPluginContainerView.FullScreen += new EventHandler<PluginContainerViewFullScreenViewEventArgs>(shape_FullScreen);
665            newPluginContainerView.ConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(shape_OnConnectorMouseLeftButtonDown);
666            newPluginContainerView.MouseLeftButtonDown += new MouseButtonEventHandler(shape_MouseLeftButtonDown);
667            newPluginContainerView.MouseLeftButtonUp += new MouseButtonEventHandler(shape_MouseLeftButtonUp);
668            newPluginContainerView.SetPosition(model.Position);
669            this.root.Children.Add(newPluginContainerView);
670            Canvas.SetZIndex(newPluginContainerView, 100);
671        }
672
673        internal void ResetConnections()
674        {
675            foreach (CryptoLineView line in ConnectionList)
676            {             
677                line.Reset();
678            }
679        }
680
681        private void root_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
682        {
683            if (!e.Handled)
684            {
685                PluginChangedEventArgs args = new PluginChangedEventArgs(this.model.WorkspaceManagerEditor, "WorkspaceManager", DisplayPluginMode.Normal);
686                this.Model.WorkspaceManagerEditor.onSelectedPluginChanged(args);
687            }
688        }
689
690        private void Thumb_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
691        {
692        }
693    }
694
695    [Serializable]
696    public class PluginCopyWrapper
697    {
698        public PluginModel[] Model { get; private set; }
699
700        public PluginCopyWrapper(PluginModel[] model)
701        {
702            this.Model = model;
703        }
704    }
705}
Note: See TracBrowser for help on using the repository browser.