# HG changeset patch # User dwinter # Date 1294155341 -3600 # Node ID 2f47c136b8a6a38a0a42ca9a9bf623be7137d386 # Parent 2bb7d0aea33fdf5e9016a3141555efd4fd2e9d18 added property view diff -r 2bb7d0aea33f -r 2f47c136b8a6 src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImage.java --- 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 selectionChangeListener = new ArrayList(); + /* 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 qa= new HashMap(); - - 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 qa = dp.createMapFromParameters(omitIfNegative); List queryArray = new ArrayList(); 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 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); + + + } + + } + + } diff -r 2bb7d0aea33f -r 2f47c136b8a6 src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImageController.java --- 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 @@ } + + } diff -r 2bb7d0aea33f -r 2f47c136b8a6 src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImageParameter.java --- 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 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 createMapFromParameters(List omitIfNegative) { + + + Map qa= new HashMap(); + + 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 qa, String key, Object value, List 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); + } + +} diff -r 2bb7d0aea33f -r 2f47c136b8a6 src/de/mpg/mpiwg/itgroup/digilib/digiImage/properties/DigiImageProperties.java --- /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 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); + } + +} diff -r 2bb7d0aea33f -r 2f47c136b8a6 src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/MirrorHorizontal.java --- 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); } diff -r 2bb7d0aea33f -r 2f47c136b8a6 src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/MirrorVertical.java --- 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); } diff -r 2bb7d0aea33f -r 2f47c136b8a6 src/de/mpg/mpiwg/itgroup/digilib/manipulator/extensions/ScaleUp.java --- 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); - + } } diff -r 2bb7d0aea33f -r 2f47c136b8a6 src/de/mpg/mpiwg/itgroup/digilib/plugin/editors/DigilibLinkEditorPart.java --- 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 selectionChangeListener = new ArrayList(); + 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); +// } +// +// }