Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/22/15 00:31:03 (10 years ago)
Author:
bburlacu
Message:

#1772: Refactored genealogy graph views. Added an additional class specializing GenealogyGraphView<ISymbolicExpressionTree> for the sole purpose of making the SymbolicDataAnalysisGenealogyGraphView work with the designer. Added property to expose the SymbolicExpressionTreeChart in the GraphicalSymbolicExpressionTreeView in order to be able to wire mouse click events.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs

    r11744 r11817  
    2525using System.Linq;
    2626using System.Windows.Forms;
    27 using HeuristicLab.Core.Views;
    2827using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    2928using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
     
    3332
    3433namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
    35   [View("SymboldDataAnalysisGenealogyView")]
     34  [View("SymbolicDataAnalysisGenealogyGraphView")]
    3635  [Content(typeof(IGenealogyGraph<ISymbolicExpressionTree>), IsDefaultView = true)]
    37   public partial class SymboldDataAnalysisGenealogyView : ItemView {
     36  public partial class SymbolicDataAnalysisGenealogyGraphView : SymbolicDataAnalysisGenealogyGraphViewDesignable {
    3837    private readonly ISymbolicExpressionTreeNodeSimilarityComparer comparer;
    3938
    40     public SymboldDataAnalysisGenealogyView() {
     39    public SymbolicDataAnalysisGenealogyGraphView() {
    4140      InitializeComponent();
    42 
    4341      comparer = new SymbolicExpressionTreeNodeSimilarityComparer();
     42      viewHost.ViewType = typeof(GraphicalSymbolicExpressionTreeView);
    4443    }
    45 
    46     public new IGenealogyGraph<ISymbolicExpressionTree> Content {
    47       get { return (IGenealogyGraph<ISymbolicExpressionTree>)base.Content; }
    48       set { base.Content = value; }
    49     }
    50 
    5144    #region event handlers
    52 
    5345    protected override void OnContentChanged() {
    5446      base.OnContentChanged();
    55       if (Content != null) {
    56         genealogyGraphChart.GenealogyGraph = Content;
     47      if (Content != null) { genealogyGraphChart.GenealogyGraph = Content; }
     48    }
     49    #endregion
     50
     51    public SymbolicExpressionTreeChart SymbolicExpressionTreeChart {
     52      get {
     53        var view = (GraphicalSymbolicExpressionTreeView)base.viewHost.ActiveView;
     54        return view == null ? null : view.SymbolicExpressionTreeChart;
    5755      }
    5856    }
    5957
    60     #endregion
    61 
    6258    protected override void RegisterContentEvents() {
    63       genealogyGraphChart.GenealogyGraphNodeClicked += graphChart_GenealogyGraphNodeClicked;
    64       genealogyGraphChart.GenealogyGraphNodeDoubleClicked += graphChart_GenealogyGraphNodeDoubleClicked;
    65       symbolicExpressionTreeChart.SymbolicExpressionTreeNodeClicked += treeChart_SymbolicExpressionNodeClicked;
    6659      base.RegisterContentEvents();
     60      if (SymbolicExpressionTreeChart != null)
     61        SymbolicExpressionTreeChart.SymbolicExpressionTreeNodeClicked += treeChart_SymbolicExpressionTreeNodeClicked;
    6762    }
    6863
    6964    protected override void DeregisterContentEvents() {
     65      if (SymbolicExpressionTreeChart != null)
     66        SymbolicExpressionTreeChart.SymbolicExpressionTreeNodeClicked -= treeChart_SymbolicExpressionTreeNodeClicked;
    7067      base.DeregisterContentEvents();
    71       genealogyGraphChart.GenealogyGraphNodeClicked -= graphChart_GenealogyGraphNodeClicked;
    72       symbolicExpressionTreeChart.SymbolicExpressionTreeNodeClicked -= treeChart_SymbolicExpressionNodeClicked;
    7368    }
    7469
    75     public void graphChart_GenealogyGraphNodeClicked(object sender, MouseEventArgs args) {
     70    public override void graphChart_GenealogyGraphNodeClicked(object sender, MouseEventArgs args) {
     71      base.graphChart_GenealogyGraphNodeClicked(sender, args);
    7672      var visualNode = (VisualGenealogyGraphNode)sender;
    7773      var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)visualNode.Data;
    78       var tree = graphNode.Data;
    79       symbolicExpressionTreeChart.Tree = tree;
    8074      if (graphNode.InArcs.Any()) {
    8175        var fragment = graphNode.InArcs.Last().Data as IFragment<ISymbolicExpressionTreeNode>;
     
    9589    }
    9690
    97     public void graphChart_GenealogyGraphNodeDoubleClicked(object sender, MouseEventArgs arcs) {
    98       var visualNode = (VisualGenealogyGraphNode)sender;
    99       var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)visualNode.Data;
    100       //      var tree = graphNode.Data;
    101       //      var model = new RegressionModel();
    102       //      var solution = new RegressionSolution()
    103       //      MainFormManager.MainForm.ShowContent(tree);
    104     }
    105 
    106     public void treeChart_SymbolicExpressionNodeClicked(object sender, MouseEventArgs args) {
     91    public void treeChart_SymbolicExpressionTreeNodeClicked(object sender, MouseEventArgs args) {
    10792      var visualNode = (VisualTreeNode<ISymbolicExpressionTreeNode>)sender;
    10893      var subtree = visualNode.Content;
     
    11297      treeChart_HighlightSubtree(subtree);
    11398
    114       bool trace = genealogyGraphChart.TraceFragments; // check whether the mode is 'trace' or 'match'
     99      bool trace = genealogyGraphChart.TraceFragments; // check whether we are in 'trace' or 'match' mode
    115100
    116101      if (trace) {
     
    118103        var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)genealogyGraphChart.SelectedGraphNode;
    119104        var subtreeIndex = graphNode.Data.IterateNodesPrefix().ToList().IndexOf(subtree);
    120         var fragmentGraph = SymbolicDataAnalysisExpressionTracing.TraceSubtree(graphNode, subtreeIndex);
     105        //        var fragmentGraph = SymbolicDataAnalysisExpressionTracing.TraceSubtree(graphNode, subtreeIndex);
     106        var traceGraph = TraceCalculator.TraceSubtree(graphNode, subtreeIndex);
    121107
    122         if (fragmentGraph.Vertices.Any()) {
    123           var genealogyNodes = fragmentGraph.Vertices.Select(v => Content.GetByContent(v.Data));
     108        if (traceGraph.Vertices.Any()) {
     109          var genealogyNodes = traceGraph.Vertices.Select(v => Content.GetByContent(v.Data));
    124110          genealogyGraphChart.HighlightNodes(genealogyNodes);
    125           foreach (var a in fragmentGraph.Arcs) {
     111          foreach (var a in traceGraph.Arcs) {
    126112            genealogyGraphChart.HighlightArc(Content.GetByContent(a.Target.Data), Content.GetByContent(a.Source.Data));
    127113          }
    128           MainFormManager.MainForm.ShowContent(fragmentGraph); // display the fragment graph on the screen
     114          MainFormManager.MainForm.ShowContent(traceGraph); // display the fragment graph on the screen
    129115        }
    130116      } else {
     
    148134
    149135    private void treeChart_ClearColors() {
    150       foreach (var node in symbolicExpressionTreeChart.Tree.IterateNodesPrefix()) {
    151         var visualNode = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(node);
     136      foreach (var node in SymbolicExpressionTreeChart.Tree.IterateNodesPrefix()) {
     137        var visualNode = SymbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(node);
    152138        if (visualNode != null) {
    153139          visualNode.LineColor = Color.Black;
     
    155141        }
    156142      }
    157       symbolicExpressionTreeChart.RepaintNodes();
     143      SymbolicExpressionTreeChart.RepaintNodes();
    158144    }
    159145
    160146    private void treeChart_HighlightSubtree(ISymbolicExpressionTreeNode subtree, Color? color = null) {
    161       Color myColor = color == null ? Color.RoyalBlue : (Color)color;
     147      Color myColor = color ?? Color.RoyalBlue;
    162148      foreach (var s in subtree.IterateNodesPrefix()) {
    163         var visualNode = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(s);
     149        var visualNode = SymbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(s);
    164150        visualNode.LineColor = myColor;
    165151        //        visualNode.FillColor = myColor;
    166152
    167153        foreach (var c in s.Subtrees) {
    168           var visualArc = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNodeConnection(s, c);
     154          var visualArc = SymbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNodeConnection(s, c);
    169155          visualArc.LineColor = myColor;
    170156        }
    171157      }
    172       symbolicExpressionTreeChart.RepaintNodes();
    173     }
    174 
    175     #region events for configuring the behavior of the genealogy chart (trace/match, simple lineages, etc)
    176     private void trace_checkBox_CheckedChanged(object sender, System.EventArgs e) {
    177       genealogyGraphChart.TraceFragments = trace_checkBox.Checked;
    178     }
    179 
    180     private void simpleLineages_checkBox_CheckedChanged(object sender, System.EventArgs e) {
    181       genealogyGraphChart.SimpleLineages = simpleLineages_checkBox.Checked;
    182     }
    183 
    184     private void lockGraph_checkBox_CheckedChanged(object sender, System.EventArgs e) {
    185       genealogyGraphChart.LockGenealogy = lockGraph_checkBox.Checked;
    186     }
    187     #endregion
    188 
    189     private void hotPaths_button_Click(object sender, System.EventArgs e) {
    190       genealogyGraphChart.HighlightHotPaths();
     158      SymbolicExpressionTreeChart.RepaintNodes();
    191159    }
    192160  }
     161
     162  public class SymbolicDataAnalysisGenealogyGraphViewDesignable : GenealogyGraphView<ISymbolicExpressionTree> { }
    193163}
Note: See TracChangeset for help on using the changeset viewer.