package org.jzy3d.plot3d.rendering.view.controllers;

import org.jzy3d.chart.controllers.mouse.NewtMouseUtilities;
import org.jzy3d.chart.controllers.thread.camera.CameraThreadController;
import org.jzy3d.maths.Coord2d;
import org.jzy3d.plot3d.rendering.canvas.IScreenCanvas;
import org.jzy3d.plot3d.rendering.view.View;

import com.jogamp.newt.event.MouseEvent;
import com.jogamp.newt.event.MouseListener;


public class ViewMouseController extends ViewCameraController implements
		MouseListener {
	public ViewMouseController() {
		super();
	}

	public ViewMouseController(View view) {
		super();
		addTarget(view);
	}

	public void addMouseSource(IScreenCanvas canvas) {
		this.canvas = canvas;
		this.prevMouse = Coord2d.ORIGIN;
		canvas.addMouseController(this);
	}

	@Override
    public void dispose() {
		canvas.removeMouseController(this);

		if (threadController != null)
			threadController.stop();
	}

	/*********************************************************/

	public void addSlaveThreadController(CameraThreadController controller) {
		removeSlaveThreadController();
		this.threadController = controller;
	}

	public void removeSlaveThreadController() {
		if (threadController != null) {
			threadController.stop();
			threadController = null;
		}
	}

	/*********************************************************/

	/**
	 * Handles toggle between mouse rotation/auto rotation: double-click starts
	 * the animated rotation, while simple click stops it.
	 */
	@Override
    public void mousePressed(MouseEvent e) {
		//
		if (NewtMouseUtilities.isDoubleClick(e)) {
			if (threadController != null) {
				threadController.start();
				return;
			}
		}
		if (threadController != null)
			threadController.stop();

		prevMouse.x = e.getX();
		prevMouse.y = e.getY();
	}

	/** Compute shift or rotate */
	@Override
    public void mouseDragged(MouseEvent e) {
		Coord2d mouse = new Coord2d(e.getX(), e.getY());

		// Rotate
		if (NewtMouseUtilities.isLeftDown(e)) {
			Coord2d move = mouse.sub(prevMouse).div(100);
			rotate(move);
		}
		// Shift
		else if (NewtMouseUtilities.isRightDown(e)) {
			Coord2d move = mouse.sub(prevMouse);
			if (move.y != 0)
				shift(move.y / 500);
		}
		prevMouse = mouse;
	}

	/** Compute zoom */
	@Override
    public void mouseWheelMoved(MouseEvent e) {
		if (threadController != null)
			threadController.stop();

		float factor = NewtMouseUtilities.convertWheelRotation(e, 1.0f, 10.0f);
		zoom(factor);
	}

	@Override
    public void mouseClicked(MouseEvent e) {
		/*
		 * if(MouseUtilities.isRightClick(e)){ rightClicked(e); }
		 */
		/*
		 * else if(MouseUtilities.isLeftDown(e)){ rightClicked(e); }
		 */
	}

	/*
	 * public void rightClicked(MouseEvent e){
	 * 
	 * }
	 */

	@Override
    public void mouseEntered(MouseEvent e) {
	}

	@Override
    public void mouseExited(MouseEvent e) {
	}

	@Override
    public void mouseReleased(MouseEvent e) {
	}

	@Override
    public void mouseMoved(MouseEvent e) {
	}

	/*********************************************************/

	protected IScreenCanvas canvas;
	protected Coord2d prevMouse;
	protected CameraThreadController threadController;


	// protected Chart chart;
}

 

Ads help maintain this website.