source: trunk/CrypPlugins/WorkspaceManager/View/Container/PluginContainerView.xaml.cs @ 2072

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

-Slight style changes
-settings now is now ~80% working
-tooltip added

File size: 32.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.Interface;
15using WorkspaceManager.Model;
16using WorkspaceManager.View.VisualComponents;
17using System.Windows.Controls.Primitives;
18using System.Windows.Media.Animation;
19using WorkspaceManager;
20using System.Windows.Threading;
21using System.Threading;
22using Cryptool.PluginBase;
23namespace WorkspaceManager.View.Container
24{
25    public enum PluginViewState
26    {   
27        Min,
28        Presentation,
29        Data,
30        Log,
31        Setting,
32        Description
33    };
34
35    /// <summary>
36    /// Interaction logic for PluginContainerView.xaml
37    /// </summary>
38    public partial class PluginContainerView : UserControl, IDraggable, IUpdateableView
39    {
40        #region Events
41        public event EventHandler<ConnectorViewEventArgs> ConnectorMouseLeftButtonDown;
42        public event EventHandler<PluginContainerViewDeleteViewEventArgs> Delete;
43        public event EventHandler<PluginContainerViewFullScreenViewEventArgs> FullScreen;
44        public event EventHandler<ConnectorPanelDropEventArgs> ConnectorPanelDrop;
45        #endregion
46
47        #region Private Variables
48
49        private List<UIElement> optionList = new List<UIElement>();
50        private int optionPointer = 0;
51        #endregion
52
53        #region Properties
54
55        internal Point GetRoutingPoint(int routPoint)
56        {
57            switch (routPoint)
58            {
59                case 0:
60                    return new Point(GetPosition().X - 1, GetPosition().Y - 1);
61                case 1:
62                    return new Point(GetPosition().X - 1, GetPosition().Y + this.ActualHeight + 1);
63                case 2:
64                    return new Point(GetPosition().X + 1 + this.PluginBase.ActualWidth, GetPosition().Y + 1);
65                case 3:
66                    return new Point(GetPosition().X + this.PluginBase.ActualWidth + 1, GetPosition().Y + this.ActualHeight + 1);
67            }
68            return default(Point);
69        }
70
71        public Point[] RoutingPoints
72        {
73            get
74            {
75                return  new Point[] {
76                        new Point(GetPosition().X-1 ,GetPosition().Y-1),
77                        //new Point((this.RenderTransform as TranslateTransform).X + (this.ActualWidth / 2),(this.RenderTransform as TranslateTransform).Y-1),
78                        //new Point((this.RenderTransform as TranslateTransform).X-1,(this.RenderTransform as TranslateTransform).Y + (this.ActualHeight / 2)),
79                        new Point(GetPosition().X-1,GetPosition().Y + this.PluginBase.ActualHeight+1),
80                        new Point(GetPosition().X+1 + this.PluginBase.ActualWidth,GetPosition().Y+1),
81                        //new Point((this.RenderTransform as TranslateTransform).X + (this.ActualWidth / 2), (this.RenderTransform as TranslateTransform).Y + this.ActualHeight+1),
82                        //new Point((this.RenderTransform as TranslateTransform).X + this.ActualWidth+1, (this.RenderTransform as TranslateTransform).Y + (this.ActualHeight / 2)),
83                        new Point(GetPosition().X + this.PluginBase.ActualWidth+1, GetPosition().Y + this.PluginBase.ActualHeight+1)};
84            }
85        }
86
87        public static readonly DependencyProperty IsFullscreenProperty = DependencyProperty.Register("IsFullscreen", typeof(bool), typeof(PluginContainerView));
88        public bool IsFullscreen
89        {
90            get
91            {
92                return (bool)base.GetValue(IsFullscreenProperty);
93            }
94            set
95            {
96                base.SetValue(IsFullscreenProperty, value);
97            }
98        }
99
100        public static readonly DependencyProperty ViewStateProperty = DependencyProperty.Register("ViewState", typeof(PluginViewState), typeof(PluginContainerView), new FrameworkPropertyMetadata(PluginViewState.Min));
101
102        public PluginViewState ViewState
103        {
104            get 
105            {
106                return (PluginViewState)base.GetValue(ViewStateProperty);
107            }
108            set
109            {
110
111                switch (value)
112                {
113                    case PluginViewState.Presentation:
114                        if (PresentationPanel.Child == null)
115                        {
116                            PluginBase.Width = PluginBase.MinWidth;
117                            PluginBase.Height = PluginBase.MinHeight;
118                            ViewPanel.Visibility = Visibility.Collapsed;
119                            break;
120                        }
121                        PluginBase.Width = Model.Width;
122                        PluginBase.Height = Model.Height;
123                        ViewPanel.Visibility = Visibility.Visible;
124                        break;
125
126                    case PluginViewState.Data:
127                        PluginBase.Width = Model.Width;
128                        PluginBase.Height = Model.Height;
129                        ViewPanel.Visibility = Visibility.Visible;
130                        break;
131                    case PluginViewState.Log:
132                        PluginBase.Width = Model.Width;
133                        PluginBase.Height = Model.Height;
134                        ViewPanel.Visibility = Visibility.Visible;
135                        break;
136                    case PluginViewState.Min:
137                        PluginBase.Width = PluginBase.MinWidth;
138                        PluginBase.Height = PluginBase.MinHeight;
139                        ViewPanel.Visibility = Visibility.Collapsed;
140                        break;
141
142                    case PluginViewState.Setting:
143                        PluginBase.Width = Model.Width;
144                        PluginBase.Height = Model.Height;
145                        ViewPanel.Visibility = Visibility.Visible;
146                        break;
147
148                    case PluginViewState.Description:
149                        PluginBase.Width = Model.Width;
150                        PluginBase.Height = Model.Height;
151                        ViewPanel.Visibility = Visibility.Visible;
152                        break;
153                }
154
155                base.SetValue(ViewStateProperty, value);
156                this.Model.ViewState = value;
157            }
158        }
159
160        private Image icon;
161        public Image Icon
162        {
163            get
164            {
165                return icon;
166            }
167            set
168            {
169                if (value != null && icon != value)
170                {
171                    icon = value;
172                    icon.Stretch = Stretch.Uniform;
173                    icon.Width = 45;
174                    icon.Height = 45;
175                    IconPanel.Child = icon;
176                    icon.VerticalAlignment = System.Windows.VerticalAlignment.Center;
177                }
178            }
179        }
180
181        private List<ConnectorView> connectorViewList;
182        public List<ConnectorView> ConnectorViewList
183        {
184            get { return connectorViewList; }
185            private set { connectorViewList = value; }
186        }
187
188        private PluginModel model;
189        public PluginModel Model
190        {
191            get { return model; }
192            private set { model = value; }
193        }
194
195        public bool CanDrag { get; set; }
196
197        #endregion
198
199        #region Contructors
200        public PluginContainerView()
201        {
202            InitializeComponent();
203        }
204
205        public PluginContainerView(PluginModel model)
206        {
207            InitializeComponent();
208            setBaseControl(model);
209            DataContext = this;
210
211            West.PreviewDrop += new DragEventHandler(Connector_Drop);
212            West.PreviewDragEnter += new DragEventHandler(West_PreviewDragEnter);
213            West.PreviewDragLeave += new DragEventHandler(South_PreviewDragLeave);
214
215            East.PreviewDrop += new DragEventHandler(Connector_Drop);
216            East.PreviewDragEnter += new DragEventHandler(West_PreviewDragEnter);
217            East.PreviewDragLeave += new DragEventHandler(South_PreviewDragLeave);
218
219            North.PreviewDrop += new DragEventHandler(Connector_Drop);
220            North.PreviewDragEnter += new DragEventHandler(West_PreviewDragEnter);
221            North.PreviewDragLeave += new DragEventHandler(South_PreviewDragLeave);
222
223            South.PreviewDrop += new DragEventHandler(Connector_Drop);
224            South.PreviewDragEnter += new DragEventHandler(West_PreviewDragEnter);
225            South.PreviewDragLeave += new DragEventHandler(South_PreviewDragLeave);
226
227            handleStartable();
228
229            LogPanel.Child = new LogPresentation();
230            PresentationPanel.Child = Model.PluginPresentation;
231            TaskPaneCtrl Settings = new TaskPaneCtrl();
232            SettingsPanel.Child = Settings;
233            Settings.DisplayPluginSettings(Model.Plugin, Model.Plugin.GetPluginInfoAttribute().Caption, Cryptool.PluginBase.DisplayPluginMode.Normal);
234
235            foreach (ConnectorModel ConnectorModel in model.InputConnectors)
236            {
237                ConnectorView connector = new ConnectorView(ConnectorModel);
238                AddConnectorView(connector);
239                DataPanel.Children.Add(new DataPresentation(connector));
240            }
241
242            foreach (ConnectorModel ConnectorModel in model.OutputConnectors)
243            {
244                ConnectorView connector = new ConnectorView(ConnectorModel);
245                AddConnectorView(connector);
246                DataPanel.Children.Add(new DataPresentation(connector));
247            }
248            this.ViewState = Model.ViewState;
249        }
250
251        void South_PreviewDragLeave(object sender, DragEventArgs e)
252        {
253            StackPanel sp = sender as StackPanel;
254            sp.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00100000"));
255
256        }
257
258        void West_PreviewDragEnter(object sender, DragEventArgs e)
259        {
260            StackPanel sp = sender as StackPanel;
261            sp.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#55FFFFFF"));
262        }
263
264        private void handleStartable()
265        {
266            if (Model.Startable)
267                play.Visibility = Visibility.Visible;
268            else
269                play.Visibility = Visibility.Collapsed;
270
271            if (model.RepeatStart)
272            {
273                playimg.Source = new BitmapImage(new Uri("../Image/play.png", UriKind.RelativeOrAbsolute));               
274               
275            }
276            else
277            {
278                playimg.Source = new BitmapImage(new Uri("../Image/pause.png", UriKind.RelativeOrAbsolute));             
279            }
280        }
281
282        void Connector_Drop(object sender, DragEventArgs e)
283        {
284            StackPanel panel = sender as StackPanel;
285            try
286            {
287                if (e.Data.GetDataPresent("connector"))
288                {
289                    ConnectorView connector = e.Data.GetData("connector") as ConnectorView;
290                    if (panel.Children.Contains(connector))
291                        return;
292
293                    switch (connector.Orientation)
294                    {
295                        case ConnectorOrientation.West:
296                            this.West.Children.Remove(connector);
297                            break;
298                        case ConnectorOrientation.East:
299                            this.East.Children.Remove(connector);
300                            break;
301                        case ConnectorOrientation.North:
302                            this.North.Children.Remove(connector);
303                            break;
304                        case ConnectorOrientation.South:
305                            this.South.Children.Remove(connector);
306                            break;
307                    }
308
309                    switch (panel.Name)
310                    {
311                        case "West":
312                            connector.Orientation = ConnectorOrientation.West;
313                            this.West.Children.Add(connector);
314                            break;
315                        case "East":
316                            connector.Orientation = ConnectorOrientation.East;
317                            this.East.Children.Add(connector);
318                            break;
319                        case "North":
320                            connector.Orientation = ConnectorOrientation.North;
321                            this.North.Children.Add(connector);
322                            break;
323                        case "South":
324                            connector.Orientation = ConnectorOrientation.South;
325                            this.South.Children.Add(connector);
326                            break;
327                    }
328                }
329            }
330            catch (Exception ex)
331            {
332                Console.Out.WriteLine(ex.ToString());
333            }
334            finally
335            {
336                SetAllConnectorPositionX();
337                panel.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00100000"));
338
339                e.Handled = true;
340            }
341        }
342
343        #endregion
344
345        #region Public Methods
346        public void AddConnectorView(ConnectorView connector)
347        {
348            switch (connector.Orientation)
349            {
350                case ConnectorOrientation.West:
351                    this.West.Children.Add(connector);
352                    break;
353                case ConnectorOrientation.East:
354                    this.East.Children.Add(connector);
355                    break;
356                case ConnectorOrientation.North:
357                    this.North.Children.Add(connector);
358                    break;
359                case ConnectorOrientation.South:
360                    this.South.Children.Add(connector);
361                    break;
362            }
363
364            //connector.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(connector_PreviewMouseLeftButtonDown);
365            connector.MouseUp += new MouseButtonEventHandler(connector_MouseUp);
366            connector.MouseLeave += new MouseEventHandler(connector_MouseLeave);
367            connectorViewList.Add(connector);
368        }
369
370        void connector_MouseUp(object sender, MouseButtonEventArgs e)
371        {
372            ConnectorView connector = (sender as ConnectorView);
373            if (e.ButtonState == MouseButtonState.Released)
374                if (ConnectorMouseLeftButtonDown != null)
375                    ConnectorMouseLeftButtonDown.Invoke(this, new ConnectorViewEventArgs() { connector = connector });
376        }
377
378        void connector_MouseLeave(object sender, MouseEventArgs e)
379        {
380            if (e.LeftButton == MouseButtonState.Pressed)
381            {
382                ConnectorView connector = (sender as ConnectorView);
383                DataObject dragData = new DataObject("connector", connector);
384                DragDrop.DoDragDrop(connector.Parent, dragData, DragDropEffects.Move);
385            }
386        }
387
388
389
390        //public void ResetPopUp()
391        //{
392        //    Random random = new Random();
393        //    BubblePopup.PlacementRectangle = new Rect(new Point(random.NextDouble() / 1000, 0), new Size(0, 0));
394        //    //ProgressPopup.PlacementRectangle = new Rect(new Point(random.NextDouble() / 1000, 0), new Size(0, 0));
395        //}
396
397        public void SetPosition(Point value)
398        {
399            if (value.Y < 0)
400                Canvas.SetTop(this, 0);
401            else
402                Canvas.SetTop(this, value.Y);
403
404            if (value.X < 0)
405                Canvas.SetLeft(this, 0);
406            else
407                Canvas.SetLeft(this, value.X);
408
409            //ResetPopUp();
410            Model.Position = GetPosition();
411            SetAllConnectorPositionX();
412        }
413
414        public Point GetPosition()
415        {
416            return new Point(Canvas.GetLeft(this), Canvas.GetTop(this));
417        }
418
419        #endregion
420
421        #region Private Methods
422
423        private void setBaseControl(PluginModel model)
424        {
425            this.Loaded += new RoutedEventHandler(PluginContainerView_Loaded);
426            this.MouseDoubleClick += new MouseButtonEventHandler(PluginContainerView_MouseDoubleClick);
427            this.Model = model;
428            this.Model.UpdateableView = this;
429            this.Model.LogUpdated += new EventHandler<LogUpdated>(Model_LogUpdated);
430            this.DataContext = Model;
431            this.ConnectorViewList = new List<ConnectorView>();
432            this.RenderTransform = new TranslateTransform();
433            this.Icon = this.Model.getImage();
434        }
435
436        void PluginContainerView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
437        {
438            if (Model.PluginPresentation != null && !IsFullscreen)
439            {
440                ViewState = PluginViewState.Presentation;
441                showFullScreen();
442            }
443            else if(Model.PluginPresentation == null && !IsFullscreen)
444            {
445                ViewState = PluginViewState.Data;
446                showFullScreen();
447            }
448        }
449
450        void Model_LogUpdated(object sender, LogUpdated e)
451        {
452            LogPresentation log = LogPanel.Child as LogPresentation;
453            log.AddLogList(Model.GuiLogEvents);
454        }
455
456        private void SetAllConnectorPositionX()
457        {
458            try
459            {
460                GeneralTransform gTransform, gTransformSec;
461                Point point, relativePoint;
462                double x, y;
463
464                foreach (ConnectorView conn in West.Children)
465                {
466                    gTransform = this.West.TransformToVisual(this);
467                    gTransformSec = conn.TransformToVisual(this.West);
468
469                    point = gTransform.Transform(new Point(0, 0));
470                    relativePoint = gTransformSec.Transform(new Point(0, 0));
471
472                    x = GetPosition().X + point.X + relativePoint.X;
473                    y = GetPosition().Y + point.Y + relativePoint.Y;
474
475                    conn.PositionOnWorkSpaceX = x;
476                    conn.PositionOnWorkSpaceY = y;
477                }
478
479                foreach (ConnectorView conn in East.Children)
480                {
481                    gTransform = this.East.TransformToVisual(this);
482                    gTransformSec = conn.TransformToVisual(this.East);
483
484                    point = gTransform.Transform(new Point(0, 0));
485                    relativePoint = gTransformSec.Transform(new Point(0, 0));
486
487                    x = GetPosition().X + point.X + relativePoint.X;
488                    y = GetPosition().Y + point.Y + relativePoint.Y;
489
490                    conn.PositionOnWorkSpaceX = x;
491                    conn.PositionOnWorkSpaceY = y;
492                }
493
494                foreach (ConnectorView conn in North.Children)
495                {
496                    gTransform = this.North.TransformToVisual(this);
497                    gTransformSec = conn.TransformToVisual(this.North);
498
499                    point = gTransform.Transform(new Point(0, 0));
500                    relativePoint = gTransformSec.Transform(new Point(0, 0));
501
502                    x = GetPosition().X + point.X + relativePoint.X;
503                    y = GetPosition().Y + point.Y + relativePoint.Y;
504
505                    conn.PositionOnWorkSpaceX = x;
506                    conn.PositionOnWorkSpaceY = y;
507                }
508
509                foreach (ConnectorView conn in South.Children)
510                {
511                    gTransform = this.South.TransformToVisual(this);
512                    gTransformSec = conn.TransformToVisual(this.South);
513
514                    point = gTransform.Transform(new Point(0, 0));
515                    relativePoint = gTransformSec.Transform(new Point(0, 0));
516
517                    x = GetPosition().X + point.X + relativePoint.X;
518                    y = GetPosition().Y + point.Y + relativePoint.Y;
519
520                    conn.PositionOnWorkSpaceX = x;
521                    conn.PositionOnWorkSpaceY = y;
522                }
523            }
524            catch (Exception e)
525            {
526                Console.Out.WriteLine(e.ToString());
527            }
528        }
529        #endregion
530
531        #region Controls
532
533        void PluginContainerView_Loaded(object sender, RoutedEventArgs e)
534        {
535            Color clr = ColorHelper.GetColor(this.Model.PluginType);
536            System.Drawing.Color clr2 = System.Windows.Forms.ControlPaint.Dark(System.Drawing.Color.FromArgb(clr.A, clr.R, clr.G, clr.B));
537            clr = Color.FromArgb(clr2.A, clr2.R, clr2.G, clr2.B);
538            BorderGradientStop.Color = clr;
539            BorderGradientStopSecond.Color = clr;
540            clr2 = System.Windows.Forms.ControlPaint.LightLight(System.Windows.Forms.ControlPaint.LightLight(System.Drawing.Color.FromArgb(clr.A, clr.R, clr.G, clr.B)));
541            clr = Color.FromArgb(clr2.A, clr2.R, clr2.G, clr2.B);
542            BG.Background = new SolidColorBrush(clr);
543
544            if (Model.PluginPresentation != null)
545            {
546                optionList.Add(Resources["PresentationButton"] as UIElement);
547                optionList.Add(Resources["DataButton"] as UIElement);
548                optionList.Add(Resources["LogButton"] as UIElement);
549                optionList.Add(Resources["SettingButton"] as UIElement);
550            }
551            else 
552            {
553                optionList.Add(Resources["DataButton"] as UIElement);
554                optionList.Add(Resources["LogButton"] as UIElement);
555                optionList.Add(Resources["SettingButton"] as UIElement);
556            }
557
558            if (model.RepeatStart)
559            {
560                playimg.Source = new BitmapImage(new Uri("../Image/play.png", UriKind.RelativeOrAbsolute));
561            }
562            else
563            {
564                playimg.Source = new BitmapImage(new Uri("../Image/pause.png", UriKind.RelativeOrAbsolute));
565            }
566               
567            reAssambleOptions();
568
569            LogPresentation LogView = LogPanel.Child as LogPresentation;
570            LogView.LogUpdated += new EventHandler<LogUpdated>(LogView_LogUpdated);
571
572            SetAllConnectorPositionX();
573           
574        }
575
576        void LogView_LogUpdated(object sender, LogUpdated e)
577        {
578            //LogPresentation logView = sender as LogPresentation;
579            //ErrorCount.Text = logView.ErrorCount.ToString();
580            //WarningCount.Text = logView.WarningCount.ToString();
581            //DebugCount.Text = logView.DebugCount.ToString();
582            //InfoCount.Text = logView.InfoCount.ToString();
583            //LogReport.Text = e.log.Message;
584            //BubblePopup.IsOpen = true;
585        }
586
587        private int optionModulo(int value)
588        {
589            int x = value % optionList.Count;
590
591            if (x < 0)
592            {
593                x += optionList.Count;
594            }
595
596            return x;
597        }
598
599        private void reAssambleOptions()
600        {
601            SlotOne.Child = null;
602            SlotTwo.Child = null;
603            SlotThree.Child = null;
604            SlotFour.Child = null;
605            SlotFive.Child = null;
606            if (Model.PluginPresentation != null)
607            {
608                SlotOne.Visibility = Visibility.Visible;
609                SlotFive.Visibility = Visibility.Visible;
610
611                SlotOne.Child = null;
612                SlotTwo.Child = null;
613                SlotThree.Child = null;
614                SlotFour.Child = null;
615                SlotFive.Child = null;
616
617                SlotOne.Child = optionList.ElementAt(optionModulo(optionPointer - 2));
618                SlotTwo.Child = optionList.ElementAt(optionModulo(optionPointer - 1));
619                SlotThree.Child = optionList.ElementAt(optionPointer);
620                SlotFour.Child = optionList.ElementAt(optionModulo(optionPointer + 1)); 
621            }
622            else 
623            {
624                //SlotOne.Visibility = Visibility.Collapsed;
625                //SlotFive.Visibility = Visibility.Collapsed;
626
627                SlotOne.Child = null;
628                SlotTwo.Child = null;
629                SlotThree.Child = null;
630                SlotFour.Child = null;
631                SlotFive.Child = null;
632
633                SlotTwo.Child = optionList.ElementAt(optionModulo(optionPointer - 1));
634                SlotThree.Child = optionList.ElementAt(optionPointer);
635                SlotFour.Child = optionList.ElementAt(optionModulo(optionPointer + 1));
636            }
637        }
638
639
640        private void delete()
641        {
642            if (this.Delete != null)
643                this.Delete.Invoke(this, new PluginContainerViewDeleteViewEventArgs { container = this });
644        }
645
646        private void showFullScreen()
647        {
648            if (this.FullScreen != null)
649            {
650                IsFullscreen = true;
651                this.FullScreen.Invoke(this, new PluginContainerViewFullScreenViewEventArgs { container = this });
652            }
653        }
654
655        private void Button_Click_1(object sender, RoutedEventArgs e)
656        {
657           
658        }
659
660        public void PrepareFullscreen()
661        {
662            this.ViewPanelParent.Children.Clear();
663            this.OptPanelParent.Children.Remove(OptionPanel);
664            this.ProgressbarRoot.Children.Clear();
665            this.ProgressPercentageRoot.Children.Clear();
666        }
667
668        public void Reset()
669        {
670            if (this.IsFullscreen)
671            {
672                this.ViewPanelParent.Children.Add(ViewPanel);
673                this.OptPanelParent.Children.Add(OptionPanel);
674                this.ProgressbarRoot.Children.Add(ProgressbarParent);
675                this.ProgressPercentageRoot.Children.Add(ProgressPercentage);
676                this.IsFullscreen = false;
677            }
678        }
679
680        private void Button_Click(object sender, RoutedEventArgs e)
681        {
682            Button bttn = sender as Button;
683            if (bttn.Name == "play")
684            {
685                if (model.RepeatStart)
686                {
687                    model.RepeatStart = false;
688                    playimg.Source = new BitmapImage(new Uri("../Image/pause.png", UriKind.RelativeOrAbsolute));
689                }
690                else
691                {
692                    model.RepeatStart = true;
693                    playimg.Source = new BitmapImage(new Uri("../Image/play.png", UriKind.RelativeOrAbsolute));
694                }
695                return;
696            }
697            if (bttn.Name == "del")
698            {
699                this.delete();
700                return;
701            }
702        }
703
704        private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
705        {
706            Thumb t = sender as Thumb;
707            if (t.Cursor == Cursors.SizeWE)
708            {
709                if ((PluginBase.ActualWidth + e.HorizontalChange) > Model.MinWidth)
710                    PluginBase.Width = PluginBase.ActualWidth + e.HorizontalChange;
711            }
712
713            if (t.Cursor == Cursors.SizeNS)
714            {
715                if ((PluginBase.ActualHeight + e.VerticalChange) > Model.MinHeight)
716                    PluginBase.Height = PluginBase.ActualHeight + e.VerticalChange;
717            }
718
719            if (t.Cursor == Cursors.SizeNWSE)
720            {
721                if ((PluginBase.ActualHeight + e.VerticalChange) > Model.MinHeight)
722                    PluginBase.Height = PluginBase.ActualHeight + e.VerticalChange;
723
724                if ((PluginBase.ActualWidth + e.HorizontalChange) > Model.MinWidth)
725                    PluginBase.Width = PluginBase.ActualWidth + e.HorizontalChange;
726            }
727
728            Model.Height = PluginBase.ActualHeight;
729            Model.Width = PluginBase.ActualWidth;
730           
731     
732        }
733
734        private void MinMaxBorder_MouseLeftButtonDown(object sender, RoutedEventArgs e)
735        {
736            this.SetAllConnectorPositionX();
737        }
738
739        #endregion
740
741        #region IUpdateableView Members
742
743        public void update()
744        {
745            ProgressBar.Value = Model.PercentageFinished;
746
747            if (ViewState == PluginViewState.Data)
748            {
749                foreach (UIElement element in DataPanel.Children)
750                {
751                    DataPresentation data = element as DataPresentation;
752                    data.update();
753                }
754            }
755
756            if (Model.GuiLogEvents.Count != 0)
757            {
758                LogPresentation log = LogPanel.Child as LogPresentation;
759                log.AddLogList(Model.GuiLogEvents);
760            }
761
762            if (model.State == PluginModelState.Warning)
763            {
764                this.Window.Background = new SolidColorBrush(Colors.Yellow);
765            }
766            else if (model.State == PluginModelState.Error)
767            {
768                this.Window.Background = new SolidColorBrush(Colors.Red);
769            }
770            else
771            {
772                //todo: assign old color and appereance
773            }
774
775            //perhaps the icon changed so we have to update it
776            //the property will do nothing if the icon is the same as the old one
777            this.Icon = model.getImage();
778
779        }
780
781        #endregion
782
783        private void OptionClickHandler(object sender, RoutedEventArgs e)
784        {
785            Button button = sender as Button;
786            switch (button.Name)
787            {
788                case "Left":
789                    optionPointer = optionModulo(optionPointer + 1);
790                    OptionCaption.Text = (optionList.ElementAt(optionPointer) as Button).ToolTip as String;
791                    reAssambleOptions();
792                    break;
793
794                case "Right":
795                    optionPointer = optionModulo(optionPointer - 1);;
796                    OptionCaption.Text = (optionList.ElementAt(optionPointer) as Button).ToolTip as String;
797                    reAssambleOptions();
798                    break;
799            }
800            e.Handled = true;
801        }
802
803        private void OptionChooseHandler(object sender, RoutedEventArgs e)
804        {
805            Button button = sender as Button;
806            switch (button.Name)
807            {
808                case "PresentationButton":
809                    if (PresentationPanel.Child == null)
810                    {
811                        ViewState = PluginViewState.Min;
812                        break;
813                    }
814                    ViewState = PluginViewState.Presentation;
815                    break;
816
817                case "DataButton":
818                    ViewState = PluginViewState.Data;
819                    break;
820
821                case "LogButton":
822                    ViewState = PluginViewState.Log;
823                    break;
824
825                case "MinimizeButton":
826                    if(ViewState == PluginViewState.Min)
827                        ViewState = PluginViewState.Log;
828                    else
829                        ViewState = PluginViewState.Min;
830                    break;
831
832                case "SettingButton":
833                    ViewState = PluginViewState.Setting;
834                    break;
835
836                case "MaxButton":
837                    showFullScreen();
838                    break;
839            }
840        }
841
842        private void SettingButton_MouseEnter(object sender, MouseEventArgs e)
843        {
844            Button btn = sender as Button;
845            OptionCaption.Text = btn.ToolTip as String;
846        }
847
848        private void Thumb_DragDelta_1(object sender, DragDeltaEventArgs e)
849        {
850            this.SetPosition(new Point((Math.Round((Canvas.GetLeft(this) + e.HorizontalChange) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale,
851                                                            (Math.Round((Canvas.GetTop(this) + e.VerticalChange) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale));
852            Model.WorkspaceModel.WorkspaceManagerEditor.HasChanges = true;
853        }
854
855    }
856
857    public class ConnectorPanelDropEventArgs : EventArgs
858    { }
859
860    public class PluginContainerViewDeleteViewEventArgs : EventArgs
861    {
862        public PluginContainerView container;
863    }
864
865    public class PluginContainerViewFullScreenViewEventArgs : EventArgs
866    {
867        public PluginContainerView container;
868    }
869}
Note: See TracBrowser for help on using the repository browser.