Changeset 6403 for branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarEditorView.cs
- Timestamp:
- 06/09/11 16:36:07 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarEditorView.cs
r6387 r6403 159 159 var tree = new SymbolicExpressionTree(new SymbolicExpressionTreeNode(symbol)); 160 160 161 allowedChildSymbolsControl.SuspendRepaint = true; 161 162 if (Content.GetMaximumSubtreeCount(symbol) > 0) { 162 163 for (int i = 0; i < Content.GetMaximumSubtreeCount(symbol); i++) { … … 169 170 } 170 171 allowedChildSymbolsControl.Tree = tree; 172 173 foreach (var subtreeNode in tree.Root.Subtrees) { 174 foreach (var allowedChildNode in subtreeNode.Subtrees) { 175 var visualLine = allowedChildSymbolsControl.GetVisualSymbolicExpressionTreeNodeConnection(subtreeNode, allowedChildNode); 176 visualLine.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; 177 } 178 } 179 180 for (int i = Content.GetMinimumSubtreeCount(symbol); i < Content.GetMaximumSubtreeCount(symbol); i++) { 181 var subtreeNode = tree.Root.GetSubtree(i); 182 var visualTreeNode = allowedChildSymbolsControl.GetVisualSymbolicExpressionTreeNode(subtreeNode); 183 visualTreeNode.TextColor = Color.Gray; 184 visualTreeNode.LineColor = Color.LightGray; 185 186 var visualLine = allowedChildSymbolsControl.GetVisualSymbolicExpressionTreeNodeConnection(tree.Root, subtreeNode); 187 visualLine.LineColor = Color.LightGray; 188 189 foreach (var allowedChildNode in subtreeNode.Subtrees) { 190 visualTreeNode = allowedChildSymbolsControl.GetVisualSymbolicExpressionTreeNode(allowedChildNode); 191 visualTreeNode.TextColor = Color.Gray; 192 visualTreeNode.LineColor = Color.LightGray; 193 194 visualLine = allowedChildSymbolsControl.GetVisualSymbolicExpressionTreeNodeConnection(subtreeNode, allowedChildNode); 195 visualLine.LineColor = Color.LightGray; 196 } 197 } 198 199 allowedChildSymbolsControl.SuspendRepaint = false; 200 allowedChildSymbolsControl.Repaint(); 171 201 UpdateSelectedSymbolicExpressionTreeNodes(); 172 202 } … … 216 246 var symbol = data as ISymbol; 217 247 var symbols = data as IEnumerable<ISymbol>; 218 if (symbol != null && !(symbol is IReadOnlySymbol) && !Content.ContainsSymbol(symbol)) validDragOperation = true;248 if (symbol != null && !(symbol is IReadOnlySymbol) && Content.ContainsSymbol(symbol)) validDragOperation = true; 219 249 else if (symbols != null && symbols.All(s => !(symbol is IReadOnlySymbol) && Content.ContainsSymbol(s))) validDragOperation = true; 220 250 } … … 263 293 foreach (var node in allowedChildSymbolsControl.Tree.IterateNodesPrefix()) { 264 294 var visualNode = allowedChildSymbolsControl.GetVisualSymbolicExpressionTreeNode(node); 265 if (!selectedSymbolicExpressionTreeNodes.Contains(node)) { 266 visualNode.FillColor = Color.White; 267 visualNode.LineColor = Color.Black; 268 } else { 269 visualNode.FillColor = Color.WhiteSmoke; 270 visualNode.LineColor = Color.DarkOrange; 271 } 295 if (!selectedSymbolicExpressionTreeNodes.Contains(node)) visualNode.FillColor = Color.White; 296 else visualNode.FillColor = Color.LightSteelBlue; 297 272 298 } 273 299 allowedChildSymbolsControl.Repaint(); 300 } 301 302 private RectangleF increaseMinimumSubtreeCountRectangle; 303 private RectangleF decreaseMinimumSubtreeCountRectangle; 304 private RectangleF increaseMaximumSubtreeCountRectangle; 305 private RectangleF decreaseMaximumSubtreeCountRectangle; 306 private void allowedChildSymbolsControl_Paint(object sender, PaintEventArgs e) { 307 increaseMinimumSubtreeCountRectangle = RectangleF.Empty; 308 decreaseMinimumSubtreeCountRectangle = RectangleF.Empty; 309 increaseMaximumSubtreeCountRectangle = RectangleF.Empty; 310 decreaseMaximumSubtreeCountRectangle = RectangleF.Empty; 311 312 if (Content == null) return; 313 if (allowedChildSymbolsControl.Tree == null) return; 314 315 var rootNode = allowedChildSymbolsControl.Tree.Root; 316 var visualRootNode = allowedChildSymbolsControl.GetVisualSymbolicExpressionTreeNode(rootNode); 317 var graphics = e.Graphics; 318 319 if (rootNode.Symbol is IReadOnlySymbol) return; 320 if (rootNode.Symbol.MinimumArity == rootNode.Symbol.MaximumArity) return; 321 322 using (Pen pen = new Pen(Color.Black)) { 323 using (Font font = new Font("Times New Roman", 8)) { 324 var stringFormat = new StringFormat(); 325 stringFormat.Alignment = StringAlignment.Center; 326 stringFormat.LineAlignment = StringAlignment.Center; 327 int spacing = 5; 328 int size = (visualRootNode.Height - spacing * 3) / 2; 329 330 increaseMinimumSubtreeCountRectangle = new RectangleF(visualRootNode.X - spacing - size, visualRootNode.Y + spacing, size, size); 331 decreaseMinimumSubtreeCountRectangle = new RectangleF(visualRootNode.X - spacing - size, visualRootNode.Y + size + 2 * spacing, size, size); 332 increaseMaximumSubtreeCountRectangle = new RectangleF(visualRootNode.X + visualRootNode.Width + spacing, visualRootNode.Y + spacing, size, size); 333 decreaseMaximumSubtreeCountRectangle = new RectangleF(visualRootNode.X + visualRootNode.Width + spacing, visualRootNode.Y + size + 2 * spacing, size, size); 334 335 pen.Color = Content.GetMaximumSubtreeCount(rootNode.Symbol) == Content.GetMinimumSubtreeCount(rootNode.Symbol) ? Color.LightGray : Color.Black; 336 graphics.DrawString("+", font, pen.Brush, increaseMinimumSubtreeCountRectangle, stringFormat); 337 graphics.DrawRectangle(pen, Rectangle.Round(increaseMinimumSubtreeCountRectangle)); 338 if (pen.Color == Color.LightGray) increaseMinimumSubtreeCountRectangle = RectangleF.Empty; 339 340 pen.Color = Content.GetMinimumSubtreeCount(rootNode.Symbol) == rootNode.Symbol.MinimumArity ? Color.LightGray : Color.Black; 341 graphics.DrawString("-", font, pen.Brush, decreaseMinimumSubtreeCountRectangle, stringFormat); 342 graphics.DrawRectangle(pen, Rectangle.Round(decreaseMinimumSubtreeCountRectangle)); 343 if (pen.Color == Color.LightGray) decreaseMinimumSubtreeCountRectangle = RectangleF.Empty; 344 345 pen.Color = Content.GetMaximumSubtreeCount(rootNode.Symbol) == rootNode.Symbol.MaximumArity ? Color.LightGray : Color.Black; 346 graphics.DrawRectangle(pen, Rectangle.Round(increaseMaximumSubtreeCountRectangle)); 347 graphics.DrawString("+", font, pen.Brush, increaseMaximumSubtreeCountRectangle, stringFormat); 348 if (pen.Color == Color.LightGray) increaseMaximumSubtreeCountRectangle = RectangleF.Empty; 349 350 pen.Color = Content.GetMaximumSubtreeCount(rootNode.Symbol) == Content.GetMinimumSubtreeCount(rootNode.Symbol) ? Color.LightGray : Color.Black; 351 graphics.DrawRectangle(pen, Rectangle.Round(decreaseMaximumSubtreeCountRectangle)); 352 graphics.DrawString("-", font, pen.Brush, decreaseMaximumSubtreeCountRectangle, stringFormat); 353 if (pen.Color == Color.LightGray) decreaseMaximumSubtreeCountRectangle = RectangleF.Empty; 354 } 355 } 274 356 } 275 357 … … 297 379 groupSymbol = selectedNode.Tag as GroupSymbol; 298 380 if (groupSymbol != null && Content.ContainsSymbol(groupSymbol)) break; 381 selectedNode = selectedNode.Parent; 299 382 } 300 383 … … 345 428 } 346 429 #endregion 430 431 private void allowedChildSymbolsControl_MouseDown(object sender, MouseEventArgs e) { 432 if (Content == null) return; 433 if (allowedChildSymbolsControl.Tree == null) return; 434 435 var pointF = new PointF(e.X, e.Y); 436 var rootSymbol = allowedChildSymbolsControl.Tree.Root.Symbol; 437 int minimumSubtreeCount = Content.GetMinimumSubtreeCount(rootSymbol); 438 int maximumSubtreecount = Content.GetMaximumSubtreeCount(rootSymbol); 439 440 bool changed = true; 441 DeregisterContentEvents(); 442 if (increaseMinimumSubtreeCountRectangle.Contains(pointF)) 443 Content.SetSubtreeCount(rootSymbol, minimumSubtreeCount + 1, maximumSubtreecount); 444 else if (decreaseMinimumSubtreeCountRectangle.Contains(pointF)) 445 Content.SetSubtreeCount(rootSymbol, minimumSubtreeCount - 1, maximumSubtreecount); 446 else if (increaseMaximumSubtreeCountRectangle.Contains(pointF)) 447 Content.SetSubtreeCount(rootSymbol, minimumSubtreeCount, maximumSubtreecount + 1); 448 else if (decreaseMaximumSubtreeCountRectangle.Contains(pointF)) 449 Content.SetSubtreeCount(rootSymbol, minimumSubtreeCount, maximumSubtreecount - 1); 450 else 451 changed = false; 452 453 if (changed) BuildAllowedChildSymbolsTree(rootSymbol); 454 RegisterContentEvents(); 455 } 347 456 } 348 457
Note: See TracChangeset
for help on using the changeset viewer.