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

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

-added Animations
-added Arrow Image
-Some style changes

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