当一个GEF应用程序实现了大部分必需的业务功能后,为了能让用户使用得更方便,我们 应该在易用性方面做些考虑。从3.0版本开始, GEF增加了更多这方面的新特性,开发人员很 容易利用它们来改善自己的应用程序界面。这篇帖子将介绍主要的几个功能,它们有些在GEF 2.1中就出现了,但因为都是关于易用性的而且以前没有提到,所以放在这里一起来说。
可折叠调色板
在以前的例子里,我们的编辑器都继承自GraphicalEditorWithPalette。GEF 3.0提供了 一个功能更加丰富的编辑器父类:GraphicalEditorWithFlyoutPalette,继承它的编辑器具 有一个可以折叠的工具条,并且能够利用Eclipse自带的调色板视图,当调色板视图显示时, 工具条会自动转移到这个视图中。
图1 可折叠和配置的调色板
与以前的GraphicalEditorWithPalette相比,继承 GraphicalEditorWithFlyoutPalette 的编辑器要多做一些工作。首先要实现getPalettePreferences() 方法,它返回一个 FlyoutPreferences实例,作用是把调色板的几个状态信息(位置、大小和是否展开)保存起 来,这样下次打开编辑器的时候就可以自动套用这些设置。下面使用偏好设置的方式保存和 载入这些状态,你也可以使用其他方法,比如保存为.properties文件:
protected FlyoutPreferences getPalettePreferences() {
return new FlyoutPreferences() {
public int getDockLocation() {
return SubjectEditorPlugin.getDefault().getPreferenceStore().getInt (IConstants.PREF_PALETTE_DOCK_LOCATION);
}
public void setDockLocation(int location) {
SubjectEditorPlugin.getDefault().getPreferenceStore().setValue (IConstants.PREF_PALETTE_DOCK_LOCATION,location);
}
…
};
}
然后要覆盖缺省的createPaletteViewerProvider()实现,在这里为调色板增加拖放支持 ,即指定调色板为拖放源(之所以用这样的方式,原因是在编辑器里没有办法得到它对应的 调色板实例),在以前这个工作通常是在initializePaletteViewer ()方法里完成的,而现 在这个方法已经不需要了:
protected PaletteViewerProvider createPaletteViewerProvider() {
return new PaletteViewerProvider(getEditDomain()) {
protected void configurePaletteViewer(PaletteViewer viewer) {
super.configurePaletteViewer(viewer);
viewer.addDragSourceListener(new TemplateTransferDragSourceListener (viewer));
}
};
}
GEF 3.0还允许用户对调色板里的各种工具进行定制,例如隐藏某个工具,或是修改工具 的描述等等,这是通过给PaletteViewer定义一个 PaletteCustomizer实例实现的,但由于时 间关系,这里暂时不详细介绍了,如果需要这项功能你可以参考Logic例子中的实现方法。