PageRenderTime 28ms CodeModel.GetById 23ms app.highlight 2ms RepoModel.GetById 1ms app.codeStats 0ms

/Main/src/DynamicDataDisplay/Charts/ContentGraph.cs

#
C# | 89 lines | 73 code | 16 blank | 0 comment | 8 complexity | 1f2b605f678179be1644bb7eb6b25ac6 MD5 | raw file
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Text;
 5using System.Windows.Controls;
 6using System.Windows;
 7using Microsoft.Research.DynamicDataDisplay.Common;
 8
 9namespace Microsoft.Research.DynamicDataDisplay.Charts
10{
11	public abstract class ContentGraph : ContentControl, IPlotterElement
12	{
13		static ContentGraph()
14		{
15			EventManager.RegisterClassHandler(typeof(ContentGraph), Plotter.PlotterChangedEvent, new PlotterChangedEventHandler(OnPlotterChanged));
16		}
17
18		private static void OnPlotterChanged(object sender, PlotterChangedEventArgs e)
19		{
20			ContentGraph owner = (ContentGraph)sender;
21			owner.OnPlotterChanged(e);
22		}
23
24		private void OnPlotterChanged(PlotterChangedEventArgs e)
25		{
26			if (plotter == null && e.CurrentPlotter != null)
27			{
28				plotter = (Plotter2D)e.CurrentPlotter;
29				plotter.Viewport.PropertyChanged += Viewport_PropertyChanged;
30				OnPlotterAttached();
31			}
32			if (plotter != null && e.PreviousPlotter != null)
33			{
34				OnPlotterDetaching();
35				plotter.Viewport.PropertyChanged -= Viewport_PropertyChanged;
36				plotter = null;
37			}
38		}
39
40		#region IPlotterElement Members
41
42		private void Viewport_PropertyChanged(object sender, ExtendedPropertyChangedEventArgs e)
43		{
44			OnViewportPropertyChanged(e);
45		}
46
47		protected virtual void OnViewportPropertyChanged(ExtendedPropertyChangedEventArgs e) { }
48
49		protected virtual Panel HostPanel
50		{
51			get { return plotter.CentralGrid; }
52		}
53
54		void IPlotterElement.OnPlotterAttached(Plotter plotter)
55		{
56			this.plotter = (Plotter2D)plotter;
57			HostPanel.Children.Add(this);
58			this.plotter.Viewport.PropertyChanged += Viewport_PropertyChanged;
59
60			OnPlotterAttached();
61		}
62
63		protected virtual void OnPlotterAttached() { }
64
65		void IPlotterElement.OnPlotterDetaching(Plotter plotter)
66		{
67			OnPlotterDetaching();
68
69			this.plotter.Viewport.PropertyChanged -= Viewport_PropertyChanged;
70			HostPanel.Children.Remove(this);
71			this.plotter = null;
72		}
73
74		protected virtual void OnPlotterDetaching() { }
75
76		private Plotter2D plotter;
77		protected Plotter2D Plotter2D
78		{
79			get { return plotter; }
80		}
81
82		Plotter IPlotterElement.Plotter
83		{
84			get { return plotter; }
85		}
86
87		#endregion
88	}
89}