1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
namespace RealTimeGraphEx.Components
{
public abstract class ComponentBase : UserControl
{
public ComponentLocationEnum Location
{
get { return (ComponentLocationEnum)GetValue(LocationProperty); }
set { SetValue(LocationProperty, value); }
}
public static readonly DependencyProperty LocationProperty =
DependencyProperty.Register("Location", typeof(ComponentLocationEnum), typeof(ComponentBase), new PropertyMetadata(ComponentLocationEnum.None));
public RealTimeGraphExBase Graph
{
get { return (RealTimeGraphExBase)GetValue(GraphProperty); }
set { SetValue(GraphProperty, value); }
}
public static readonly DependencyProperty GraphProperty =
DependencyProperty.Register("Graph", typeof(RealTimeGraphExBase), typeof(ComponentBase), new PropertyMetadata(null));
public ComponentBase()
{
this.Loaded += ComponentBase_Loaded;
}
private void ComponentBase_Loaded(object sender, RoutedEventArgs e)
{
if (Graph != null)
{
Graph.ZoomComplete += OnGraphZoomComplete;
Graph.PanningComplete += OnGraphPanningComplete;
Render(Graph);
}
}
public abstract void Render(RealTimeGraphExBase graph, bool animate = false);
public void RemoveFromParent()
{
var parent = this.Parent;
var child = this;
var panel = parent as Panel;
if (panel != null)
{
panel.Children.Remove(child);
return;
}
var decorator = parent as Decorator;
if (decorator != null)
{
if (decorator.Child == child)
{
decorator.Child = null;
}
return;
}
var contentPresenter = parent as ContentPresenter;
if (contentPresenter != null)
{
if (contentPresenter.Content == child)
{
contentPresenter.Content = null;
}
return;
}
var contentControl = parent as ContentControl;
if (contentControl != null)
{
if (contentControl.Content == child)
{
contentControl.Content = null;
}
return;
}
// maybe more
}
protected virtual void OnGraphZoomComplete(Point transformOrigin, double scaleX, double scaleY)
{
}
protected virtual void OnGraphPanningComplete(Point translate)
{
}
}
}
|