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

Last change on this file since 1684 was 1684, checked in by kopal, 12 years ago
  • error messages or warning messages now lead to coloring of the plugins view (currently color stays then) - plugins with error messages will not be executed again in the current run of the chain
  • a plugin now will be executed if all mandatory connectors are set (regardless if other connectors have data)
  • corrected calls of plugin methods (Execute, PreExecution...) according to state diagram of https://www.cryptool.org/trac/CrypTool2/wiki/IPluginHints
  • bug fix in view: PluginContainerView now does not flash between icon and Presentation if it is resized
File size: 10.2 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            //Color the view corresponding to warning or error state
214            if (model.State == PluginModelState.Warning)
215            {
216                this.Window.Background = new SolidColorBrush(Colors.Yellow);
217            }
218            else if (model.State == PluginModelState.Error)
219            {
220                this.Window.Background = new SolidColorBrush(Colors.Red);
221            }
222            else
223            {
224                //todo: assign old color and appereance
225            }
226
227            ProgressBar.Value = model.PercentageFinished;
228            if (model.PluginPresentation == null)
229            {
230                PresentationPanel.Children.Remove(img);
231                img = model.getImage();
232                img.Stretch = Stretch.Uniform;
233                PresentationPanel.Children.Add(img);
234            }
235        }
236
237        #endregion
238
239        private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
240        {
241            Thumb t = sender as Thumb;
242
243            if (t.Cursor == Cursors.SizeWE)
244            {
245                if((this.ActualWidth + e.HorizontalChange) > 0)
246                    this.Width = this.ActualWidth + e.HorizontalChange;
247            }
248
249            if (t.Cursor == Cursors.SizeNS)
250            {
251                if((this.ActualHeight + e.VerticalChange) > 0)
252                    this.Height = this.ActualHeight + e.VerticalChange;
253            }
254
255            if (t.Cursor == Cursors.SizeNWSE)
256            {
257                if ((this.ActualHeight + e.VerticalChange) > 0)
258                    this.Height = this.ActualHeight + e.VerticalChange;
259
260                if ((this.ActualWidth + e.HorizontalChange) > 0)
261                    this.Width = this.ActualWidth + e.HorizontalChange;
262            }
263
264            if ((ActualWidth > MinWidth || ActualHeight > MinHeight) && (model.PluginPresentation != null && !PresentationPanel.Children.Contains(model.PluginPresentation)))
265            {
266                PresentationPanel.Children.Clear();
267                PresentationPanel.Children.Add(model.PluginPresentation);
268            }
269            else if(!PresentationPanel.Children.Contains(model.PluginPresentation))
270            {
271                PresentationPanel.Children.Clear();
272                img = model.getImage();
273                img.Stretch = Stretch.Uniform;
274                PresentationPanel.Children.Add(img);
275            }
276        }
277
278    }
279
280    public class PluginContainerViewDeleteViewEventArgs : EventArgs
281    {
282        public PluginContainerView container;
283    }
284
285    public class PluginContainerViewSettingsViewEventArgs : EventArgs
286    {
287        public PluginContainerView container;
288    }
289}
Note: See TracBrowser for help on using the repository browser.