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

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

-fixed image loading bug

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