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

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import org.jzy3d.chart.controllers.ControllerType;
import org.jzy3d.events.ControllerEvent;
import org.jzy3d.events.ControllerEventListener;
import org.jzy3d.maths.Coord2d;
import org.jzy3d.plot3d.rendering.view.View;


/** Supports a View as target, instead of a chart. */
public abstract class ViewCameraController {
	public ViewCameraController(){
		targets = new ArrayList();
	}
	
	public void addTarget(View target){
		targets.add(target);
	}
	
	public void removeTarget(View target){
		targets.remove(target);
	}
	
	public void dispose(){
		targets.clear();
	}

	/***************************************************************************/
	
	protected void rotate(final Coord2d move){
		for(View view: targets)
			view.rotate(move);
		fireControllerEvent(ControllerType.ROTATE, move);
	}
	
	protected void shift(final float factor){
		for(View view: targets)
			view.shift(factor);
		fireControllerEvent(ControllerType.SHIFT, factor);
	}
	
	protected void zoom(final float factor){
		for(View view: targets)
			view.zoom(factor);
		fireControllerEvent(ControllerType.ZOOM, factor);
	}	
		
	/*************************************************************/

	public void addControllerEventListener(ControllerEventListener listener){
		controllerListeners.add(listener);
	}
	
	public void removeControllerEventListener(ControllerEventListener listener){
		controllerListeners.remove(listener);
	}
	
	protected void fireControllerEvent(ControllerType type, Object value){
		ControllerEvent e = new ControllerEvent(this, type, value);
		for(ControllerEventListener listener: controllerListeners)
			listener.controllerEventFired(e);
	}
	
	/*************************************************************/
	
	protected List targets;
	protected Vector controllerListeners = new Vector(1);
}

 

Ads help maintain this website.