Files
DynamicDataDisplay/Charts/ViewportUIContainer.cs
2024-02-23 00:46:06 -05:00

102 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Markup;
using Microsoft.Research.DynamicDataDisplay.Common;
using System.Windows.Controls;
namespace Microsoft.Research.DynamicDataDisplay.Charts
{
[ContentProperty("Content")]
public class ViewportUIContainer : DependencyObject, IPlotterElement
{
public ViewportUIContainer() { }
public ViewportUIContainer(FrameworkElement content)
{
this.Content = content;
}
private FrameworkElement content;
[NotNull]
public FrameworkElement Content
{
get { return content; }
set { content = value; }
}
#region IPlotterElement Members
void IPlotterElement.OnPlotterAttached(Plotter plotter)
{
this.plotter = plotter;
if (Content == null) return;
var plotterPanel = GetPlotterPanel(Content);
//Plotter.SetPlotter(Content, plotter);
if (plotterPanel == PlotterPanel.MainCanvas)
{
// if all four Canvas.{Left|Right|Top|Bottom} properties are not set,
// and as we are adding by default content to MainCanvas,
// and since I like more when buttons are by default in right down corner -
// set bottom and right to 10.
var left = Canvas.GetLeft(content);
var top = Canvas.GetTop(content);
var bottom = Canvas.GetBottom(content);
var right = Canvas.GetRight(content);
if (left.IsNaN() && right.IsNaN() && bottom.IsNaN() && top.IsNaN())
{
Canvas.SetBottom(content, 10.0);
Canvas.SetRight(content, 10.0);
}
plotter.MainCanvas.Children.Add(Content);
}
}
void IPlotterElement.OnPlotterDetaching(Plotter plotter)
{
if (Content != null)
{
var plotterPanel = GetPlotterPanel(Content);
//Plotter.SetPlotter(Content, null);
if (plotterPanel == PlotterPanel.MainCanvas)
{
plotter.MainCanvas.Children.Remove(Content);
}
}
this.plotter = null;
}
private Plotter plotter;
Plotter IPlotterElement.Plotter
{
get { return plotter; }
}
#endregion
[AttachedPropertyBrowsableForChildren]
public static PlotterPanel GetPlotterPanel(DependencyObject obj)
{
return (PlotterPanel)obj.GetValue(PlotterPanelProperty);
}
public static void SetPlotterPanel(DependencyObject obj, PlotterPanel value)
{
obj.SetValue(PlotterPanelProperty, value);
}
public static readonly DependencyProperty PlotterPanelProperty = DependencyProperty.RegisterAttached(
"PlotterPanel",
typeof(PlotterPanel),
typeof(ViewportUIContainer),
new FrameworkPropertyMetadata(PlotterPanel.MainCanvas));
}
}