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

Last change on this file since 1607 was 1607, checked in by kopal, 12 years ago
  • added multiple schedulers to have multi core support in executionEngine
  • added gears4net protocol to update gui changes in time intervals
    • added needed interface IUpdateableView for updateable view elements
File size: 7.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;
16
17namespace WorkspaceManager.View.Container
18{
19    /// <summary>
20    /// Interaction logic for PluginContainerView.xaml
21    /// </summary>
22    public partial class PluginContainerView : UserControl, IDraggable, IUpdateableView
23    {
24        public event EventHandler<ConnectorViewEventArgs> OnConnectorMouseLeftButtonDown;
25        public event EventHandler<PluginContainerViewDeleteViewEventArgs> Delete;
26        public event EventHandler<PluginContainerViewSettingsViewEventArgs> ShowSettings;
27
28        private Image img;
29
30        private List<ConnectorView> connectorViewList;
31        public List<ConnectorView> ConnectorViewList
32        {
33            get { return connectorViewList; }
34            private set { connectorViewList = value; }
35        }
36        private PluginModel model;
37        public PluginModel Model
38        {
39            get { return model; }
40            private set { model = value; }
41        }
42
43        public bool CanDrag { get; set; }
44
45        public PluginContainerView()
46        {
47            this.Loaded += new RoutedEventHandler(PluginContainerView_Loaded);
48            this.RenderTransform = new TranslateTransform();
49            InitializeComponent();
50        }
51
52        public PluginContainerView(PluginModel model)
53        {
54            this.ConnectorViewList = new List<ConnectorView>();
55            this.Loaded += new RoutedEventHandler(PluginContainerView_Loaded);
56            this.MouseEnter += new MouseEventHandler(PluginContainerView_MouseEnter);
57            this.MouseLeave += new MouseEventHandler(PluginContainerView_MouseLeave);
58            this.model = model;
59            this.model.UpdateableView = this;
60            this.RenderTransform = new TranslateTransform();
61            InitializeComponent();
62
63            if(model.Plugin.QuickWatchPresentation != null)
64                this.PresentationPanel.Children.Add(model.Plugin.QuickWatchPresentation);
65        }
66
67        void PluginContainerView_MouseLeave(object sender, MouseEventArgs e)
68        {
69            ControlPanel.Visibility = Visibility.Hidden;
70        }
71
72        void PluginContainerView_MouseEnter(object sender, MouseEventArgs e)
73        {
74            ControlPanel.Visibility = Visibility.Visible;
75        }
76
77        void PluginContainerView_Loaded(object sender, RoutedEventArgs e)
78        {
79            //TODO: Better-> Bindings
80            img = model.getImage();
81            img.Stretch = Stretch.Uniform;
82            PresentationPanel.Children.Add(img);
83            PluginName.Content = model.PluginType.Name.ToString();
84            foreach (ConnectorModel Model in model.InputConnectors)
85            {
86                AddInputConnectorView(new ConnectorView(Model));
87            }
88
89            foreach (ConnectorModel Model in model.OutputConnectors)
90            {
91                AddOutputConnectorView(new ConnectorView(Model));
92            }
93        }
94
95        public void AddInputConnectorView(ConnectorView connector)
96        {
97            connector.OnConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(connector_OnConnectorMouseLeftButtonDown);
98            this.ConnectorViewList.Add(connector);
99            this.InputConnectorPanel.Children.Add(connector);
100            this.SetAllConnectorPositionX();
101        }
102
103
104        public void AddOutputConnectorView(ConnectorView connector)
105        {
106            connector.OnConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(connector_OnConnectorMouseLeftButtonDown);
107            this.ConnectorViewList.Add(connector);
108            this.OutputConnectorPanel.Children.Add(connector);
109            this.SetAllConnectorPositionX();
110        }
111
112        public void SetPosition(Point value)
113        {
114            (this.RenderTransform as TranslateTransform).X = value.X;
115            (this.RenderTransform as TranslateTransform).Y = value.Y;
116            this.SetAllConnectorPositionX();
117        }
118
119        private void SetAllConnectorPositionX()
120        {
121            GeneralTransform gTransform, gTransformSec;
122            Point point, relativePoint;
123            double x, y;
124
125            foreach (ConnectorView conn in InputConnectorPanel.Children)
126            {
127                gTransform = this.InputConnectorPanel.TransformToVisual(this);
128                gTransformSec = conn.TransformToVisual(this.InputConnectorPanel);
129
130                point = gTransform.Transform(new Point(0, 0));
131                relativePoint = gTransformSec.Transform(new Point(0, 0));
132
133                x = (RenderTransform as TranslateTransform).X + point.X + relativePoint.X;
134                y = (RenderTransform as TranslateTransform).Y + point.Y + relativePoint.Y;
135
136                conn.PositionOnWorkSpaceX = x;
137                conn.PositionOnWorkSpaceY = y;
138            }
139
140            foreach (ConnectorView conn in OutputConnectorPanel.Children)
141            {
142                gTransform = this.OutputConnectorPanel.TransformToVisual(this);
143                gTransformSec = conn.TransformToVisual(this.OutputConnectorPanel);
144
145                point = gTransform.Transform(new Point(0, 0));
146                relativePoint = gTransformSec.Transform(new Point(0, 0));
147
148                x = (RenderTransform as TranslateTransform).X + point.X + relativePoint.X;
149                y = (RenderTransform as TranslateTransform).Y + point.Y + relativePoint.Y;
150
151                conn.PositionOnWorkSpaceX = x;
152                conn.PositionOnWorkSpaceY = y;
153            }
154
155        }
156
157        public Point GetPosition()
158        {
159            return new Point((this.RenderTransform as TranslateTransform).X, (this.RenderTransform as TranslateTransform).Y);
160        }
161
162        #region Controls
163
164        void connector_OnConnectorMouseLeftButtonDown(object sender, ConnectorViewEventArgs e)
165        {
166            if (this.OnConnectorMouseLeftButtonDown != null)
167            {
168                this.OnConnectorMouseLeftButtonDown.Invoke(this, e);
169            }
170        }
171
172        #endregion
173
174        private void delete()
175        {
176            if (this.Delete != null)
177            {
178                this.Delete.Invoke(this, new PluginContainerViewDeleteViewEventArgs { container = this });
179            }
180        }
181
182        private void showSettings()
183        {
184            if (this.ShowSettings != null)
185            {
186                this.ShowSettings.Invoke(this, new PluginContainerViewSettingsViewEventArgs { container = this });
187            }
188        }
189
190        private void Button_Click_1(object sender, RoutedEventArgs e)
191        {
192            this.showSettings();
193        }
194
195        private void Button_Click(object sender, RoutedEventArgs e)
196        {
197            this.delete();
198        }
199
200        #region IUpdateableView Members
201
202        public void update()
203        {
204            PresentationPanel.Children.Remove(img);
205            img = model.getImage();
206            img.Stretch = Stretch.Uniform;
207            PresentationPanel.Children.Add(img);
208        }
209
210        #endregion
211    }
212
213    public class PluginContainerViewDeleteViewEventArgs : EventArgs
214    {
215        public PluginContainerView container;
216    }
217
218    public class PluginContainerViewSettingsViewEventArgs : EventArgs
219    {
220        public PluginContainerView container;
221    }
222}
Note: See TracBrowser for help on using the repository browser.