Free cookie consent management tool by TermsFeed Policy Generator

source: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Views/ExpressionSelectionView.cs @ 14777

Last change on this file since 14777 was 14777, checked in by pkimmesw, 7 years ago

#2665 simplifier, push solution results view, performance improvements, small bug fixes, ui fixes

File size: 3.1 KB
Line 
1using System.Windows.Forms;
2using HeuristicLab.Core.Views;
3using HeuristicLab.MainForm;
4
5
6namespace HeuristicLab.Problems.ProgramSynthesis.Push.Views {
7  using System;
8  using System.Collections.Generic;
9  using System.Linq;
10  using Expressions;
11
12  using HeuristicLab.Problems.ProgramSynthesis.Push.Configuration;
13
14  using Stack;
15
16  [View("Push Expression Selection Editor")]
17  [Content(typeof(IEnabledExpressionsConfiguration), true)]
18  public partial class ExpressionSelectionView : NamedItemView {
19    public ExpressionSelectionView() {
20      InitializeComponent();
21      InitEvents();
22      Name = "Push Expression Selection Editor";
23    }
24
25    public new IEnabledExpressionsConfiguration Content
26    {
27      get { return (IEnabledExpressionsConfiguration)base.Content; }
28      set
29      {
30        base.Content = value;
31      }
32    }
33
34    protected override void OnReadOnlyChanged() {
35      base.OnReadOnlyChanged();
36
37      this.expressionsTreeView.Enabled = !ReadOnly;
38    }
39
40    private void InitEvents() {
41      this.expressionsTreeView.AfterCheck += ExpressionsTreeViewAfterCheck;
42    }
43
44    private void ExpressionsTreeViewAfterCheck(object sender, TreeViewEventArgs e) {
45      var isStackNode = e.Node.Tag is StackTypes;
46
47      if (isStackNode) {
48        if (e.Node.Checked) {
49          Content.EnableStack((StackTypes)e.Node.Tag);
50          foreach (var subNode in e.Node.Nodes.Cast<TreeNode>())
51            subNode.Checked = true;
52        } else {
53          Content.DisableStack((StackTypes)e.Node.Tag);
54          foreach (var subNode in e.Node.Nodes.Cast<TreeNode>())
55            subNode.Checked = false;
56        }
57      } else {
58        if (e.Node.Checked) {
59          Content.EnableExpression(e.Node.Text);
60        } else {
61          Content.DisableExpression(e.Node.Text);
62        }
63      }
64    }
65
66    protected override void OnContentChanged() {
67      expressionsTreeView.Nodes.Clear();
68
69      if (Content == null) {
70        return;
71      }
72
73      this.nameTextBox.Text = "Push Expression Selection";
74
75      var treeNodes = GetTreeNodes(Content.EnabledExpressions).ToArray();
76      expressionsTreeView.Nodes.AddRange(treeNodes);
77    }
78
79    private IEnumerable<TreeNode> GetTreeNodes(IList<string> enabledExpressions) {
80      foreach (var stackType in ExpressionTable.StackTypeToNamesTable.Keys) {
81        var stackTreeNode = new TreeNode {
82          Tag = stackType,
83          Text = Enum.GetName(typeof(StackTypes), stackType),
84        };
85
86        var stackExpressions = ExpressionTable.StackTypeToNamesTable[stackType];
87        var enabledStackExpressions = enabledExpressions.Intersect(ExpressionTable.StackTypeToNamesTable[stackType]);
88
89        stackTreeNode.Checked = enabledStackExpressions.Any();
90
91        var expressionNodes = stackExpressions
92          .OrderBy(name => name)
93          .Select(name => new TreeNode {
94            Text = name,
95            Checked = enabledStackExpressions.Contains(name),
96          }).ToArray();
97
98        stackTreeNode.Nodes.AddRange(expressionNodes);
99
100        yield return stackTreeNode;
101      }
102    }
103  }
104}
Note: See TracBrowser for help on using the repository browser.