blob: ad611f57bd9f49487109f02f943dbaf99fe9dba9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.views.markers.internal;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.util.OpenStrategy;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.actions.SelectionProviderAction;
/**
* Action to open an editor on the selected bookmarks.
*/
public class ActionOpenMarker extends SelectionProviderAction {
private final String HOVER_IMAGE_PATH = "clcl16/gotoobj_tsk.gif"; //$NON-NLS-1$
private final String IMAGE_PATH = "elcl16/gotoobj_tsk.gif"; //$NON-NLS-1$
private final String DISABLED_IMAGE_PATH = "dlcl16/gotoobj_tsk.gif"; //$NON-NLS-1$
protected IWorkbenchPart part;
public ActionOpenMarker(IWorkbenchPart part, ISelectionProvider provider) {
super(provider, Messages.getString("openAction.title")); //$NON-NLS-1$
this.part = part;
setHoverImageDescriptor(ImageFactory.getImageDescriptor(HOVER_IMAGE_PATH));
setImageDescriptor(ImageFactory.getImageDescriptor(IMAGE_PATH));
setDisabledImageDescriptor(ImageFactory.getImageDescriptor(DISABLED_IMAGE_PATH));
setEnabled(false);
}
public void run() {
IStructuredSelection selection = getStructuredSelection();
if (selection == null || selection.size() != 1)
return;
Object obj = selection.getFirstElement();
if (!(obj instanceof IMarker))
return;
IMarker marker = (IMarker) obj;
//optimization: if the active editor has the same input as the selected marker then
//RevealMarkerAction would have been run and we only need to activate the editor
IEditorPart editor = part.getSite().getPage().getActiveEditor();
if (editor != null) {
IEditorInput input = editor.getEditorInput();
if (input instanceof IFileEditorInput) {
IFile file = ((IFileEditorInput) input).getFile();
if (marker.getResource().equals(file)) {
part.getSite().getPage().activate(editor);
}
}
}
try {
part.getSite().getPage().openEditor(marker, OpenStrategy.activateOnOpen());
} catch (PartInitException e) {
// Open an error style dialog for PartInitException by
// including any extra information from the nested
// CoreException if present.
// Check for a nested CoreException
CoreException nestedException = null;
IStatus status = e.getStatus();
if (status != null && status.getException() instanceof CoreException)
nestedException = (CoreException)status.getException();
if (nestedException != null) {
// Open an error dialog and include the extra
// status information from the nested CoreException
ErrorDialog.openError(
part.getSite().getShell(),
Messages.getString("OpenMarker.errorTitle"), //$NON-NLS-1$
e.getMessage(),
nestedException.getStatus());
} else {
// Open a regular error dialog since there is no
// extra information to display
MessageDialog.openError(
part.getSite().getShell(),
Messages.getString("OpenMarker.errorTitle"), //$NON-NLS-1$
e.getMessage());
}
}
}
public void selectionChanged(IStructuredSelection selection) {
setEnabled(selection != null && selection.size() == 1);
}
}