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