我目前正在努力使用以下 Eclipse RCP 命令:
org.eclipse.ui.edit.cut
org.eclipse.ui.edit.copy
org.eclipse.ui.edit.paste
我将它们用作工具栏中的命令贡献,但是当handled
这些命令的“”状态发生变化时,UIElements(工具栏项)不会更新。
为了测试,我使用轮询机制来验证这些命令的状态是否真的根据当前关注的元素而改变,我发现处理程序保持不变,但处理程序的“已处理”状态正确更改,导致命令“已处理”状态也可以正确更改。
唯一的问题是,这些状态更改中的任何一个都不会导致通知(无论是在命令的ICommandListener
还是在处理程序的IHandlerListener
),所以 UIElements 不会得到更新。
下面是一些用于观察命令状态的测试代码:
ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
final String commandId="org.eclipse.ui.edit.copy";
Command command = commandService.getCommand(commandId);
command.addCommandListener(new ICommandListener() {
public void commandChanged (CommandEvent commandEvent) {
System.out.println(">> Command changed: " + commandId);
}
});
我是否遗漏了什么,或者这是剪切/复制/粘贴处理程序实现中的错误?有什么见解吗?
编辑:
命令一直处于启用状态,并且处理程序永远不会交换,只有处理程序的“ handled
”状态(以及命令的“ handled
”状态)根据哪个 ui 元素具有焦点而变化。但是,当此状态更改时没有通知。这会导致工具栏按钮始终处于启用状态,按下它们会导致org.eclipse.core.commands.NotHandledException: There is no handler to execute for command
.