Ignore:
Timestamp:
Jun 20, 2010, 3:30:22 PM (11 years ago)
Author:
kopal
Message:
  • Execution now is always triggered when one input changed and provides also old inputs
  • Added support for dynamic Connectors
  • some small bug fixing
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/Model/PluginModel.cs

    r1640 r1680  
    2626using WorkspaceManager.Execution;
    2727using System.Windows.Threading;
     28using Cryptool.PluginBase.IO;
     29using System.Reflection;
    2830
    2931namespace WorkspaceManager.Model
     
    8082        /// </summary>       
    8183        public Type PluginType = null;
     84
     85        /// <summary>
     86        /// Is the wrapped plugin startable
     87        /// </summary>
     88        public bool Startable;
    8289       
    8390        /// <summary>
     
    109116        /// Warning: Before generation all "old" Connectors will be deleted
    110117        /// </summary>
    111         public void generateConnectors(){
    112            
     118        public void generateConnectors()
     119        {
     120
    113121            if (Plugin != null)
    114             {
    115                 this.InputConnectors.Clear();
    116                 this.OutputConnectors.Clear();
    117 
     122            {   
    118123                foreach (PropertyInfoAttribute propertyInfoAttribute in Plugin.GetProperties())
    119                 {                   
     124                {
    120125                    if (propertyInfoAttribute.Direction.Equals(Direction.InputData))
    121126                    {
     
    145150                        OutputConnectors.Add(connectorModel);
    146151                        WorkspaceModel.AllConnectorModels.Add(connectorModel);
    147                     }                   
    148                 }
    149             }     
    150         }
    151 
     152                    }
     153                }
     154
     155                Dictionary<string, DynamicProperty> dictionary = Plugin.GetDynamicPropertyList();
     156                if (dictionary != null)
     157                {
     158                    DynamicPropertyInfoAttribute dynamicPropertyInfoAttribute = Plugin.GetDynamicPropertyInfo();
     159                    foreach (DynamicProperty dynamicProperty in dictionary.Values)
     160                    {
     161
     162                        if (dynamicProperty.PInfo.Direction.Equals(Direction.InputData))
     163                        {
     164                            ConnectorModel connectorModel = new ConnectorModel();
     165                            connectorModel.ConnectorType = dynamicProperty.Type;
     166                            connectorModel.WorkspaceModel = WorkspaceModel;
     167                            connectorModel.PluginModel = this;
     168                            connectorModel.IsMandatory = dynamicProperty.PInfo.Mandatory;
     169                            connectorModel.PropertyName = dynamicProperty.Name;                           
     170                            connectorModel.ToolTip = dynamicProperty.PInfo.ToolTip;
     171                            connectorModel.ConnectorOrientation = ConnectorOrientation.West;
     172                            EventInfo eventinfo = Plugin.GetType().GetEvent(dynamicPropertyInfoAttribute.UpdateDynamicPropertiesEvent);
     173                            connectorModel.IsDynamic = true;
     174                            connectorModel.DynamicGetterName = dynamicPropertyInfoAttribute.MethodGetValue;
     175                            connectorModel.DynamicSetterName = dynamicPropertyInfoAttribute.MethodSetValue;
     176                            eventinfo.AddEventHandler(Plugin, new DynamicPropertiesChanged(connectorModel.PropertyTypeChangedOnPlugin));
     177                            InputConnectors.Add(connectorModel);
     178                            WorkspaceModel.AllConnectorModels.Add(connectorModel);
     179                        }
     180                        else if (dynamicProperty.PInfo.Direction.Equals(Direction.OutputData))
     181                        {
     182                            ConnectorModel connectorModel = new ConnectorModel();
     183                            connectorModel.ConnectorType = dynamicProperty.Type;
     184                            connectorModel.WorkspaceModel = WorkspaceModel;
     185                            connectorModel.PluginModel = this;
     186                            connectorModel.IsMandatory = dynamicProperty.PInfo.Mandatory;
     187                            connectorModel.PropertyName = dynamicProperty.Name;
     188                            connectorModel.ToolTip = dynamicProperty.PInfo.ToolTip;
     189                            connectorModel.ConnectorOrientation = ConnectorOrientation.East;
     190                            EventInfo eventinfo = Plugin.GetType().GetEvent(dynamicPropertyInfoAttribute.UpdateDynamicPropertiesEvent);
     191                            eventinfo.AddEventHandler(Plugin, new DynamicPropertiesChanged(connectorModel.PropertyTypeChangedOnPlugin));
     192                            connectorModel.IsDynamic = true;
     193                            connectorModel.DynamicGetterName = dynamicPropertyInfoAttribute.MethodGetValue;
     194                            connectorModel.DynamicSetterName = dynamicPropertyInfoAttribute.MethodSetValue;
     195                            connectorModel.Outgoing = true;
     196                            Plugin.PropertyChanged += connectorModel.PropertyChangedOnPlugin;
     197                            OutputConnectors.Add(connectorModel);
     198                            WorkspaceModel.AllConnectorModels.Add(connectorModel);
     199
     200                        }
     201                    }
     202                }
     203            }
     204        }
    152205        /// <summary>
    153206        /// Get the Image of the Plugin
     
    205258                {
    206259                    AtLeastOneInputSet = true;
    207                 }
    208 
    209             }
    210 
    211             //Next test if every connected output Connection is not active
    212             foreach (ConnectorModel connectorModel in this.OutputConnectors)
    213             {
    214                 foreach (ConnectionModel connection in connectorModel.OutputConnections)
    215                 {
    216                     if (connection.Active)
    217                     {                           
    218                        return;
    219                     }                       
    220260                }
    221261            }
Note: See TracChangeset for help on using the changeset viewer.