package net.sourceforge.texlipse.actions;
import net.sourceforge.texlipse.TexlipsePlugin;
import net.sourceforge.texlipse.editor.TexCompletionProposal;
import net.sourceforge.texlipse.editor.TexEditor;
import net.sourceforge.texlipse.model.TexCommandEntry;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.ui.IEditorPart;
/**
* Simple action for inserting a Tex command into the current editor
* @author Boris von Loesch
*
*/
public class TexInsertMathSymbolAction extends Action {
TexCommandEntry entry;
TexEditor editor;
/**
* Creates a new Action from the given entry
* @param entry
*/
public TexInsertMathSymbolAction(TexCommandEntry entry) {
super();
this.entry = entry;
setText(entry.key);
setToolTipText(entry.info);
setImageDescriptor(entry.imageDesc);
}
public void run() {
if (editor == null)
return;
ITextSelection selection = (ITextSelection) editor.getSelectionProvider().getSelection();
IDocument doc = editor.getDocumentProvider().getDocument(editor.getEditorInput());
TexCompletionProposal prop = new TexCompletionProposal(entry, selection.getOffset() + 1, 0,
editor.getViewer());
try {
// insert a backslash first
doc.replace(selection.getOffset(), 0, "\\");
prop.apply(doc);
int newOffset = selection.getOffset() + entry.key.length() + 1;
if (entry.arguments > 0) {
newOffset += 1;
}
editor.getSelectionProvider().setSelection(new TextSelection(newOffset, 0));
} catch (BadLocationException e) {
TexlipsePlugin.log("Error while trying to insert command", e);
}
}
public void setActiveEditor(IEditorPart part){
if (part instanceof TexEditor)
editor = (TexEditor) part;
else
editor = null;
}
}