Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Problems.GrammaticalOptimization/DynamicDataDisplay/Common/WidthSpring.cs @ 13749

Last change on this file since 13749 was 12503, checked in by aballeit, 9 years ago

#2283 added GUI and charts; fixed MCTS

File size: 2.4 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows;
6using System.Windows.Controls;
7
8namespace Microsoft.Research.DynamicDataDisplay.Charts
9{
10  /// <summary>
11  /// Represents a kind of 'spring' that makes width of one plotter's LeftPanel equal to other plotter's LeftPanel.
12  /// </summary>
13  public class WidthSpring : FrameworkElement, IPlotterElement
14  {
15    /// <summary>
16    /// Initializes a new instance of the <see cref="WidthSpring"/> class.
17    /// </summary>
18    public WidthSpring()
19    {
20    }
21
22    #region Properties
23
24    /// <summary>
25    /// Gets or sets panel which is a source of width.
26    /// </summary>
27    /// <value>The source panel.</value>
28    public Panel SourcePanel
29    {
30      get { return (Panel)GetValue(SourcePanelProperty); }
31      set { SetValue(SourcePanelProperty, value); }
32    }
33
34    public static readonly DependencyProperty SourcePanelProperty = DependencyProperty.Register(
35      "SourcePanel",
36      typeof(Panel),
37      typeof(WidthSpring),
38      new FrameworkPropertyMetadata(null, OnSourcePanelReplaced));
39
40    private static void OnSourcePanelReplaced(DependencyObject d, DependencyPropertyChangedEventArgs e)
41    {
42      WidthSpring owner = (WidthSpring)d;
43      owner.OnSourcePanelReplaced((Panel)e.OldValue, (Panel)e.NewValue);
44    }
45
46    private void OnSourcePanelReplaced(Panel prevPanel, Panel currPanel)
47    {
48      if (prevPanel != null)
49      {
50        prevPanel.SizeChanged -= OnPanel_SizeChanged;
51      }
52      if (currPanel != null)
53      {
54        currPanel.SizeChanged += OnPanel_SizeChanged;
55      }
56      UpdateWidth();
57    }
58
59    void OnPanel_SizeChanged(object sender, SizeChangedEventArgs e)
60    {
61      UpdateWidth();
62    }
63
64    private void UpdateWidth()
65    {
66      Panel parentPanel = Parent as Panel;
67      if (parentPanel != null && SourcePanel != null)
68      {
69        Width = Math.Max(SourcePanel.ActualWidth - (parentPanel.ActualWidth - ActualWidth), 0);
70      }
71    }
72
73    #endregion // end of Properties
74
75    #region IPlotterElement Members
76
77    private Plotter plotter;
78    public void OnPlotterAttached(Plotter plotter)
79    {
80      this.plotter = plotter;
81      plotter.LeftPanel.Children.Insert(0, this);
82    }
83
84    public void OnPlotterDetaching(Plotter plotter)
85    {
86      plotter.LeftPanel.Children.Remove(this);
87      this.plotter = null;
88    }
89
90    public Plotter Plotter
91    {
92      get { return plotter; }
93    }
94
95    #endregion
96  }
97}
Note: See TracBrowser for help on using the repository browser.