changeset 20:2f47c136b8a6

added property view
author dwinter
date Tue, 04 Jan 2011 16:35:41 +0100
parents 2bb7d0aea33f
children 643fa1daa70c
files src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImage.java src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImageController.java src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImageParameter.java src/de/mpg/mpiwg/itgroup/digilib/digiImage/properties/DigiImageProperties.java src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/MirrorHorizontal.java src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/MirrorVertical.java src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/ScaleUp.java src/de/mpg/mpiwg/itgroup/digilib/plugin/editors/DigilibLinkEditorPart.java
diffstat 8 files changed, 362 insertions(+), 75 deletions(-) [+]
line wrap: on
line diff
--- a/src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImage.java	Tue Jan 04 10:31:53 2011 +0100
+++ b/src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImage.java	Tue Jan 04 16:35:41 2011 +0100
@@ -10,11 +10,26 @@
 import java.util.List;
 import java.util.Map;
 
+
+
 import org.apache.commons.lang.StringUtils;
+import org.eclipse.core.runtime.IAdaptable;
+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.Image;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.model.IWorkbenchAdapter;
+import org.eclipse.ui.views.properties.IPropertySource;
 
+import de.mpg.mpiwg.itgroup.digilib.digiImage.properties.DigiImageProperties;
 import de.mpg.mpiwg.itgroup.digilib.manipulator.extensions.ZoomAreaRectangleListener;
 
 
@@ -25,13 +40,14 @@
  * @author dwinter
  *
  */
