Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/08/10 16:26:35 (14 years ago)
Author:
epitzer
Message:

Incorporate changes suggested by abeham in 842#comment:28 (#842)

  • Fix persistence of selected assemblies
  • Fix problem with static initialization
  • Make parameter values (ActualValue) with parameter object
  • show (or hide) parameter namespaces as necessary
  • add icons for buttons, assemblies and namespaces
  • sort assemblies and namespaces alphabetically
  • correctly mark and unmark select assemblies
  • put assemblies and namespaces into group boxes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperator.cs

    r3454 r3903  
    3838using HeuristicLab.PluginInfrastructure;
    3939using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     40using HeuristicLab.Persistence.Auxiliary;
    4041using HeuristicLab.Collections;
    4142
     
    4344
    4445  [Item("ProgrammableOperator", "An operator that can be programmed for arbitrary needs.")]
    45   [StorableClass] 
     46  [StorableClass]
    4647  public class ProgrammableOperator : Operator, IParameterizedNamedItem {
    4748
     
    7980    protected Dictionary<Assembly, bool> Assemblies;
    8081
    81     [Storable]
    82     private List<string> _persistedAssemblyNames {
     82    [Storable(Name="SelectedAssemblies")]
     83    private List<string> _selectedAssemblyNames_persistence {
    8384      get {
    84         return Assemblies.Keys.Select(a => a.FullName).ToList();
     85        return Assemblies.Where(a => a.Value).Select(a => a.Key.FullName).ToList();       
    8586      }
    8687      set {
     
    115116
    116117    public void SelectAssembly(Assembly a) {
    117       if (a != null && Assemblies.ContainsKey(a))
     118      if (a != null && Assemblies.ContainsKey(a) && !Assemblies[a]) {
    118119        Assemblies[a] = true;
     120      }
    119121    }
    120122
    121123    public void UnselectAssembly(Assembly a) {
    122       if (a != null && Assemblies.ContainsKey(a))
     124      if (a != null && Assemblies.ContainsKey(a) && Assemblies[a]) {
    123125        Assemblies[a] = false;
     126      }
    124127    }
    125128
    126129    public void SelectNamespace(string ns) {
    127130      namespaces.Add(ns);
     131      OnSignatureChanged();
    128132    }
    129133
    130134    public void UnselectNamespace(string ns) {
    131135      namespaces.Remove(ns);
     136      OnSignatureChanged();
    132137    }
    133138
     
    162167      executeMethod = null;
    163168      ProgrammableOperator.StaticInitialize();
    164       Assemblies = defaultAssemblyDict;
    165       Plugins = defaultPluginDict;
     169      Assemblies = defaultAssemblyDict.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
     170      Plugins = defaultPluginDict.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToList());
    166171      namespaces = new HashSet<string>(DiscoverNamespaces());
    167172      RegisterEvents();
     
    170175    [StorableHook(HookType.AfterDeserialization)]
    171176    private void RegisterEvents() {
    172       Parameters.ItemsAdded += OnSignatureChanged;
    173       Parameters.ItemsRemoved += OnSignatureChanged;
    174       Parameters.ItemsReplaced += OnSignatureChanged;
    175       Parameters.CollectionReset += OnSignatureChanged;
    176     }
    177 
    178     protected void OnSignatureChanged(object sender, CollectionItemsChangedEventArgs<IParameter> args) {
    179       if (SignatureChanged != null)
    180         SignatureChanged(sender, EventArgs.Empty);
     177      Parameters.ItemsAdded += Parameters_Changed;
     178      Parameters.ItemsRemoved += Parameters_Changed;
     179      Parameters.ItemsReplaced += Parameters_Changed;
     180      Parameters.CollectionReset += Parameters_Changed;
     181    }
     182
     183    private void Parameters_Changed(object sender, CollectionItemsChangedEventArgs<IParameter> args) {
     184      OnSignatureChanged();
     185    }
     186
     187    protected void OnSignatureChanged() {
     188      EventHandler handler = SignatureChanged;
     189      if (handler != null)
     190        handler(this, EventArgs.Empty);
    181191    }
    182192
    183193    private static void StaticInitialize() {
    184194      lock (initLock) {
    185         if (defaultPluginDict != null || defaultAssemblyDict != null) return;
     195        if (defaultPluginDict != null && defaultAssemblyDict != null)
     196          return;
    186197        defaultAssemblyDict = DiscoverAssemblies();
    187198        defaultPluginDict = GroupAssemblies(defaultAssemblyDict.Keys);
     
    220231      typeof(HeuristicLab.Core.Item).Assembly,
    221232      typeof(HeuristicLab.Data.IntValue).Assembly,
     233      typeof(HeuristicLab.Parameters.ValueParameter<IItem>).Assembly,
     234      typeof(HeuristicLab.Collections.ObservableList<IItem>).Assembly,
     235      typeof(System.ComponentModel.INotifyPropertyChanged).Assembly,
     236
    222237    };
    223238
     
    248263    protected static List<string> DiscoverNamespaces() {
    249264      return new List<string>() {
     265        "HeuristicLab.Common",
     266        "HeuristicLab.Core",
     267        "HeuristicLab.Data",
     268        "HeuristicLab.Parameters",
    250269        "System",
    251270        "System.Collections.Generic",
     
    253272        "System.Linq",
    254273        "System.Data.Linq",
    255         "HeuristicLab.Common",
    256         "HeuristicLab.Core",
    257         "HeuristicLab.Data",
    258274      };
    259275    }
     
    356372      get {
    357373        var sb = new StringBuilder()
    358         .Append("public static IOperation Execute(IOperator op, IExecutionContext context");
     374        .Append("public static IOperation Execute(")
     375        .Append(TypeNameParser.Parse(typeof(IOperator).FullName).GetTypeNameInCode(namespaces))
     376        .Append(" op, ")
     377        .Append(TypeNameParser.Parse(typeof(IExecutionContext).FullName).GetTypeNameInCode(namespaces))
     378        .Append(" context");
    359379        foreach (IParameter param in Parameters) {
    360           sb.Append(String.Format(", {0} {1}", param.DataType.Name, param.Name));
     380          sb.Append(String.Format(", {0} {1}",
     381            TypeNameParser.Parse(param.GetType().FullName).GetTypeNameInCode(namespaces),
     382            param.Name));
    361383        }
    362384        return sb.Append(")").ToString();
     
    376398      method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(IExecutionContext), "context"));
    377399      foreach (var param in Parameters)
    378         method.Parameters.Add(new CodeParameterDeclarationExpression(param.DataType, param.Name));
     400        method.Parameters.Add(new CodeParameterDeclarationExpression(param.GetType(), param.Name));
    379401      string[] codeLines = lineSplitter.Split(code);
    380402      for (int i = 0; i < codeLines.Length; i++) {
     
    399421
    400422      var parameters = new List<object>() { this, ExecutionContext };
    401       parameters.AddRange(Parameters.Select(p => (object)p.ActualValue));
     423      parameters.AddRange(Parameters.Select(p => (object)p));
    402424      return (IOperation)executeMethod.Invoke(null, parameters.ToArray());
    403425    }
Note: See TracChangeset for help on using the changeset viewer.