view src/de/mpg/mpiwg/itgroup/digilib/plugin/editors/DigilibLinkEditorPart.java @ 20:2f47c136b8a6

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

package de.mpg.mpiwg.itgroup.digilib.plugin.editors;


import info.textgrid.lab.linkeditor.mip.gui.ImagePanel;

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;
import org.eclipse.swt.layout.GridLayout;
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;
import de.mpg.mpiwg.itgroup.digilib.digiImage.DigiImageController;
import de.mpg.mpiwg.itgroup.digilib.digiImage.DigiImageParameter;
import de.mpg.mpiwg.itgroup.digilib.digiImage.DigiNav;
import de.mpg.mpiwg.itgroup.indexMeta.Utils.ParseIndexMeta;

/**
 * Displays an image with digilib an allows image manipulation on the image.
 * 
 * @author dwinter
 *
 */
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
		
	}

	@Override
	public void doSave(IProgressMonitor monitor) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doSaveAs() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void init(IEditorSite site, IEditorInput input)
			throws PartInitException {
		setInput(input);
		setSite(site);
		
	}

	@Override
	public boolean isDirty() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isSaveAsAllowed() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void createPartControl(Composite frame) {
	
		sc = new ScrolledComposite(frame, SWT.H_SCROLL | SWT.V_SCROLL);
		mainComposite = new Composite(sc,SWT.None);
		
		GridLayout imageLayout = new GridLayout(2,false);
		mainComposite.setLayout(imageLayout);
		sc.setContent(mainComposite);
		//sc.setMinSize(400, 400);
		


		DigilibLinkEditorInput input= (DigilibLinkEditorInput) getEditorInput();
		String path="";
		if (input.getType()==DigilibLinkEditorInput.INDEX_META){
			ParseIndexMeta im;
			try {
				im = new ParseIndexMeta(input.getFile());
			} catch (JDOMException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return;
			} catch (CoreException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return;
			}
			try {
				path=im.getImagePath();
			} catch (JDOMException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return;
			}
			if (path==null)
				return;
		} else {
			//TODO: issue warning that type cannot be solved.
			return;
		}
		
		
		path=path.replace("/mpiwg/online", "");
		DigiImageParameter dp = new DigiImageParameter(path);
		dp.setDh(500);
		dp.setDw(500);
		
		
		DigiImage digiImage = new DigiImage(mainComposite, SWT.BORDER, dp);
		DigiImageController digiImageController = new DigiImageController(digiImage);
		//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
	public void setFocus() {
		// TODO Auto-generated method stub
		
	}

	public void update(Observable o, Object arg) {
		if (DigiImage.class.isInstance(arg)){
			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;
			
			Cursor waitCursor = new Cursor(mainComposite.getDisplay(),b);
			mainComposite.setCursor(waitCursor);
		
			
		}
		
	
	}
    	
//	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);
//		}
//		
//	}


	
}