Eclipse Plugin: Создание динамического меню и соответствующего обработчика? - PullRequest
3 голосов
/ 29 июля 2011

Я пытаюсь написать, как мне кажется, очень простой плагин Eclipse, но я действительно изо всех сил пытаюсь найти свой путь, поскольку я никогда раньше не работал с PDE.

В основном то, что я пытаюсь сделатьсделать это добавить подменю в контекстное меню проекта Java, которое будет перечислять кучу доступных файлов в корневом каталоге проекта.Затем, выбрав один из этих пунктов подменю, я хочу, чтобы обработчик был вызван и передал имя выбранного файла.

До сих пор мне удавалось заставить меню отображаться правильно, добавляя динамическийmenuContribution для точки расширения org.eclipse.ui.menus.Я определил свой собственный CompoundContributionItem, который находит все файлы в соответствующем каталоге и заполняет меню.Каждый из этих пунктов меню подключен к моему обработчику (расширяет AbstractHandler), и этот обработчик вызывается каждый раз, когда выбирается элемент меню.Что я не знаю, как это сделать, так это заставить моего обработчика действительно что-то делать в зависимости от того, какой из пунктов меню был выбран.Было бы достаточно, если бы каким-то образом была передана строка метки пункта меню, но я предполагаю, что, вероятно, есть гораздо лучший способ сделать это.

Я попытался просмотреть код org.eclipse.debug.ui, чтобы увидеть, как они делают это с конфигурациями запуска / отладки, потому что это почти то, что я хочу.Они выбирают файлы .launch из каталога проекта .launches и отображают их в виде списка.Код для этого очень сложный и имеет много другого поведения, которое не связано с ним, поэтому я, как новичок, пытаюсь разобраться с этим.Кроме того, они, кажется, сделали это не так, как я, поэтому, возможно, я совершенно неправ в своем подходе.Любая помощь или указатели будут оценены.

Ответы [ 2 ]

3 голосов
/ 01 августа 2011

Я наконец нашел ответ на этот вопрос сам. В файле plugin.xml можно указать параметры для каждой команды, например,

<commandParameter
    id="commandParameterID"
    name="Name of the Parameter"
    optional="false">
</commandParameter>

Теперь, когда я динамически создаю каждый пункт меню, я могу просто добавить свой параметр в карту параметров объекта CommandContributionItemParameter.

CommandContributionItemParameter param = new CommandContributionItemParameter(PlatformUI.getWorkbench(), null, "CommandID", CommandContributionItem.STYLE_PUSH);
param.parameters = new HashMap<String, String>();
param.parameters.put("commandParameterID", "TheValue");

Параметры, добавленные таким образом, доступны в классе обработчика следующим образом:

public Object execute(ExecutionEvent event) throws ExecutionException {
    System.out.println(event.getParameter("commandParameterID"));
    return null;
}
1 голос
/ 29 июля 2011

Возможно, это создатель простого меню поможет вам сделать шаг вперед (или окружающие классы в проекте, лежащие в основе ссылки) или, возможно, plugin.xml всплывающего меню в том же самомпроект

...