Changeset 9043 for trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicExpressionTreeChart.cs
- Timestamp:
- 12/12/12 23:04:40 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicExpressionTreeChart.cs
r9006 r9043 29 29 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { 30 30 internal delegate void 31 ModifyTree(ISymbolicExpressionTree tree, ISymbolicExpressionTreeNode node, ISymbolicExpressionTreeNode oldChild, ISymbolicExpressionTreeNode newChild, 32 bool removeSubtree = true); 31 ModifyTree(ISymbolicExpressionTree tree, ISymbolicExpressionTreeNode node, ISymbolicExpressionTreeNode oldChild, ISymbolicExpressionTreeNode newChild, bool removeSubtree = true); 33 32 34 33 internal sealed partial class InteractiveSymbolicExpressionTreeChart : SymbolicExpressionTreeChart { 35 34 private ISymbolicExpressionTreeNode tempNode; // node in clipboard (to be cut/copy/pasted etc) 36 35 private VisualSymbolicExpressionTreeNode currSelected; // currently selected node 37 p ublic enum EditOp { NoOp, CopySubtree, CutSubtree, ChangeNode, InsertNode, InsertSubtree, RemoveNode, RemoveSubtree }36 private enum EditOp { NoOp, CopySubtree, CutSubtree } 38 37 private EditOp lastOp = EditOp.NoOp; 39 38 … … 52 51 var ea = new MouseEventArgs(MouseButtons.Left, 1, point.X, point.Y, 0); 53 52 var visualNode = FindVisualSymbolicExpressionTreeNodeAt(ea.X, ea.Y); 54 if (visualNode != null) { OnSymbolicExpressionTreeNodeClicked(visualNode, ea); }; 53 if (visualNode != null) { 54 OnSymbolicExpressionTreeNodeClicked(visualNode, ea); 55 } else { 56 currSelected = null; 57 } 55 58 56 59 if (currSelected == null) { … … 76 79 77 80 protected override void OnSymbolicExpressionTreeNodeClicked(object sender, MouseEventArgs e) { 78 var visualTreeNode = (VisualSymbolicExpressionTreeNode)sender;79 var lastSelected = currSelected;80 currSelected = visualTreeNode;81 81 if (currSelected != null) { 82 currSelected.LineColor = Color. LightGreen;82 currSelected.LineColor = Color.FromArgb(255, currSelected.LineColor); 83 83 RepaintNode(currSelected); 84 84 } 85 if (lastSelected != null) 86 base.OnSymbolicExpressionTreeNodeClicked(lastSelected, e); 85 currSelected = (VisualSymbolicExpressionTreeNode)sender; ; 86 if (currSelected != null) { 87 currSelected.LineColor = Color.FromArgb(130, currSelected.LineColor); 88 RepaintNode(currSelected); 89 } 90 } 91 92 protected override void SymbolicExpressionTreeChart_MouseClick(object sender, MouseEventArgs e) { 93 var visualTreeNode = FindVisualSymbolicExpressionTreeNodeAt(e.X, e.Y); 94 if (visualTreeNode != null) { 95 OnSymbolicExpressionTreeNodeClicked(visualTreeNode, e); 96 } else if (currSelected != null) { 97 currSelected.LineColor = Color.FromArgb(255, currSelected.LineColor); 98 RepaintNode(currSelected); 99 currSelected = null; 100 } 87 101 } 88 102 … … 124 138 currSelected = null; 125 139 } 126 127 140 private void changeNodeToolStripMenuItem_Click(object sender, EventArgs e) { 128 141 if (currSelected == null) return; … … 150 163 currSelected = null; 151 164 } 152 153 165 private void cutToolStripMenuItem_Click(object sender, EventArgs e) { 154 166 lastOp = EditOp.CutSubtree; 167 copySubtree(); 168 } 169 private void copyToolStripMenuItem_Click(object sender, EventArgs e) { 170 lastOp = EditOp.CopySubtree; 171 copySubtree(); 172 } 173 private void copySubtree() { 155 174 if (tempNode != null) { 156 175 foreach (var subtree in tempNode.IterateNodesBreadth()) { 157 176 var vNode = GetVisualSymbolicExpressionTreeNode(subtree); 158 base.OnSymbolicExpressionTreeNodeClicked(vNode, null);177 vNode.LineColor = Color.FromArgb(255, vNode.LineColor); // reset the alpha value to 255 159 178 if (subtree.Parent != null) { 160 179 var vArc = GetVisualSymbolicExpressionTreeNodeConnection(subtree.Parent, subtree); 161 vArc.LineColor = Color. Black;180 vArc.LineColor = Color.FromArgb(255, vArc.LineColor); 162 181 } 163 182 } … … 166 185 foreach (var node in tempNode.IterateNodesPostfix()) { 167 186 var visualNode = GetVisualSymbolicExpressionTreeNode(node); 168 visualNode.LineColor = Color.LightGray; 169 visualNode.TextColor = Color.LightGray; 170 if (node.SubtreeCount > 0) { 171 foreach (var subtree in node.Subtrees) { 172 var visualLine = GetVisualSymbolicExpressionTreeNodeConnection(node, subtree); 173 visualLine.LineColor = Color.LightGray; 174 } 175 } 176 } 177 currSelected = null; 178 Repaint(); 179 } 180 private void copyToolStripMenuItem_Click(object sender, EventArgs e) { 181 lastOp = EditOp.CopySubtree; 182 if (tempNode != null) { 183 foreach (var subtree in tempNode.IterateNodesBreadth()) { 184 var vNode = GetVisualSymbolicExpressionTreeNode(subtree); 185 base.OnSymbolicExpressionTreeNodeClicked(vNode, null); 186 if (subtree.Parent != null) { 187 var vArc = GetVisualSymbolicExpressionTreeNodeConnection(subtree.Parent, subtree); 188 vArc.LineColor = Color.Black; 189 } 190 } 191 } 192 tempNode = currSelected.SymbolicExpressionTreeNode; 193 foreach (var node in tempNode.IterateNodesPostfix()) { 194 var visualNode = GetVisualSymbolicExpressionTreeNode(node); 195 visualNode.LineColor = Color.LightGray; 196 visualNode.TextColor = Color.LightGray; 197 if (node.SubtreeCount <= 0) continue; 187 visualNode.LineColor = Color.FromArgb(100, visualNode.LineColor); 188 visualNode.TextColor = Color.FromArgb(100, visualNode.TextColor); 198 189 foreach (var subtree in node.Subtrees) { 199 190 var visualLine = GetVisualSymbolicExpressionTreeNodeConnection(node, subtree); 200 visualLine.LineColor = Color. LightGray;191 visualLine.LineColor = Color.FromArgb(100, visualLine.LineColor); 201 192 } 202 193 } … … 205 196 } 206 197 private void removeNodeToolStripMenuItem_Click(object sender, EventArgs e) { 207 lastOp = EditOp.RemoveNode;208 198 var node = currSelected.SymbolicExpressionTreeNode; 209 199 ModifyTree(Tree, node.Parent, node, null, removeSubtree: false); … … 211 201 } 212 202 private void removeSubtreeToolStripMenuItem_Click(object sender, EventArgs e) { 213 lastOp = EditOp.RemoveNode;214 203 var node = currSelected.SymbolicExpressionTreeNode; 215 204 ModifyTree(Tree, node.Parent, node, null, removeSubtree: true); … … 227 216 switch (lastOp) { 228 217 case EditOp.CutSubtree: { 218 if (tempNode.IterateNodesBreadth().Contains(node)) 219 goto case EditOp.CopySubtree; // a subtree cannot be cut/pasted onto itself 229 220 ModifyTree(Tree, tempNode.Parent, tempNode, null); //remove node from its original parent 230 ModifyTree(Tree, node, null, tempNode); //insert it as a child to the new parent221 ModifyTree(Tree, node, null, tempNode); //insert it as a child to the new parent 231 222 lastOp = EditOp.CopySubtree; //do this so the next paste will actually perform a copy 232 223 break; … … 241 232 } 242 233 currSelected = null; // because the tree will have changed 234 tempNode = null; // clear the clipboard after one paste 243 235 } 244 236 }
Note: See TracChangeset
for help on using the changeset viewer.