使用 e4 依赖注入来监听部分可见性变化

Using e4 dependency injection to listen to part visibility changes

使用 Eclipse 4.x,如何使用依赖注入(或事件代理)监听部件可见性的变化?

对于部件的激活,以下是非常优雅的:

@Inject @Optional
void partActivated(@Active MPart part)

它使用事件的低级替代方案不太优雅但仍然相当简洁:

@Inject @Optional
void onActivation(@EventTopic(UIEvents.UILifeCycle.ACTIVATE) Event event)

但是虽然还有一个 UIEvents.UILifeCycle.BRINGTOTOP 主题,但 可见性 的主题发生了变化(类似于 IPartLisenter.partVisibleIPartLisenter.partHidden) 显然不见了。 (UIEvents.UIElement.TOPIC_VISIBLE 在这里是转移注意力;仅仅因为 MUIElement.isVisible 并不意味着它在屏幕上可见。)

那么,是否可以使用 e4 的依赖注入魔法来监听可见性变化(至少对于某些部分)?

注意:我知道低级EPartService.addPartListener(IPartListener),但宁愿避免使用它,因为它感觉很麻烦并且需要为每个[调用AFAICT =35=].

如果您查看 EPartService (org.eclipse.e4.ui.internal.workbench.PartServiceImpl) 的实现,部分可见事件是通过订阅这些事件触发的:

UIEvents.ElementContainer.TOPIC_SELECTEDELEMENT
UIEvents.ApplicationElement.TOPIC_TAGS

然后检查部分toBeRendered标志和最小化标签设置。

鉴于这相当复杂,使用 EPartService.addPartListener 似乎更好。