Статьи

Содействие мастерам Workbench с помощью команд

Вы, должно быть, использовали эту панель инструментов JDT довольно часто.

Элемент инструмента «Новый класс» добавляется как действие в plugin.xml (id «org.eclipse.jdt.ui.actions.NewTypeDropDown»), а затем меню в действии добавляется с помощью кода . В этом совете давайте посмотрим, как сделать то же самое с помощью командной структуры и без какого-либо кода. Первый шаг — добавить панель инструментов, а затем команду New Wizard:

<extension point="org.eclipse.ui.menus">
<menuContribution
allPopups="false"
locationURI="toolbar:org.eclipse.ui.main.toolbar">
<toolbar
id="com.eclipsetips.commands.workbenchWizards.jdtToolbar"
label="Java Creation Elements">
<command
commandId="org.eclipse.ui.newWizard"
style="push">
</command>
</toolbar>
</menuContribution>
</extension>

Теперь мы получаем:

Две проблемы с этим. Во-первых, мы получаем просто диалог нового мастера (тот, который вы получаете, когда нажимаете Ctrl + N). Нам нужен мастер New Java Class. Чтобы это произошло, нам нужно передать параметр, который New Wizard покажет пользователю. Во-вторых, это просто элемент панели инструментов. С ним не связано выпадающее меню. Для этого нам нужно изменить стиль команды с «push» на «pulldown».

            <command
commandId="org.eclipse.ui.newWizard"
style="pulldown">
<parameter
name="newWizardId"
value="org.eclipse.jdt.ui.wizards.NewClassCreationWizard">
</parameter>
</command>

Теперь мы можем получить Мастер нового класса, когда щелкнем по элементу инструмента, но в его выпадающем меню ничего нет. Фреймворк команды назначает menu: <id-of-the-toolitem> в качестве uri для вкладок в меню. Итак, если мы создадим вклад в меню для этого URI:

 <menuContribution
allPopups="false"
locationURI="menu:com.eclipsetips.commands.workbenchWizards.jdtNewClass">
<command
commandId="org.eclipse.ui.newWizard"
style="push">
<parameter
name="newWizardId"
value="org.eclipse.jdt.ui.wizards.NewClassCreationWizard">
</parameter>
</command>
<command
commandId="org.eclipse.ui.newWizard"
style="push">
<parameter
name="newWizardId"
value="org.eclipse.jdt.ui.wizards.NewAnnotationCreationWizard">
</parameter>
</command>
<command
commandId="org.eclipse.ui.newWizard"
style="push">
<parameter
name="newWizardId"
value="org.eclipse.jdt.ui.wizards.NewInterfaceCreationWizard">
</parameter>
</command>
</menuContribution>
</extension>

тогда мы получим это:

Прелесть этого в том, что любой другой плагин теперь может способствовать этому выпадающему списку. Рассмотрим другой плагин, который хочет добавить еще одну команду в этот выпадающий список. Он также может использовать тот же URI:

      <menuContribution
allPopups="false"
locationURI="menu:com.eclipsetips.commands.workbenchWizards.jdtNewClass">
<command
commandId="org.eclipse.ui.newWizard"
style="push">
<parameter
name="newWizardId"
value="org.eclipse.jdt.ui.wizards.NewPackageCreationWizard">
</parameter>
</command>
</menuContribution>

Однако есть одна досадная вещь в том, что панель инструментов отображается всегда. Вы можете ограничить видимость, используя visibleWhen и выражения. Скажем, если мы хотим увидеть это только в перспективе Java:

<command
commandId="org.eclipse.ui.newWizard"
id="com.eclipsetips.commands.workbenchWizards.jdtNewClass"
style="pulldown">
<parameter
name="newWizardId"
value="org.eclipse.jdt.ui.wizards.NewClassCreationWizard">
</parameter>
<visibleWhen
checkEnabled="false">
<with
variable="activeWorkbenchWindow.activePerspective">
<equals
value="org.eclipse.jdt.ui.JavaPerspective">
</equals>
</with>
</visibleWhen>
</command>

