source: trunk/CrypPlugins/WorkspaceManager/Model/ConnectorModel.cs @ 1713

Last change on this file since 1713 was 1713, checked in by kopal, 12 years ago
  • some execution engine fixes
File size: 7.4 KB
Line 
1/*                             
2   Copyright 2010 Nils Kopal, Viktor M.
3
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7
8       http://www.apache.org/licenses/LICENSE-2.0
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15*/
16
17using System;
18using System.Collections.Generic;
19using System.ComponentModel;
20using System.Windows.Media;
21using Cryptool.PluginBase;
22using WorkspaceManager.View.Container;
23
24namespace WorkspaceManager.Model
25{
26   
27    /// <summary>
28    /// Class to represent the Connection between two Connector Models
29    /// </summary>
30    [Serializable]
31    public class ConnectorModel : VisualElementModel
32    {       
33        [NonSerialized]
34        private bool hasData = false;
35
36        /// <summary>
37        /// The PluginModel this Connector belongs to
38        /// </summary>
39        public PluginModel PluginModel { get; set; }
40
41        /// <summary>
42        /// The data type of this ConnectorModel
43        /// </summary>
44        public Type ConnectorType { get; set; }
45
46        /// <summary>
47        /// Is this Connector Outgoing?
48        /// </summary>
49        public bool Outgoing { get; set; }
50       
51        /// <summary>
52        /// The InputConnections of this ConnectorModel
53        /// </summary>
54        public List<ConnectionModel> InputConnections;
55
56        /// <summary>
57        /// The OutputConnections of this ConnectorModel
58        /// </summary>
59        public List<ConnectionModel> OutputConnections;
60
61        /// <summary>
62        /// Creates a new ConnectorModel
63        /// </summary>
64        public ConnectorModel()
65        {
66            this.InputConnections = new List<ConnectionModel>();
67            this.OutputConnections = new List<ConnectionModel>();           
68        }
69
70        /// <summary>
71        /// The WorkspaceModel of this PluginModel
72        /// </summary>
73        public WorkspaceModel WorkspaceModel { get; set; }
74
75        /// <summary>
76        /// Is this Connectors Data mandatory?
77        /// </summary>
78        /// <returns></returns>
79        public bool IsMandatory
80        {
81            get;
82            set;
83        }
84
85        /// <summary>
86        /// Is this a dynamic connector?
87        /// </summary>
88        public bool IsDynamic
89        {
90            get;
91            set;
92        }
93
94        /// <summary>
95        /// DynamicGetterName
96        /// </summary>
97        public string DynamicGetterName
98        {
99            get;
100            set;
101        }
102
103        /// <summary>
104        /// DynamicSetterName
105        /// </summary>
106        public string DynamicSetterName
107        {
108            get;
109            set;
110        }
111
112        /// <summary>
113        /// Does this Connector currently provides Data?
114        /// </summary>
115        /// <returns></returns>
116        public bool HasData
117        {
118            get { 
119                    return hasData; 
120            }
121
122            set 
123            {   
124                hasData = value; 
125            }
126        }
127
128        /// <summary>
129        /// Data of this Connector
130        /// </summary>
131        [NonSerialized]
132        public object Data = null;
133       
134        /// <summary>
135        /// Name of the represented Property of the IPlugin of this ConnectorModel
136        /// </summary>
137        public string PropertyName{get;set;}
138
139        /// <summary>
140        /// ToolTip of this Connector
141        /// </summary>
142        public string ToolTip { get; set; }
143
144        /// <summary>
145        /// Plugin informs the Connector that a PropertyChanged
146        /// </summary>
147        /// <param name="sender"></param>
148        /// <param name="propertyChangedEventArgs"></param>
149        public void PropertyChangedOnPlugin(Object sender, PropertyChangedEventArgs propertyChangedEventArgs)
150        {
151            if(sender == this.PluginModel.Plugin && 
152                propertyChangedEventArgs.PropertyName.Equals(PropertyName) && 
153                Outgoing){
154               
155                foreach (ConnectionModel connectionModel in this.OutputConnections)
156                {
157                    if (IsDynamic)
158                    {
159                        connectionModel.To.Data = sender.GetType().GetMethod(DynamicGetterName).Invoke(sender, new object[] { this.PropertyName });
160                    }
161                    else
162                    {
163                        connectionModel.To.Data = sender.GetType().GetProperty(propertyChangedEventArgs.PropertyName).GetValue(sender, null);
164                    }
165                    connectionModel.To.HasData = true;   
166                    connectionModel.Active = true;
167                    connectionModel.GuiNeedsUpdate = true;
168                }
169
170               //We changed an input on the PluginModels where "To"s are belonging to so
171                //we have to check if there are executable now
172                foreach (ConnectionModel connectionModel in this.OutputConnections)
173                {
174                    connectionModel.To.PluginModel.checkExecutable(connectionModel.To.PluginModel.PluginProtocol);
175                }
176            }                       
177        }
178
179        /// <summary>
180        /// Orientation of this Connecor
181        /// </summary>
182        public ConnectorOrientation ConnectorOrientation { get; set; }
183
184        /// <summary>
185        /// The data type of the wrapped property changes
186        /// </summary>       
187        public void PropertyTypeChangedOnPlugin(IPlugin plugin)
188        {
189            Dictionary<string, DynamicProperty> dictionary = plugin.GetDynamicPropertyList();
190            DynamicPropertyInfoAttribute dynamicPropertyInfoAttribute = plugin.GetDynamicPropertyInfo();
191            foreach (DynamicProperty dynamicProperty in dictionary.Values)
192            {
193               
194                if (this.PropertyName == dynamicProperty.Name)
195                {
196                    foreach(ConnectionModel connectionModel in new List<ConnectionModel>(InputConnections)){
197                        this.WorkspaceModel.deleteConnectionModel(connectionModel);
198                    }
199                    foreach(ConnectionModel connectionModel in new List<ConnectionModel>(this.OutputConnections))
200                    {
201                        this.WorkspaceModel.deleteConnectionModel(connectionModel);
202                    }
203                    this.ConnectorType = dynamicProperty.Type;
204                    if (this.UpdateableView != null)
205                    {
206                        ((ConnectorView)this.UpdateableView).Ellipse.Fill = new SolidColorBrush(ColorHelper.GetColor(this.ConnectorType));
207                    }
208                }
209            }
210        }
211    }
212
213    /// <summary>
214    /// Enumeration for connector orientation:
215    ///
216    ///        North
217    ///       --------
218    ///       |      |
219    /// West  |      |  East
220    ///       |      |
221    ///       --------
222    ///        South
223    /// </summary>
224    public enum ConnectorOrientation
225    {
226        North,
227        East,
228        South,
229        West
230    }
231}
Note: See TracBrowser for help on using the repository browser.