如何将参数化命令传递给CommandContributionItem

时间:2012-08-15 06:15:03

标签: swt eclipse-rcp

使用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时动态更新它?

1 个答案:

答案 0 :(得分:1)

CommandContributionItem参数本质上是静态的。您无法修改它们,只能创建CommandContributionItem的新实例。

使用命令时,IHandler的实现应使用ExecutionEvent.getApplicationContext()查找当前选择。如果是IEvaluationContext,则可以使用org.eclipse.ui.handlers.HandlerUtil

检索选择

但是在您的示例中,您需要某种方式将2个文本字段的值提供给框架,方法是实现ISelectionProviderISourceProvider(您可以在其中提供每个文本字段)以新名称),或让您的处理程序检查您的IViewPart,然后通过访问者访问信息。