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

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

-Fullscreen enhanced
-TextInput added
-Picture scaling added
-Textinput scaling added
-Textinput format command added
-Several style changes
-Progressbar redesigned
-Last log message now appearing
-IControlContainer commenced
-Several icons added
-Plugin state now stored and loaded
-Plugin height and width now storing and loading
-Several misc changes

File size: 11.1 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.Model;
15using WorkspaceManager.View.VisualComponents;
16using WorkspaceManager.View.Converter;
17using Cryptool.PluginBase.Editor;
18using Cryptool.PluginBase;
19
20namespace WorkspaceManager.View.Container
21{
22    /// <summary>
23    /// Interaction logic for IControlContainer.xaml
24    /// </summary>
25    public partial class IControlContainer : UserControl
26    {
27        public PluginModel Model { get; set; }
28        public EditorState State { get; set; }
29        public List<CryptoLineView> IControlConnList { get; set; }
30
31        private ConnectorView selectedConnector;
32        private CryptoLineView dummyLine;
33        private PluginContainerView selectedPluginContainer;
34        private Point previousDragPoint;
35        private Point dummyPoint;
36
37        public IControlContainer()
38        {
39            InitializeComponent();
40        }
41
42        public IControlContainer(PluginModel Model)
43        {
44            InitializeComponent();
45            this.dummyLine = new CryptoLineView();
46            this.Model = Model;
47            setBaseControl(Model.WorkspaceModel);
48        }
49
50        private void setBaseControl(WorkspaceModel WorkspaceModel)
51        {
52            //this.MouseLeftButtonDown += new MouseButtonEventHandler(WorkSpaceEditorView_OnMouseLeftButtonDown);
53            this.MouseLeave += new MouseEventHandler(WorkSpaceEditorView_MouseLeave);
54            this.Drop += new DragEventHandler(WorkSpaceEditorView_Drop);
55            this.MouseMove += new MouseEventHandler(WorkSpaceEditorView_MouseMove);
56            this.PreviewMouseRightButtonDown += new MouseButtonEventHandler(WorkSpaceEditorView_PreviewMouseRightButtonDown);
57            this.State = EditorState.READY;
58        }
59
60        public void AddConnection(ConnectorView source, ConnectorView target)
61        {
62            if (this.State == EditorState.READY)
63            {
64                ConnectionModel connectionModel = this.Model.WorkspaceModel.newConnectionModel(((ConnectorView)source).Model, ((ConnectorView)target).Model, ((ConnectorView)source).Model.ConnectorType);
65                CryptoLineView conn = new CryptoLineView(connectionModel);
66                connectionModel.OnDelete += DeleteConnection;
67                conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(source));
68                conn.SetBinding(CryptoLineView.EndPointProperty, CreateConnectorBinding(target));
69                root.Children.Add(conn);
70                IControlConnList.Add(conn);
71                Canvas.SetZIndex(conn, 0);
72            }
73        }
74
75        public void DeleteConnection(Object sender, EventArgs args)
76        {
77            if (sender is ConnectionModel)
78            {
79                if (((ConnectionModel)sender).UpdateableView != null)
80                {
81                    UIElement uielement = (UIElement)((ConnectionModel)sender).UpdateableView;
82                    root.Children.Remove(uielement);
83                }
84            }
85        }
86
87        private void AddConnectionSource(ConnectorView source, CryptoLineView conn)
88        {
89            if (this.State == EditorState.READY)
90            {
91                Color color = ColorHelper.GetColor((source as ConnectorView).Model.ConnectorType);
92                conn.Stroke = new SolidColorBrush(color);
93                conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(source));
94                conn.EndPoint = Mouse.GetPosition(this);
95            }
96        }
97
98        private MultiBinding CreateConnectorBinding(ConnectorView connectable)
99        {
100            MultiBinding multiBinding = new MultiBinding();
101            multiBinding.Converter = new ConnectorBindingConverter();
102            multiBinding.ConverterParameter = connectable;
103
104            Binding binding = new Binding();
105            binding.Source = connectable;
106            binding.Path = new PropertyPath(ConnectorView.X);
107            multiBinding.Bindings.Add(binding);
108
109            binding = new Binding();
110            binding.Source = connectable;
111            binding.Path = new PropertyPath(ConnectorView.Y);
112            multiBinding.Bindings.Add(binding);
113
114            binding = new Binding();
115            binding.Source = connectable;
116            binding.Path = new PropertyPath(FrameworkElement.ActualHeightProperty);
117            multiBinding.Bindings.Add(binding);
118
119            binding = new Binding();
120            binding.Source = connectable;
121            binding.Path = new PropertyPath(FrameworkElement.ActualWidthProperty);
122            multiBinding.Bindings.Add(binding);
123
124
125            return multiBinding;
126        }
127
128        void shape_OnConnectorMouseLeftButtonDown(object sender, ConnectorViewEventArgs e)
129        {
130            if (this.State == EditorState.READY)
131            {
132                if (selectedConnector != null && WorkspaceModel.compatibleConnectors(selectedConnector.Model, e.connector.Model))
133                {
134                    this.root.Children.Remove(dummyLine);
135                    this.AddConnection(selectedConnector, e.connector);
136                    this.selectedConnector = null;
137                    return;
138                }
139
140                if (selectedConnector == null && e.connector.Model.Outgoing)
141                {
142                    this.root.Children.Add(dummyLine);
143                    this.selectedConnector = e.connector;
144                    this.AddConnectionSource(e.connector, dummyLine);
145                    return;
146                }
147            }
148        }
149
150        void PluginDelete(object sender, PluginContainerViewDeleteViewEventArgs e)
151        {
152            if (this.State == EditorState.READY)
153            {
154                Model.WorkspaceModel.deletePluginModel(e.container.Model);
155                root.Children.Remove(e.container);
156                Model.WorkspaceModel.WorkspaceManagerEditor.HasChanges = true;
157            }
158        }
159
160        public void AddPluginContainerView(Point position, PluginModel model)
161        {
162            if (this.State == EditorState.READY)
163            {
164                PluginContainerView newPluginContainerView = new PluginContainerView(model);
165                newPluginContainerView.Delete += new EventHandler<PluginContainerViewDeleteViewEventArgs>(PluginDelete);
166                newPluginContainerView.ConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(shape_OnConnectorMouseLeftButtonDown);
167                newPluginContainerView.MouseLeftButtonDown += new MouseButtonEventHandler(shape_MouseLeftButtonDown);
168                newPluginContainerView.MouseLeftButtonUp += new MouseButtonEventHandler(shape_MouseLeftButtonUp);
169                newPluginContainerView.SetPosition(new Point((Math.Round((position.X) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale,
170                                                            (Math.Round((position.Y) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale));
171
172                this.root.Children.Add(newPluginContainerView);
173                Canvas.SetZIndex(newPluginContainerView, 100);
174                Model.WorkspaceModel.WorkspaceManagerEditor.HasChanges = true;
175            }
176        }
177
178        void WorkSpaceEditorView_Drop(object sender, DragEventArgs e)
179        {
180            if (this.State == EditorState.READY)
181            {
182                if (e.Data.GetDataPresent("Cryptool.PluginBase.Editor.DragDropDataObject"))
183                {
184                    DragDropDataObject obj = e.Data.GetData("Cryptool.PluginBase.Editor.DragDropDataObject") as DragDropDataObject;
185                    PluginModel pluginModel = Model.WorkspaceModel.newPluginModel(DragDropDataObjectToPluginConverter.CreatePluginInstance(obj.AssemblyFullName, obj.TypeFullName));
186                    if (obj != null)
187                        this.AddPluginContainerView(e.GetPosition(root), pluginModel);
188                    Model.WorkspaceModel.WorkspaceManagerEditor.HasChanges = true;
189                }
190                else
191                    return;
192            }
193        }
194
195        void shape_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
196        {
197            this.selectedPluginContainer = sender as PluginContainerView;
198            this.previousDragPoint = Mouse.GetPosition(selectedPluginContainer);
199            Canvas.SetZIndex(selectedPluginContainer, 101);
200
201            PluginChangedEventArgs args = new PluginChangedEventArgs(this.selectedPluginContainer.Model.Plugin, this.selectedPluginContainer.Model.Name, DisplayPluginMode.Normal);
202            this.Model.WorkspaceModel.WorkspaceManagerEditor.onSelectedPluginChanged(args);
203
204            e.Handled = true;
205        }
206
207        void WorkSpaceEditorView_MouseLeave(object sender, MouseEventArgs e)
208        {
209            if (this.State == EditorState.READY)
210            {
211                this.selectedPluginContainer = null;
212            }
213        }
214
215        void WorkSpaceEditorView_MouseMove(object sender, MouseEventArgs e)
216        {
217            if (e.LeftButton == MouseButtonState.Pressed && selectedPluginContainer != null)
218            {
219                dummyPoint = selectedPluginContainer.GetPosition();
220                this.selectedPluginContainer.SetPosition(new Point((Math.Round((Mouse.GetPosition(root).X - previousDragPoint.X) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale,
221                                                            (Math.Round((Mouse.GetPosition(root).Y - previousDragPoint.Y) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale));
222                Model.WorkspaceModel.WorkspaceManagerEditor.HasChanges = true;
223                //this.selectedPluginContainer.SetPosition(new Point((Math.Round(( Mouse.GetPosition(root).X )/Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale,
224                //                                            (Math.Round(( Mouse.GetPosition(root).Y ) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale));
225            }
226
227
228
229            if (selectedConnector != null && root.Children.Contains(dummyLine))
230            {
231                this.dummyLine.EndPoint = Mouse.GetPosition(root);
232            }
233        }
234
235        void shape_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
236        {
237            Canvas.SetZIndex(sender as PluginContainerView, 100);
238            this.selectedPluginContainer = null;
239        }
240
241
242        void WorkSpaceEditorView_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
243        {
244            if (this.State == EditorState.READY)
245            {
246                this.selectedConnector = null;
247                this.root.Children.Remove(dummyLine);
248            }
249        }
250    }
251}
Note: See TracBrowser for help on using the repository browser.