gpt4 book ai didi

java - eclipse RCP :how to pass selection into handler

转载 作者:行者123 更新时间:2023-12-02 07:07:05 25 4
gpt4 key购买 nike

我的 ecp 应用程序中有一个 View 部分,它只包含一个 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);

Action 提供者示例:

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;

但它不起作用。

最佳答案

  1. 您需要将 Tree/Table Viewer 设置为 SelectionProviderPartSite

IWorkbenchSite.java

 public void setSelectionProvider(ISelectionProvider provider);
  1. 您的命令处理程序代码,您有以下方法

公共(public)对象执行(ExecutionEvent事件)抛出ExecutionException

使用ISelection Selection = HandlerUtil.getCurrentSelectionChecked(event);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

如果工作台没有提供SourceProvider,还有另一种方法。您可以实现自己的

org.eclipse.ui.ISourceProvider

您有责任更新提供商 map 。这是示例引用

http://www.vogella.com/articles/EclipseCommandsAdvanced/article.html

关于java - eclipse RCP :how to pass selection into handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15976567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com