【问题标题】:Working Set Selection Programmatically in Eclipse在 Eclipse 中以编程方式选择工作集
【发布时间】:2012-05-17 17:34:42
【问题描述】:

我想实现以编程方式选择工作集的功能。我尝试使用以下代码:

IWorkingSetManager wsMgr = PlatformUI.getWorkbench().getWorkingSetManager();
IWorkingSet ws = wsMgr.getWorkingSet("custom");

IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IWorkingSet[] windowset = new IWorkingSet[]{ws};
page.setWorkingSets(windowset);

但上面的代码不起作用,项目资源管理器没有显示工作集。

为什么上面的代码不起作用,上面的解决方案是什么?

为了使用工作集更新 ProjectExplorer 视图,我尝试了以下代码

IWorkingSetManager wsMgr = PlatformUI.getWorkbench().getWorkingSetManager();
IWorkingSet ws = wsMgr.getWorkingSet("custom");

ProjectExplorer pView = (ProjectExplorer)page.findView(IPageLayout.ID_PROJECT_EXPLORER); pView.getCommonViewer().setInput(ws);

上面的代码在 ProjectExplorer 中显示了工作集的内容,但这不是持久化的。我的意思是一旦 Eclipse 重新启动,所有项目都会显示出来,而不是工作集。

【问题讨论】:

    标签: eclipse working-set


    【解决方案1】:

    这是我创建的示例处理程序,它可以在项目资源管理器中以编程方式设置工作集,如果尚未打开顶级工作集,则打开它:

    public Object execute(ExecutionEvent event) throws ExecutionException {
        IWorkbenchWindow workbenchWindow = HandlerUtil
                .getActiveWorkbenchWindowChecked(event);
        IWorkbenchPage page = workbenchWindow.getActivePage();
        IWorkingSetManager manager = workbenchWindow.getWorkbench()
                .getWorkingSetManager();
        ProjectExplorer projExplorer = (ProjectExplorer) page
                .findView(IPageLayout.ID_PROJECT_EXPLORER);
    
        // This is just a test, to ensure we got hold on the correct object for
        // Project Explorer.
        // The project explorer will get focus now.
        projExplorer.setFocus();
    
        // Obtain list of all existing working sets.
        // This assumes that the debug workspace used have some working sets
        // prepared.
        IWorkingSet[] allExistingSets = manager.getWorkingSets();
        IWorkingSet workingSet = null;
    
        // The prints information about all working sets.
        for (IWorkingSet myset : allExistingSets) {
            workingSet = myset;
            IAdaptable[] elems = myset.getElements();
            System.out.println("Working set " + myset.getName() + " has "
                    + elems.length + " projects.");
            for (IAdaptable elem : elems) {
                System.out.println("Working set " + myset.getName()
                        + " contains " + elem.toString());
            }
        }
    
        page.setWorkingSets(allExistingSets);
        NavigatorActionService actionService = projExplorer
                .getNavigatorActionService();
        CommonViewer viewer = (CommonViewer) projExplorer
                .getAdapter(CommonViewer.class);
        INavigatorContentService contentService = viewer
                .getNavigatorContentService();
        try {
            IExtensionStateModel extensionStateModel = contentService
                    .findStateModel(WorkingSetsContentProvider.EXTENSION_ID);
            extensionStateModel.setBooleanProperty(
                    WorkingSetsContentProvider.SHOW_TOP_LEVEL_WORKING_SETS,
                    true);
            projExplorer.setRootMode(ProjectExplorer.WORKING_SETS);
    
            WorkingSetActionProvider provider = (WorkingSetActionProvider) getActionProvider(
                    contentService, actionService,
                    WorkingSetActionProvider.class);
            IPropertyChangeListener l = provider.getFilterChangeListener();
            PropertyChangeEvent pevent = new PropertyChangeEvent(this,
                    WorkingSetFilterActionGroup.CHANGE_WORKING_SET, null,
                    page.getAggregateWorkingSet());
            l.propertyChange(pevent);
    
            viewer.refresh();
    
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public static CommonActionProvider getActionProvider(
            INavigatorContentService contentService,
            NavigatorActionService actionService, Class cls) throws Exception {
    
        CommonActionProvider provider = null;
        CommonActionProviderDescriptor[] providerDescriptors = CommonActionDescriptorManager
                .getInstance().findRelevantActionDescriptors(contentService,
                        new ActionContext(new StructuredSelection()));
        if (providerDescriptors.length > 0) {
            for (int i = 0; i < providerDescriptors.length; i++) {
                provider = actionService
                        .getActionProviderInstance(providerDescriptors[i]);
                if (provider.getClass() == cls)
                    return provider;
            }
        }
        return null;
    }
    

    虽然它不会重置顶级元素的视图菜单中的单选按钮。它还必须使用内部结构才能工作。

    【讨论】:

      【解决方案2】:

      将新的工作集设置到活动页面后。您是否将项目浏览器视图更改为工作集模式?

      请找到项目浏览器视图并设置模式。

      ProjectExplorer projExplorer = (ProjectExplorer) page.findView(IPageLayout.ID_PROJECT_EXPLORER);
      projExplorer.setRootMode(ProjectExplorer.WORKING_SETS);
      

      【讨论】:

      • 奇怪。我会研究更多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      相关资源
      最近更新 更多