package com.codeaffine.extras.ide.internal.openwith; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.expressions.IEvaluationContext; import org.eclipse.core.resources.IFile; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.ISources; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.ide.ResourceUtil; public class OpenWithQuickMenuHandler extends AbstractHandler { public static final String COMMAND_ID = "com.codeaffine.extras.ide.internal.OpenWithQuickMenu"; @Override public Object execute( ExecutionEvent event ) { IWorkbenchWindow workbenchWindow = HandlerUtil.getActiveWorkbenchWindow( event ); IFile file = extractFileFromSelection( getStructuredSelection( event ) ); showMenu( workbenchWindow.getActivePage(), file ); return null; } @Override public void setEnabled( Object evaluationContext ) { if( evaluationContext instanceof IEvaluationContext ) { setEnabled( ( IEvaluationContext )evaluationContext ); } else { setBaseEnabled( false ); } } protected void showMenu( IWorkbenchPage workbenchPage, IFile file ) { new OpenWithQuickMenu( workbenchPage, file ).show(); } private void setEnabled( IEvaluationContext evaluationContext ) { IStructuredSelection selection = getSelection( evaluationContext ); setBaseEnabled( isEnabled( selection ) ); } private static boolean isEnabled( IStructuredSelection selection ) { return extractFileFromSelection( selection ) != null; } private static IStructuredSelection getSelection( IEvaluationContext evaluationContext ) { IStructuredSelection result = StructuredSelection.EMPTY; Object variable = evaluationContext.getVariable( ISources.ACTIVE_CURRENT_SELECTION_NAME ); if( variable instanceof IStructuredSelection ) { result = ( IStructuredSelection )variable; } return result; } private static IStructuredSelection getStructuredSelection( ExecutionEvent event ) { IStructuredSelection result = StructuredSelection.EMPTY; ISelection selection = HandlerUtil.getCurrentSelection( event ); if( selection instanceof IStructuredSelection ) { result = ( IStructuredSelection )selection; } return result; } private static IFile extractFileFromSelection( IStructuredSelection selection ) { IFile result = null; if( selection.size() == 1 ) { result = ResourceUtil.getFile( selection.getFirstElement() ); } return result; } }