Changeset 2655 for trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs
- Timestamp:
- 01/20/10 05:04:31 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs
r2546 r2655 30 30 using HeuristicLab.Common; 31 31 using HeuristicLab.MainForm; 32 using HeuristicLab.Collections; 32 33 33 34 namespace HeuristicLab.Core.Views { 34 35 /// <summary> 35 /// The visual represenation of <see cref=" IScope"/>.36 /// The visual represenation of <see cref="Scope"/>. 36 37 /// </summary> 37 38 [Content(typeof(Scope), true)] 38 39 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; 41 42 42 43 /// <summary> … … 45 46 /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>. 46 47 /// No own data storage present.</remarks> 47 public IScope Scope {48 get { return ( IScope)Item; }48 public Scope Scope { 49 get { return (Scope)Item; } 49 50 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; }57 51 } 58 52 … … 64 58 InitializeComponent(); 65 59 Caption = "Scope"; 66 scopeNodeTable = new Dictionary< IScope, TreeNode>();67 s copeExpandedTable = new Dictionary<IScope, bool>();68 myAutomaticUpdating = false; 60 scopeNodeTable = new Dictionary<Scope, TreeNode>(); 61 subScopesScopeTable = new Dictionary<ScopeList, Scope>(); 62 69 63 } 70 64 /// <summary> … … 73 67 /// <remarks>Calls <see cref="ScopeView()"/>.</remarks> 74 68 /// <param name="scope">The scope to represent visually.</param> 75 public ScopeView( IScope scope)69 public ScopeView(Scope scope) 76 70 : this() { 77 71 Scope = scope; … … 82 76 /// </summary> 83 77 /// <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) { 87 81 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; 90 86 if (Scope == null) { 91 87 Caption = "Scope"; … … 93 89 } else { 94 90 Caption = Scope.Name + " (" + Scope.GetType().Name + ")"; 91 scopesTreeView.Enabled = true; 95 92 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) { 101 97 TreeNode node = new TreeNode(); 102 98 node.Text = scope.Name; … … 104 100 105 101 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); 112 109 if (scope.SubScopes.Count > 0) 113 110 node.Nodes.Add(new TreeNode()); 114 111 return node; 115 112 } 113 116 114 private void RemoveTreeNode(TreeNode node) { 117 115 foreach (TreeNode child in node.Nodes) 118 116 RemoveTreeNode(child); 119 117 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) { 122 120 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); 127 128 } 128 129 } 129 130 130 131 #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; 136 141 } 137 142 } 138 143 private void scopesTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) { 139 144 TreeNode node = e.Node; 140 IScope scope = (IScope)node.Tag;145 Scope scope = (Scope)node.Tag; 141 146 142 147 node.Nodes.Clear(); 143 148 for (int i = 0; i < scope.SubScopes.Count; i++) 144 149 node.Nodes.Add(CreateTreeNode(scope.SubScopes[i])); 145 scopeExpandedTable[scope] = true;146 150 } 147 151 private void scopesTreeView_AfterCollapse(object sender, System.Windows.Forms.TreeViewEventArgs e) { 148 152 TreeNode node = e.Node; 149 IScope scope = (IScope)node.Tag;153 Scope scope = (Scope)node.Tag; 150 154 151 155 if (node.Nodes.Count > 0) { … … 155 159 node.Nodes.Add(new TreeNode()); 156 160 } 157 scopeExpandedTable[scope] = false;158 161 } 159 162 private void scopesTreeView_ItemDrag(object sender, ItemDragEventArgs e) { 160 163 TreeNode node = (TreeNode)e.Item; 161 IScope scope = node.Tag as IScope;164 Scope scope = node.Tag as Scope; 162 165 if (scope != null) { 163 166 DataObject data = new DataObject(); 164 data.SetData(" IScope", scope);167 data.SetData("Scope", scope); 165 168 data.SetData("DragSource", scopesTreeView); 166 169 DoDragDrop(data, DragDropEffects.Copy); … … 169 172 #endregion 170 173 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 } 209 182 } 210 183 #endregion 211 184 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 } 248 263 } 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 } 280 268 } 281 269 }
Note: See TracChangeset
for help on using the changeset viewer.