我正在构建一个Eclipse RCP应用程序,并通过以下方式在共享状态行中设置文本:
IStatusLineManager statusLine =
getWindowConfigurer().getActionBarConfigurer().getStatusLineManager();
statusLine.setMessage("some status text");
我想知道是否有办法回读共享状态行中显示的当前文本?我注意到你可以使用StatusLineContributionItem来实现这一点,但是对于共享状态行似乎不是这样。
提前致谢。
答案 0 :(得分:2)
令人讨厌的方式: 依赖于StatusLine类的实现而不改变 - 所以请谨慎行事:
StatusLineManager.getControl()返回一个StatusLine(受包保护),但它是复合子类,这意味着你可以调用getChildren(),其中一个子节点将是一个包含该消息的CLabel。
但这真是太可怕了。
更好的方式,但更多的工作:
从StatusLineManager的文档中,它说客户端可以子类化以提供不同的布局,因此可能您可以将其子类化并提供一种公开最后状态消息的方法。
如果您正在构建RCP,那么您应该将WorkbenchWindowAdvisor子类化,它具有构造函数:
public WorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) ...
从构造函数中你可以调用:
configurer.setPresentationFactory(factory);
请注意,来自我的javadocs:
Deprecated. the presentation factory is now obtained via extension point and a preference on org.eclipse.ui specifying which one to use; see IWorkbenchPreferenceConstants.PRESENTATION_FACTORY_ID
因此,您可能需要调查该扩展点。
工厂对象应该是您自己的AbstractPresentationFactory(或者WorkbenchPresentationFactory)的子类, 覆盖这种方法:
public IStatusLineManager createStatusLineManager() {
return new StatusLineManager();
}
返回自己的StatusLineManager子类。
注意:我正在使用Eclipse 3.4.2,因此请仔细检查您使用的版本的文档。
答案 1 :(得分:0)
如果我是你,我会使用扩展点存储状态:
我将更改变量的值,而不是直接更改状态行,并使用IValueVariableListener(自动)更新状态行。