Initial Commit
This commit is contained in:
181
InjectedPlotter.cs
Normal file
181
InjectedPlotter.cs
Normal file
@@ -0,0 +1,181 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Controls;
|
||||
using Microsoft.Research.DynamicDataDisplay.Common;
|
||||
using System.Windows.Data;
|
||||
using System.Windows;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace Microsoft.Research.DynamicDataDisplay
|
||||
{
|
||||
[SkipPropertyCheck]
|
||||
public class InjectedPlotter : ChartPlotter, IPlotterElement
|
||||
{
|
||||
public InjectedPlotter()
|
||||
: base(PlotterLoadMode.Empty)
|
||||
{
|
||||
ViewportPanel = new Canvas();
|
||||
Grid.SetColumn(ViewportPanel, 1);
|
||||
Grid.SetRow(ViewportPanel, 1);
|
||||
|
||||
Viewport = new Viewport2D(ViewportPanel, this);
|
||||
}
|
||||
|
||||
protected override void OnChildAdded(IPlotterElement child)
|
||||
{
|
||||
base.OnChildAdded(child);
|
||||
|
||||
if (plotter != null)
|
||||
{
|
||||
plotter.PerformChildChecks = false;
|
||||
try
|
||||
{
|
||||
plotter.Children.Add(child);
|
||||
}
|
||||
finally
|
||||
{
|
||||
plotter.PerformChildChecks = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnChildRemoving(IPlotterElement child)
|
||||
{
|
||||
base.OnChildRemoving(child);
|
||||
|
||||
if (plotter != null)
|
||||
{
|
||||
plotter.PerformChildChecks = false;
|
||||
try
|
||||
{
|
||||
plotter.Children.Remove(child);
|
||||
}
|
||||
finally
|
||||
{
|
||||
plotter.PerformChildChecks = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetHorizontalTransform(double parentMin, double childMin, double parentMax, double childMax)
|
||||
{
|
||||
converter.SetHorizontalTransform(parentMin, childMin, parentMax, childMax);
|
||||
}
|
||||
|
||||
public void SetVerticalTransform(double parentMin, double childMin, double parentMax, double childMax)
|
||||
{
|
||||
converter.SetVerticalTransform(parentMin, childMin, parentMax, childMax);
|
||||
}
|
||||
|
||||
private IValueConverter viewportBindingConverter;
|
||||
public IValueConverter ViewportBindingConverter
|
||||
{
|
||||
get { return viewportBindingConverter; }
|
||||
set
|
||||
{
|
||||
viewportBindingConverter = value;
|
||||
if (viewportBinding != null)
|
||||
{
|
||||
viewportBinding.Converter = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool setViewportBinding = true;
|
||||
public bool SetViewportBinding
|
||||
{
|
||||
get { return setViewportBinding; }
|
||||
set
|
||||
{
|
||||
if (setViewportBinding != value)
|
||||
{
|
||||
setViewportBinding = value;
|
||||
UpdateViewportBinding();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateViewportBinding()
|
||||
{
|
||||
if (plotter == null) return;
|
||||
|
||||
if (setViewportBinding)
|
||||
{
|
||||
var converter = viewportBindingConverter ?? this.converter;
|
||||
viewportBinding = new Binding
|
||||
{
|
||||
Path = new PropertyPath("Visible"),
|
||||
Source = this.plotter.Viewport,
|
||||
Converter = converter,
|
||||
Mode = BindingMode.TwoWay
|
||||
};
|
||||
this.Viewport.SetBinding(Viewport2D.VisibleProperty, viewportBinding);
|
||||
}
|
||||
else
|
||||
{
|
||||
BindingOperations.ClearBinding(Viewport, Viewport2D.VisibleProperty);
|
||||
}
|
||||
}
|
||||
|
||||
#region IPlotterElement Members
|
||||
|
||||
Binding viewportBinding;
|
||||
ScaleConverter converter = new ScaleConverter();
|
||||
void IPlotterElement.OnPlotterAttached(Plotter plotter)
|
||||
{
|
||||
this.plotter = (Plotter2D)plotter;
|
||||
|
||||
UpdateViewportBinding();
|
||||
|
||||
plotter.MainGrid.Children.Add(ViewportPanel);
|
||||
|
||||
HeaderPanel = plotter.HeaderPanel;
|
||||
FooterPanel = plotter.FooterPanel;
|
||||
|
||||
LeftPanel = plotter.LeftPanel;
|
||||
BottomPanel = plotter.BottomPanel;
|
||||
RightPanel = plotter.RightPanel;
|
||||
TopPanel = plotter.BottomPanel;
|
||||
|
||||
MainCanvas = plotter.MainCanvas;
|
||||
CentralGrid = plotter.CentralGrid;
|
||||
MainGrid = plotter.MainGrid;
|
||||
ParallelCanvas = plotter.ParallelCanvas;
|
||||
|
||||
Dispatcher.BeginInvoke((Action)(() => ExecuteWaitingChildrenAdditions()), DispatcherPriority.Background);
|
||||
|
||||
OnLoaded();
|
||||
}
|
||||
|
||||
protected override bool IsLoadedInternal
|
||||
{
|
||||
get
|
||||
{
|
||||
return plotter != null;
|
||||
}
|
||||
}
|
||||
|
||||
void IPlotterElement.OnPlotterDetaching(Plotter plotter)
|
||||
{
|
||||
plotter.MainGrid.Children.Remove(ViewportPanel);
|
||||
BindingOperations.ClearBinding(this.Viewport, Viewport2D.VisibleProperty);
|
||||
|
||||
this.plotter = null;
|
||||
}
|
||||
|
||||
private Plotter2D plotter;
|
||||
public Plotter2D Plotter
|
||||
{
|
||||
get { return plotter; }
|
||||
}
|
||||
|
||||
Plotter IPlotterElement.Plotter
|
||||
{
|
||||
get { return plotter; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user