net.bioclipse.cdk.ui.sdfeditor.MoleculesOutlinePage.java Source code

Java tutorial

Introduction

Here is the source code for net.bioclipse.cdk.ui.sdfeditor.MoleculesOutlinePage.java

Source

/*******************************************************************************
 * Copyright (c) 2008 The Bioclipse Project and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * <http://www.eclipse.org/legal/epl-v10.html>.
 *
 * Contributors:
 *     Arvid Berg
 *
 ******************************************************************************/
package net.bioclipse.cdk.ui.sdfeditor;

import net.bioclipse.cdk.ui.sdfeditor.editor.MoleculesEditorContentProvider;
import net.bioclipse.cdk.ui.sdfeditor.editor.MoleculesEditorLabelProvider;
import net.bioclipse.cdk.ui.sdfeditor.editor.SDFElementComparer;
import net.bioclipse.cdk.ui.views.IMoleculesEditorModel;

import org.apache.log4j.Logger;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.Page;
import org.eclipse.ui.views.contentoutline.ContentOutline;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;

/**
 * @author arvid
 *
 */
public class MoleculesOutlinePage extends Page implements IContentOutlinePage, ISelectionChangedListener, //INullSelectionListener,
        ISelectionListener {
    public static final int STRUCTURE_WITH = 50;
    Logger logger = Logger.getLogger(MoleculesOutlinePage.class);
    private ListenerList listeners = new ListenerList();
    private TreeViewer viewer;

    Image image2d;

    private IEditorInput input;

    public MoleculesOutlinePage() {
        super();
    }

    private TreeViewer getTreeViewer() {

        return viewer;
    }

    @Override
    public void createControl(Composite parent) {

        viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.VIRTUAL);

        //        viewer.addSelectionChangedListener( this );
        TreeColumn itemColumn = new TreeColumn(viewer.getTree(), SWT.NONE);
        itemColumn.setText("Index");
        itemColumn.setResizable(true);
        itemColumn.setWidth(60);

        TreeColumn nameColumn = new TreeColumn(viewer.getTree(), SWT.NONE);
        nameColumn.setText("Structure");
        nameColumn.setResizable(false);
        nameColumn.setWidth(STRUCTURE_WITH);

        getTreeViewer().setComparer(new SDFElementComparer());
        getTreeViewer().setContentProvider(new MoleculesEditorContentProvider(getTreeViewer()));

        /*getTreeViewer().setLabelProvider( new ILabelProvider() {
            
        public Image getImage( Object element ) {
            
            return MoleculesOutlinePage.this.getImage();
        }
            
        public String getText( Object element ) {
            String text = "-X-";
            if(element instanceof IAdaptable){
                ICDKMolecule molecule = (ICDKMolecule)
                    ((IAdaptable)element).getAdapter( ICDKMolecule.class );
               if(molecule !=null){
                   text = MoleculesOutlinePage.this.buildNameString( molecule );
               }else {
                   // TODO Override creation in DeferredTreeContentManager
                   //  and do a getName from WorkspaceAdapter
                   Object o=((IAdaptable)element).getAdapter(
                                               IWorkbenchAdapter.class );
                   if(o != null)
                       text = ((IWorkbenchAdapter)o).getLabel( o );
               }
               MoleculeEditorElement mee = (MoleculeEditorElement)
                                           ((IAdaptable)element)
                                 .getAdapter( MoleculeEditorElement.class );
               if(mee != null)
                   text = Integer.toString( mee.getIndex() )+ ": "+ text;
            }
            return text;
        }
            
        public void addListener( ILabelProviderListener listener ) {
            
        }
            
        public void dispose() {
           if( MoleculesOutlinePage.this.image2d != null)
               MoleculesOutlinePage.this.image2d.dispose();
        }
            
        public boolean isLabelProperty( Object element, String property ) {
            return false;
        }
            
        public void removeListener( ILabelProviderListener listener ) {
            
        }
            
        });
        */

        getTreeViewer().setLabelProvider(new MoleculesEditorLabelProvider(STRUCTURE_WITH));
        getTreeViewer().setInput(input.getAdapter(IMoleculesEditorModel.class));

        // TreeViewer provides selections and this listens to them
        getTreeViewer().addSelectionChangedListener(this);
        getSite().setSelectionProvider(viewer);
        getSite().getPage().addSelectionListener(this);

    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
     */
    public void selectionChanged(IWorkbenchPart part, ISelection selection) {
        //viewer.setSelection( selection );

        if (part instanceof ContentOutline || part.getSite() == this.getSite()) {
            //                logger.debug( "site == site quit ");
            return;
        }
        if (part != this && selection instanceof IStructuredSelection) {
            //            logger.debug( "Selection has chaged " + this.getClass().getName() );
            viewer.setSelection(selection, true);

        }
    }

    public void setInput(IEditorInput editorInput) {
        this.input = editorInput;
    }

    @Override
    public Control getControl() {
        return (viewer == null ? null : viewer.getControl());
    }

    @Override
    public void setFocus() {
        viewer.getControl().setFocus();
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
     */
    public void addSelectionChangedListener(ISelectionChangedListener listener) {

        listeners.add(listener);
        //getTreeViewer().addSelectionChangedListener( listener );
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
     */
    public ISelection getSelection() {
        if (viewer == null) {
            return StructuredSelection.EMPTY;
        }
        return viewer.getSelection();
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
     */
    public void removeSelectionChangedListener(ISelectionChangedListener listener) {

        listeners.remove(listener);
        //        getTreeViewer().removeSelectionChangedListener( listener );

    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
     */
    public void setSelection(ISelection selection) {
        if (viewer != null) {
            viewer.setSelection(selection);
        }
    }

    public void selectionChanged(SelectionChangedEvent event) {

        fireSelectionChanged(event.getSelection());
    }

    private void fireSelectionChanged(ISelection selection) {

        final SelectionChangedEvent event = new SelectionChangedEvent(this, selection);
        for (Object scl : listeners.getListeners()) {
            final ISelectionChangedListener l = (ISelectionChangedListener) scl;
            SafeRunner.run(new SafeRunnable() {
                public void run() {
                    l.selectionChanged(event);
                }
            });
        }

    }
}