Removing a view from Eclipse Window -> Show views

2019-07-28 04:49发布

问题:

We have an application in which some views only work when attached to certain perspectives. We want to remove those views from the Window -> Show View dialog so that users cannot add them to perspectives where they don't work.

Any ideas on how to do this either programmatically or declaratively?

I have tried using <visibleWhen />, but the views are still showing in the dialog:

  <view class="com.mycompany.ViewClass" 
        id="com.mycompany.ViewId" 
        name="View Name" 
        restorable="true">

        <visibleWhen>
            <with variable="activeWorkbenchWindow.activePerspective">
                <equals value="com.mycompany.MyPerspective"/>
            </with>
        </visibleWhen>
  </view>

I don't think there is any problem with the <visibleWhen /> clause, so I'm wondering if it can be used with a View?

回答1:

It should be treated as a menu contribution, using the <visibleWhen/> to only display that option when a certain condition is met.

See the wiki article "Menu Contribution" for more.



回答2:

Unfortunately, it seems that Eclipse already does this for the Introduction view by calling the private ViewContentProvider.removeIntroView on the content provider for the Show Views dialog. A way to get around this limitation is to define activities by adding to the org.eclipse.ui.activities extension point (see activityPatternBinding on how activities can be mapped to UI contributions). Doing this will not only remove the views from the Show Views dialog, but it will also prevent them from showing in the perspectives themselves. The views can then be shown programmatically. I had to also enable the activities in the ApplicationWorkbenchAdvisor.preStartup method because of limitations in our application:

    Set<String> activityIds = new HashSet<String>();
    activityIds.add("com.my.activity.id");
    IWorkbenchActivitySupport activitySupport = PlatformUI.getWorkbench().getActivitySupport();
    activitySupport.setEnabledActivityIds(activityIds);

In this case, the activity has to be disabled before showing the dialog, so the Show Views menu contribution has to be modified to do this as well.

Hopefully an extension point will be added to the next version of Eclipse to provide the option for developers to remove views from the dialog declaratively.