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