using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using System.Windows;

namespace Microsoft.Research.DynamicDataDisplay.Navigation
{
	// todo проверить, как происходит работа когда мышь не над плоттером, а над его ребенком
	// todo если все ОК, то перевести все маус навигейшн контролы на этот класс как базовый
	public abstract class MouseNavigationBase : NavigationBase
	{
		protected override void OnPlotterAttached(Plotter plotter)
		{
			base.OnPlotterAttached(plotter);

			Mouse.AddMouseDownHandler(Parent, OnMouseDown);
			Mouse.AddMouseMoveHandler(Parent, OnMouseMove);
			Mouse.AddMouseUpHandler(Parent, OnMouseUp);
			Mouse.AddMouseWheelHandler(Parent, OnMouseWheel);
		}

		protected override void OnPlotterDetaching(Plotter plotter)
		{
			Mouse.RemoveMouseDownHandler(Parent, OnMouseDown);
			Mouse.RemoveMouseMoveHandler(Parent, OnMouseMove);
			Mouse.RemoveMouseUpHandler(Parent, OnMouseUp);
			Mouse.RemoveMouseWheelHandler(Parent, OnMouseWheel);

			base.OnPlotterDetaching(plotter);
		}

		private void OnMouseWheel(object sender, MouseWheelEventArgs e)
		{
			OnPlotterMouseWheel(e);
		}

		protected virtual void OnPlotterMouseWheel(MouseWheelEventArgs e) { }

		private void OnMouseUp(object sender, MouseButtonEventArgs e)
		{
			OnPlotterMouseUp(e);
		}

		protected virtual void OnPlotterMouseUp(MouseButtonEventArgs e) { }

		private void OnMouseDown(object sender, MouseButtonEventArgs e)
		{
			OnPlotterMouseDown(e);
		}

		protected virtual void OnPlotterMouseDown(MouseButtonEventArgs e) { }

		private void OnMouseMove(object sender, MouseEventArgs e)
		{
			OnPlotterMouseMove(e);
		}

		protected virtual void OnPlotterMouseMove(MouseEventArgs e) { }

	}
}
