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

Last change on this file since 1790 was 1790, checked in by kopal, 11 years ago
  • now the initializes() method of a plugin will be called when the workspace is deserialized
  • bug fix of the minimized view of the plugins
File size: 18.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;
19
20namespace WorkspaceManager.View.Container
21{
22
23    /// <summary>
24    /// Interaction logic for PluginContainerView.xaml
25    /// </summary>
26    public partial class PluginContainerView : UserControl, IDraggable, IUpdateableView
27    {
28        #region Events
29        public event EventHandler<ConnectorViewEventArgs> ConnectorMouseLeftButtonDown;
30        public event EventHandler<PluginContainerViewDeleteViewEventArgs> Delete;
31        public event EventHandler<PluginContainerViewSettingsViewEventArgs> ShowSettings;
32        #endregion
33
34        #region Private Variables
35
36        private static double MinHeight;
37        private static double MinWidth;
38
39        #endregion
40
41        #region Properties
42        private Image icon;
43        public Image Icon
44        {
45            get
46            {
47                return icon;
48            }
49            set
50            {
51                icon = value;
52                icon.Stretch = Stretch.Uniform;
53            }
54        }
55
56        private List<ConnectorView> connectorViewList;
57        public List<ConnectorView> ConnectorViewList
58        {
59            get { return connectorViewList; }
60            private set { connectorViewList = value; }
61        }
62
63        private PluginModel model;
64        public PluginModel Model
65        {
66            get { return model; }
67            private set { model = value; }
68        }
69
70        public bool CanDrag { get; set; }
71
72        #endregion
73
74        #region Contructors
75        public PluginContainerView()
76        {
77            InitializeComponent();
78        }
79
80        public PluginContainerView(PluginModel model)
81        {
82            setBaseControl(model);
83            InitializeComponent();
84
85            West.Drop += new DragEventHandler(Connector_Drop);
86            East.Drop += new DragEventHandler(Connector_Drop);
87            North.Drop += new DragEventHandler(Connector_Drop);
88            South.Drop += new DragEventHandler(Connector_Drop);
89
90            foreach (ConnectorModel ConnectorModel in model.InputConnectors)
91            {
92                ConnectorView connector = new ConnectorView(ConnectorModel);
93                AddConnectorView(connector);
94            }
95
96            foreach (ConnectorModel ConnectorModel in model.OutputConnectors)
97            {
98                ConnectorView connector = new ConnectorView(ConnectorModel);
99                AddConnectorView(connector);
100            }
101        }
102
103        void Connector_Drop(object sender, DragEventArgs e)
104        {
105            StackPanel panel = sender as StackPanel;
106            if (e.Data.GetDataPresent("connector"))
107            {
108                ConnectorView connector = e.Data.GetData("connector") as ConnectorView;
109                if (panel.Children.Contains(connector))
110                    return;
111
112                switch (connector.Orientation)
113                {
114                    case ConnectorOrientation.West:
115                        this.West.Children.Remove(connector);
116                        break;
117                    case ConnectorOrientation.East:
118                        this.East.Children.Remove(connector);
119                        break;
120                    case ConnectorOrientation.North:
121                        this.North.Children.Remove(connector);
122                        break;
123                    case ConnectorOrientation.South:
124                        this.South.Children.Remove(connector);
125                        break;
126                }
127
128                switch (panel.Name)
129                {
130                    case "West":
131                        connector.Orientation = ConnectorOrientation.West;
132                        this.West.Children.Add(connector);
133                        break;
134                    case "East":
135                        connector.Orientation = ConnectorOrientation.East;
136                        this.East.Children.Add(connector);
137                        break;
138                    case "North":
139                        connector.Orientation = ConnectorOrientation.North;
140                        this.North.Children.Add(connector);
141                        break;
142                    case "South":
143                        connector.Orientation = ConnectorOrientation.South;
144                        this.South.Children.Add(connector);
145                        break;
146                }
147
148                SetAllConnectorPositionX();
149                e.Handled = true;
150            }
151        }
152
153        #endregion
154
155        #region Public Methods
156        public void AddConnectorView(ConnectorView connector)
157        {
158            switch (connector.Orientation)
159            {
160                case ConnectorOrientation.West:
161                    this.West.Children.Add(connector);
162                    break;
163                case ConnectorOrientation.East:
164                    this.East.Children.Add(connector);
165                    break;
166                case ConnectorOrientation.North:
167                    this.North.Children.Add(connector);
168                    break;
169                case ConnectorOrientation.South:
170                    this.South.Children.Add(connector);
171                    break;
172            }
173
174            connector.OnConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(connector_OnConnectorMouseLeftButtonDown);
175            connectorViewList.Add(connector);
176        }
177
178        public void SetPosition(Point value)
179        {
180            TranslateTransform pos = (this.RenderTransform as TranslateTransform);
181            pos.X = value.X;
182            pos.Y = value.Y;
183            this.Model.Position = new Point(pos.X, pos.Y);
184            this.SetAllConnectorPositionX();
185        }
186
187        public Point GetPosition()
188        {
189            return new Point((this.RenderTransform as TranslateTransform).X, (this.RenderTransform as TranslateTransform).Y);
190        }
191
192        #endregion
193
194        #region Private Methods
195
196        private void setBaseControl(PluginModel model)
197        {
198            this.Loaded += new RoutedEventHandler(PluginContainerView_Loaded);
199            this.MouseEnter += new MouseEventHandler(PluginContainerView_MouseEnter);
200            this.MouseLeave += new MouseEventHandler(PluginContainerView_MouseLeave);
201            this.Model = model;
202            this.Model.UpdateableView = this;
203            this.DataContext = Model;
204            this.ConnectorViewList = new List<ConnectorView>();
205            this.RenderTransform = new TranslateTransform();
206        }
207
208        private void SetAllConnectorPositionX()
209        {
210            try
211            {
212                GeneralTransform gTransform, gTransformSec;
213                Point point, relativePoint;
214                double x, y;
215
216                foreach (ConnectorView conn in West.Children)
217                {
218                    gTransform = this.West.TransformToVisual(this);
219                    gTransformSec = conn.TransformToVisual(this.West);
220
221                    point = gTransform.Transform(new Point(0, 0));
222                    relativePoint = gTransformSec.Transform(new Point(0, 0));
223
224                    x = (RenderTransform as TranslateTransform).X + point.X + relativePoint.X;
225                    y = (RenderTransform as TranslateTransform).Y + point.Y + relativePoint.Y;
226
227                    conn.PositionOnWorkSpaceX = x;
228                    conn.PositionOnWorkSpaceY = y;
229                }
230
231                foreach (ConnectorView conn in East.Children)
232                {
233                    gTransform = this.East.TransformToVisual(this);
234                    gTransformSec = conn.TransformToVisual(this.East);
235
236                    point = gTransform.Transform(new Point(0, 0));
237                    relativePoint = gTransformSec.Transform(new Point(0, 0));
238
239                    x = (RenderTransform as TranslateTransform).X + point.X + relativePoint.X;
240                    y = (RenderTransform as TranslateTransform).Y + point.Y + relativePoint.Y;
241
242                    conn.PositionOnWorkSpaceX = x;
243                    conn.PositionOnWorkSpaceY = y;
244                }
245
246                foreach (ConnectorView conn in North.Children)
247                {
248                    gTransform = this.North.TransformToVisual(this);
249                    gTransformSec = conn.TransformToVisual(this.North);
250
251                    point = gTransform.Transform(new Point(0, 0));
252                    relativePoint = gTransformSec.Transform(new Point(0, 0));
253
254                    x = (RenderTransform as TranslateTransform).X + point.X + relativePoint.X;
255                    y = (RenderTransform as TranslateTransform).Y + point.Y + relativePoint.Y;
256
257                    conn.PositionOnWorkSpaceX = x;
258                    conn.PositionOnWorkSpaceY = y;
259                }
260
261                foreach (ConnectorView conn in South.Children)
262                {
263                    gTransform = this.South.TransformToVisual(this);
264                    gTransformSec = conn.TransformToVisual(this.South);
265
266                    point = gTransform.Transform(new Point(0, 0));
267                    relativePoint = gTransformSec.Transform(new Point(0, 0));
268
269                    x = (RenderTransform as TranslateTransform).X + point.X + relativePoint.X;
270                    y = (RenderTransform as TranslateTransform).Y + point.Y + relativePoint.Y;
271
272                    conn.PositionOnWorkSpaceX = x;
273                    conn.PositionOnWorkSpaceY = y;
274                }
275            }
276            catch (Exception e)
277            {
278                Console.Out.WriteLine(e.ToString());
279            }
280        }
281        #endregion
282
283        #region Controls
284
285        void PluginContainerView_Loaded(object sender, RoutedEventArgs e)
286        {
287           
288            MinHeight = this.PluginBase.MinHeight;
289            MinWidth = this.PluginBase.MinWidth;
290            this.BorderGradientStop.Color = ColorHelper.GetColor(this.Model.PluginType);
291            this.BorderGradientStopSecond.Color = Color.FromArgb(100, this.BorderGradientStop.Color.R, this.BorderGradientStop.Color.G, this.BorderGradientStop.Color.B);
292            this.Icon = this.Model.getImage();
293            this.Icon.Width = 40;
294            this.Icon.Height = 40;
295
296            if (this.Model.Minimized == true)
297            {
298                this.PresentationPanel.Child = this.Icon;
299                this.Model.Minimized = true;
300            }
301            else
302            {
303                this.PluginBase.MinHeight = model.MinHeight;
304                this.PluginBase.MinWidth = model.MinWidth;
305                this.PluginBase.Width = model.MinWidth;
306                this.PluginBase.Height = model.MinHeight;
307                this.BottomDelta.IsEnabled = true;
308                this.RightDelta.IsEnabled = true;
309                this.BottomRightDelta.IsEnabled = true;
310                this.PresentationPanel.Child = model.PluginPresentation;
311                this.Model.Minimized = false;
312                this.MinMaxImage.Source = new BitmapImage(new Uri("/WorkspaceManager;component/View/Image/Min.png", UriKind.RelativeOrAbsolute));
313            }
314            SetAllConnectorPositionX();
315           
316        }
317
318        void connector_OnConnectorMouseLeftButtonDown(object sender, ConnectorViewEventArgs e)
319        {
320            DataObject dragData = new DataObject("connector", e.connector);
321            DragDrop.DoDragDrop(e.connector.Parent, dragData, DragDropEffects.Move);
322
323            if (this.ConnectorMouseLeftButtonDown != null)
324                this.ConnectorMouseLeftButtonDown.Invoke(this, e);
325        }
326
327        private void delete()
328        {
329            if (this.Delete != null)
330                this.Delete.Invoke(this, new PluginContainerViewDeleteViewEventArgs { container = this });
331        }
332
333        private void showSettings()
334        {
335            if (this.ShowSettings != null)
336                this.ShowSettings.Invoke(this, new PluginContainerViewSettingsViewEventArgs { container = this });
337        }
338
339        private void Button_Click_1(object sender, RoutedEventArgs e)
340        {
341            this.showSettings();
342        }
343
344        private void Button_Click(object sender, RoutedEventArgs e)
345        {
346            this.delete();
347        }
348
349        void PluginContainerView_MouseLeave(object sender, MouseEventArgs e)
350        {
351            (Resources["FadeIn"] as Storyboard).Stop(ControlPanel);
352            ControlPanel.BeginStoryboard(Resources["FadeOut"] as Storyboard);
353        }
354
355        void PluginContainerView_MouseEnter(object sender, MouseEventArgs e)
356        {
357            (Resources["FadeOut"] as Storyboard).Stop(ControlPanel);
358            ControlPanel.BeginStoryboard(Resources["FadeIn"] as Storyboard);
359        }
360
361        private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
362        {
363            Thumb t = sender as Thumb;
364            if (t.Cursor == Cursors.SizeWE)
365            {
366                if ((PluginBase.ActualWidth + e.HorizontalChange) > 0)
367                    PluginBase.Width = PluginBase.ActualWidth + e.HorizontalChange;
368            }
369
370            if (t.Cursor == Cursors.SizeNS)
371            {
372                if ((PluginBase.ActualHeight + e.VerticalChange) > 0)
373                    PluginBase.Height = PluginBase.ActualHeight + e.VerticalChange;
374            }
375
376            if (t.Cursor == Cursors.SizeNWSE)
377            {
378                if ((PluginBase.ActualHeight + e.VerticalChange) > 0)
379                    PluginBase.Height = PluginBase.ActualHeight + e.VerticalChange;
380
381                if ((PluginBase.ActualWidth + e.HorizontalChange) > 0)
382                    PluginBase.Width = PluginBase.ActualWidth + e.HorizontalChange;
383            }
384        }
385
386        private void MinMaxBorder_MouseLeftButtonDown(object sender, RoutedEventArgs e)
387        {
388            if (model.Minimized == true)
389            {
390                PluginBase.MinHeight = model.MinHeight;
391                PluginBase.MinWidth = model.MinWidth;
392                PluginBase.Width = model.MinWidth;
393                PluginBase.Height = model.MinHeight;
394                BottomDelta.IsEnabled = true;
395                RightDelta.IsEnabled = true;
396                BottomRightDelta.IsEnabled = true;
397                PresentationPanel.Child = model.PluginPresentation;               
398                model.Minimized = false;
399                MinMaxImage.Source = new BitmapImage(new Uri("/WorkspaceManager;component/View/Image/Min.png", UriKind.RelativeOrAbsolute));
400            }
401            else
402            {
403                PluginBase.MinHeight = MinHeight;
404                PluginBase.MinWidth = MinWidth;
405                PluginBase.Width = MinWidth;
406                PluginBase.Height = MinHeight;
407                BottomDelta.IsEnabled = false;
408                RightDelta.IsEnabled = false;
409                BottomRightDelta.IsEnabled = false;
410                PresentationPanel.Child = this.Icon;
411                model.Minimized = true;
412                MinMaxImage.Source = new BitmapImage(new Uri("/WorkspaceManager;component/View/Image/Max.png", UriKind.RelativeOrAbsolute));
413            }
414
415            //foreach (ConnectorView connector in connectorViewList)
416            //{
417            //    this.DataPresentationPanel.Children.Add(new DataPresentation(connector));
418            //}
419
420            this.SetAllConnectorPositionX();
421        }
422
423        private void ShowAllButton_Click(object sender, RoutedEventArgs e)
424        {
425            if (ShowAllData.Opacity == 0)
426            {
427                ShowAllData.BeginStoryboard(Resources["Appear"] as Storyboard);
428             
429                return;
430            }
431
432            if (ShowAllData.Opacity == 1)
433            {
434                ShowAllData.BeginStoryboard(Resources["Disappear"] as Storyboard);
435               
436                return;
437            }
438        }
439        #endregion
440
441        #region IUpdateableView Members
442
443        public void update()
444        {
445            //Color the view corresponding to warning or error state
446            if (model.State == PluginModelState.Warning)
447            {
448                this.Window.Background = new SolidColorBrush(Colors.Yellow);
449            }
450            else if (model.State == PluginModelState.Error)
451            {
452                this.Window.Background = new SolidColorBrush(Colors.Red);
453            }
454            else
455            {
456                //todo: assign old color and appereance
457            }
458           
459            if (this.Model.Minimized == null || this.Model.Minimized == true)
460            {
461                this.PresentationPanel.Child = this.Icon;
462            }
463        }
464
465        #endregion
466
467
468        private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
469        {
470            if (DockBG.Visibility == Visibility.Collapsed)
471            {
472                MinWidth += DockBG.ActualWidth;
473                MinHeight += 150;
474                DockBG.Width = 150;
475                DockBG.Visibility = Visibility.Visible;
476                PluginBase.Height += 200;
477                PluginBase.Width += 150;
478            }
479            else if (DockBG.Visibility == Visibility.Visible)
480            {
481                MinWidth -= DockBG.ActualWidth;
482                MinHeight -= DockBG.ActualHeight;
483                DockBG.Width = 0;
484                DockBG.Visibility = Visibility.Collapsed;
485                PluginBase.Height -= 200;
486                PluginBase.Width -= 150;
487            }
488
489        }
490    }
491
492    public class PluginContainerViewDeleteViewEventArgs : EventArgs
493    {
494        public PluginContainerView container;
495    }
496
497    public class PluginContainerViewSettingsViewEventArgs : EventArgs
498    {
499        public PluginContainerView container;
500    }
501}
Note: See TracBrowser for help on using the repository browser.