阅读Eclipse状态行

时间:2011-03-02 21:39:41

标签: eclipse line status rcp

我正在构建一个Eclipse RCP应用程序,并通过以下方式在共享状态行中设置文本:

IStatusLineManager statusLine = 
    getWindowConfigurer().getActionBarConfigurer().getStatusLineManager();

statusLine.setMessage("some status text");

我想知道是否有办法回读共享状态行中显示的当前文本?我注意到你可以使用StatusLineContributionItem来实现这一点,但是对于共享状态行似乎不是这样。

提前致谢。

2 个答案:

答案 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)

恕我直言,从UI读取是不好的做法。 Eclipse体系结构是MVC,这意味着如果您需要将其保存在控制器中以供以后使用。

如果我是你,我会使用扩展点存储状态:

  • org.eclipse.core.variables.dynamicVariables ,或
  • org.eclipse.core.variables.valueVariables

我将更改变量的值,而不是直接更改状态行,并使用IValueVariableListener(自动)更新状态行。