-public class DigiImage implements IDigiImage {
+public class DigiImage implements IDigiImage, IAdaptable, ISelectionProvider{
 	
 	/** 
 	 * Implemens a connection to Digilib.
 	 */
     
-	
+	private List<ISelectionChangedListener> selectionChangeListener = new ArrayList<ISelectionChangedListener>();
+
 	/* some parameters should not occur in the URL constructed by {@link #createUrlFromParameter(DigiImageParameter)} if set to negative values.
 	 * 
 	 */
@@ -140,34 +156,7 @@
 	 */
 	private URL createUrlFromParameter(DigiImageParameter dp) throws MalformedURLException{
 		
-		Map<String,String> qa= new HashMap<String,String>();
-		
-		setPm(qa,"fn",dp.getFn());
-		setPm(qa,"pn",dp.getPn());
-		
-		setPm(qa,"dw",dp.getDw());
-		setPm(qa,"dh",dp.getDh());
-		
-		setPm(qa,"wx",dp.getWx());
-		setPm(qa,"wy",dp.getWy());
-		setPm(qa,"ws",dp.getWs());
-		setPm(qa,"ww",dp.getWw());
-		setPm(qa,"wh",dp.getWh());
-		
-		
-		setPm(qa,"mo",dp.getMo());
-		
-		setPm(qa,"cont",dp.getCont());
-		setPm(qa,"brgt",dp.getBrgt());
-		
-		setPm(qa,"rot",dp.getRot());
-		
-		setPm(qa,"rgba",dp.getRgba());
-		setPm(qa,"rgbm",dp.getRgbm());
-		
-		setPm(qa,"ddpi",dp.getDdpi());
-		setPm(qa,"ddpix",dp.getDdpix());
-		setPm(qa,"ddpiy",dp.getDdpiy());
+		Map<String, String> qa = dp.createMapFromParameters(omitIfNegative);
 		
 		List<String> queryArray = new ArrayList<String>();
 		for(String key:qa.keySet()){
@@ -178,29 +167,8 @@
 		String stringUrl=baseUrl+"?"+queryString;
 		return new URL(stringUrl);
 	}
-	
-	/**
-	 * Puts the parameter as key-value  into the map repecting the setting in @see {@link #omitIfNegativeArray}.
-	 * @param qa
-	 * @param key
-	 * @param value
-	 */
-	private void setPm(Map<String, String> qa, String key, Object value){
-		String v;
-		if (String.class.isInstance(value)){
-			v=(String)value;
-			qa.put(key, v);
-		} else if (Integer.class.isInstance(value)){
-			if (!((Integer)value==-1 & omitIfNegative.indexOf(key)>-1)) { // nicht vernachlaessigen
-				v=String.valueOf(value);
-				qa.put(key, v);
-			}
-		} else {
-			v=String.valueOf(value);
-			qa.put(key, v);
-		}
-		
-	}
+
+
 
 	/* (non-Javadoc)
 	 * @see de.mpg.mpiwg.itgroup.digilib.digiImage.IDigiImage#getParameter()
@@ -224,6 +192,7 @@
 	public void redraw(){
 		try {
 			setNewURL(createUrlFromParameter(dp));
+			setSelection(new StructuredSelection(this));
 		} catch (MalformedURLException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
@@ -248,6 +217,42 @@
 		this.rectangleListener = rectangleListener;
 	}
 
+	public Object getAdapter(Class adapter) {
+		if (adapter == IPropertySource.class)
+			return new DigiImageProperties(this);	
+		return null;
+		
+	}
+	
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangeListener.add(listener);
+		
+	}
+
+	public ISelection getSelection() {
+		// TODO Auto-generated method stub
+		return new StructuredSelection(this);
+	}
+
+	public void removeSelectionChangedListener(
+			ISelectionChangedListener listener) {
+		selectionChangeListener.remove(listener);
+		
+	}
+
+	public void setSelection(ISelection selection) {
+		
+		for  (ISelectionChangedListener sl: selectionChangeListener){
+		
+			SelectionChangedEvent event = new SelectionChangedEvent(this, selection);
+			sl.selectionChanged(event);
+		
+			
+		}
+		
+	}
+
+	
 }
 
 
--- a/src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImageController.java	Tue Jan 04 10:31:53 2011 +0100
+++ b/src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImageController.java	Tue Jan 04 16:35:41 2011 +0100
@@ -1,17 +1,25 @@
 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 class DigiImageController{
 	
 	public static String VMIR="vmir"; // vertical mirroring
 	public static String HMIR="hmir"; // horizontal mirroring
@@ -19,6 +27,7 @@
 	public DigiImage digiImage; // the image to be controlled.
 	//private DigiImageParameter parameter;
 	
+	
 	protected DigiImageController(){}
 	
 	/** Create a new controller on the image object.
@@ -208,4 +217,6 @@
 	}
 
 
+
+
 }
--- a/src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImageParameter.java	Tue Jan 04 10:31:53 2011 +0100
+++ b/src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImageParameter.java	Tue Jan 04 16:35:41 2011 +0100
@@ -1,5 +1,16 @@
 package de.mpg.mpiwg.itgroup.digilib.digiImage;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.sun.xml.xsom.impl.parser.DelayedRef.Type;
+
+import de.mpg.mpiwg.itgroup.digilib.plugin.editors.DigilibLinkEditorObservable;
+
 /**
  * Parameter which describe the state of an Digilib-Image, 
  * settings and parameter names  are described in @see {@link http://developer.berlios.de/docman/?group_id=251}
@@ -8,37 +19,87 @@
  */
 public class DigiImageParameter {
 
-	private String fn;
+	public String fn;
 	
-	private int pn=1;
+	public int pn=1;
 	
-	private int dw=-1;
-	private int dh=-1;
+	public int dw=-1;
+	public int dh=-1;
 
-	private float wx=0;
-	private float wy=0;
+	public float wx=0;
+	public float wy=0;
 	
-	private float ww=1;
-	private float wh=1;
-	private float ws=1;
+	public float ww=1;
+	public float wh=1;
+	public float ws=1;
 	
-	private String mo="fit";
+	public String mo="fit";
 	
-	private float cont=0;
-	private float brgt=0;
+	public float cont=0;
+	public float brgt=0;
 	
-	private float rot=0;
+	public float rot=0;
 	
-	private String rgbm="0/0/0";
-	private String rgba="0/0/0";
+	public String rgbm="0/0/0";
+	public String rgba="0/0/0";
 	
-	private int ddpi=-1;
-	private int ddpix=-1;
-	private int ddpiy=-1;
+	public int ddpi=-1;
+	public int ddpix=-1;
+	public int ddpiy=-1;
 	
 	public DigiImageParameter(String fn){
 		this.fn = fn;
 	}
+	
+	public DigiImageParameter(Map<String,String> params){
+		
+		for(String key: params.keySet()){
+			Field f;
+			try {
+				f = this.getClass().getField(key);
+			} catch (SecurityException e) {
+				continue;
+			} catch (NoSuchFieldException e) {
+				continue;
+			}
+			if (f!=null){
+				try {
+					Class<?> T = f.getType();
+					String name= T.getName();
+					String valueString = params.get(key); 
+					Object value = valueString;
+					if (name.equals("float")){
+						value =  Float.valueOf(valueString);
+					} else if (name.equals("double")){
+						value =  Double.valueOf(valueString);
+					} else if (name.equals("int")){
+						value =  Integer.valueOf(valueString);
+					} else if (name.equals("Float")){
+						value =  Float.valueOf(valueString);
+					} else if (name.equals("Double")){
+						value =  Double.valueOf(valueString);
+					} else if (name.equals("Integer")){
+						value =  Integer.valueOf(valueString);
+					}
+					
+					
+					f.set(this, value);
+					
+				} catch (IllegalArgumentException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+					continue;
+				} catch (IllegalAccessException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+					continue;
+				
+				}
+			}
+		}
+	}
+	
+	
 	public String getFn() {
 		return fn;
 	}
@@ -150,6 +211,71 @@
 
 	
 	
+	public  Map<String, String> createMapFromParameters(List<String> omitIfNegative) {
+			
+			
+			Map<String,String> qa= new HashMap<String,String>();
+			
+			setPm(qa,"fn",getFn(),omitIfNegative);
+			setPm(qa,"pn",getPn(),omitIfNegative);
+			
+			setPm(qa,"dw",getDw(),omitIfNegative);
+			setPm(qa,"dh",getDh(),omitIfNegative);
+			
+			setPm(qa,"wx",getWx(),omitIfNegative);
+			setPm(qa,"wy",getWy(),omitIfNegative);
+			setPm(qa,"ws",getWs(),omitIfNegative);
+			setPm(qa,"ww",getWw(),omitIfNegative);
+			setPm(qa,"wh",getWh(),omitIfNegative);
+			
+			
+			setPm(qa,"mo",getMo(),omitIfNegative);
+			
+			setPm(qa,"cont",getCont(),omitIfNegative);
+			setPm(qa,"brgt",getBrgt(),omitIfNegative);
+			
+			setPm(qa,"rot",getRot(),omitIfNegative);
+			
+			setPm(qa,"rgba",getRgba(),omitIfNegative);
+			setPm(qa,"rgbm",getRgbm(),omitIfNegative);
+			
+			setPm(qa,"ddpi",getDdpi(),omitIfNegative);
+			setPm(qa,"ddpix",getDdpix(),omitIfNegative);
+			setPm(qa,"ddpiy",getDdpiy(),omitIfNegative);
+			return qa;
+		}
+		
+	
+
+
+/**
+ * Puts the parameter as key-value  into the map repecting the setting in @see {@link #omitIfNegativeArray}.
+ * @param qa
+ * @param key
+ * @param value
+ * @param omitIfNegative 
+ */
+private  void setPm(Map<String, String> qa, String key, Object value,  List<String> omitIfNegative){
+	String v;
+	
+	if (omitIfNegative==null){
+		qa.put(key, String.valueOf(value));
+		return;
+	}
+	if (String.class.isInstance(value)){
+		v=(String)value;
+		qa.put(key, v);
+	} else if (Integer.class.isInstance(value)){
+		if (!((Integer)value==-1 & omitIfNegative.indexOf(key)>-1)) { // nicht vernachlaessigen
+			v=String.valueOf(value);
+			qa.put(key, v);
+		}
+	} else {
+		v=String.valueOf(value);
+		qa.put(key, v);
+	}
+	
+}
 	
 	
 	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/de/mpg/mpiwg/itgroup/digilib/digiImage/properties/DigiImageProperties.java	Tue Jan 04 16:35:41 2011 +0100
@@ -0,0 +1,84 @@
+package de.mpg.mpiwg.itgroup.digilib.digiImage.properties;
+
+import java.util.Map;
+
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+import de.mpg.mpiwg.itgroup.digilib.digiImage.DigiImage;
+import de.mpg.mpiwg.itgroup.digilib.digiImage.DigiImageController;
+import de.mpg.mpiwg.itgroup.digilib.digiImage.DigiImageParameter;
+import de.mpg.mpiwg.itgroup.digilib.plugin.editors.DigilibLinkEditorObservable;
+
+public class DigiImageProperties implements IPropertySource {
+
+	private DigiImageParameter dp;
+	private DigiImage digiImage;
+	private Map<String, String> pt;
+
+	public DigiImageProperties(DigiImage digiImage) {
+		this.dp = digiImage.getParameter();
+		this.digiImage = digiImage;
+		this.pt = dp.createMapFromParameters(null);
+	}
+
+	public Object getEditableValue() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public IPropertyDescriptor[] getPropertyDescriptors() {
+		
+		
+		IPropertyDescriptor[] propertyDescriptors = new IPropertyDescriptor[pt.keySet().size()];
+		int i=0;
+		for (String key: pt.keySet()) {				
+			// Add each property supported.
+			
+			//PropertyDescriptor descriptor;
+
+			TextPropertyDescriptor des = new TextPropertyDescriptor(key, key);
+			
+			propertyDescriptors[i] = des;
+
+			des.setCategory("Basic");
+			i++;
+		}
+				
+		// Return it.
+		return propertyDescriptors;
+
+	
+	}
+
+	public Object getPropertyValue(Object id) {
+		// TODO Auto-generated method stub
+		return pt.get(id);
+	}
+
+	public boolean isPropertySet(Object id) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public void resetPropertyValue(Object id) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void setPropertyValue(Object id, Object value) {
+		
+		String oldValue = pt.get(id);
+		if(oldValue.equals(value)){
+			return;
+		}
+		
+		pt.put((String)id, (String)value);
+		digiImage.setParameter(new DigiImageParameter(pt));
+		digiImage.redraw();
+		DigilibLinkEditorObservable.INSTANCE.imageHasChanged(digiImage);
+	}
+
+}
--- a/src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/MirrorHorizontal.java	Tue Jan 04 10:31:53 2011 +0100
+++ b/src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/MirrorHorizontal.java	Tue Jan 04 16:35:41 2011 +0100
@@ -32,6 +32,7 @@
 		dc.hmir();
 		DigilibLinkEditorObservable.INSTANCE.setCursorStatus(SWT.CURSOR_ARROW);
 		toggleIcon();
+		DigilibLinkEditorObservable.INSTANCE.imageHasChanged(dc.digiImage);
 	}
 
 
--- a/src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/MirrorVertical.java	Tue Jan 04 10:31:53 2011 +0100
+++ b/src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/MirrorVertical.java	Tue Jan 04 16:35:41 2011 +0100
@@ -30,6 +30,8 @@
 		DigilibLinkEditorObservable.INSTANCE.setCursorStatus(SWT.CURSOR_ARROW);
 		
 		toggleIcon();
+		
+		DigilibLinkEditorObservable.INSTANCE.imageHasChanged(dc.digiImage);
 	}
 
 	
--- a/src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/ScaleUp.java	Tue Jan 04 10:31:53 2011 +0100
+++ b/src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/ScaleUp.java	Tue Jan 04 16:35:41 2011 +0100
@@ -3,6 +3,7 @@
 
 
 
+import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.swt.SWT;
 
 import de.mpg.mpiwg.itgroup.digilib.digiImage.DigiImageController;
@@ -33,6 +34,6 @@
 		DigilibLinkEditorObservable.INSTANCE.setCursorStatus(SWT.CURSOR_ARROW);
 		
 		DigilibLinkEditorObservable.INSTANCE.imageHasChanged(dc.digiImage);
-		
+	
 	}
 }
