Я пишу плагин eclipse для определенного для домена языка. Я подклассифицировал редактор, и все работает нормально.
Я бы хотел добавить всплывающее меню, чтобы я мог выполнять свои собственные рефакторинги. Я использовал org.eclipse.ui.popupmenus для добавления popupmenu, который при щелчке правой кнопкой мыши по редактору предоставляет меню, его можно щелкнуть, а щелчок выполняет следующий метод:
public void run(IAction action) {
MessageDialog.openInformation(shell, "SyntaxColoringCSharp", "refactorA was executed.");
}
Моя проблема заключается в том, что я не знаю, где в редакторе щелчок произошел - так что мне трудно получить нужную часть файла для выполнения рефакторинга. Курсор не перемещается туда, где произошел щелчок.
Как узнать, где в редакторе произошел щелчок popupmenu? (например, как рефакторинг Java получает эту информацию?)
Вот основной класс, с которым я работаю:
package arteditor.popup.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.editors.text.TextEditor;
import editoractions.EditorActions;
public class refactorA implements IObjectActionDelegate {
private Shell shell;
/**
* Constructor for Action1.
*/
public refactorA() {
super();
}
/**
* @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
*/
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
shell = targetPart.getSite().getShell();
}
/**
* @see IActionDelegate#run(IAction)
*/
public void run(IAction action) {
MessageDialog.openInformation(shell, "SyntaxColoringCSharp", "refactorA was executed.");
}
/**
* @see IActionDelegate#selectionChanged(IAction, ISelection)
*/
public void selectionChanged(IAction action, ISelection selection) {
}
}
Нормально использовать позицию курсора (каретки) для действия правой кнопки мыши - это то, что рефакторинг Java выполняет в контекстном меню редактора Java.
Виджет StyledText
имеет различные методы для возврата позиции каретки.