Changeset 2680


Ignore:
Timestamp:
01/25/10 12:59:38 (10 years ago)
Author:
epitzer
Message:

keep namespace treeview node expansion and expand newly added namespace nodes (#842)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Operators.Programmable/3.2/ProgrammableOperatorView.cs

    r2668 r2680  
    228228    private void InitializeNamespacesList() {
    229229      initializing = true;
     230      TreeNode oldTree = new TreeNode("root");
     231      CloneTreeNodeCollection(oldTree, namespacesTreeView.Nodes);
    230232      namespacesTreeView.Nodes.Clear();
    231233      var selectedNamespaces = new HashSet<string>(ProgrammableOperator.Namespaces);
    232234      foreach (var ns in ProgrammableOperator.GetAllNamespaces(true))
    233         AddNamespace(namespacesTreeView.Nodes, ns, selectedNamespaces.Contains(ns));
     235        AddNamespace(namespacesTreeView.Nodes, ns, selectedNamespaces.Contains(ns), oldTree);
    234236      codeEditor.Prefix = GetGeneratedPrefix();
    235237      initializing = false;
    236238    }
    237239
    238     private void AddNamespace(TreeNodeCollection parentNodes, string ns, bool isSelected) {
     240    private void CloneTreeNodeCollection(TreeNode root, TreeNodeCollection nodes) {
     241      foreach (TreeNode n in nodes) {
     242        TreeNode newNode = root.Nodes.Add(n.Text, n.Text);
     243        newNode.Checked = n.Checked;
     244        CloneTreeNodeCollection(newNode, n.Nodes);
     245        if (n.IsExpanded)
     246          newNode.Expand();
     247      }
     248    }
     249
     250    private bool AddNamespace(TreeNodeCollection parentNodes, string ns, bool isSelected, TreeNode oldTree) {
    239251      int dotIndex = ns.IndexOf('.');
    240252      string prefix = ns;
    241253      if (dotIndex != -1)
    242254        prefix = ns.Substring(0, dotIndex);
     255      TreeNode node = GetOrCreateNode(parentNodes, prefix);
     256      TreeNode oldNode = MaybeGetNode(oldTree, prefix);
     257      bool isNew = oldNode == null;
     258      if (dotIndex != -1 && dotIndex + 1 < ns.Length) {
     259        isNew = AddNamespace(node.Nodes, ns.Substring(dotIndex + 1, ns.Length - (dotIndex + 1)), isSelected, oldNode);
     260      } else {
     261        node.Checked = isSelected;
     262      }
     263      if (isNew || oldNode != null && oldNode.IsExpanded)
     264        node.Expand();
     265      if (isNew)
     266        namespacesTreeView.SelectedNode = node;
     267      return isNew;
     268    }
     269
     270    private static TreeNode MaybeGetNode(TreeNode parentNode, string key) {
     271      if (parentNode == null)
     272        return null;
     273      if (parentNode.Nodes.ContainsKey(key))
     274        return parentNode.Nodes[key];
     275      return null;
     276    }
     277
     278    private static TreeNode GetOrCreateNode(TreeNodeCollection parentNodes, string key) {
    243279      TreeNode node = null;
    244       if (parentNodes.ContainsKey(prefix)) {
    245         node = parentNodes[prefix];
    246       } else {
    247         node = parentNodes.Add(prefix, prefix);
    248       }
    249       if (dotIndex != -1 && dotIndex + 1 < ns.Length) {
    250         AddNamespace(node.Nodes, ns.Substring(dotIndex + 1, ns.Length - (dotIndex + 1)), isSelected);
    251         if (isSelected)
    252           node.Expand();
    253       }  else
    254         node.Checked = isSelected;
     280      if (parentNodes.ContainsKey(key)) {
     281        node = parentNodes[key];
     282      } else {
     283        node = parentNodes.Add(key, key);
     284      }
     285      return node;
    255286    }
    256287
Note: See TracChangeset for help on using the changeset viewer.