使用Eclipse和SWT我目前正在尝试将CommandContributionItem
(CCI)作为Button
添加到具有两个文本字段的ViewPart
中。当我按下按钮时,应使用文本字段的当前文本值作为参数来调用ParameterizedCommand
。
我能够将文本字段的初始值传递给CCI,如下所示:
public void createPartControl(Composite parent) {
parent.setLayout(new GridLayout(1, false));
text = new Text(parent, SWT.BORDER);
text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
text_1 = new Text(parent, SWT.BORDER);
text_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Map<String, String> params = new HashMap<String, String>();
params.put("myString", text.getText());
params.put("mySecondString", text_1.getText());
CommandContributionItemParameter p = new CommandContributionItemParameter(getSite(),
"commandSyso","com.voo.example.commandparameter.simple.sysoCommand", CommandContributionItem.STYLE_PUSH);
p.label = "My Label";
p.parameters = params;
CommandContributionItem item = new CommandContributionItem(p);
item.fill(parent);
}
但这是静态的一次性传球。有没有办法在每次调用CCI时动态更新它?
答案 0 :(得分:1)
CommandContributionItem
参数本质上是静态的。您无法修改它们,只能创建CommandContributionItem
的新实例。
使用命令时,IHandler
的实现应使用ExecutionEvent.getApplicationContext()
查找当前选择。如果是IEvaluationContext
,则可以使用org.eclipse.ui.handlers.HandlerUtil
但是在您的示例中,您需要某种方式将2个文本字段的值提供给框架,方法是实现ISelectionProvider
,ISourceProvider
(您可以在其中提供每个文本字段)以新名称),或让您的处理程序检查您的IViewPart
,然后通过访问者访问信息。