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

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

-Style changes

File size: 11.0 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;
18
19namespace WorkspaceManager.View.Container
20{
21    /// <summary>
22    /// Interaction logic for PluginContainerView.xaml
23    /// </summary>
24    public partial class PluginContainerView : UserControl, IDraggable, IUpdateableView
25    {
26        public event EventHandler<ConnectorViewEventArgs> OnConnectorMouseLeftButtonDown;
27        public event EventHandler<PluginContainerViewDeleteViewEventArgs> Delete;
28        public event EventHandler<PluginContainerViewSettingsViewEventArgs> ShowSettings;
29
30        private static double MinHeightBackup;
31        private static double MinWidthBackup;
32
33        private Image icon;
34        public Image Icon
35        {
36            get
37            {
38                return icon;
39            }
40            set
41            {
42                icon = value;
43                icon.Stretch = Stretch.Uniform;
44            }
45        }
46
47        private List<ConnectorView> connectorViewList;
48        public List<ConnectorView> ConnectorViewList
49        {
50            get { return connectorViewList; }
51            private set { connectorViewList = value; }
52        }
53        private PluginModel model;
54        public PluginModel Model
55        {
56            get { return model; }
57            private set { model = value; }
58        }
59
60        public bool CanDrag { get; set; }
61
62        public PluginContainerView()
63        {
64            this.Loaded += new RoutedEventHandler(PluginContainerView_Loaded);
65            this.RenderTransform = new TranslateTransform();
66            InitializeComponent();
67        }
68
69        public PluginContainerView(PluginModel model)
70        {
71            this.Loaded += new RoutedEventHandler(PluginContainerView_Loaded);
72            this.MouseEnter += new MouseEventHandler(PluginContainerView_MouseEnter);
73            this.MouseLeave += new MouseEventHandler(PluginContainerView_MouseLeave);
74            InitializeComponent();
75            MinHeightBackup = this.MinHeight;
76            MinWidthBackup = this.MinWidth;
77            this.ConnectorViewList = new List<ConnectorView>();
78            this.RenderTransform = new TranslateTransform();
79            this.model = model;
80            this.model.UpdateableView = this;
81            this.BorderGradientStop.Color = ColorHelper.GetColor(model.PluginType);
82            this.BorderGradientStopSecond.Color = Color.FromArgb(100, this.BorderGradientStop.Color.R, this.BorderGradientStop.Color.G, this.BorderGradientStop.Color.B);
83            this.Icon = model.getImage();
84            this.PresentationPanel.Child = this.Icon;
85           
86        }
87
88        void PluginContainerView_MouseLeave(object sender, MouseEventArgs e)
89        {
90            ControlPanel.Visibility = Visibility.Hidden;
91        }
92
93        void PluginContainerView_MouseEnter(object sender, MouseEventArgs e)
94        {
95            ControlPanel.Visibility = Visibility.Visible;
96        }
97
98        void PluginContainerView_Loaded(object sender, RoutedEventArgs e)
99        {
100
101            PresentationPanel.Child = Icon;
102            //PluginName.Content = model.PluginType.Name.ToString();
103
104            foreach (ConnectorModel Model in model.InputConnectors)
105            {
106                AddInputConnectorView(new ConnectorView(Model));
107            }
108
109            foreach (ConnectorModel Model in model.OutputConnectors)
110            {
111                AddOutputConnectorView(new ConnectorView(Model));
112            }
113        }
114
115        public void AddInputConnectorView(ConnectorView connector)
116        {
117            connector.OnConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(connector_OnConnectorMouseLeftButtonDown);
118            this.ConnectorViewList.Add(connector);
119            this.InputConnectorPanel.Children.Add(connector);
120            this.SetAllConnectorPositionX();
121        }
122
123
124        public void AddOutputConnectorView(ConnectorView connector)
125        {
126            connector.OnConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(connector_OnConnectorMouseLeftButtonDown);
127            this.ConnectorViewList.Add(connector);
128            this.OutputConnectorPanel.Children.Add(connector);
129            this.SetAllConnectorPositionX();
130        }
131
132        public void SetPosition(Point value)
133        {
134            (this.RenderTransform as TranslateTransform).X = value.X;
135            (this.RenderTransform as TranslateTransform).Y = value.Y;
136            this.SetAllConnectorPositionX();
137        }
138
139        private void SetAllConnectorPositionX()
140        {
141            GeneralTransform gTransform, gTransformSec;
142            Point point, relativePoint;
143            double x, y;
144
145            foreach (ConnectorView conn in InputConnectorPanel.Children)
146            {
147                gTransform = this.InputConnectorPanel.TransformToVisual(this);
148                gTransformSec = conn.TransformToVisual(this.InputConnectorPanel);
149
150                point = gTransform.Transform(new Point(0, 0));
151                relativePoint = gTransformSec.Transform(new Point(0, 0));
152
153                x = (RenderTransform as TranslateTransform).X + point.X + relativePoint.X;
154                y = (RenderTransform as TranslateTransform).Y + point.Y + relativePoint.Y;
155
156                conn.PositionOnWorkSpaceX = x;
157                conn.PositionOnWorkSpaceY = y;
158            }
159
160            foreach (ConnectorView conn in OutputConnectorPanel.Children)
161            {
162                gTransform = this.OutputConnectorPanel.TransformToVisual(this);
163                gTransformSec = conn.TransformToVisual(this.OutputConnectorPanel);
164
165                point = gTransform.Transform(new Point(0, 0));
166                relativePoint = gTransformSec.Transform(new Point(0, 0));
167
168                x = (RenderTransform as TranslateTransform).X + point.X + relativePoint.X;
169                y = (RenderTransform as TranslateTransform).Y + point.Y + relativePoint.Y;
170
171                conn.PositionOnWorkSpaceX = x;
172                conn.PositionOnWorkSpaceY = y;
173            }
174
175        }
176
177        public Point GetPosition()
178        {
179            return new Point((this.RenderTransform as TranslateTransform).X, (this.RenderTransform as TranslateTransform).Y);
180        }
181
182        #region Controls
183
184        void connector_OnConnectorMouseLeftButtonDown(object sender, ConnectorViewEventArgs e)
185        {
186            if (this.OnConnectorMouseLeftButtonDown != null)
187            {
188                this.OnConnectorMouseLeftButtonDown.Invoke(this, e);
189            }
190        }
191
192        #endregion
193
194        private void delete()
195        {
196            if (this.Delete != null)
197            {
198                this.Delete.Invoke(this, new PluginContainerViewDeleteViewEventArgs { container = this });
199            }
200        }
201
202        private void showSettings()
203        {
204            if (this.ShowSettings != null)
205            {
206                this.ShowSettings.Invoke(this, new PluginContainerViewSettingsViewEventArgs { container = this });
207            }
208        }
209
210        private void Button_Click_1(object sender, RoutedEventArgs e)
211        {
212            this.showSettings();
213        }
214
215        private void Button_Click(object sender, RoutedEventArgs e)
216        {
217            this.delete();
218        }
219
220        #region IUpdateableView Members
221
222        public void update()
223        {
224            //Color the view corresponding to warning or error state
225            if (model.State == PluginModelState.Warning)
226            {
227                this.Window.Background = new SolidColorBrush(Colors.Yellow);
228            }
229            else if (model.State == PluginModelState.Error)
230            {
231                this.Window.Background = new SolidColorBrush(Colors.Red);
232            }
233            else
234            {
235                //todo: assign old color and appereance
236            }
237
238            //(ProgressBarPanel.Children[0] as CircularProgressBar).Percentage = model.PercentageFinished;
239            ProgressBarInit.Value = model.PercentageFinished;
240            Icon = model.getImage();
241        }
242
243        #endregion
244
245        private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
246        {
247            Thumb t = sender as Thumb;
248
249            if (t.Cursor == Cursors.SizeWE)
250            {
251                if((this.ActualWidth + e.HorizontalChange) > 0)
252                    this.Width = this.ActualWidth + e.HorizontalChange;
253            }
254
255            if (t.Cursor == Cursors.SizeNS)
256            {
257                if((this.ActualHeight + e.VerticalChange) > 0)
258                    this.Height = this.ActualHeight + e.VerticalChange;
259            }
260
261            if (t.Cursor == Cursors.SizeNWSE)
262            {
263                if ((this.ActualHeight + e.VerticalChange) > 0)
264                    this.Height = this.ActualHeight + e.VerticalChange;
265
266                if ((this.ActualWidth + e.HorizontalChange) > 0)
267                    this.Width = this.ActualWidth + e.HorizontalChange;
268            }
269        }
270
271        private void MinMaxBorder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
272        {
273            if (model.PluginPresentation != null && PresentationPanel.Child is Image)
274            {
275                MinMaxBorder.BorderThickness = new Thickness(3);
276                this.MinHeight = model.MinHeight;
277                this.MinWidth = model.MinWidth;
278                this.Width = model.MinWidth;
279                this.Height = model.MinHeight;
280                BottomDelta.IsEnabled = true;
281                RightDelta.IsEnabled = true;
282                BottomRightDelta.IsEnabled = true;
283                PresentationPanel.Child = model.PluginPresentation;
284                return;
285            }
286
287            if (PresentationPanel.Child is UserControl)
288            {
289                MinMaxBorder.BorderThickness = new Thickness(1.7);
290                this.MinHeight = MinWidthBackup;
291                this.MinWidth = MinWidthBackup;
292                this.Width = MinWidthBackup;
293                this.Height = MinWidthBackup;
294                BottomDelta.IsEnabled = false;
295                RightDelta.IsEnabled = false;
296                BottomRightDelta.IsEnabled = false;
297                PresentationPanel.Child = this.Icon;
298                return;
299            }
300        }
301
302    }
303
304    public class PluginContainerViewDeleteViewEventArgs : EventArgs
305    {
306        public PluginContainerView container;
307    }
308
309    public class PluginContainerViewSettingsViewEventArgs : EventArgs
310    {
311        public PluginContainerView container;
312    }
313}
Note: See TracBrowser for help on using the repository browser.