我在我的ecp應用程序中有一個視圖部分,它只包含一個TreeViewer
。eclipse rcp:如何將選擇傳遞給處理程序
每個樹節點具有一個動作提供商當節點是正確的點擊,這將有助於在上下文菜單:
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;
但簡化版,它的工作。
我知道這種方法,我只是在尋找更好的方法。 – CaiNiaoCoder
更新了我的答案。我只是想通過更好的方式來理解你的意思! –