關鍵字: 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模型)。建立的選項闆如下圖: