Eclipse plugin 使用e4依赖项注入侦听零件可见性更改

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) 但是,虽然也存在一个

使用Eclipse4.x,我如何使用依赖项注入(或事件代理)监听对部件可见性的更改

对于零件的激活,以下操作非常优雅:

@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
的实例,如何在附加组件中执行此操作(即,在启动初期)?请你单独问一个问题好吗?这样我可以给出一个对其他人有用的答案。