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

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

gef中添加可折叠调色板原理以及实现 中主要的PaletteRoot的创建:

GEF 3.0还允许用户对调色板里的各种工具进行定制,例如隐藏某个工具,或是修改工具的描述等等,这是通过给PaletteViewer定义一个 PaletteCustomizer实例实现的,但由于时间关系,这里暂时不详细介绍了,如果需要这项功能你可以参考Logic例子中的实现方法。

package com.easyway.plugin.gef.diagram.dev.tools;

import java.util.ArrayList;

import java.util.List;

import org.eclipse.gef.palette.CombinedTemplateCreationEntry;

import org.eclipse.gef.palette.ConnectionCreationToolEntry;

import org.eclipse.gef.palette.MarqueeToolEntry;

import org.eclipse.gef.palette.PaletteContainer;

import org.eclipse.gef.palette.PaletteDrawer;

import org.eclipse.gef.palette.PaletteEntry;

import org.eclipse.gef.palette.PaletteGroup;

import org.eclipse.gef.palette.PaletteRoot;

import org.eclipse.gef.palette.PaletteSeparator;

import org.eclipse.gef.palette.SelectionToolEntry;

import org.eclipse.gef.palette.ToolEntry;

import org.eclipse.gef.requests.SimpleFactory;

import org.eclipse.jface.resource.ImageDescriptor;

import com.easyway.plugin.gef.diagram.dev.model.Node;

import com.easyway.plugin.gef.diagram.text.Activator;

/**

 * 采用单态模式的创建调色板工具栏

 * 我们利用自己写的一个工具类PaletteFactory构造一个PaletteRoot对象并返回,我们的调色板里需要有三种工具:

 * 选择工具、节点工具和连接工具。在GEF里,调色板里可以有抽屉(PaletteDrawer)把各种工具归类放置,每个

 * 工具都是一个ToolEntry,选择工具(SelectionToolEntry)和连接工具

 * ConnectionCreationToolEntry)是预先定义好的几种工具中的两个,所以可以直接使用。

 * 调色板工厂的创建的应用

 * @author longgangbai

 *

 */

public class PaletteFactory {

    private final static String PALETTE_OWNER_PLUGIN=Activator.PLUGIN_ID+".palette.seperator";

    private static  PaletteRoot paletteRoot;

    private final static  Class clazz=PaletteFactory.class.getClass();

   

    /**

     * 获取调色板工具栏

     * @return

     */

    @SuppressWarnings("unused")

    private static  PaletteRoot getPaletteRoot(){

       if(null==paletteRoot)

       {

           paletteRoot=createPalette();

       }

       return paletteRoot;

    }

   

       /**

        * 创建调色板的控件工具组

        * @param root

        * @return

        */

       private static PaletteContainer createControlGroup(PaletteRoot root) {

        

            //创建一组默认控件分组对象

           PaletteGroup controlGroup=new PaletteGroup(" Control Group ");

           //创建选中工具控件

           ToolEntry tool=new SelectionToolEntry();

           controlGroup.add(tool);

          

           //设置选中控件为默认的工具

           paletteRoot.setDefaultEntry(tool);

          

           //创建选中工具的框

           controlGroup.add(new MarqueeToolEntry());

           //创建分隔条

           PaletteSeparator  separator =new PaletteSeparator(PALETTE_OWNER_PLUGIN);

           separator.setUserModificationPermission(PaletteEntry.PERMISSION_NO_MODIFICATION);

           controlGroup.add(separator);

          

           //创建一个连接控件的工具

           controlGroup.add(

                    new ConnectionCreationToolEntry("Connections","Create connections",

                    null,

                    ImageDescriptor.createFromFile(clazz,"icons/connections16.gif"),

                    ImageDescriptor.createFromFile(clazz,"icons/connections24.gif")

                    ));

   

          return controlGroup;

       }

       /**

        * 创建调色板的组件工具类

        * @return

        */

       @SuppressWarnings("unchecked")

       private static PaletteContainer createComponentsDrawer() {

          //创建调色板组件类

          PaletteDrawer componetsDrawer = new PaletteDrawer("Components", null);

          //容器组件集合

          List toolEntrys = new ArrayList();

          //创建节点类的(对于节点工具,要使用CombinedTemplateCreationEntry,并把节点类型作为

          //参数之一传给它,创建节点工具的代码如下所示)

          ToolEntry tool = new CombinedTemplateCreationEntry(

              "Node",

             "Create a new Node",

             Node.class,

             new SimpleFactory(Node.class),

             null, /* small icon */

             null /* large icon */

          );

          toolEntrys.add(tool);

          componetsDrawer.addAll(toolEntrys);

          return componetsDrawer;

       }

       /**

        * 获取所有调色板控件中分类列表

        * @param root

        * @return

        */

       @SuppressWarnings("unchecked")

     private static List createCategories(PaletteRoot root) {

          //创建调色板分类集合

          List categories = new ArrayList();

          //添加控件组

          categories.add(createControlGroup(root));

          //添加组件组

          categories.add(createComponentsDrawer());

          return categories;

       }

       /**

         * 创建调色板工具栏

         */

       public static PaletteRoot createPalette() {

        //创建调色板工具栏的Root

          PaletteRoot paletteRoot = new PaletteRoot();

          paletteRoot.addAll(createCategories(paletteRoot));

          return paletteRoot;

       }

 

}

在视图编辑器类中重写相关的方法如下:

  //