我正在实现一个简单的E4部件,其中的TreeViewer
由具有不同值类型TreeNode
和Foo
的{{1}}支持。
我现在想向执行打开命令的Bar
中添加一个IOpenListener
:
TreeViewer
现在我可以从treeViewer.addOpenListener(event -> {
...
Object selected value = ((TreeNode) event.getSelection()).getValue();
...
});
获取命令并使用ECommandService
执行它。
但是,我希望不同的处理程序执行,取决于 选择的值是EHandlerService
还是{ {1}};尽管所有处理程序都对应于同一逻辑命令(“打开”),但实际执行的处理程序需要取决于选择。
这可能吗?
答案 0 :(得分:1)
通常一个零件只有一个处理程序。
您可以使用EHandlerService.activateHandler
方法来激活不同的处理程序,但这会要求您随着选择的改变而不断使用选择侦听器来激活和停用处理程序。
答案 1 :(得分:1)
我曾经在一个项目中有一个类似的用例,并想出了一个'generic composite handler
',它能够将event context
分配到正确的/实际的/具体的处理程序实例。
例如,实例化复合处理程序,知道它应该分派给所有处理程序。