Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/20/10 05:04:31 (14 years ago)
Author:
swagner
Message:

Committing first results of the refactoring of HeuristicLab.Core and related plugins (#95)

File:
1 edited

Legend:

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

    r2546 r2655  
    3030using HeuristicLab.Common;
    3131using HeuristicLab.MainForm;
     32using HeuristicLab.Collections;
    3233
    3334namespace HeuristicLab.Core.Views {
    3435  /// <summary>
    35   /// The visual represenation of <see cref="IScope"/>.
     36  /// The visual represenation of <see cref="Scope"/>.
    3637  /// </summary>
    3738  [Content(typeof(Scope), true)]
    3839  public partial class ScopeView : ItemViewBase {
    39     private Dictionary<IScope, TreeNode> scopeNodeTable;
    40     private Dictionary<IScope, bool> scopeExpandedTable;
     40    private Dictionary<Scope, TreeNode> scopeNodeTable;
     41    private Dictionary<ScopeList, Scope> subScopesScopeTable;
    4142
    4243    /// <summary>
     
    4546    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
    4647    /// No own data storage present.</remarks>
    47     public IScope Scope {
    48       get { return (IScope)Item; }
     48    public Scope Scope {
     49      get { return (Scope)Item; }
    4950      set { base.Item = value; }
    50     }
    51     private bool myAutomaticUpdating;
    52     /// <summary>
    53     /// Gets information whether the scope is automatically updating.
    54     /// </summary>
    55     public bool AutomaticUpdating {
    56       get { return myAutomaticUpdating; }
    5751    }
    5852
     
    6458      InitializeComponent();
    6559      Caption = "Scope";
    66       scopeNodeTable = new Dictionary<IScope, TreeNode>();
    67       scopeExpandedTable = new Dictionary<IScope, bool>();
    68       myAutomaticUpdating = false;
     60      scopeNodeTable = new Dictionary<Scope, TreeNode>();
     61      subScopesScopeTable = new Dictionary<ScopeList, Scope>();
     62
    6963    }
    7064    /// <summary>
     
    7367    /// <remarks>Calls <see cref="ScopeView()"/>.</remarks>
    7468    /// <param name="scope">The scope to represent visually.</param>
    75     public ScopeView(IScope scope)
     69    public ScopeView(Scope scope)
    7670      : this() {
    7771      Scope = scope;
     
    8276    /// </summary>
    8377    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
    84     protected override void UpdateControls() {
    85       base.UpdateControls();
    86       if (scopesTreeView.Nodes.Count > 0)
     78    protected override void OnObjectChanged() {
     79      base.OnObjectChanged();
     80      if (scopesTreeView.Nodes.Count > 0) {
    8781        RemoveTreeNode(scopesTreeView.Nodes[0]);
    88       scopesTreeView.SelectedNode = null;
    89       scopesTreeView.Nodes.Clear();
     82        scopesTreeView.Nodes.Clear();
     83      }
     84      variableCollectionView.NamedItemCollection = null;
     85      variableCollectionView.Enabled = false;
    9086      if (Scope == null) {
    9187        Caption = "Scope";
     
    9389      } else {
    9490        Caption = Scope.Name + " (" + Scope.GetType().Name + ")";
     91        scopesTreeView.Enabled = true;
    9592        scopesTreeView.Nodes.Add(CreateTreeNode(Scope));
    96         scopesTreeView.Enabled = true;
    97       }
    98     }
    99 
    100     private TreeNode CreateTreeNode(IScope scope) {
     93      }
     94    }
     95
     96    private TreeNode CreateTreeNode(Scope scope) {
    10197      TreeNode node = new TreeNode();
    10298      node.Text = scope.Name;
     
    104100
    105101      scopeNodeTable.Add(scope, node);
    106       scopeExpandedTable.Add(scope, false);
    107       if (myAutomaticUpdating) {
    108         scope.SubScopeAdded += new EventHandler<EventArgs<IScope, int>>(Scope_SubScopeAdded);
    109         scope.SubScopeRemoved += new EventHandler<EventArgs<IScope, int>>(Scope_SubScopeRemoved);
    110         scope.SubScopesReordered += new EventHandler(Scope_SubScopesReordered);
    111       }
     102      scope.NameChanged += new EventHandler(Scope_NameChanged);
     103      scope.SubScopes.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsAdded);
     104      scope.SubScopes.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsRemoved);
     105      scope.SubScopes.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsReplaced);
     106      scope.SubScopes.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsMoved);
     107      scope.SubScopes.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_CollectionReset);
     108      subScopesScopeTable.Add(scope.SubScopes, scope);
    112109      if (scope.SubScopes.Count > 0)
    113110        node.Nodes.Add(new TreeNode());
    114111      return node;
    115112    }
     113
    116114    private void RemoveTreeNode(TreeNode node) {
    117115      foreach (TreeNode child in node.Nodes)
    118116        RemoveTreeNode(child);
    119117
    120       IScope scope = node.Tag as IScope;
    121       if ((scope != null) && (scopeNodeTable.ContainsKey(scope))) {
     118      Scope scope = node.Tag as Scope;
     119      if (scope != null) {
    122120        scopeNodeTable.Remove(scope);
    123         scopeExpandedTable.Remove(scope);
    124         scope.SubScopeAdded -= new EventHandler<EventArgs<IScope, int>>(Scope_SubScopeAdded);
    125         scope.SubScopeRemoved -= new EventHandler<EventArgs<IScope, int>>(Scope_SubScopeRemoved);
    126         scope.SubScopesReordered -= new EventHandler(Scope_SubScopesReordered);
     121        scope.NameChanged -= new EventHandler(Scope_NameChanged);
     122        scope.SubScopes.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsAdded);
     123        scope.SubScopes.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsRemoved);
     124        scope.SubScopes.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsReplaced);
     125        scope.SubScopes.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsMoved);
     126        scope.SubScopes.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_CollectionReset);
     127        subScopesScopeTable.Remove(scope.SubScopes);
    127128      }
    128129    }
    129130
    130131    #region TreeView Events
    131     private void scopesTreeView_DoubleClick(object sender, EventArgs e) {
    132       // make sure that we can't get NullPointerExceptions
    133       if(scopesTreeView.SelectedNode != null && scopesTreeView.SelectedNode.Tag != null) {
    134         IScope scope = (IScope)scopesTreeView.SelectedNode.Tag;
    135         MainFormManager.MainForm.ShowView(new VariablesScopeView(scope));
     132    private void scopesTreeView_MouseDown(object sender, MouseEventArgs e) {
     133      TreeNode node = scopesTreeView.GetNodeAt(e.X, e.Y);
     134      if ((node != null) && (node.Tag is Scope)) {
     135        variableCollectionView.NamedItemCollection = ((Scope)node.Tag).Variables;
     136        variableCollectionView.Enabled = true;
     137      } else {
     138        variableCollectionView.NamedItemCollection = null;
     139        variableCollectionView.Enabled = false;
     140        if (node == null) scopesTreeView.SelectedNode = null;
    136141      }
    137142    }
    138143    private void scopesTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) {
    139144      TreeNode node = e.Node;
    140       IScope scope = (IScope)node.Tag;
     145      Scope scope = (Scope)node.Tag;
    141146
    142147      node.Nodes.Clear();
    143148      for (int i = 0; i < scope.SubScopes.Count; i++)
    144149        node.Nodes.Add(CreateTreeNode(scope.SubScopes[i]));
    145       scopeExpandedTable[scope] = true;
    146150    }
    147151    private void scopesTreeView_AfterCollapse(object sender, System.Windows.Forms.TreeViewEventArgs e) {
    148152      TreeNode node = e.Node;
    149       IScope scope = (IScope)node.Tag;
     153      Scope scope = (Scope)node.Tag;
    150154
    151155      if (node.Nodes.Count > 0) {
     
    155159        node.Nodes.Add(new TreeNode());
    156160      }
    157       scopeExpandedTable[scope] = false;
    158161    }
    159162    private void scopesTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
    160163      TreeNode node = (TreeNode)e.Item;
    161       IScope scope = node.Tag as IScope;
     164      Scope scope = node.Tag as Scope;
    162165      if (scope != null) {
    163166        DataObject data = new DataObject();
    164         data.SetData("IScope", scope);
     167        data.SetData("Scope", scope);
    165168        data.SetData("DragSource", scopesTreeView);
    166169        DoDragDrop(data, DragDropEffects.Copy);
     
    169172    #endregion
    170173
    171     #region Context Menu Events
    172     private void contextMenuStrip_Opening(object sender, CancelEventArgs e) {
    173       variablesToolStripMenuItem.Enabled = false;
    174       viewToolStripMenuItem.DropDownItems.Clear();
    175       viewToolStripMenuItem.Enabled = false;
    176       if (scopesTreeView.SelectedNode != null) {
    177         variablesToolStripMenuItem.Enabled = true;
    178         IScope scope = (IScope)scopesTreeView.SelectedNode.Tag;
    179         foreach (IVariable variable in scope.Variables) {
    180           if (variable.Value is IVisualizationItem) {
    181             ToolStripMenuItem item = new ToolStripMenuItem();
    182             item.Text = variable.Name + "...";
    183             item.Tag = variable.Value;
    184             item.Click += new EventHandler(showViewToolStripMenuItem_Click);
    185             viewToolStripMenuItem.DropDownItems.Add(item);
    186           }
    187         }
    188         if (viewToolStripMenuItem.DropDownItems.Count > 0)
    189           viewToolStripMenuItem.Enabled = true;
    190       }
    191     }
    192     private void automaticUpdatingToolStripMenuItem_Click(object sender, EventArgs e) {
    193       ToolStripMenuItem item = (ToolStripMenuItem)sender;
    194       myAutomaticUpdating = item.Checked;
    195       if (myAutomaticUpdating)
    196         Refresh();
    197     }
    198     private void refreshToolStripMenuItem_Click(object sender, EventArgs e) {
    199       Refresh();
    200     }
    201     private void variablesToolStripMenuItem_Click(object sender, EventArgs e) {
    202       IScope scope = (IScope)scopesTreeView.SelectedNode.Tag;
    203       MainFormManager.MainForm.ShowView(new VariablesScopeView(scope));
    204     }
    205     private void showViewToolStripMenuItem_Click(object sender, EventArgs e) {
    206       IItem item = (IItem)((ToolStripMenuItem)sender).Tag;
    207       IView view = MainFormManager.CreateDefaultView(item);
    208       if (view != null) MainFormManager.MainForm.ShowView(view);
     174    #region Scope Events
     175    private void Scope_NameChanged(object sender, EventArgs e) {
     176      if (InvokeRequired)
     177        Invoke(new EventHandler(Scope_NameChanged), sender, e);
     178      else {
     179        Scope scope = (Scope)sender;
     180        scopeNodeTable[scope].Text = scope.Name;
     181      }
    209182    }
    210183    #endregion
    211184
    212     #region Scope Events
    213     private delegate void ScopeDelegate(IScope scope);
    214     private delegate void ScopeScopeIndexDelegate(IScope scope, IScope subScope, int index);
    215     private void Scope_SubScopeAdded(object sender, EventArgs<IScope, int> e) {
    216       IScope scope = (IScope)sender;
    217       TreeNode node = scopeNodeTable[scope];
    218       if (scopeExpandedTable[scope] || (scope.SubScopes.Count == 1))
    219         AddSubScope(scope, e.Value, e.Value2);
    220     }
    221     private void AddSubScope(IScope scope, IScope subScope, int index) {
    222       if (InvokeRequired) {
    223         Invoke(new ScopeScopeIndexDelegate(AddSubScope), scope, subScope, index);
    224       } else {
    225         TreeNode parent = scopeNodeTable[scope];
    226         TreeNode child;
    227         if (parent.IsExpanded)
    228           child = CreateTreeNode(subScope);
    229         else
    230           child = new TreeNode();
    231         parent.Nodes.Insert(index, child);
    232       }
    233     }
    234     private void Scope_SubScopeRemoved(object sender, EventArgs<IScope, int> e) {
    235       IScope scope = (IScope)sender;
    236       TreeNode node = scopeNodeTable[scope];
    237       if (scopeExpandedTable[scope] || (scope.SubScopes.Count == 0))
    238         RemoveSubScope(scope, e.Value, e.Value2);
    239     }
    240     private void RemoveSubScope(IScope scope, IScope subScope, int index) {
    241       if (InvokeRequired) {
    242         Invoke(new ScopeScopeIndexDelegate(RemoveSubScope), scope, subScope, index);
    243       } else {
    244         if (scopeNodeTable.ContainsKey(subScope)) {
    245           TreeNode node = scopeNodeTable[subScope];
    246           RemoveTreeNode(scopeNodeTable[subScope]);
    247           node.Remove();
     185    #region SubScopes Events
     186    private void SubScopes_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<Scope>> e) {
     187      if (InvokeRequired)
     188        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsAdded), sender, e);
     189      else {
     190        Scope parentScope = subScopesScopeTable[(ScopeList)sender];
     191        TreeNode parentNode = scopeNodeTable[parentScope];
     192        if (parentNode.IsExpanded) {
     193          foreach (IndexedItem<Scope> item in e.Items) {
     194            TreeNode node = CreateTreeNode(item.Value);
     195            parentNode.Nodes.Insert(item.Index, node);
     196          }
     197        } else if (parentNode.Nodes.Count == 0) {
     198          parentNode.Nodes.Add(new TreeNode());
     199        }
     200      }
     201    }
     202    private void SubScopes_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Scope>> e) {
     203      if (InvokeRequired)
     204        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsRemoved), sender, e);
     205      else {
     206        Scope parentScope = subScopesScopeTable[(ScopeList)sender];
     207        TreeNode parentNode = scopeNodeTable[parentScope];
     208        if (parentNode.IsExpanded) {
     209          foreach (IndexedItem<Scope> item in e.Items) {
     210            TreeNode node = scopeNodeTable[item.Value];
     211            RemoveTreeNode(node);
     212            node.Remove();
     213          }
     214        } else if (parentScope.SubScopes.Count == 0) {
     215          parentNode.Nodes.Clear();
     216        }
     217      }
     218    }
     219    private void SubScopes_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<Scope>> e) {
     220      if (InvokeRequired)
     221        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsReplaced), sender, e);
     222      else {
     223        Scope parentScope = subScopesScopeTable[(ScopeList)sender];
     224        TreeNode parentNode = scopeNodeTable[parentScope];
     225        if (parentNode.IsExpanded) {
     226          foreach (IndexedItem<Scope> item in e.Items) {
     227            TreeNode node = parentNode.Nodes[item.Index];
     228            RemoveTreeNode(node);
     229            node.Remove();
     230            node = CreateTreeNode(item.Value);
     231            parentNode.Nodes.Insert(item.Index, node);
     232          }
     233        }
     234      }
     235    }
     236    private void SubScopes_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Scope>> e) {
     237      if (InvokeRequired)
     238        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsMoved), sender, e);
     239      else {
     240        Scope parentScope = subScopesScopeTable[(ScopeList)sender];
     241        TreeNode parentNode = scopeNodeTable[parentScope];
     242        if (parentNode.IsExpanded) {
     243          parentNode.Nodes.Clear();
     244          foreach (IndexedItem<Scope> item in e.Items)
     245            parentNode.Nodes.Insert(item.Index, scopeNodeTable[item.Value]);
     246        }
     247      }
     248    }
     249    private void SubScopes_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<Scope>> e) {
     250      if (InvokeRequired)
     251        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_CollectionReset), sender, e);
     252      else {
     253        Scope parentScope = subScopesScopeTable[(ScopeList)sender];
     254        TreeNode parentNode = scopeNodeTable[parentScope];
     255        if (parentNode.IsExpanded) {
     256          foreach (TreeNode node in parentNode.Nodes)
     257            RemoveTreeNode(node);
     258          parentNode.Nodes.Clear();
     259          foreach (IndexedItem<Scope> item in e.Items) {
     260            TreeNode node = CreateTreeNode(item.Value);
     261            parentNode.Nodes.Insert(item.Index, node);
     262          }
    248263        } else {
    249           TreeNode node = scopeNodeTable[scope];
    250           node.Nodes[0].Remove();
    251         }
    252       }
    253     }
    254     private void Scope_SubScopesReordered(object sender, EventArgs e) {
    255       IScope scope = (IScope)sender;
    256       TreeNode node = scopeNodeTable[scope];
    257       if (scopeExpandedTable[scope])
    258         ReorderSubScopes(scope);
    259     }
    260     private void ReorderSubScopes(IScope scope) {
    261       if (InvokeRequired) {
    262         Invoke(new ScopeDelegate(ReorderSubScopes), scope);
    263       } else {
    264         TreeNode node = scopeNodeTable[scope];
    265         node.Nodes.Clear();
    266         for (int i = 0; i < scope.SubScopes.Count; i++)
    267           node.Nodes.Add(scopeNodeTable[scope.SubScopes[i]]);
    268       }
    269     }
    270     #endregion
    271 
    272     #region Mouse Events
    273     private void scopesTreeView_MouseDown(object sender, MouseEventArgs e) {
    274       if (e.Button != MouseButtons.Right)
    275         return;
    276       TreeNode clickedNode = scopesTreeView.GetNodeAt(e.X, e.Y);
    277       if (clickedNode != null) {
    278         scopesTreeView.SelectedNode = clickedNode;
    279         scopesTreeView.Refresh();
     264          parentNode.Nodes.Clear();
     265          if (parentScope.SubScopes.Count > 0)
     266            parentNode.Nodes.Add(new TreeNode());
     267        }
    280268      }
    281269    }
Note: See TracChangeset for help on using the changeset viewer.