Динамическая метка всплывающего действия в разработке плагина eclipse - PullRequest
3 голосов
/ 09 июля 2011

Я хочу создать простой плагин Eclipse, который делает: Когда вы щелкаете правой кнопкой мыши по проекту Java, он отображает всплывающее меню, в котором есть пункт с меткой «N java-файлов найдено в этом проекте», где «N» количество файлов.

У меня есть идея, что я могу обновить метку в "selectionChanged":

public class CountAction implements IObjectActionDelegate {
    public void selectionChanged(IAction action, ISelection selection) {
        action.setText(countJavaFiles());
    }
}

Но это не сработает, если я не нажму этот пункт меню, так как CountAction не был загружен, то selectionChanged не будет вызываться при щелчке правой кнопкой мыши по проекту.

Я потратил много времени на это, но не решил. Пожалуйста, помогите мне.

Ответы [ 2 ]

2 голосов
/ 10 июля 2011

Альтернативой статье, предложенной @kett_chup, является использование IElementUpdater. Просто

  • ваш handler должен реализовать IElementUpdater
  • handler.updateElement((UIElement element, Map parameters) должен установить нужный текст с помощью element.setText("new text") - этот новый текст будет отображаться в меню и панелях инструментов
  • всякий раз, когда вам нужно / хотите обновить текст команды, используйте ICommandService.refreshElements(String commandId, Map filter) с вашим конкретным идентификатором команды - глобальная служба команд обычно просто отлично

Интерфейс IElementUpdater также можно использовать для изменения проверенного состояния - для команд с style=toggle - а также для значков и подсказки.

0 голосов
/ 15 июля 2011

Наконец-то я нашел очень простой способ реализовать это:

Мне не нужно менять свой код (пример кода, о котором идет речь), но мне нужно добавить небольшой startup класс:

import org.eclipse.ui.IStartup;

public class MyStartUp implements IStartup {

    @Override
    public void earlyStartup() {
        // Initial the action
        new CountAction();
    }
}

И добавить следующее к plugin.xml:

<extension
     point="org.eclipse.ui.startup">
  <startup
        class="myplugin.MyStartUp">
  </startup>

Этот MyStartUp загрузит экземпляр этого действия при запуске, затем selectionChanged будет вызываться каждый раз, когда я щелкаю правой кнопкой мыши проекты или файлы.

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