Как добавить команду в контекстное меню редактора в Eclipse? - PullRequest
4 голосов
/ 31 августа 2009

Я хочу добавить команду в контекстное меню любого текстового редактора, когда текст выделен. В «старые времена» я сделал бы это, используя objectContribution и вложенное действие с «enableFor = '+'».

Как это сделать, используя команды вместо действий?

Ответы [ 2 ]

2 голосов
/ 09 сентября 2009

Я прочитал больше о переменных, доступных в выражениях команд, и я близко выяснил это самостоятельно, но не смог. Затем я задал похожий вопрос в группе новостей eclipse, и меня направили в правильном направлении. Вот пример того, как делать в основном то, что я искал:

 <command
      commandId="org.marcesher.blogcodeformatter.commands.wikiFormatterCommand"
      tooltip="Format And Copy to Clipboard"
      id="org.marcesher.blogcodeformatter.popup.wikiFormatterCommand">
    <visibleWhen>
       <with variable="selection">
          <instanceof value="org.eclipse.jface.text.ITextSelection"/>
       </with>
    </visibleWhen>

2 голосов
/ 31 августа 2009

Если я вернусь к своему ответу " Eclipse RCP: действия против команд ", вам потребуется обработчик команд.

Эта тема , кажется, суммирует ваши варианты:

  • Один из них - это обычный шаблон для создания экземпляра обработчика в самом представлении и для того, чтобы обработчик просто смотрел на выбор представления и управлял своим собственным включенным состоянием.
    API обработчика позволяет ему инициировать событие при включенном изменении, см. org.eclipse.core.commands.AbstractHandler.

  • Другой способ - создать тестер свойств, который может получить ваш выбор представления.

IWorkbenchPart p = page.findViewReference("your.id").getPart(false);
if (p!=null) {
  p.getSite().getSelectionProvider().getSelection() ... whatever
}

Ваше представление будет отслеживать собственные события изменения выбора и вызывать org.eclipse.ui.services.IEvaluationService.requestEvaluation(String) (источник здесь ) для этого свойства (что приведет к тому, что все выражения ядра, использующие этот тестер свойств, переоценены).
Важным моментом является то, что простое изменение представлений не приведет к переоценке (и не приведет к изменению включенного состояния).

Вы можете настроить тестер свойств так, чтобы он был специфичен для каждого представления, для которого это необходимо, или создать один com.example.views.localSelection и использовать args, чтобы указать представление id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...