GEF原理及实现系列(八、选项板)

9 篇文章 0 订阅
9 篇文章 0 订阅

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

1.选项板(PaletteRoot)的功能

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

2.选项板的实现

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

java 代码

1.package com.example.tools;  
2.  
3.import java.util.ArrayList;  
4.import java.util.List;  
5.  
6.import org.eclipse.gef.palette.CombinedTemplateCreationEntry;  
7.import org.eclipse.gef.palette.ConnectionCreationToolEntry;  
8.import org.eclipse.gef.palette.PaletteContainer;  
9.import org.eclipse.gef.palette.PaletteDrawer;  
10.import org.eclipse.gef.palette.PaletteGroup;  
11.import org.eclipse.gef.palette.PaletteRoot;  
12.import org.eclipse.gef.palette.SelectionToolEntry;  
13.import org.eclipse.gef.palette.ToolEntry;  
14.import org.eclipse.gef.requests.SimpleFactory;  
15.  
16.import com.example.model.Node;  
17.  
18.public class PaletteFactory {  
19.    public static PaletteRoot createPalette() {  
20.        //新建选项板  
21.        PaletteRoot paletteRoot = new PaletteRoot();  
22.        //添加选项板中的模型选项  
23.        paletteRoot.addAll(createCategories(paletteRoot));  
24.        return paletteRoot;  
25.    }  
26.  
27.    private static List createCategories(PaletteRoot root) {  
28.        List categories = new ArrayList();  
29.        //添加分组选项  
30.        categories.add(createControlGroup(root));  
31.        categories.add(createComponentsDrawer());  
32.  
33.        return categories;  
34.    }  
35.  
36.    private static PaletteContainer createControlGroup(PaletteRoot root) {  
37.        PaletteGroup controlGroup = new PaletteGroup("Control Group");  
38.  
39.        List entries = new ArrayList();  
40.        //添加取消模型选择项  
41.        ToolEntry tool = new SelectionToolEntry();  
42.        entries.add(tool);  
43.        //设置SelectionToolEntry为默认选项  
44.        root.setDefaultEntry(tool);  
45.        //添加连线模型选项入口  
46.        tool = new ConnectionCreationToolEntry("连线", "Create a connection", null, null, null);  
47.        entries.add(tool);  
48.  
49.        controlGroup.addAll(entries);  
50.        return controlGroup;  
51.    }  
52.  
53.    private static PaletteContainer createComponentsDrawer() {  
54.        //添加组件分组页  
55.        PaletteDrawer drawer = new PaletteDrawer("Components");  
56.  
57.        List entries = new ArrayList();  
58.        //添加Node模型选项入口  
59.        ToolEntry tool = new CombinedTemplateCreationEntry("节点", "创建一个节点", Node.class, new SimpleFactory(  
60.                Node.class), null, null);  
61.        entries.add(tool);  
62.  
63.        drawer.addAll(entries);  
64.        return drawer;  
65.    }  
66.}  

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值