Changeset 1809


Ignore:
Timestamp:
Aug 13, 2010, 9:52:15 AM (11 years ago)
Author:
kopal
Message:
  • Editor now disables asynchronous PropertyChanged in EventHelpers at startup of ExecutionEngine and enables it at termination
  • now Connector PropertyChanged is used to propagate output data (so next plugins may be executed even if plugin before is running)
Location:
trunk/CrypPlugins/WorkspaceManager
Files:
5 edited

Legend:

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

    r1806 r1809  
    378378            clearInputs();
    379379
    380             //7. Fill all outputs of our plugin
    381             fillOutputs();
    382 
    383             //8. Send start messages to possible executable next plugins
     380            //7. Send execute messages to possible executable next plugins
    384381            runNextPlugins();
    385382        }
     
    389386        /// </summary>
    390387        private void runNextPlugins()
    391         {
    392             foreach (ConnectorModel connectorModel in PluginModel.OutputConnectors)
    393             {
    394                 foreach (ConnectionModel connectionModel in connectorModel.OutputConnections)
    395                 {
    396                     if (mayExecute(connectionModel.To.PluginModel))
    397                     {
    398                         MessageExecution msg_exce = new MessageExecution();
    399                         msg_exce.PluginModel = connectionModel.To.PluginModel;
    400                         connectionModel.To.PluginModel.PluginProtocol.BroadcastMessage(msg_exce);
    401                     }
    402                 }
    403             }
    404 
     388        {           
    405389            foreach (ConnectorModel connectorModel in PluginModel.InputConnectors)
    406390            {
     
    420404            }
    421405        }
    422 
    423         /// <summary>
    424         /// Fill all outputs of the plugin
    425         /// </summary>
    426         private void fillOutputs()
    427         {
    428             foreach (ConnectorModel connectorModel in PluginModel.OutputConnectors)
    429             {
    430                 object data;
    431 
    432                 if (connectorModel.IsDynamic)
    433                 {
    434                     data = connectorModel.PluginModel.Plugin.GetType().GetMethod(connectorModel.DynamicGetterName).Invoke(connectorModel.PluginModel.Plugin, new object[] { connectorModel.PropertyName });
    435                 }
    436                 else
    437                 {
    438                     data = connectorModel.PluginModel.Plugin.GetType().GetProperty(connectorModel.PropertyName).GetValue(connectorModel.PluginModel.Plugin, null);
    439                 }
    440 
    441                 if (data != null)
    442                 {
    443                     foreach (ConnectionModel connectionModel in connectorModel.OutputConnections)
    444                     {
    445                         Data Data = new Data();
    446                         Data.value = data;
    447                         connectionModel.To.Data = Data;
    448                         connectionModel.To.HasData = true;
    449                         connectionModel.Active = true;
    450                         connectionModel.GuiNeedsUpdate = true;
    451                         connectorModel.Data = Data;
    452                     }
    453                 }
    454             }
    455         }
    456 
     406     
    457407        /// <summary>
    458408        /// Delete all input data of inputs of the plugin
  • trunk/CrypPlugins/WorkspaceManager/Model/ConnectorModel.cs

    r1803 r1809  
    193193        /// </summary>
    194194        public string ToolTip { get; set; }
     195
     196        /// Plugin informs the Connector that a PropertyChanged
     197        /// </summary>
     198        /// <param name="sender"></param>
     199        /// <param name="propertyChangedEventArgs"></param>
     200        public void PropertyChangedOnPlugin(Object sender, PropertyChangedEventArgs propertyChangedEventArgs)
     201        {
     202            if (sender == this.PluginModel.Plugin &&
     203                propertyChangedEventArgs.PropertyName.Equals(PropertyName) &&
     204                Outgoing)
     205            {
     206                object data = null;
     207                if (IsDynamic)
     208                {
     209                    data = sender.GetType().GetMethod(DynamicGetterName).Invoke(sender, new object[] { this.PropertyName });
     210                }
     211                else
     212                {
     213                    data = sender.GetType().GetProperty(propertyChangedEventArgs.PropertyName).GetValue(sender, null);
     214                }
     215
     216                if (data == null)
     217                {
     218                    return;
     219                }
     220
     221                foreach (ConnectionModel connectionModel in this.OutputConnections)
     222                {
     223                    Data Data = new Data();
     224                    Data.value = data;
     225                    connectionModel.To.Data = Data;
     226                    connectionModel.To.HasData = true;
     227                    connectionModel.Active = true;
     228                    connectionModel.GuiNeedsUpdate = true;
     229                }
     230
     231                //We changed an input on the PluginModels where "To"s are belonging to so
     232                //we have to check if there are executable now
     233                foreach (ConnectionModel connectionModel in this.OutputConnections)
     234                {
     235                    MessageExecution msg = new MessageExecution();
     236                    msg.PluginModel = connectionModel.To.PluginModel;
     237                    connectionModel.To.PluginModel.PluginProtocol.BroadcastMessage(msg);
     238                }
     239            }
     240        }
     241
    195242
    196243        /// <summary>
  • trunk/CrypPlugins/WorkspaceManager/Model/ModelPersistance.cs

    r1803 r1809  
    101101                pluginModel.Plugin.OnGuiLogNotificationOccured += workspaceManagerEditor.GuiLogNotificationOccured;
    102102                pluginModel.Plugin.OnGuiLogNotificationOccured += pluginModel.GuiLogNotificationOccured;
    103                 pluginModel.Plugin.OnPluginProgressChanged += pluginModel.PluginProgressChanged;
     103                pluginModel.Plugin.OnPluginProgressChanged += pluginModel.PluginProgressChanged;               
    104104                pluginModel.Plugin.OnPluginStatusChanged += pluginModel.PluginStatusChanged;
    105105                pluginModel.Plugin.Settings.PropertyChanged += pluginModel.SettingsPropertyChanged;
     
    115115                    eventinfo.AddEventHandler(connectorModel.PluginModel.Plugin, new DynamicPropertiesChanged(connectorModel.PropertyTypeChangedOnPlugin));
    116116                }
     117                connectorModel.PluginModel.Plugin.PropertyChanged += connectorModel.PropertyChangedOnPlugin;
    117118            }
    118119
  • trunk/CrypPlugins/WorkspaceManager/Model/PluginModel.cs

    r1803 r1809  
    172172                        connectorModel.ToolTip = propertyInfoAttribute.ToolTip;
    173173                        connectorModel.IControl = false;
     174                        connectorModel.PluginModel.Plugin.PropertyChanged += connectorModel.PropertyChangedOnPlugin;
    174175                        InputConnectors.Add(connectorModel);
    175176                        WorkspaceModel.AllConnectorModels.Add(connectorModel);
     
    186187                        connectorModel.ToolTip = propertyInfoAttribute.ToolTip;
    187188                        connectorModel.IControl = true;
     189                        connectorModel.PluginModel.Plugin.PropertyChanged += connectorModel.PropertyChangedOnPlugin;
    188190                        InputConnectors.Add(connectorModel);
    189191                        WorkspaceModel.AllConnectorModels.Add(connectorModel);
     
    201203                        connectorModel.Outgoing = true;
    202204                        connectorModel.IControl = false;
     205                        connectorModel.PluginModel.Plugin.PropertyChanged += connectorModel.PropertyChangedOnPlugin;
    203206                        OutputConnectors.Add(connectorModel);
    204207                        WorkspaceModel.AllConnectorModels.Add(connectorModel);
     
    216219                        connectorModel.Outgoing = true;
    217220                        connectorModel.IControl = true;
     221                        connectorModel.PluginModel.Plugin.PropertyChanged += connectorModel.PropertyChangedOnPlugin;
    218222                        OutputConnectors.Add(connectorModel);
    219223                        WorkspaceModel.AllConnectorModels.Add(connectorModel);
     
    238242                            connectorModel.Name = dynamicProperty.Name;
    239243                            connectorModel.ToolTip = dynamicProperty.PInfo.ToolTip;
    240                            EventInfo eventinfo = Plugin.GetType().GetEvent(dynamicPropertyInfoAttribute.UpdateDynamicPropertiesEvent);
     244                            EventInfo eventinfo = Plugin.GetType().GetEvent(dynamicPropertyInfoAttribute.UpdateDynamicPropertiesEvent);
    241245                            connectorModel.IsDynamic = true;
    242246                            connectorModel.DynamicGetterName = dynamicPropertyInfoAttribute.MethodGetValue;
    243247                            connectorModel.DynamicSetterName = dynamicPropertyInfoAttribute.MethodSetValue;
     248                            connectorModel.PluginModel.Plugin.PropertyChanged += connectorModel.PropertyChangedOnPlugin;
    244249                            eventinfo.AddEventHandler(Plugin, new DynamicPropertiesChanged(connectorModel.PropertyTypeChangedOnPlugin));
    245250                            InputConnectors.Add(connectorModel);
     
    261266                            connectorModel.DynamicGetterName = dynamicPropertyInfoAttribute.MethodGetValue;
    262267                            connectorModel.DynamicSetterName = dynamicPropertyInfoAttribute.MethodSetValue;
     268                            connectorModel.PluginModel.Plugin.PropertyChanged += connectorModel.PropertyChangedOnPlugin;
    263269                            connectorModel.Outgoing = true;
    264270                            OutputConnectors.Add(connectorModel);
  • trunk/CrypPlugins/WorkspaceManager/WorkspaceManager.cs

    r1805 r1809  
    3636using System.Windows.Controls;
    3737using System.Windows.Media;
     38using Cryptool.PluginBase.Miscellaneous;
    3839
    3940//Disable warnings for unused or unassigned fields and events:
     
    357358                return;
    358359            }
    359            
     360            EventsHelper.AsynchronousPropertyChanged = false;
    360361            try
    361362            {
     
    437438                return;
    438439            }
    439 
     440            EventsHelper.AsynchronousPropertyChanged = true;
    440441            try
    441442            {
     
    475476                ExecutionEngine.Stop();
    476477            }
     478            EventsHelper.AsynchronousPropertyChanged = true;
    477479        }
    478480
Note: See TracChangeset for help on using the changeset viewer.