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

Last change on this file since 1728 was 1728, checked in by matkovic, 12 years ago

-added Animations
-added loupe image

File size: 13.5 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows;
6using System.Windows.Controls;
7using System.Windows.Data;
8using System.Windows.Documents;
9using System.Windows.Input;
10using System.Windows.Media;
11using System.Windows.Media.Imaging;
12using System.Windows.Navigation;
13using System.Windows.Shapes;
14using WorkspaceManager.View.Interface;
15using WorkspaceManager.Model;
16using WorkspaceManager.View.VisualComponents;
17using System.Windows.Controls.Primitives;
18using System.Windows.Media.Animation;
19
20namespace WorkspaceManager.View.Container
21{
22    /// <summary>
23    /// Interaction logic for PluginContainerView.xaml
24    /// </summary>
25    public partial class PluginContainerView : UserControl, IDraggable, IUpdateableView
26    {
27        #region Events
28        public event EventHandler<ConnectorViewEventArgs> ConnectorMouseLeftButtonDown;
29        public event EventHandler<PluginContainerViewDeleteViewEventArgs> Delete;
30        public event EventHandler<PluginContainerViewSettingsViewEventArgs> ShowSettings;
31        #endregion
32
33        #region Private Variables
34
35        private static double MinHeight;
36        private static double MinWidth;
37        private bool p;
38        #endregion
39
40        #region Properties
41        private Image icon;
42        public Image Icon
43        {
44            get
45            {
46                return icon;
47            }
48            set
49            {
50                icon = value;
51                icon.Stretch = Stretch.Uniform;
52            }
53        }
54
55        private List<ConnectorView> connectorViewList;
56        public List<ConnectorView> ConnectorViewList
57        {
58            get { return connectorViewList; }
59            private set { connectorViewList = value; }
60        }
61
62        private PluginModel model;
63        public PluginModel Model
64        {
65            get { return model; }
66            private set { model = value; }
67        }
68
69        public bool CanDrag { get; set; }
70
71        #endregion
72
73        #region Contructors
74        public PluginContainerView()
75        {
76            InitializeComponent();
77        }
78
79        public PluginContainerView(PluginModel model)
80        {
81            setBaseControl(model);
82            InitializeComponent();
83        }
84        #endregion
85
86        #region Public Methods
87        public void AddInputConnectorView(ConnectorView connector)
88        {
89            connector.OnConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(connector_OnConnectorMouseLeftButtonDown);
90            this.ConnectorViewList.Add(connector);
91            this.DataPresentationPanel.Children.Add(new DataPresentation(connector));
92            this.InputConnectorPanel.Children.Add(connector);
93            this.SetAllConnectorPositionX();
94        }
95
96
97        public void AddOutputConnectorView(ConnectorView connector)
98        {
99            connector.OnConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(connector_OnConnectorMouseLeftButtonDown);
100            this.ConnectorViewList.Add(connector);
101            this.DataPresentationPanel.Children.Add(new DataPresentation(connector));
102            this.OutputConnectorPanel.Children.Add(connector);
103            this.SetAllConnectorPositionX();
104        }
105
106        public void SetPosition(Point value)
107        {
108            TranslateTransform pos = (this.RenderTransform as TranslateTransform);
109            pos.X = value.X;
110            pos.Y = value.Y;
111            this.Model.Position = new Point(pos.X, pos.Y);
112            this.SetAllConnectorPositionX();
113        }
114
115        public Point GetPosition()
116        {
117            return new Point((this.RenderTransform as TranslateTransform).X, (this.RenderTransform as TranslateTransform).Y);
118        }
119
120        #endregion
121
122        #region Private Methods
123
124        private void setBaseControl(PluginModel model)
125        {
126            this.Loaded += new RoutedEventHandler(PluginContainerView_Loaded);
127            this.MouseEnter += new MouseEventHandler(PluginContainerView_MouseEnter);
128            this.MouseLeave += new MouseEventHandler(PluginContainerView_MouseLeave);
129            this.Model = model;
130            this.Model.UpdateableView = this;
131            this.DataContext = Model;
132            this.ConnectorViewList = new List<ConnectorView>();
133            this.RenderTransform = new TranslateTransform();
134        }
135
136        private void SetAllConnectorPositionX()
137        {
138            GeneralTransform gTransform, gTransformSec;
139            Point point, relativePoint;
140            double x, y;
141
142            foreach (ConnectorView conn in InputConnectorPanel.Children)
143            {
144                gTransform = this.InputConnectorPanel.TransformToVisual(this);
145                gTransformSec = conn.TransformToVisual(this.InputConnectorPanel);
146
147                point = gTransform.Transform(new Point(0, 0));
148                relativePoint = gTransformSec.Transform(new Point(0, 0));
149
150                x = (RenderTransform as TranslateTransform).X + point.X + relativePoint.X;
151                y = (RenderTransform as TranslateTransform).Y + point.Y + relativePoint.Y;
152
153                conn.PositionOnWorkSpaceX = x;
154                conn.PositionOnWorkSpaceY = y;
155            }
156
157            foreach (ConnectorView conn in OutputConnectorPanel.Children)
158            {
159                gTransform = this.OutputConnectorPanel.TransformToVisual(this);
160                gTransformSec = conn.TransformToVisual(this.OutputConnectorPanel);
161
162                point = gTransform.Transform(new Point(0, 0));
163                relativePoint = gTransformSec.Transform(new Point(0, 0));
164
165                x = (RenderTransform as TranslateTransform).X + point.X + relativePoint.X;
166                y = (RenderTransform as TranslateTransform).Y + point.Y + relativePoint.Y;
167
168                conn.PositionOnWorkSpaceX = x;
169                conn.PositionOnWorkSpaceY = y;
170            }
171        }
172        #endregion
173
174        #region Controls
175
176        void PluginContainerView_Loaded(object sender, RoutedEventArgs e)
177        {
178            MinHeight = this.PluginBase.MinHeight;
179            MinWidth = this.PluginBase.MinWidth;
180            this.BorderGradientStop.Color = ColorHelper.GetColor(this.Model.PluginType);
181            this.BorderGradientStopSecond.Color = Color.FromArgb(100, this.BorderGradientStop.Color.R, this.BorderGradientStop.Color.G, this.BorderGradientStop.Color.B);
182
183            if (this.Model.Minimized == null || this.Model.Minimized == true)
184            {
185                this.Icon = this.Model.getImage();
186                this.PresentationPanel.Child = this.Icon;
187                this.Model.Minimized = true;
188            }
189            else if (this.Model.Minimized == false)
190            {
191                this.PluginBase.MinHeight = model.MinHeight;
192                this.PluginBase.MinWidth = model.MinWidth;
193                this.PluginBase.Width = model.MinWidth;
194                this.PluginBase.Height = model.MinHeight;
195                this.BottomDelta.IsEnabled = true;
196                this.RightDelta.IsEnabled = true;
197                this.BottomRightDelta.IsEnabled = true;
198                this.PresentationPanel.Child = model.PluginPresentation;
199                this.Model.Minimized = false;
200                this.MinMaxImage.Source = new BitmapImage(new Uri("/WorkspaceManager;component/View/Image/Min.png", UriKind.RelativeOrAbsolute));
201            }
202
203            foreach (ConnectorModel ConnectorModel in model.InputConnectors)
204            {
205                AddInputConnectorView(new ConnectorView(ConnectorModel));
206            }
207
208            foreach (ConnectorModel ConnectorModel in model.OutputConnectors)
209            {
210                AddOutputConnectorView(new ConnectorView(ConnectorModel));
211            }
212        }
213
214        void connector_OnConnectorMouseLeftButtonDown(object sender, ConnectorViewEventArgs e)
215        {
216            if (this.ConnectorMouseLeftButtonDown != null)
217            {
218                this.ConnectorMouseLeftButtonDown.Invoke(this, e);
219            }
220        }
221
222        private void delete()
223        {
224            if (this.Delete != null)
225            {
226                this.Delete.Invoke(this, new PluginContainerViewDeleteViewEventArgs { container = this });
227            }
228        }
229
230        private void showSettings()
231        {
232            if (this.ShowSettings != null)
233            {
234                this.ShowSettings.Invoke(this, new PluginContainerViewSettingsViewEventArgs { container = this });
235            }
236        }
237
238        private void Button_Click_1(object sender, RoutedEventArgs e)
239        {
240            this.showSettings();
241        }
242
243        private void Button_Click(object sender, RoutedEventArgs e)
244        {
245            this.delete();
246        }
247
248        void PluginContainerView_MouseLeave(object sender, MouseEventArgs e)
249        {
250            (Resources["FadeIn"] as Storyboard).Stop(ControlPanel);
251            ControlPanel.BeginStoryboard(Resources["FadeOut"] as Storyboard);
252        }
253
254        void PluginContainerView_MouseEnter(object sender, MouseEventArgs e)
255        {
256            (Resources["FadeOut"] as Storyboard).Stop(ControlPanel);
257            ControlPanel.BeginStoryboard(Resources["FadeIn"] as Storyboard);
258        }
259
260        private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
261        {
262            Thumb t = sender as Thumb;
263            if (t.Cursor == Cursors.SizeWE)
264            {
265                if ((PluginBase.ActualWidth + e.HorizontalChange) > 0)
266                    PluginBase.Width = PluginBase.ActualWidth + e.HorizontalChange;
267            }
268
269            if (t.Cursor == Cursors.SizeNS)
270            {
271                if ((PluginBase.ActualHeight + e.VerticalChange) > 0)
272                    PluginBase.Height = PluginBase.ActualHeight + e.VerticalChange;
273            }
274
275            if (t.Cursor == Cursors.SizeNWSE)
276            {
277                if ((PluginBase.ActualHeight + e.VerticalChange) > 0)
278                    PluginBase.Height = PluginBase.ActualHeight + e.VerticalChange;
279
280                if ((PluginBase.ActualWidth + e.HorizontalChange) > 0)
281                    PluginBase.Width = PluginBase.ActualWidth + e.HorizontalChange;
282            }
283        }
284
285        private void MinMaxBorder_MouseLeftButtonDown(object sender, RoutedEventArgs e)
286        {
287            if (model.PluginPresentation != null && PresentationPanel.Child is Image)
288            {
289                PluginBase.MinHeight = model.MinHeight;
290                PluginBase.MinWidth = model.MinWidth;
291                PluginBase.Width = model.MinWidth;
292                PluginBase.Height = model.MinHeight;
293                BottomDelta.IsEnabled = true;
294                RightDelta.IsEnabled = true;
295                BottomRightDelta.IsEnabled = true;
296                PresentationPanel.Child = model.PluginPresentation;
297                model.Minimized = false;
298                MinMaxImage.Source = new BitmapImage(new Uri("/WorkspaceManager;component/View/Image/Min.png", UriKind.RelativeOrAbsolute));
299                return;
300            }
301
302            if (PresentationPanel.Child is UserControl)
303            {
304                PluginBase.MinHeight = MinHeight;
305                PluginBase.MinWidth = MinWidth;
306                PluginBase.Width = MinWidth;
307                PluginBase.Height = MinHeight;
308                BottomDelta.IsEnabled = false;
309                RightDelta.IsEnabled = false;
310                BottomRightDelta.IsEnabled = false;
311                PresentationPanel.Child = this.Icon;
312                MinMaxImage.Source = new BitmapImage(new Uri("/WorkspaceManager;component/View/Image/Max.png", UriKind.RelativeOrAbsolute));
313                return;
314            }
315        }
316
317        private void ShowAllButton_Click(object sender, RoutedEventArgs e)
318        {
319            if (ShowAllData.Opacity == 0)
320            {
321                ShowAllData.BeginStoryboard(Resources["Appear"] as Storyboard);
322             
323                return;
324            }
325
326            if (ShowAllData.Opacity == 1)
327            {
328                ShowAllData.BeginStoryboard(Resources["Disappear"] as Storyboard);
329               
330                return;
331            }
332        }
333        #endregion
334
335        #region IUpdateableView Members
336
337        public void update()
338        {
339            //Color the view corresponding to warning or error state
340            if (model.State == PluginModelState.Warning)
341            {
342                this.Window.Background = new SolidColorBrush(Colors.Yellow);
343            }
344            else if (model.State == PluginModelState.Error)
345            {
346                this.Window.Background = new SolidColorBrush(Colors.Red);
347            }
348            else
349            {
350                //todo: assign old color and appereance
351            }
352           
353            if (this.Model.Minimized == null || this.Model.Minimized == true)
354            {
355                this.Icon = model.getImage();
356                this.PresentationPanel.Child = this.Icon;
357            }
358        }
359
360        #endregion
361
362
363        internal void LoadConnection()
364        {
365            throw new NotImplementedException();
366        }
367    }
368
369    public class PluginContainerViewDeleteViewEventArgs : EventArgs
370    {
371        public PluginContainerView container;
372    }
373
374    public class PluginContainerViewSettingsViewEventArgs : EventArgs
375    {
376        public PluginContainerView container;
377    }
378}
Note: See TracBrowser for help on using the repository browser.