gef中添加可折叠调色板原理以及实现(一)

   最近心情不好,写点博客解闷?这不项目使用eclipse插件开发,使用点rcp,jface,gef,draw2d就总结一下。gef的学习主要看八进制blog学习的:http://www.cnblogs.com/bjzhanghao

gef中添加可折叠调色板原理以及实现:

实现可折叠的调色板的编辑器必须继承自GraphicalEditorWithPaletteGEF 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例子中的实现方法。

你可能感兴趣的:(osgi,RCP,SWT,gef,draw2d)