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

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

-fixed a Line issue
-Path finding only at "Mouse-Drop"

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