source: trunk/CrypPlugins/WorkspaceManager/View/Container/ConnectorView.xaml.cs @ 2388

Last change on this file since 2388 was 2119, checked in by matkovic, 11 years ago

-DataPresentation redesigned
-Usability improved

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 System.ComponentModel;
16using WorkspaceManager.Model;
17using System.Windows.Controls.Primitives;
18
19namespace WorkspaceManager.View.Container
20{
21    public enum ConnectorOrientation
22    {
23        North,
24        South,
25        West,
26        East,
27        Unset
28    };
29
30    /// <summary>
31    /// Interaction logic for ConnectorView.xaml
32    /// </summary>
33    public partial class ConnectorView : UserControl, IConnectable, IUpdateableView
34    {
35
36        public event EventHandler<ConnectorViewEventArgs> OnConnectorMouseLeftButtonDown;
37        public ConnectorModel model;
38        public ConnectorModel Model
39        {
40            get { return model; }
41            private set { model = value; }
42        }
43
44        private ConnectorOrientation orientation;
45        public ConnectorOrientation Orientation
46        {
47            get 
48            {
49                return orientation;
50            }
51            set
52            {
53                orientation = value;
54                switch (value)
55                {
56                    case ConnectorOrientation.West:
57                        if (model.Outgoing)
58                            Rotation.Angle = 90;
59                        else
60                            Rotation.Angle = -90;
61                        break;
62                    case ConnectorOrientation.East:
63                        if (model.Outgoing)
64                            Rotation.Angle = -90;
65                        else
66                            Rotation.Angle = 90;
67                        break;
68                    case ConnectorOrientation.North:
69                        if (model.Outgoing)
70                            Rotation.Angle = 180;
71                        else
72                            Rotation.Angle = 0;
73                        break;
74                    case ConnectorOrientation.South:
75                        if (model.Outgoing)
76                            Rotation.Angle = 0;
77                        else
78                            Rotation.Angle = 180;
79                        break;
80                }
81
82                this.Model.Orientation = value;
83            }
84        }
85
86        public PluginContainerView Parent { get; set; }
87
88        public ConnectorView()
89        {
90            InitializeComponent();
91        }
92
93        public ConnectorView(ConnectorModel Model, PluginContainerView Parent)
94        {
95            InitializeComponent();
96            setBaseControl(Model);
97            this.Parent = Parent;
98
99            if (Model.IsMandatory)
100            {
101                ConnectorRep.Stroke = Brushes.White;
102                Scale.ScaleX = 0.8;
103                Scale.ScaleY = 0.7;
104            }
105
106            if (Model.Orientation == ConnectorOrientation.Unset)
107            {
108                if (model.Outgoing)
109                    this.Orientation = ConnectorOrientation.East;
110                else
111                    this.Orientation = ConnectorOrientation.West;
112            }
113            else
114                this.Orientation = Model.Orientation;
115
116            Color color = ColorHelper.GetLineColor(Model.ConnectorType);
117            this.ConnectorRep.Fill = new SolidColorBrush(Color.FromArgb(color.A, color.R, color.G, color.B));
118            this.ConnectorRep.ToolTip = Model.ToolTip;
119        }
120
121        public Point GetPositionOnWorkspace()
122        {
123            try
124            {
125                GeneralTransform gTransform, gTransformSec;
126                Point point, relativePoint;
127                StackPanel currentSp = null;
128
129                if (Parent.West.Children.Contains(this))
130                    currentSp = Parent.West;
131                if (Parent.East.Children.Contains(this))
132                    currentSp = Parent.East;
133                if (Parent.North.Children.Contains(this))
134                    currentSp = Parent.North;
135                if (Parent.South.Children.Contains(this))
136                    currentSp = Parent.South;
137
138                gTransform = currentSp.TransformToVisual(Parent);
139                gTransformSec = this.TransformToVisual(currentSp);
140
141                point = gTransform.Transform(new Point(0, 0));
142                relativePoint = gTransformSec.Transform(new Point(0, 0));
143                Point result = new Point(Parent.GetPosition().X + point.X + relativePoint.X, Parent.GetPosition().Y + point.Y + relativePoint.Y);
144                return result;
145            }
146            catch (Exception)
147            {
148                return new Point(0, 0);
149            }
150        }
151
152        void ConnectorView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
153        {
154            //if (this.OnConnectorMouseLeftButtonDown != null)
155            //{
156            //    this.OnConnectorMouseLeftButtonDown.Invoke(this, new ConnectorViewEventArgs { connector = this });
157            //}
158        }
159
160        private void setBaseControl(ConnectorModel Model)
161        {
162            //this.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(ConnectorView_MouseLeftButtonDown);
163            //this.PreviewMouseRightButtonDown += new MouseButtonEventHandler(ConnectorView_MouseRightButtonDown);
164            //this.PreviewMouseRightButtonUp += new MouseButtonEventHandler(ConnectorView_MouseRightButtonUp);
165            //this.MouseLeave += new MouseEventHandler(ConnectorView_MouseLeave);
166            this.Model = Model;
167            this.DataContext = Model;
168            this.Model.UpdateableView = this;
169        }
170
171        //void ConnectorView_MouseLeave(object sender, MouseEventArgs e)
172        //{
173        //    BubblePopup.StaysOpen = false;
174        //}
175
176        //void ConnectorView_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
177        //{
178        //    BubblePopup.StaysOpen = false;
179        //}
180
181        //void ConnectorView_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
182        //{
183        //    this.BubblePopup.IsOpen = true;
184        //    BubblePopup.StaysOpen = true;
185        //}
186
187        //void ConnectorView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
188        //{
189        //    if (this.OnConnectorMouseLeftButtonDown != null)
190        //    {
191        //        this.OnConnectorMouseLeftButtonDown.Invoke(this, new ConnectorViewEventArgs { connector = this });
192        //    }
193        //}
194
195        //public void ResetPopUp()
196        //{
197        //    Random random = new Random();
198        //    BubblePopup.PlacementRectangle = new Rect(new Point(random.NextDouble() / 1000, 0), new Size(0, 0));
199        //}
200
201        public bool CanConnect
202        {
203            get { throw new NotImplementedException(); }
204        }
205
206        public void update()
207        {
208            if (model.HasData)
209            {
210                ToolTip = model.Data;
211            }
212
213        }
214
215    }
216
217    public class ConnectorViewEventArgs : EventArgs
218    {
219        public ConnectorView connector;
220    }
221}
Note: See TracBrowser for help on using the repository browser.