使用 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.partVisible
和
IPartLisenter.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
似乎更好。
使用 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 =35=].
如果您查看 EPartService
(org.eclipse.e4.ui.internal.workbench.PartServiceImpl
) 的实现,部分可见事件是通过订阅这些事件触发的:
UIEvents.ElementContainer.TOPIC_SELECTEDELEMENT
UIEvents.ApplicationElement.TOPIC_TAGS
然后检查部分toBeRendered
标志和最小化标签设置。
鉴于这相当复杂,使用 EPartService.addPartListener
似乎更好。