using OxyPlot; namespace Core.Components.OxyPlot { /// /// This class represents a controller for which certain interactions can be toggled. /// internal sealed class DynamicPlotController : ControllerBase, IPlotController { public bool IsPanningEnabled { get; private set; } public bool IsRectangleZoomingEnabled { get; private set; } public DynamicPlotController() { EnableScrollWheelZooming(); } /// /// Toggles panning by click and holding the left mouse button while moving. /// public void TogglePanning() { var enablePanning = !IsPanningEnabled; ResetDefaultInteraction(); if (enablePanning) { EnablePanning(); } } /// /// Toggles zooming by drawing a rectangle with the mouse. /// public void ToggleRectangleZooming() { var enableRectangleZoom = !IsRectangleZoomingEnabled; ResetDefaultInteraction(); if (enableRectangleZoom) { EnableRectangleZoom(); } } /// /// Resets all the toggleable interaction with the . /// private void ResetDefaultInteraction() { UnbindAll(); IsPanningEnabled = false; IsRectangleZoomingEnabled = false; EnableScrollWheelZooming(); } /// /// Enables zooming in and out by using the scroll wheel of the . /// private void EnableScrollWheelZooming() { this.BindMouseWheel(PlotCommands.ZoomWheel); } /// /// Enables panning of the . Panning is invoked by clicking the left mouse-button. /// private void EnablePanning() { this.BindMouseDown(OxyMouseButton.Left, PlotCommands.PanAt); IsPanningEnabled = true; } /// /// Enables zooming by rectangle of the . Zooming by rectangle is invoked by clicking the left mouse-button. /// private void EnableRectangleZoom() { this.BindMouseDown(OxyMouseButton.Left, PlotCommands.ZoomRectangle); IsRectangleZoomingEnabled = true; } } }