/** * Aptana Studio * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions). * Please see the license.html included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package com.aptana.editor.php.internal.ui.handler; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.texteditor.ITextEditor; import com.aptana.core.logging.IdeLog; import com.aptana.editor.php.PHPEditorPlugin; import com.aptana.editor.php.internal.search.ExternalReference; import com.aptana.editor.php.internal.search.IElementNode; import com.aptana.editor.php.internal.ui.dialog.ElementSelectionDialog; import com.aptana.editor.php.internal.ui.dialog.TypeSelectionDialog; /** * An Open Type handler for PHP. * * @author Shalom Gibly <sgibly@appcelerator.com> */ public class OpenTypeHandler extends AbstractHandler implements IHandler { /* * (non-Javadoc) * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) */ public Object execute(ExecutionEvent event) throws ExecutionException { TypeSelectionDialog typeSelectionDialog = new ElementSelectionDialog(Display.getCurrent().getActiveShell(), false); typeSelectionDialog.setTitle(Messages.OpenTypeHandler_openTypeTitle); typeSelectionDialog.setMessage(Messages.OpenTypeHandler_openTypeMessage); int open = typeSelectionDialog.open(); if (open == Dialog.OK) { Object[] result = typeSelectionDialog.getResult(); if (result.length > 0) { IElementNode node = (IElementNode) result[0]; ExternalReference externalReference = node.toExternalReference(); String editorId; if (externalReference.editorInput != null) { try { IEditorDescriptor editorDescriptor = IDE.getEditorDescriptor(externalReference.editorInput .getName()); editorId = editorDescriptor.getId(); IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow() .getActivePage(); IEditorPart openEditor = IDE.openEditor(activePage, externalReference.editorInput, editorId); if (openEditor instanceof ITextEditor) { ITextEditor ed = (ITextEditor) openEditor; int position = externalReference.position.getStartingOffset(); ed.selectAndReveal(position, 0); } } catch (Exception e) { IdeLog.logError(PHPEditorPlugin.getDefault(), e.getMessage(), e); } } } } return null; } }