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

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

-fixed "Fit to Screen"
-fixed Scrollbars
-fixed Dragging
-added custom names
-New: IControl- Presentation
--Loading adjusted
-New: Multi selection
-New: Copy /Past (not complete)
-New: Multi Dragging
-New: PluginContainerView Highlighting added

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