using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Shapes; using System.Windows.Media; namespace Microsoft.Research.DynamicDataDisplay.Charts { /// /// Represents a base class for simple shapes with viewport-bound coordinates. /// public abstract class ViewportShape : Shape, IPlotterElement { static ViewportShape() { Type type = typeof(ViewportShape); Shape.StrokeProperty.AddOwner(type, new FrameworkPropertyMetadata(Brushes.Blue)); Shape.StrokeThicknessProperty.AddOwner(type, new FrameworkPropertyMetadata(2.0)); } /// /// Initializes a new instance of the class. /// protected ViewportShape() { } protected void UpdateUIRepresentation() { if (Plotter == null) return; UpdateUIRepresentationCore(); } protected virtual void UpdateUIRepresentationCore() { } #region IPlotterElement Members private Plotter2D plotter; void IPlotterElement.OnPlotterAttached(Plotter plotter) { plotter.CentralGrid.Children.Add(this); Plotter2D plotter2d = (Plotter2D)plotter; this.plotter = plotter2d; plotter2d.Viewport.PropertyChanged += Viewport_PropertyChanged; UpdateUIRepresentation(); } private void Viewport_PropertyChanged(object sender, ExtendedPropertyChangedEventArgs e) { OnViewportPropertyChanged(e); } protected virtual void OnViewportPropertyChanged(ExtendedPropertyChangedEventArgs e) { UpdateUIRepresentation(); } void IPlotterElement.OnPlotterDetaching(Plotter plotter) { Plotter2D plotter2d = (Plotter2D)plotter; plotter2d.Viewport.PropertyChanged -= Viewport_PropertyChanged; plotter.CentralGrid.Children.Remove(this); this.plotter = null; } public Plotter2D Plotter { get { return plotter; } } Plotter IPlotterElement.Plotter { get { return plotter; } } #endregion } }