最近心情不好,写点博客解闷?这不项目使用eclipse插件开发,使用点rcp,jface,gef,draw2d就总结一下。gef的学习主要看八进制blog学习的:http://www.cnblogs.com/bjzhanghao。
gef中添加可折叠调色板原理以及实现:
实现可折叠的调色板的编辑器必须继承自GraphicalEditorWithPalette;GEF 3.0提供了一个功能更加丰富的编辑器父类:GraphicalEditorWithFlyoutPalette,继承它的编辑器具有一个可以折叠的工具条,并且能够利用Eclipse自带的调色板视图,当调色板视图显示时,工具条会自动转移到这个视图中。
与以前的GraphicalEditorWithPalette相比,继承 GraphicalEditorWithFlyoutPalette的编辑器要多做一些工作。首先要实现getPalettePreferences() 方法,它返回一个FlyoutPreferences实例,作用是把调色板的几个状态信息(位置、大小和是否展开)保存起来,这样下次打开编辑器的时候就可以自动套用这些设置。下面使用偏好设置的方式保存和载入这些状态,你也可以使用其他方法,比如保存为.properties文件:
/**
* By default, this method returns a FlyoutPreferences object that stores
*the flyout settings in the GEF plugin. Sub-classes may override.
* @returnthe FlyoutPreferences object used to save the flyout
* palette's preferences
*/
@Override
protected FlyoutPreferences getPalettePreferences() {
returnnew FlyoutPreferences(){
@Override
publicint getDockLocation() {
return Activator.getDefault().getPreferenceStore().getInt(IConstants.PRE_PALETTE_DOC_LOCATION);
}
@Override
publicint getPaletteState() {
// TODO Auto-generated method stub
return 0;
}
@Override
publicint getPaletteWidth() {
// TODO Auto-generated method stub
return 0;
}
@Override
publicvoid setDockLocation(int location) { Activator.getDefault().getPreferenceStore().setValue(IConstants.PRE_PALETTE_DOC_LOCATION,location);
}
@Override
publicvoid setPaletteState(int state) {
// TODO Auto-generated method stub
}
@Override
publicvoid setPaletteWidth(int width) {
// TODO Auto-generated method stub
}
};
}
然后要覆盖缺省的createPaletteViewerProvider()实现,在这里为调色板增加拖放支持,即指定调色板为拖放源(之所以用这样的方式,原因是在编辑器里没有办法得到它对应的调色板实例),在以前这个工作通常是在initializePaletteViewer ()方法里完成的,而现在这个方法已经不需要了:
/**
* 创建可折叠的调色板提供者
*/
@Override
protected PaletteViewerProvider createPaletteViewerProvider() {
returnnew PaletteViewerProvider(getEditDomain()){
protectedvoid configurePaletteViewer(PaletteViewer viewer)
{
super.configurePaletteViewer(viewer);
viewer.addDragSourceListener(new TemplateTransferDragSourceListener(viewer));
}
};
}
GEF 3.0还允许用户对调色板里的各种工具进行定制,例如隐藏某个工具,或是修改工具的描述等等,这是通过给PaletteViewer定义一个 PaletteCustomizer实例实现的,但由于时间关系,这里暂时不详细介绍了,如果需要这项功能你可以参考Logic例子中的实现方法。