0

私は私のecpアプリケーションにビュー部分を持っていますTreeViewer.

各ツリー ノードには、ノードが右クリックされたときにコンテキスト メニューに表示されるアクション プロバイダーがあります。

MenuManager menuManager = new MenuManager();
        menuManager.addMenuListener(new IMenuListener(){

            @Override
            public void menuAboutToShow(IMenuManager manager) {
                IStructuredSelection is = (IStructuredSelection)treeViewer.getSelection();
                if(is.isEmpty()){
                    return;
                }else{
                    Node node = (Node)is.getFirstElement();
                    IActionProvider provider  = node.getActionProvider();
                    IContributionItem[] actions = provider.getActions();
                    if(actions.length == 0){
                        return;
                    }else{
                        for(IContributionItem action : actions){
                            manager.add(action);
                        }
                    }
                }
            }

        });
        Menu menu = menuManager.createContextMenu(treeViewer.getTree());
        menuManager.setRemoveAllWhenShown(true);
        treeViewer.getTree().setMenu(menu);
        getSite().registerContextMenu(menuManager, treeViewer);
        getSite().setSelectionProvider(treeViewer);

アクション プロバイダーの例:

public class CPSActionProvider implements IActionProvider {
    private Object source;

    @Override
    public void setInitializationData(IConfigurationElement config,
            String propertyName, Object data) throws CoreException {
        // TODO Auto-generated method stub

    }

    @Override
    public IContributionItem[] getActions() {
        CommandContributionItemParameter cp = new CommandContributionItemParameter(
                PlatformUI.getWorkbench().getActiveWorkbenchWindow(),
                null, "cn.ggfan.dmp.commands.addCP",
                CommandContributionItem.STYLE_CHECK);
        HashMap<String, Object> paras = new HashMap<String, Object>();
        paras.put("source", this.source);
        cp.parameters = paras;
        CommandContributionItem add = new CommandContributionItem(cp);
        //add.setId("cn.ggfan.dmp.commands.addCP");
        return new IContributionItem[] { add };
    }

    @Override
    public void setSource(Object o) {
        // TODO Auto-generated method stub
        this.source = o;
    }

}

cn.ggfan.dmp.commands.addCPソースフィールドはdefaultHandler右クリックされているノードです。私の質問は、ソースフィールドをハンドラーに渡す方法ですか? ご覧のとおり、次のようにしようとしています。

HashMap<String, Object> paras = new HashMap<String, Object>();
        paras.put("source", this.source);
        cp.parameters = paras;

しかし、うまくいきません。

4

1 に答える 1