Eclipse RCP: как открыть меню «Показать вид» вместо диалога - PullRequest
1 голос
/ 30 июля 2011

Я добавил в свою перспективу org.eclipse.ui.menus

<command
      commandId="org.eclipse.ui.views.showView"
      style="pulldown">
</command>

Это добавляет элемент Show View в главное меню, но этот пункт не является меню (как в меню Eclipse Window).Вместо этого нажатие показывает диалог, в котором я могу выбрать вид.Как мне получить меню вместо этого?

Ответы [ 2 ]

1 голос
/ 25 ноября 2012

Просто чтобы поделиться своим недавним экспериментом по попытке сделать то же самое, то, что Макс предложил в своем ответе , сработает, но заставит вас использовать внутренний код (в результате чего ' Discouraged Access * 1004)* 'предупреждение).

Другой подход - создать меню с помощью советника на панели действий приложений.Несмотря на то, что при таком подходе вам придется писать код (вместо того, чтобы использовать вклад в меню в определении XML плагина).Рассмотрим следующий пример:

public class ApplicationActionBarAdvisor extends ActionBarAdvisor
{
    private IContributionItem contributionOpenPerspective;
    private IContributionItem contributionShowView; 

    ...

    protected void makeActions(IWorkbenchWindow window)
    {
        ...
        contributionOpenPerspective = ContributionItemFactory.
           PERSPECTIVES_SHORTLIST.create(window);
        contributionShowView = ContributionItemFactory.
           VIEWS_SHORTLIST.create(window);
        ...
    }

    protected void fillMenuBar(IMenuManager menuBar)
    {
        ...
        MenuManager windowMenu = new MenuManager("&Window", 
           IWorkbenchActionConstants.M_WINDOW);
        menuBar.add(windowMenu);

        MenuManager openPerspectiveMenu = new MenuManager("&Open Perspective");
        openPerspectiveMenu.add(perspectivesContribution);
        windowMenu.add(openPerspectiveMenu);

        MenuManager showViewMenu = new MenuManager("Show &View");
        showViewMenu.add(viewsContribution);
        windowMenu.add(showViewMenu);
        ...
    } 
}

Возможным недостатком этого подхода является взаимодействие между меню, созданным в советнике, и меню, созданным вкладами в меню.Поскольку элементы меню советника создаются до добавления в меню , вам остается заняться добавлением дополнительной логики сортировки в свои вкладки меню.Это может быть хорошо для большинства людей, однако вы теряете «ощущение» централизованной структуры меню с org.eclipse.ui.menus (даже если это иллюзия, когда другие плагины вступают в игру со своими собственными дополнениями к меню).

Я также включил создание перспективного меню;вариант полностью, но я добавил его, если кто-то пытается выполнить такое же построение меню с перспективами.

1 голос
/ 31 июля 2011

Вы должны создать класс ContributionItem, как показано ниже:

public class MyShowViewContributionItem extends org.eclipse.ui.internal.ShowViewMenu {
    public MyShowViewContributionItem() {
        this("om.myplugin.myShowViewId");
    }
    public MyShowViewContributionItem(String id) {
        super(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow(), id);
    }
}

, затем в вашем расширении plugin.xml org.eclipse.ui.menus:

    <menu
          label="My Show View">
       <dynamic
             class="com.myplugin.MyShowViewContributionItem"
             id="com.myplugin.myShowViewId">
       </dynamic>
    </menu>

Cheers, Max

...