Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/19/10 03:28:16 (14 years ago)
Author:
swagner
Message:

Restricted types of child operators in MultiOperator (#979)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs

    r3393 r3407  
    2424using System.ComponentModel;
    2525using System.Drawing;
     26using System.Linq;
    2627using System.Windows.Forms;
    2728using HeuristicLab.Collections;
     
    3536  [Content(typeof(IOperator), false)]
    3637  public sealed partial class OperatorTreeView : ItemView {
    37     private Dictionary<IValueParameter<IOperator>, List<TreeNode>> opParamNodeTable;
     38    private Dictionary<IValueParameter, List<TreeNode>> opParamNodeTable;
    3839    private Dictionary<IOperator, List<TreeNode>> operatorNodeTable;
    3940    private Dictionary<IKeyedItemCollection<string, IParameter>, IOperator> parametersOperatorTable;
     
    6667      InitializeComponent();
    6768      graphTreeView.Sorted = true;
    68       opParamNodeTable = new Dictionary<IValueParameter<IOperator>, List<TreeNode>>();
     69      opParamNodeTable = new Dictionary<IValueParameter, List<TreeNode>>();
    6970      operatorNodeTable = new Dictionary<IOperator, List<TreeNode>>();
    7071      parametersOperatorTable = new Dictionary<IKeyedItemCollection<string, IParameter>, IOperator>();
     
    116117
    117118    #region TreeNode Management
    118     private TreeNode CreateTreeNode(IValueParameter<IOperator> opParam) {
     119    private TreeNode CreateTreeNode(IValueParameter opParam) {
    119120      TreeNode node = new TreeNode();
    120121      node.Text = opParam.Name + ": ";
     
    127128      opParamNodeTable[opParam].Add(node);
    128129
    129       FillTreeNode(node, opParam.Value);
     130      FillTreeNode(node, (IOperator)opParam.Value);
    130131      return node;
    131132    }
     
    162163        else node.ForeColor = graphTreeView.ForeColor;
    163164
    164         foreach (IParameter param in op.Parameters) {
    165           if (param is IValueParameter<IOperator>)
     165        foreach (IValueParameter param in op.Parameters.OfType<IValueParameter>()) {
     166          if (typeof(IOperator).IsAssignableFrom(param.DataType))
    166167            node.Nodes.Add(new TreeNode());
    167168        }
     
    199200      ClearTreeNode(node);
    200201
    201       IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
     202      IValueParameter opParam = GetOperatorParameterTag(node);
    202203      if (opParam != null) {
    203204        opParamNodeTable[opParam].Remove(node);
     
    211212    }
    212213    private void AddParameterNodes(IOperator op, IEnumerable<IParameter> parameters) {
    213       foreach (IParameter param in parameters) {
    214         IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
    215         if (opParam != null) {
     214      foreach (IValueParameter param in parameters.OfType<IValueParameter>()) {
     215        if (typeof(IOperator).IsAssignableFrom(param.DataType)) {
    216216          foreach (TreeNode node in operatorNodeTable[op])
    217             node.Nodes.Add(CreateTreeNode(opParam));
     217            node.Nodes.Add(CreateTreeNode(param));
    218218        }
    219219      }
    220220    }
    221221    private void RemoveParameterNodes(IEnumerable<IParameter> parameters) {
    222       foreach (IParameter param in parameters) {
    223         IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
    224         if (opParam != null) {
    225           while (opParamNodeTable.ContainsKey(opParam))
    226             RemoveTreeNode(opParamNodeTable[opParam][0]);
     222      foreach (IValueParameter param in parameters.OfType<IValueParameter>()) {
     223        if (typeof(IOperator).IsAssignableFrom(param.DataType)) {
     224          while (opParamNodeTable.ContainsKey(param))
     225            RemoveTreeNode(opParamNodeTable[param][0]);
    227226        }
    228227      }
     
    235234        Invoke(new EventHandler(opParam_ValueChanged), sender, e);
    236235      else {
    237         IValueParameter<IOperator> opParam = (IValueParameter<IOperator>)sender;
     236        IValueParameter opParam = (IValueParameter)sender;
    238237        foreach (TreeNode node in opParamNodeTable[opParam].ToArray())
    239238          ClearTreeNode(node);
    240239        foreach (TreeNode node in opParamNodeTable[opParam]) {
    241240          node.Text = opParam.Name + ": ";
    242           FillTreeNode(node, opParam.Value);
     241          FillTreeNode(node, (IOperator)opParam.Value);
    243242        }
    244243      }
     
    265264        IOperator op = (IOperator)sender;
    266265        foreach (TreeNode node in operatorNodeTable[op]) {
    267           IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
     266          IValueParameter opParam = GetOperatorParameterTag(node);
    268267          if (opParam == null)
    269268            node.Text = op.Name + " (" + op.ItemName + ")";
     
    330329        node.Nodes.Clear();
    331330        IOperator op = GetOperatorTag(node);
    332         foreach (IParameter param in op.Parameters) {
    333           IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
    334           if (opParam != null) node.Nodes.Add(CreateTreeNode(opParam));
     331        foreach (IValueParameter param in op.Parameters.OfType<IValueParameter>()) {
     332          if (typeof(IOperator).IsAssignableFrom(param.DataType)) node.Nodes.Add(CreateTreeNode(param));
    335333        }
    336334      }
     
    343341    private void graphTreeView_KeyDown(object sender, KeyEventArgs e) {
    344342      if (!ReadOnly && (e.KeyCode == Keys.Delete) && (graphTreeView.SelectedNode != null)) {
    345         IValueParameter<IOperator> opParam = GetOperatorParameterTag(graphTreeView.SelectedNode);
     343        IValueParameter opParam = GetOperatorParameterTag(graphTreeView.SelectedNode);
    346344        if (opParam != null) opParam.Value = null;
    347345      }
     
    371369    private void graphTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
    372370      TreeNode node = (TreeNode)e.Item;
    373       IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
     371      IValueParameter opParam = GetOperatorParameterTag(node);
    374372      IOperator op = GetOperatorTag(node);
    375373      DataObject data = new DataObject();
     
    404402        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) op = (IOperator)op.Clone();
    405403        TreeNode node = graphTreeView.GetNodeAt(graphTreeView.PointToClient(new Point(e.X, e.Y)));
    406         IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
     404        IValueParameter opParam = GetOperatorParameterTag(node);
    407405        opParam.Value = op;
    408406      }
     
    436434    }
    437435
    438     private IValueParameter<IOperator> GetOperatorParameterTag(TreeNode node) {
     436    private IValueParameter GetOperatorParameterTag(TreeNode node) {
    439437      if (node.Tag != null)
    440         return ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item1;
     438        return ((Tuple<IValueParameter, IOperator>)node.Tag).Item1;
    441439      else
    442440        return null;
    443441    }
    444     private void SetOperatorParameterTag(TreeNode node, IValueParameter<IOperator> opParam) {
     442    private void SetOperatorParameterTag(TreeNode node, IValueParameter opParam) {
    445443      if (node.Tag == null)
    446         node.Tag = new Tuple<IValueParameter<IOperator>, IOperator>(opParam, null);
     444        node.Tag = new Tuple<IValueParameter, IOperator>(opParam, null);
    447445      else
    448         ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item1 = opParam;
     446        ((Tuple<IValueParameter, IOperator>)node.Tag).Item1 = opParam;
    449447    }
    450448    private IOperator GetOperatorTag(TreeNode node) {
    451449      if (node.Tag != null)
    452         return ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item2;
     450        return ((Tuple<IValueParameter, IOperator>)node.Tag).Item2;
    453451      else
    454452        return null;
     
    456454    private void SetOperatorTag(TreeNode node, IOperator op) {
    457455      if (node.Tag == null)
    458         node.Tag = new Tuple<IValueParameter<IOperator>, IOperator>(null, op);
     456        node.Tag = new Tuple<IValueParameter, IOperator>(null, op);
    459457      else
    460         ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item2 = op;
     458        ((Tuple<IValueParameter, IOperator>)node.Tag).Item2 = op;
    461459    }
    462460
Note: See TracChangeset for help on using the changeset viewer.