使用e4依赖注入来收听零件可见性变化

时间:2017-02-28 16:06:49

标签: eclipse-plugin eclipse-rcp e4

使用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。

1 个答案:

答案 0 :(得分:1)

如果查看EPartServiceorg.eclipse.e4.ui.internal.workbench.PartServiceImpl)的实现,订阅可见事件将通过订阅这些事件来触发:

UIEvents.ElementContainer.TOPIC_SELECTEDELEMENT
UIEvents.ApplicationElement.TOPIC_TAGS

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

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