using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace RealTimeGraphEx.Controllers { public abstract class GraphControllerBase : DependencyObject { protected Action clearMethod; protected Action startThreadMethod; protected Action pausedMethod; protected Action changeRenderModeMethod; protected Action pushMarkerMethod; public bool IsPaused { get { return (bool)GetValue(IsPausedProperty); } set { SetValue(IsPausedProperty, value); } } public static readonly DependencyProperty IsPausedProperty = DependencyProperty.Register("IsPaused", typeof(bool), typeof(GraphControllerBase), new PropertyMetadata(false, new PropertyChangedCallback(PausedChanged))); private static void PausedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var control = d as GraphControllerBase; if (control.pausedMethod != null) { control.pausedMethod(control.IsPaused); } } internal void RegisterMethods(Action clear, Action startThread, Action paused, Action renderMode, Action pushMarker) { changeRenderModeMethod = renderMode; pausedMethod = paused; clearMethod = clear; startThreadMethod = startThread; pushMarkerMethod = pushMarker; } public abstract void Clear(); public virtual void ChangeRenderMode(bool enabled) { changeRenderModeMethod(enabled); } internal abstract void ClearPoints(); public void PushMarkerLine() { if (pushMarkerMethod != null) { pushMarkerMethod(); } } } }