天天看点

GEF原理及实现系列(八、选项板)1.选项板(PaletteRoot)的功能2.选项板的实现

关键字: palette

选项板提供了用户选择模型元素,并提供相应的机制把模型和视图加入图形编辑器的能力。

1.选项板(PaletteRoot)的功能

GEF是一个图形编辑框架,它的主编辑区域是一个图形的视图(类似与JFace的Viewer),另外,用户还可以选择选项板上相应的模型,把选择的模型对应的视图加入到图形编辑区域进行编辑。
在GEF中,图形编辑器实现类的getPaletteRoot方法将返回一个PaletteRoot对象,用户可以在PaletteRoot中添加模型选 项入口项(ToolEntry)。例如,在选择板中加入一个连线模型的入口,可以加入“new ConnectionCreationToolEntry("连线", "Create a connection", null, null, null);”,ToolEntry的参数描述了选项板中选项的显示标签、显示图标、提示信息、模型的模板类及模型的创建工厂类等信息。
           

2.选项板的实现

在选项板中创建模型的入口,能添加模型的选择项(ToolEntry)和模型分组项(PaletteDrawer),代码如下:
           

java 代码

package com.example.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.PaletteContainer;  
import org.eclipse.gef.palette.PaletteDrawer;  
import org.eclipse.gef.palette.PaletteGroup;  
import org.eclipse.gef.palette.PaletteRoot;  
import org.eclipse.gef.palette.SelectionToolEntry;  
import org.eclipse.gef.palette.ToolEntry;  
import org.eclipse.gef.requests.SimpleFactory;  
  
import com.example.model.Node;  
  
public class PaletteFactory {  
    public static PaletteRoot createPalette() {  
        //新建选项板  
        PaletteRoot paletteRoot = new PaletteRoot();  
        //添加选项板中的模型选项  
        paletteRoot.addAll(createCategories(paletteRoot));  
        return paletteRoot;  
    }  
  
    private static List createCategories(PaletteRoot root) {  
        List categories = new ArrayList();  
        //添加分组选项  
        categories.add(createControlGroup(root));  
        categories.add(createComponentsDrawer());  
  
        return categories;  
    }  
  
    private static PaletteContainer createControlGroup(PaletteRoot root) {  
        PaletteGroup controlGroup = new PaletteGroup("Control Group");  
  
        List entries = new ArrayList();  
        //添加取消模型选择项  
        ToolEntry tool = new SelectionToolEntry();  
        entries.add(tool);  
        //设置SelectionToolEntry为默认选项  
        root.setDefaultEntry(tool);  
        //添加连线模型选项入口  
        tool = new ConnectionCreationToolEntry("连线", "Create a connection", null, null, null);  
        entries.add(tool);  
  
        controlGroup.addAll(entries);  
        return controlGroup;  
    }  
  
    private static PaletteContainer createComponentsDrawer() {  
        //添加组件分组页  
        PaletteDrawer drawer = new PaletteDrawer("Components");  
  
        List entries = new ArrayList();  
        //添加Node模型选项入口  
        ToolEntry tool = new CombinedTemplateCreationEntry("节点", "创建一个节点", Node.class, new SimpleFactory(  
                Node.class), null, null);  
        entries.add(tool);  
  
        drawer.addAll(entries);  
        return drawer;  
    }  
}  
           

上面代码加入了连线模型、分组项、取消选择项和一个节点项(Node模型)。建立的选项板如下图:

GEF原理及实现系列(八、选项板)1.选项板(PaletteRoot)的功能2.选项板的实现