view src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImageController.java @ 20:2f47c136b8a6

added property view
author dwinter
date Tue, 04 Jan 2011 16:35:41 +0100
parents e63a64652f4d
children 1a7940ac5169
line wrap: on
line source

package de.mpg.mpiwg.itgroup.digilib.digiImage;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.graphics.Point;


/** Contains methods to manipulate an digilib image @see {#link de.mpiwg.itgroup.digilib.digiImage.Digimage}. 
 * The parameters are documented at the digilib pages @see {@link http://developer.berlios.de/docman/display_doc.php?docid=106&group_id=251}.
 *
 */

public class DigiImageController{
	
	public static String VMIR="vmir"; // vertical mirroring
	public static String HMIR="hmir"; // horizontal mirroring

	public DigiImage digiImage; // the image to be controlled.
	//private DigiImageParameter parameter;
	
	
	protected DigiImageController(){}
	
	/** Create a new controller on the image object.
	 * 
	 * @param di
	 */
	public DigiImageController(DigiImage di){
		this.digiImage=di;
	}
	
	
	
	/** Mirrors the image
	 * @param modes can be @see {@value #VMIR} or {@link #HMIR}.
	 */
	public void mir(String mode) {
		
		DigiImageParameter dp = digiImage.getParameter();
		
		String parameter = dp.getMo();
		
		
		// mo kann mehrere durch komma getrennte parameter haben
		String[] splittmo= parameter.split(",");
		Boolean hasMir = false;
		List<String> newmo = new ArrayList<String>();
		for(String m: splittmo){
			if (m.equals(mode)){
				hasMir=true;
			} else {
				newmo.add(m);
			}
		}
		if(!hasMir){ // kein hmir dann dazufuegen
			newmo.add(mode);
			}
		String newmoString = StringUtils.join(newmo,",");
		
		dp.setMo(newmoString);
			
		
		digiImage.setParameter(dp);
		digiImage.redraw();
	}
	

	public void vmir() {
		mir(VMIR);
		
	}
	
	public void hmir() {
		mir(HMIR);
		
	}
	
	public void rotate(float rotateValue) {
		digiImage.getParameter().setRot(rotateValue);
		digiImage.redraw();
	}




/** Zoom the area given by the rectangle (x,y), (x2,y2). Alle point are given in absolute  coordinates.
 * @param x
 * @param y
 * @param x2
 * @param y2
 */
public void zoomArea(int x, int y, int x2, int y2) {
	
	Point size = digiImage.getLabel().getSize();
	
	float relx = new Float(x)/new Float(size.x);
	float rely = new Float(y)/new Float(size.y);
	
	float relx2 = new Float(x2)/new Float(size.x);
	float rely2 = new Float(y2)/new Float(size.y);
	
	DigiImageParameter dp = digiImage.getParameter();
	
	float Ww = dp.getWw();
	float Wh = dp.getWh();
	
	float Wx = dp.getWx();
	float Wy = dp.getWy();
	
	
	float nWx = relx*Ww+Wx;
	float nWy = rely*Wh+Wy;
	
	float nWw = (relx2-relx)*Ww;
	float nWh = (rely2-rely)*Wh;
	
	
	
	dp.setWx(nWx);
	dp.setWy(nWy);
	dp.setWw(nWw);
	dp.setWh(nWh);
	digiImage.setParameter(dp);
	digiImage.redraw();
	
	
	// setRot(rotateValue);
}

	/**
	 * Show the whole image.
	 * 
	 */
	public void zoomFull(){
		DigiImageParameter dp = digiImage.getParameter();
		dp.setWw(1);
		dp.setWh(1);
		
		dp.setWx(0);
		dp.setWy(0);
		
		digiImage.setParameter(dp);
		digiImage.redraw();
	}

	/**
	 * scales the image down (ws --> ws-1)
	 * 
	 */
	public void scaleDown() {
		DigiImageParameter dp = digiImage.getParameter();
		float ws = dp.getWs();
		if (ws>1){
			dp.setWs(ws-1);
			digiImage.setParameter(dp);
			digiImage.redraw();
			
		}
		
	}

	/**
	 * scales the image up (ws --> ws+1)
	 * 
	 */
	public void scaleUp() {
		DigiImageParameter dp = digiImage.getParameter();
		float ws = dp.getWs();
		
			dp.setWs(ws+1);
			digiImage.setParameter(dp);
			digiImage.redraw();
			
		
		
		
	}

	/**
	 * If the image object points to a folder the previous image in the folder is displayed.
	 * 
	 */
	public void prevPage() {
		DigiImageParameter dp = digiImage.getParameter();
		int pn = dp.getPn();
		if (pn>1)
			pn=pn-1;
		dp.setPn(pn);
		digiImage.setParameter(dp);
		digiImage.redraw();
		
	}

	/**
	 * If the image object points to a folder the next image in the folder is displayed.
	 * TODO currently no check is made if we are already on the last image in the folder.
	 */
	public void nextPage() {
		DigiImageParameter dp = digiImage.getParameter();
		int pn = dp.getPn();
		
			pn=pn+1;
		dp.setPn(pn);
		digiImage.setParameter(dp);
		digiImage.redraw();
		
		
	}




}