Если у вас есть несколько элементов инструментов на панели инструментов, и вы хотите видеть visibleWhen на всей панели инструментов, вы должны подождать, пока эта ошибка не будет исправлена.

Вы, должно быть, использовали эту панель инструментов JDT довольно часто.

Элемент инструмента «Новый класс» добавляется как действие в plugin.xml (id «org.eclipse.jdt.ui.actions.NewTypeDropDown»), а затем меню в действии добавляется с помощью кода . В этом совете давайте посмотрим, как сделать то же самое с помощью командной структуры и без какого-либо кода. Первый шаг — добавить панель инструментов, а затем команду New Wizard:

<extension point="org.eclipse.ui.menus">
<menuContribution
allPopups="false"
locationURI="toolbar:org.eclipse.ui.main.toolbar">
<toolbar
id="com.eclipsetips.commands.workbenchWizards.jdtToolbar"
label="Java Creation Elements">
<command
commandId="org.eclipse.ui.newWizard"
style="push">
</command>
</toolbar>
</menuContribution>
</extension>

Теперь мы получаем:

Две проблемы с этим. Во-первых, мы получаем просто диалог нового мастера (тот, который вы получаете, когда нажимаете Ctrl + N). Нам нужен мастер New Java Class. Чтобы это произошло, нам нужно передать параметр, который New Wizard покажет пользователю. Во-вторых, это просто элемент панели инструментов. С ним не связано выпадающее меню. Для этого нам нужно изменить стиль команды с «push» на «pulldown».

            <command
commandId="org.eclipse.ui.newWizard"
style="pulldown">
<parameter
name="newWizardId"
value="org.eclipse.jdt.ui.wizards.NewClassCreationWizard">
</parameter>
</command>

Теперь мы можем получить Мастер нового класса, когда щелкнем по элементу инструмента, но в его выпадающем меню ничего нет. Фреймворк команды назначает menu: <id-of-the-toolitem> в качестве uri для вкладок в меню. Итак, если мы создадим вклад в меню для этого URI:

 <menuContribution
allPopups="false"
locationURI="menu:com.eclipsetips.commands.workbenchWizards.jdtNewClass">
<command
commandId="org.eclipse.ui.newWizard"
style="push">
<parameter
name="newWizardId"
value="org.eclipse.jdt.ui.wizards.NewClassCreationWizard">
</parameter>
</command>
<command
commandId="org.eclipse.ui.newWizard"
style="push">
<parameter
name="newWizardId"
value="org.eclipse.jdt.ui.wizards.NewAnnotationCreationWizard">
</parameter>
</command>
<command
commandId="org.eclipse.ui.newWizard"
style="push">
<parameter
name="newWizardId"
value="org.eclipse.jdt.ui.wizards.NewInterfaceCreationWizard">
</parameter>
</command>
</menuContribution>
</extension>

тогда мы получим это:

Прелесть этого в том, что любой другой плагин теперь может способствовать этому выпадающему списку. Рассмотрим другой плагин, который хочет добавить еще одну команду в этот выпадающий список. Он также может использовать тот же URI:

      <menuContribution
allPopups="false"
locationURI="menu:com.eclipsetips.commands.workbenchWizards.jdtNewClass">
<command
commandId="org.eclipse.ui.newWizard"
style="push">
<parameter
name="newWizardId"
value="org.eclipse.jdt.ui.wizards.NewPackageCreationWizard">
</parameter>
</command>
</menuContribution>

Однако есть одна досадная вещь в том, что панель инструментов отображается всегда. Вы можете ограничить видимость, используя visibleWhen и выражения. Скажем, если мы хотим увидеть это только в перспективе Java:

 
Скачать

 

С http://blog.eclipse-tips.com/2010/12/contributing-workbench-wizards-thru.html