В настоящее время я разрабатываю плагин Eclipse CDT, в котором на основе щелчка мыши по текущему активному редактору я хочу выполнить некоторую фильтрацию - я хочу отображать действие, только если выбранный элемент является именем функции (экземпляр IFunction).
Мне удалось добиться этого, но только для текущей позиции курсора (через объект ISelection) курсора в активном редакторе. Однако я хотел бы сделать это тогда, когда произошел щелчок правой кнопкой мыши, а не для позиции, в которой находится курсор.
Пока мне удалось получить событие щелчка мыши (объект типа org.eclipse.swt.events.MouseEvent) и сохранить его. Однако я не нашел способа получить текущий выбранный элемент AST через какую-либо информацию в этом объекте - виджет, положение X, Y щелчка.
Я хотел как-то изменить положение каретки, чтобы также изменить текущий выбор, но не нашел способа, как это сделать, или если это путь.
Любые идеи и помощь будут оценены!
Спасибо.
Я не совсем уверен, что вы спрашиваете, но само действие использует тот же тип выбора / фильтрации, что и фильтр. Таким образом, они оба используют один и тот же подход - положение курсора.
Хорошо, я вижу. Если у вас есть контроль и над действием, и над фильтром, и вы можете изменить их оба, чтобы использовать положение мыши, это должно быть нормально.
Похоже, что StyledText.getOffsetAtPoint()
можно использовать для преобразования координат щелчка в смещение курсора.
В описании метода конкретно сказано:
The return value reflects the character offset that the caret will be placed at if a mouse click occurred at the specified point.
Объект StyledText
для редактора может быть получен на основе IEditorInput
следующим образом:
IEditorPart editor = CUIPlugin.getActivePage().findEditor(editorInput);
StyledText textWidget = (StyledText) editor.getAdapter(Control.class);
Кажется, это правильный ответ и работает, спасибо!
Просто проверка работоспособности: если на мгновение забыть о фильтр, знает ли сам действие - при условии, что он относится к «нажатому элементу», определять «нажатый элемент» на основе местоположения щелчка, а не положения курсора?