--- a/src/de/mpg/mpiwg/itgroup/digilib/plugin/editors/DigilibLinkEditorPart.java	Tue Jan 04 10:31:53 2011 +0100
+++ b/src/de/mpg/mpiwg/itgroup/digilib/plugin/editors/DigilibLinkEditorPart.java	Tue Jan 04 16:35:41 2011 +0100
@@ -5,13 +5,21 @@
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Observable;
 import java.util.Observer;
 
+import org.apache.axis2.databinding.types.soapencoding.Array;
 import org.eclipse.core.resources.IResourceChangeEvent;
 import org.eclipse.core.resources.IResourceChangeListener;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
+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.SWT;
 import org.eclipse.swt.custom.ScrolledComposite;
 import org.eclipse.swt.graphics.Cursor;
@@ -19,8 +27,15 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.part.EditorPart;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
 import org.jdom.JDOMException;
 
 import de.mpg.mpiwg.itgroup.digilib.digiImage.DigiImage;
@@ -35,10 +50,13 @@
  * @author dwinter
  *
  */
-public class DigilibLinkEditorPart extends EditorPart implements IResourceChangeListener, Observer{
+public class DigilibLinkEditorPart extends EditorPart implements IResourceChangeListener,Observer{
 
 	private Composite mainComposite;
 	private ScrolledComposite sc;
+	//private ISelection selection;
+	//private List<ISelectionChangedListener> selectionChangeListener = new ArrayList<ISelectionChangedListener>();
+	private Object propertySheetPage;
 
 	public void resourceChanged(IResourceChangeEvent event) {
 		// TODO Auto-generated method stub
@@ -135,12 +153,16 @@
 		//imageComp.setBackgroundImage(img);		
 		DigiNav digiNav = new DigiNav(mainComposite,SWT.NONE,digiImageController);
 		
+		getSite().setSelectionProvider(digiImage);
+		digiImage.setSelection(new StructuredSelection(digiImage));
+		
 		sc.setMinSize(mainComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
 		sc.setExpandHorizontal(true);
 	    sc.setExpandVertical(true);
 	    sc.layout();
 		DigilibLinkEditorObservable.INSTANCE.addObserver(this);
 		
+		//setSelection( digiImage);
 	}
 
 	@Override
@@ -154,8 +176,16 @@
 			mainComposite.pack();
 			sc.setMinSize(mainComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
 			sc.layout();
+			
+			
+			//refresh the property view.
+			IWorkbenchPage page = getSite().getPage();
+	
+			IViewPart view = page.findView(IPageLayout.ID_PROP_SHEET);
+			
+			((PropertySheetPage)((PropertySheet)view).getCurrentPage()).refresh();
 			//sc.pack();
-			
+		
 		} else if (Integer.class.isInstance(arg)){
 			int b = (Integer) arg;
 			
@@ -165,7 +195,34 @@
 			
 		}
 		
+	
 	}
+    	
+//	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+//		selectionChangeListener.add(listener);
+//		
+//	}
+//
+//	public ISelection getSelection() {
+//		// TODO Auto-generated method stub
+//		return selection;
+//	}
+//
+//	public void removeSelectionChangedListener(
+//			ISelectionChangedListener listener) {
+//		selectionChangeListener.remove(listener);
+//		
+//	}
+//
+//	public void setSelection(ISelection selection) {
+//		this.selection=selection;
+//		for  (ISelectionChangedListener sl: selectionChangeListener){
+//		
+//			SelectionChangedEvent event = new SelectionChangedEvent(this, selection);
+//			sl.selectionChanged(event);
+//		}
+//		
+//	}