Changeset 1753


Ignore:
Timestamp:
Aug 2, 2010, 8:52:02 PM (11 years ago)
Author:
kopal
Message:

added first support for connecting IControl Connections

Location:
trunk/CrypPlugins/WorkspaceManager
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/Execution/ExecutionEngine.cs

    r1713 r1753  
    251251        }
    252252    }
    253 
    254253   
    255254    /// <summary>
  • trunk/CrypPlugins/WorkspaceManager/Model/ConnectorModel.cs

    r1740 r1753  
    5050
    5151        /// <summary>
    52         /// The Type of the Wrapped IPlugin of this PluginModel
    53         /// Depending on this the Plugin of this PluginModel will be instanciated
     52        /// The Type of the Connector Model
    5453        /// </summary>       
    5554        public Type ConnectorType
     
    7473            }
    7574        }
     75
    7676        /// <summary>
    7777        /// Is this Connector Outgoing?
    7878        /// </summary>
    7979        public bool Outgoing { get; set; }
    80        
     80
     81        /// <summary>
     82        /// Is this Connector Outgoing?
     83        /// </summary>
     84        public bool IControl { get; set; }
     85
    8186        /// <summary>
    8287        /// The InputConnections of this ConnectorModel
  • trunk/CrypPlugins/WorkspaceManager/Model/ModelPersistance.cs

    r1746 r1753  
    108108            }
    109109
     110            //restore all IControls
     111            foreach (ConnectionModel connectionModel in workspacemodel.AllConnectionModels)
     112            {
     113                ConnectorModel from = connectionModel.From;
     114                ConnectorModel to = connectionModel.To;
     115
     116                if (from.IControl && to.IControl)
     117                {
     118                    object data = null;
     119                    //Get IControl data from "to"
     120                    if (to.IsDynamic)
     121                    {
     122                        data = to.PluginModel.Plugin.GetType().GetMethod(to.DynamicGetterName).Invoke(to.PluginModel.Plugin, new object[] { to.PropertyName });
     123                    }
     124                    else
     125                    {
     126                        data = to.PluginModel.Plugin.GetType().GetProperty(to.PropertyName).GetValue(to.PluginModel.Plugin, null);
     127                    }
     128
     129                    //Set IControl data
     130                    if (from.IsDynamic)
     131                    {
     132                        MethodInfo propertyInfo = from.PluginModel.Plugin.GetType().GetMethod(from.DynamicSetterName);
     133                        propertyInfo.Invoke(from.PluginModel.Plugin, new object[] { from.PropertyName, data });
     134                    }
     135                    else
     136                    {
     137                        PropertyInfo propertyInfo = from.PluginModel.Plugin.GetType().GetProperty(from.PropertyName);
     138                        propertyInfo.SetValue(from.PluginModel.Plugin, data, null);
     139                    }
     140                }
     141            }
     142
    110143            return workspacemodel;         
    111144        }
  • trunk/CrypPlugins/WorkspaceManager/Model/PluginModel.cs

    r1740 r1753  
    167167                        connectorModel.ToolTip = propertyInfoAttribute.ToolTip;
    168168                        connectorModel.ConnectorOrientation = ConnectorOrientation.West;
     169                        connectorModel.IControl = false;
     170                        InputConnectors.Add(connectorModel);
     171                        WorkspaceModel.AllConnectorModels.Add(connectorModel);
     172                    }
     173                    else if (propertyInfoAttribute.Direction.Equals(Direction.ControlSlave))
     174                    {
     175                        ConnectorModel connectorModel = new ConnectorModel();
     176                        connectorModel.ConnectorType = propertyInfoAttribute.PropertyInfo.PropertyType;
     177                        connectorModel.WorkspaceModel = WorkspaceModel;
     178                        connectorModel.PluginModel = this;
     179                        connectorModel.IsMandatory = propertyInfoAttribute.Mandatory;
     180                        connectorModel.PropertyName = propertyInfoAttribute.PropertyName;
     181                        connectorModel.Name = propertyInfoAttribute.PropertyName;
     182                        connectorModel.ToolTip = propertyInfoAttribute.ToolTip;
     183                        connectorModel.ConnectorOrientation = ConnectorOrientation.West;
     184                        connectorModel.IControl = true;
    169185                        InputConnectors.Add(connectorModel);
    170186                        WorkspaceModel.AllConnectorModels.Add(connectorModel);
     
    182198                        connectorModel.ConnectorOrientation = ConnectorOrientation.East;
    183199                        connectorModel.Outgoing = true;
     200                        connectorModel.IControl = false;
     201                        Plugin.PropertyChanged += connectorModel.PropertyChangedOnPlugin;
     202                        OutputConnectors.Add(connectorModel);
     203                        WorkspaceModel.AllConnectorModels.Add(connectorModel);
     204                    }
     205                    else if (propertyInfoAttribute.Direction.Equals(Direction.ControlMaster))
     206                    {
     207                        ConnectorModel connectorModel = new ConnectorModel();
     208                        connectorModel.ConnectorType = propertyInfoAttribute.PropertyInfo.PropertyType;
     209                        connectorModel.WorkspaceModel = WorkspaceModel;
     210                        connectorModel.PluginModel = this;
     211                        connectorModel.IsMandatory = propertyInfoAttribute.Mandatory;
     212                        connectorModel.PropertyName = propertyInfoAttribute.PropertyName;
     213                        connectorModel.Name = propertyInfoAttribute.PropertyName;
     214                        connectorModel.ToolTip = propertyInfoAttribute.ToolTip;
     215                        connectorModel.ConnectorOrientation = ConnectorOrientation.East;
     216                        connectorModel.Outgoing = true;
     217                        connectorModel.IControl = true;
    184218                        Plugin.PropertyChanged += connectorModel.PropertyChangedOnPlugin;
    185219                        OutputConnectors.Add(connectorModel);
     
    280314            foreach (ConnectorModel connectorModel in this.InputConnectors)
    281315            {
    282                 if ((connectorModel.IsMandatory || connectorModel.InputConnections.Count > 0) && !connectorModel.HasData)
     316                if (!connectorModel.IControl && (connectorModel.IsMandatory || connectorModel.InputConnections.Count > 0) && !connectorModel.HasData)
    283317                {
    284318                    foreach (ConnectionModel connectionModel in connectorModel.InputConnections)
  • trunk/CrypPlugins/WorkspaceManager/Model/WorkspaceModel.cs

    r1714 r1753  
    2121using System.Windows;
    2222using Cryptool.PluginBase;
     23using System.Reflection;
    2324
    2425namespace WorkspaceManager.Model
     
    126127            to.InputConnections.Add(connectionModel);
    127128            connectionModel.ConnectionType = connectionType;
     129
     130            //If we connect two IControls we have to set data directly:
     131            if (from.IControl && to.IControl)
     132            {
     133                object data = null;
     134                //Get IControl data from "to"
     135                if (to.IsDynamic)
     136                {
     137                    data = to.PluginModel.Plugin.GetType().GetMethod(to.DynamicGetterName).Invoke(to.PluginModel.Plugin, new object[] { to.PropertyName });
     138                }
     139                else
     140                {
     141                    data = to.PluginModel.Plugin.GetType().GetProperty(to.PropertyName).GetValue(to.PluginModel.Plugin, null);
     142                }
     143
     144                //Set IControl data
     145                if (from.IsDynamic)
     146                {
     147                    MethodInfo propertyInfo = from.PluginModel.Plugin.GetType().GetMethod(from.DynamicSetterName);
     148                    propertyInfo.Invoke(from.PluginModel.Plugin, new object[] { from.PropertyName, data });
     149                }
     150                else
     151                {
     152                    PropertyInfo propertyInfo = from.PluginModel.Plugin.GetType().GetProperty(from.PropertyName);
     153                    propertyInfo.SetValue(from.PluginModel.Plugin, data, null);
     154                }
     155            }
     156
    128157            this.AllConnectionModels.Add(connectionModel);
    129158            this.WorkspaceManagerEditor.HasChanges = true;
Note: See TracChangeset for help on using the changeset viewer.