2012-05-09 13 views
3


作業セットをプログラマチックに選択する機能を実現したいと考えています。私は以下のコードで試しました:Eclipseでのプログラムによる選択

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が再起動されると、ワーキングセットではなく、すべてのプロジェクトが表示されます。

答えて

0

新しい作業セットをアクティブページに設定した後。プロジェクトエクスプローラビューをワーキングセットモードに変更しましたか?

プロジェクトエクスプローラビューを見つけてモードを設定してください。

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

こんにちは、上記のコードを呼び出した後、動作しません。 – Ramg

+0

奇妙な。私はもっ​​と研究します。 – nnhthuan

2

ここで私はそれはそれは入っていないかどうプロジェクトエクスプローラでプログラムワーキングセットを設定し、トップレベルのworkingsetsをオンにすることができます作成​​した例ハンドラです:

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; 
} 

それは、ラジオボタンをリセットしませんが、しかし、トップレベル要素のビューメニューで。それはまた、働くために内部を使わなければなりません。

関連する問題