package net.bioclipse.specmol.outline;
import net.bioclipse.specmol.editor.SpecMolEditor;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
import org.xmlcml.cml.base.CMLElement;
import org.xmlcml.cml.element.CMLCml;
public class SpecmolOutlinePage extends ContentOutlinePage implements ISelectionListener, IAdaptable{
private final String CONTRIBUTOR_ID
="net.bioclipse.specmol.outline.SpecmolOutlinePage";
private CMLCml cmlcml;
private TreeViewer treeViewer;
private SpecmolContentProvider contentProvider=new SpecmolContentProvider();
private SpecMolEditor editor;
/**
* Our constructor
* @param cmlcml The specmol content of the editor
*/
public SpecmolOutlinePage(CMLCml cmlcml, SpecMolEditor editor) {
super();
this.cmlcml=cmlcml;
this.editor=editor;
}
/**
* Sets a new input for the outline
* @param spectrum The new spectrum
*/
public void setInput(CMLCml spectrum){
treeViewer.setInput(spectrum);
treeViewer.expandToLevel(2);
}
/**
* Set up the treeviewer for the outline with a spectrum as input
*/
public void createControl(Composite parent) {
super.createControl(parent);
treeViewer= getTreeViewer();
treeViewer.setContentProvider(contentProvider);
treeViewer.setLabelProvider(new SpecmolLabelProvider());
treeViewer.addSelectionChangedListener(this);
if (cmlcml==null) return;
setInput(cmlcml);
getSite().getPage().addSelectionListener(this);
}
/**
* Update selected items if selected in editor
*/
public void selectionChanged(IWorkbenchPart selectedPart,
ISelection selection) {
if(!(selection instanceof IStructuredSelection) || contentProvider.spectra.indexOf(((IStructuredSelection)selection).getFirstElement())==-1)
return;
for(int i=0;i<contentProvider.spectra.size();i++){
if(contentProvider.spectra.get(i).getId().equals(((CMLElement)((IStructuredSelection) selection).getFirstElement()).getId())){
editor.getSpecmoleditorpage().setCurrentspectrumnumber(i);
break;
}
}
}
/**
* This is our ID for the TabbedPropertiesContributor
*/
public String getContributorId() {
return CONTRIBUTOR_ID;
}
public Object getAdapter(Class adapter) {
return null;
}
}