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

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

-added configuration into PluginContainerView (experimental)
-several style changes

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