// Copyright (c) 2003-2005 by Leif Frenzel - see http://leiffrenzel.de package net.sf.eclipsefp.haskell.ui.internal.views.common; import net.sf.eclipsefp.haskell.core.util.ResourceUtil; import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin; import net.sf.eclipsefp.haskell.ui.internal.editors.haskell.HaskellEditor; import net.sf.eclipsefp.haskell.util.FileUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.Viewer; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.FileEditorInput; /** <p>Action for opening a Haskell compilation unit etc., typically after * double click on a viewer item.</p> * * @author Leif Frenzel */ public class OpenViewerElement extends Action { private final Object element; public OpenViewerElement( final DoubleClickEvent event ) { Viewer viewer = event.getViewer(); ISelection selection = viewer.getSelection(); element = ( ( IStructuredSelection )selection ).getFirstElement(); } // interface methods of IAction /////////////////////////////// @Override public void run() { IResource resource = ResourceUtil.findResource( element ); if( resource instanceof IFile ) { if( FileUtil.hasHaskellExtension( resource ) ) { openEditor( ( IFile )resource ); } } } // helping methods ////////////////// private static void openEditor( final IFile file ) { IEditorInput input = new FileEditorInput( file ); try { getPage().openEditor( input, HaskellEditor.ID, true ); } catch( PartInitException ex ) { String path = file.getFullPath().toString(); HaskellUIPlugin.log( "Could not open editor for " + path + ".", ex ); } } private static IWorkbenchPage getPage() { return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); } }