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

Last change on this file since 1892 was 1831, checked in by matkovic, 11 years ago

-LogInfo now pops up
-Added new icon for NotificationLevels
-Several style changes on LogPresentation

File size: 6.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 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        public static readonly DependencyProperty X = DependencyProperty.Register("PositionOnWorkSpaceX", typeof(double), typeof(ConnectorView), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));
36        public static readonly DependencyProperty Y = DependencyProperty.Register("PositionOnWorkSpaceY", typeof(double), typeof(ConnectorView), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));
37
38        public event EventHandler<ConnectorViewEventArgs> OnConnectorMouseLeftButtonDown;
39        public ConnectorModel model;
40        public ConnectorModel Model
41        {
42            get { return model; }
43            private set { model = value; }
44        }
45
46        [TypeConverter(typeof(LengthConverter))]
47        public double PositionOnWorkSpaceX
48        {
49            get { return (double)base.GetValue(X); }
50            set
51            {
52                ResetPopUp();
53                base.SetValue(X, value);
54            }
55        }
56
57        [TypeConverter(typeof(LengthConverter))]
58        public double PositionOnWorkSpaceY
59        {
60            get { return (double)base.GetValue(Y); }
61            set
62            {
63                ResetPopUp();
64                base.SetValue(Y, value);
65            }
66        }
67
68        private ConnectorOrientation orientation;
69        public ConnectorOrientation Orientation
70        {
71            get 
72            {
73                return orientation;
74            }
75            set
76            {
77                orientation = value;
78                switch (value)
79                {
80                    case ConnectorOrientation.West:
81                        if (model.Outgoing)
82                            Rotation.Angle = 90;
83                        else
84                            Rotation.Angle = -90;
85                        break;
86                    case ConnectorOrientation.East:
87                        if (model.Outgoing)
88                            Rotation.Angle = -90;
89                        else
90                            Rotation.Angle = 90;
91                        break;
92                    case ConnectorOrientation.North:
93                        if (model.Outgoing)
94                            Rotation.Angle = 180;
95                        else
96                            Rotation.Angle = 0;
97                        break;
98                    case ConnectorOrientation.South:
99                        if (model.Outgoing)
100                            Rotation.Angle = 0;
101                        else
102                            Rotation.Angle = 180;
103                        break;
104                }
105
106                this.Model.Orientation = value;
107            }
108        }
109
110        public ConnectorView()
111        {
112            this.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(ConnectorView_MouseLeftButtonDown);
113            InitializeComponent();
114        }
115
116        public ConnectorView(ConnectorModel Model)
117        {
118            setBaseControl(Model);
119            InitializeComponent();
120
121            if (Model.IsMandatory)
122            {
123                Scale.ScaleX = 1.35;
124                Scale.ScaleY = 1.35;
125            }
126
127            if (Model.Orientation == ConnectorOrientation.Unset)
128            {
129                if (model.Outgoing)
130                    this.Orientation = ConnectorOrientation.East;
131                else
132                    this.Orientation = ConnectorOrientation.West;
133            }
134            else
135                this.Orientation = Model.Orientation;
136
137            Color color = ColorHelper.GetColor(Model.ConnectorType);
138            this.ConnectorRep.Fill = new SolidColorBrush(Color.FromArgb(color.A, color.R, color.G, color.B));
139            this.ConnectorRep.ToolTip = Model.ToolTip;
140        }
141
142        private void setBaseControl(ConnectorModel Model)
143        {
144            this.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(ConnectorView_MouseLeftButtonDown);
145            this.PreviewMouseRightButtonDown += new MouseButtonEventHandler(ConnectorView_MouseRightButtonDown);
146            this.PreviewMouseRightButtonUp += new MouseButtonEventHandler(ConnectorView_MouseRightButtonUp);
147            this.MouseLeave += new MouseEventHandler(ConnectorView_MouseLeave);
148            this.Model = Model;
149            this.DataContext = Model;
150            this.Model.UpdateableView = this;
151        }
152
153        void ConnectorView_MouseLeave(object sender, MouseEventArgs e)
154        {
155            BubblePopup.StaysOpen = false;
156        }
157
158        void ConnectorView_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
159        {
160            BubblePopup.StaysOpen = false;
161        }
162
163        void ConnectorView_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
164        {
165            this.BubblePopup.IsOpen = true;
166            BubblePopup.StaysOpen = true;
167        }
168
169        void ConnectorView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
170        {
171            if (this.OnConnectorMouseLeftButtonDown != null)
172            {
173                this.OnConnectorMouseLeftButtonDown.Invoke(this, new ConnectorViewEventArgs { connector = this });
174            }
175        }
176
177        public void ResetPopUp()
178        {
179            Random random = new Random();
180            BubblePopup.PlacementRectangle = new Rect(new Point(random.NextDouble() / 1000, 0), new Size(0, 0));
181        }
182
183        public bool CanConnect
184        {
185            get { throw new NotImplementedException(); }
186        }
187
188        public void update()
189        {
190            if (model.HasData)
191            {
192                ToolTip = model.Data;
193            }
194
195        }
196
197    }
198
199    public class ConnectorViewEventArgs : EventArgs
200    {
201        public ConnectorView connector;
202    }
203}
Note: See TracBrowser for help on using the repository browser.