using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Input; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using Microsoft.Research.DynamicDataDisplay; using Microsoft.Research.DynamicDataDisplay.Common; namespace Microsoft.Research.DynamicDataDisplay.Charts.Navigation { /// /// Represents a navigation methods upon one axis - mouse panning and zooming. /// [Obsolete("Will be removed soon. Use AxisNavigation instead.")] public class OldAxisNavigation : ContentGraph { /// /// Initializes a new instance of the class. /// public OldAxisNavigation() { Focusable = false; SetHorizontalOrientation(); Content = content; } /// /// Initializes a new instance of the class. /// /// The orientation. public OldAxisNavigation(Orientation orientation) { Orientation = orientation; Content = content; } private void SetHorizontalOrientation() { Grid.SetColumn(this, 1); Grid.SetRow(this, 2); } private void SetVerticalOrientation() { // todo should automatically search for location of axes as they can be // not only from the left or bottom. Grid.SetColumn(this, 0); Grid.SetRow(this, 1); } private Orientation orientation = Orientation.Horizontal; /// /// Gets or sets the orientation of AxisNavigation. /// /// The orientation. public Orientation Orientation { get { return orientation; } set { if (orientation != value) { orientation = value; OnOrientationChanged(); } } } private void OnOrientationChanged() { switch (orientation) { case Orientation.Horizontal: SetHorizontalOrientation(); break; case Orientation.Vertical: SetVerticalOrientation(); break; default: break; } } private bool lmbPressed = false; private Point dragStart; private CoordinateTransform Transform { get { return Plotter2D.Viewport.Transform; } } protected override Panel HostPanel { get { return Plotter2D.MainGrid; } } private readonly Panel content = new Canvas { Background = Brushes.Transparent }; private readonly SolidColorBrush fillBrush = new SolidColorBrush(Color.FromRgb(255, 228, 209)).MakeTransparent(0.2); private Point lmbInitialPosition; protected Point LmbInitialPosition { get { return lmbInitialPosition; } } protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { base.OnMouseLeftButtonDown(e); lmbInitialPosition = e.GetPosition(this); dragStart = lmbInitialPosition.ScreenToViewport(Transform); lmbPressed = true; content.Background = fillBrush; CaptureMouse(); } protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e) { base.OnMouseLeftButtonUp(e); lmbPressed = false; ClearValue(CursorProperty); content.Background = Brushes.Transparent; ReleaseMouseCapture(); } protected override void OnMouseMove(MouseEventArgs e) { if (lmbPressed) { Point mousePos = e.GetPosition(this).ScreenToViewport(Transform); DataRect visible = Plotter2D.Viewport.Visible; double delta; if (orientation == Orientation.Horizontal) { delta = (mousePos - dragStart).X; visible.XMin -= delta; } else { delta = (mousePos - dragStart).Y; visible.YMin -= delta; } if (e.GetPosition(this) != lmbInitialPosition) { Cursor = orientation == Orientation.Horizontal ? Cursors.ScrollWE : Cursors.ScrollNS; } Plotter2D.Viewport.Visible = visible; } } private const double wheelZoomSpeed = 1.2; protected override void OnMouseWheel(MouseWheelEventArgs e) { Point mousePos = e.GetPosition(this); int delta = -e.Delta; Point zoomTo = mousePos.ScreenToViewport(Transform); double zoomSpeed = Math.Abs(delta / Mouse.MouseWheelDeltaForOneLine); zoomSpeed *= wheelZoomSpeed; if (delta < 0) { zoomSpeed = 1 / zoomSpeed; } DataRect visible = Plotter2D.Viewport.Visible.Zoom(zoomTo, zoomSpeed); DataRect oldVisible = Plotter2D.Viewport.Visible; if (orientation == Orientation.Horizontal) { visible.YMin = oldVisible.YMin; visible.Height = oldVisible.Height; } else { visible.XMin = oldVisible.XMin; visible.Width = oldVisible.Width; } Plotter2D.Viewport.Visible = visible; e.Handled = true; } protected override void OnLostFocus(RoutedEventArgs e) { base.OnLostFocus(e); ClearValue(CursorProperty); content.Background = Brushes.Transparent; ReleaseMouseCapture(); } } }