blob: f776449862b183345533695bf34e4c1a3e1751ed [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corp. - Rational Software - initial implementation
* Markus Schorn (Wind River Systems)
* Ed Swartz (Nokia)
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/
/* -- ST-Origin --
* Source folder: org.eclipse.cdt.ui/src
* Class: org.eclipse.cdt.internal.ui.search.actions.SelectionParseAction
* Version: 1.35
*/
package org.eclipse.ptp.internal.rdt.ui.search.actions;
import java.text.MessageFormat;
import org.eclipse.cdt.core.dom.IName;
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.cdt.internal.ui.search.CSearchMessages;
import org.eclipse.cdt.internal.ui.util.EditorUtility;
import org.eclipse.cdt.internal.ui.util.StatusLineHandler;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.texteditor.ITextEditor;
/**
* @author aniefer
* Created on Jun 2, 2004
*/
public class SelectionParseAction extends Action {
protected IWorkbenchSite fSite;
protected CEditor fEditor;
public SelectionParseAction() {
super();
}
public SelectionParseAction( CEditor editor ) {
super();
fEditor=editor;
fSite=editor.getSite();
}
public SelectionParseAction(IWorkbenchSite site){
super();
fSite=site;
}
public IWorkbenchSite getSite() {
return fSite;
}
protected void showStatusLineMessage(final String message) {
StatusLineHandler.showStatusLineMessage(fSite, message);
}
protected void clearStatusLine() {
StatusLineHandler.clearStatusLine(fSite);
}
protected ISelection getSelection() {
ISelection sel = null;
if (fSite != null && fSite.getSelectionProvider() != null ){
sel = fSite.getSelectionProvider().getSelection();
}
return sel;
}
protected ITextSelection getSelectedStringFromEditor() {
ISelection selection = getSelection();
if( selection == null || !(selection instanceof ITextSelection) )
return null;
return (ITextSelection)selection;
}
/**
* Open the editor on the given name.
*
* @param name
*/
protected void open(IName name) throws CoreException {
clearStatusLine();
IASTFileLocation fileloc = name.getFileLocation();
if (fileloc == null) {
reportSymbolLookupFailure(new String(name.toCharArray()));
return;
}
IPath path = new Path(fileloc.getFileName());
int currentOffset = fileloc.getNodeOffset();
int currentLength = fileloc.getNodeLength();
open(path, currentOffset, currentLength);
}
protected void open(IPath path, int currentOffset, int currentLength) throws CoreException {
clearStatusLine();
IEditorPart editor = EditorUtility.openInEditor(path, fEditor.getInputCElement());
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor)editor;
textEditor.selectAndReveal(currentOffset, currentLength);
} else {
reportSourceFileOpenFailure(path);
}
}
protected void reportSourceFileOpenFailure(IPath path) {
showStatusLineMessage(MessageFormat.format(
CSearchMessages.SelectionParseAction_FileOpenFailure_format,
path.toOSString()));
}
protected void reportSelectionMatchFailure() {
showStatusLineMessage(CSearchMessages.SelectionParseAction_SelectedTextNotSymbol_message);
}
protected void reportSymbolLookupFailure(String symbol) {
showStatusLineMessage(MessageFormat.format(
CSearchMessages.SelectionParseAction_SymbolNotFoundInIndex_format,
symbol));
}
protected void reportIncludeLookupFailure(String filename) {
showStatusLineMessage(MessageFormat.format(
CSearchMessages.SelectionParseAction_IncludeNotFound_format,
filename));
}
}