天天看點

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.選項闆的實作