// Copyright (c) 2006 by Leif Frenzel <himself@leiffrenzel.de>
// All rights reserved.
package net.sf.eclipsefp.haskell.ui.internal.editors.cabal.outline;
import net.sf.eclipsefp.haskell.core.cabalmodel.PackageDescription;
import net.sf.eclipsefp.haskell.ui.internal.editors.cabal.CabalEditor;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
/** <p>content outline for the Cabal editor.</p>
*
* @author Leif Frenzel
*/
public class CabalOutlinePage extends ContentOutlinePage {
private final CabalEditor editor;
private PackageDescription packageDescription;
public CabalOutlinePage( final CabalEditor editor,
final PackageDescription packageDescription ) {
this.editor = editor;
this.packageDescription = packageDescription;
}
public void setPackageDescription( final PackageDescription pd ) {
this.packageDescription = pd;
if( getTreeViewer() != null ) {
getTreeViewer().setInput( pd );
}
}
// interface methods of ContentOutlinePage
//////////////////////////////////////////
@Override
public void createControl( final Composite parent ) {
super.createControl( parent );
TreeViewer tv = getTreeViewer();
tv.setLabelProvider( new CabalOutlineLP() );
tv.setContentProvider( new CabalOutlinePageCP() );
tv.setAutoExpandLevel( AbstractTreeViewer.ALL_LEVELS );
tv.addSelectionChangedListener( new ISelectionChangedListener() {
@Override
public void selectionChanged(final SelectionChangedEvent event) {
if( event.getSelection() instanceof IStructuredSelection ) {
IStructuredSelection ssel = ( IStructuredSelection )event.getSelection();
if( ssel.size() == 1 ) {
editor.selectAndReveal( ssel.getFirstElement() );
}
}
}
});
tv.setInput( packageDescription );
}
}