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

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

-ProgresBar added
-few updates added
-Orthogonal PolyLines added(experimental)

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