使用Eclipse 4.x,如何使用依赖注入(或事件代理)来监听对部件可见性的更改?
对于零件的激活,以下内容非常优雅:
@Inject @Optional
void partActivated(@Active MPart part)
使用事件的低级替代方案不那么优雅,但仍然相当简洁:
@Inject @Optional
void onActivation(@EventTopic(UIEvents.UILifeCycle.ACTIVATE) Event event)
虽然还存在UIEvents.UILifeCycle.BRINGTOTOP
主题,但可见性的主题发生了变化(类似于IPartLisenter.partVisible
和
IPartLisenter.partHidden
}显然已经失踪了。 (UIEvents.UIElement.TOPIC_VISIBLE
在这里是一个红色的鲱鱼;只是因为MUIElement.isVisible
并不意味着它在屏幕上可见。)
那么,是否可以使用e4的依赖注入魔法来聆听可见性变化(至少对于部分)?
注意:我知道低级别EPartService.addPartListener(IPartListener)
,但宁愿避开它,因为它感觉很麻烦,需要为每个窗口调用AFAICT。
答案 0 :(得分:1)
如果查看EPartService
(org.eclipse.e4.ui.internal.workbench.PartServiceImpl
)的实现,订阅可见事件将通过订阅这些事件来触发:
UIEvents.ElementContainer.TOPIC_SELECTEDELEMENT
UIEvents.ApplicationElement.TOPIC_TAGS
然后检查部件toBeRendered
标志和最小化标签设置。
鉴于这非常复杂,使用EPartService.addPartListener
似乎更好。