Eclipse plugin 使用e4依赖项注入侦听零件可见性更改
使用Eclipse4.x,我如何使用依赖项注入(或事件代理)监听对部件可见性的更改 对于零件的激活,以下操作非常优雅:Eclipse plugin 使用e4依赖项注入侦听零件可见性更改,eclipse-plugin,eclipse-rcp,e4,Eclipse Plugin,Eclipse Rcp,E4,使用Eclipse4.x,我如何使用依赖项注入(或事件代理)监听对部件可见性的更改 对于零件的激活,以下操作非常优雅: @Inject @Optional void partActivated(@Active MPart part) 其使用事件的较低级别替代方案不那么优雅,但仍然相当简洁: @Inject @Optional void onActivation(@EventTopic(UIEvents.UILifeCycle.ACTIVATE) Event event) 但是,虽然也存在一个
@Inject @Optional
void partActivated(@Active MPart part)
其使用事件的较低级别替代方案不那么优雅,但仍然相当简洁:
@Inject @Optional
void onActivation(@EventTopic(UIEvents.UILifeCycle.ACTIVATE) Event event)
但是,虽然也存在一个UIEvents.UILifeCycle.BringTop
主题,但是可见性的主题发生了变化(类似于IPartLisenter.partVisible
和
显然缺少IPartLisenter.partHidden
)。(UIEvents.UIElement.TOPIC_VISIBLE
在这里是一条红鲱鱼;仅仅因为MUIElement.isVisible
并不意味着它在屏幕上可见。)
那么,是否可以使用e4的依赖项注入魔法来监听可见性的变化(至少对于部件而言)
注意:我知道低级别的
EPartService.addPartListener(IPartListener)
,但我宁愿避免它,因为它感觉很麻烦,并且需要为每个窗口调用AFAICT。如果您查看EPartService
(org.eclipse.e4.ui.internal.workbench.PartServiceImpl
)部分可见事件通过订阅以下事件激发:
UIEvents.ElementContainer.TOPIC_SELECTEDELEMENT
UIEvents.ApplicationElement.TOPIC_TAGS
然后检查零件toberndered
标志和最小化标记设置
考虑到这相当复杂,最好使用
EPartService.addPartListener
后续问题:上下文中有两个EPartService
实例(在org.eclipse.e4.legacy.ide.application
中,即e4+兼容层中):一个在bundle org.eclipse.e4.ui.workbench的OSGi上下文中,另一个在WorkbenchContext
中。只有后者支持addPartListener
;前一个(ApplicationPartServiceImpl
)抛出一个UnsupportedOperationException
,如果我想从WorkbenchContext
获取EPartService
的实例,如何在附加组件中执行此操作(即,在启动初期)?请你单独问一个问题好吗?这样我可以给出一个对其他人有用的答案。