// Copyright (C) Stichting Deltares and State of the Netherlands 2025. All rights reserved. // // This file is part of Riskeer. // // Riskeer is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using OxyPlot; namespace Core.Components.OxyPlot { /// /// This class represents a controller for which certain interactions can be toggled. /// public sealed class DynamicPlotController : ControllerBase, IPlotController { /// /// Creates a new instance of the . /// public DynamicPlotController() { ResetDefaultInteraction(); TogglePanning(); } /// /// Gets a value indicating whether or not panning is enabled for the . /// public bool IsPanningEnabled { get; private set; } /// /// Gets a value indicating whether or not zooming by rectangle is enabled for the . /// public bool IsRectangleZoomingEnabled { get; private set; } /// /// Toggles panning by click and holding the left mouse button while moving. /// public void TogglePanning() { if (!IsPanningEnabled) { ResetDefaultInteraction(); EnablePanning(); } } /// /// Toggles zooming by drawing a rectangle with the mouse. /// public void ToggleRectangleZooming() { if (!IsRectangleZoomingEnabled) { ResetDefaultInteraction(); 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. /// 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); this.BindMouseDown(OxyMouseButton.Middle, 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; } } }