private void OnMouseMove(object sender, MouseEventArgs e)
        {
            if (lmbPressed)
            {
                // panning:
                if (e.LeftButton == MouseButtonState.Released)
                {
                    lmbPressed = false;
                    RevertChanges();
                    return;
                }

                Point    screenMousePos = e.GetPosition(listeningPanel);
                Point    dataMousePos   = screenMousePos.ScreenToViewport(activePlotter.Transform);
                DataRect visible        = activePlotter.Viewport.Visible;
                double   delta;
                if (Placement.IsBottomOrTop())
                {
                    delta         = (dataMousePos - dragStartInViewport).X;
                    visible.XMin -= delta;
                }
                else
                {
                    delta         = (dataMousePos - dragStartInViewport).Y;
                    visible.YMin -= delta;
                }

                if (screenMousePos != lmbInitialPosition)
                {
                    listeningPanel.Cursor = Placement.IsBottomOrTop() ? Cursors.ScrollWE : Cursors.ScrollNS;
                }

                activePlotter.Viewport.SetChangeType(Placement.GetPanChangeType());
                activePlotter.Viewport.Visible = visible;
                activePlotter.Viewport.SetChangeType();

                e.Handled = true;
            }
            else if (rmbPressed)
            {
                // one direction zooming:
                if (e.RightButton == MouseButtonState.Released)
                {
                    rmbPressed = false;
                    RevertChanges();
                    return;
                }

                Point    screenMousePos = e.GetPosition(listeningPanel);
                DataRect visible        = activePlotter.Viewport.Visible;
                double   delta;

                bool isHorizontal = Placement.IsBottomOrTop();
                if (isHorizontal)
                {
                    delta = (screenMousePos - rmbInitialPosition).X;
                }
                else
                {
                    delta = (screenMousePos - rmbInitialPosition).Y;
                }

                if (delta < 0)
                {
                    delta = 1 / Math.Exp(-delta / RmbZoomScale);
                }
                else
                {
                    delta = Math.Exp(delta / RmbZoomScale);
                }

                Point center = dragStartInViewport;

                if (isHorizontal)
                {
                    visible = rmbDragStartRect.ZoomX(center, delta);
                }
                else
                {
                    visible = rmbDragStartRect.ZoomY(center, delta);
                }

                if (screenMousePos != lmbInitialPosition)
                {
                    listeningPanel.Cursor = Placement.IsBottomOrTop() ? Cursors.ScrollWE : Cursors.ScrollNS;
                }

                activePlotter.Viewport.SetChangeType(Placement.GetZoomChangeType());
                activePlotter.Viewport.Visible = visible;
                activePlotter.Viewport.SetChangeType();

                //e.Handled = true;
            }
        }