状态栏
如上图,状态栏位于Eclipse最底部,它与菜单栏、快捷菜单栏属都属于WorkbenchWindow 对象,初始值可在ApplicationActionBarAdvisor 中分别重写fillMenuBar (菜单栏)、fillCoolBar (快捷菜单栏)、fillStatusLine (状态栏) 进行设置。 状态栏与快捷菜单栏一样,默认是不显示的,需要配置其显示,这个很重要,其中菜单栏与快捷菜单那栏自定义已经实现,可参考Eclipse插件(RCP)自定义工作台主菜单栏和Eclipse插件(RCP)自定义工作台快捷菜单栏
目标
实现自定义状态栏自定义
分析
fillStatusLine 方法定义在ActionBarAdvisor 中,其实现如下
protected void fillStatusLine(IStatusLineManager statusLine) {
}
RCP项目启动时要重写的方法就是这一个,其中IStatusLineManager 有两个实现类StatusLineManager 和SubStatusLineManager ,它们都实现了IContributionManager 接口,这和菜单栏ICoolBarManager 、快捷菜单栏IMenuManager 一样,因此,状态栏不仅可以展示消息,同时可以添加菜单或按钮。
状态栏的视图实现类是StatusLine , 它初始时默认会被分为BEGIN_GROUP 、MIDDLE_GROUP 、END_GROUP 三个组,细节可以参考org.eclipse.jface.action.StatusLineManager 源码。
需要注意的是,在fillStatusLine 中设置消息,是不会显示的,因为此时做的只是初始化配置,添加消息时 StatusLine 还未实例化。要展示消息可以同过StatusLineContributionItem 的 setText 代替,另一种方案是在ApplicationWorkbenchAdvisor 的postStartup 中实现,因为此时,StatusLine 已经示例化了。
实现
1 重写fillStatusLine 方法
@Override
protected void fillStatusLine(IStatusLineManager statusLine) {
statusLine.add(new NavMenuAction01());
statusLine.add(new NavMenuAction02());
statusLine.add(new NavMenuAction03());
}
2 在postStartup中添加消息
StatusLineManager 支持设置消息和错误消息,这两种消息同时设置时会发生覆盖,因为它们使用同一个视图容器,因此最后设置的才会显示。 消息和错误消息分别支持图片+文字和文字两个方法。
@Override
public void postStartup() {
super.postStartup();
AppPrinter.println("软件启动成功!");
AppPrinter.println("软件启动成功!");
AppPrinter.println("软件启动成功!");
initProject();
StatusLineManager statusLineManager = WorkbenchUtil.getStatusLineManager();
statusLineManager.setMessage(AppActivator.getImageDescriptor("icons/20220417/weijincijiance.png").createImage(),"Hello, Welcome Epx ");
}
其中 WorkbenchUtil.getStatusLineManager() 方法实现如下
public static StatusLineManager getStatusLineManager() {
IWorkbenchWindow activeWindow = getActiveWorkbenchWindow();
if (Objects.isNull(activeWindow)) {
return null;
}
WorkbenchWindow window = (WorkbenchWindow) activeWindow;
return window.getStatusLineManager();
}
有了这个工具方法,可以方便地在程序中任何需要的地方重新设置状态栏信息。
效果
有图片的消息和按钮的示例 只有错误消息和按钮的示例
总结
本文分析实现了状态栏的信息自定义,并提示了其相关源码及逻辑。提炼出的WorkbenchUtil.getStatusLineManager() 方法,可以方便地在项目中任何需要的地方修改状态栏信息。
|