关键字: 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模型)。建立的选项板如下图: