`
longgangbai
  • 浏览: 7332342 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

gef中添加可折叠调色板原理以及实现(二)

阅读更多

gef中添加可折叠调色板原理以及实现 中主要的PaletteRoot的创建:

GEF 3.0还允许用户对调色板里的各种工具进行定制,例如隐藏某个工具,或是修改工具的描述等等,这是通过给PaletteViewer定义一个 PaletteCustomizer实例实现的,但由于时间关系,这里暂时不详细介绍了,如果需要这项功能你可以参考Logic例子中的实现方法。

package com.easyway.plugin.gef.diagram.dev.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.MarqueeToolEntry;

import org.eclipse.gef.palette.PaletteContainer;

import org.eclipse.gef.palette.PaletteDrawer;

import org.eclipse.gef.palette.PaletteEntry;

import org.eclipse.gef.palette.PaletteGroup;

import org.eclipse.gef.palette.PaletteRoot;

import org.eclipse.gef.palette.PaletteSeparator;

import org.eclipse.gef.palette.SelectionToolEntry;

import org.eclipse.gef.palette.ToolEntry;

import org.eclipse.gef.requests.SimpleFactory;

import org.eclipse.jface.resource.ImageDescriptor;

import com.easyway.plugin.gef.diagram.dev.model.Node;

import com.easyway.plugin.gef.diagram.text.Activator;

/**

 * 采用单态模式的创建调色板工具栏

 * 我们利用自己写的一个工具类PaletteFactory构造一个PaletteRoot对象并返回,我们的调色板里需要有三种工具:

 * 选择工具、节点工具和连接工具。在GEF里,调色板里可以有抽屉(PaletteDrawer)把各种工具归类放置,每个

 * 工具都是一个ToolEntry,选择工具(SelectionToolEntry)和连接工具

 * ConnectionCreationToolEntry)是预先定义好的几种工具中的两个,所以可以直接使用。

 * 调色板工厂的创建的应用

 * @author longgangbai

 *

 */

publicclass PaletteFactory {

    privatefinalstatic String PALETTE_OWNER_PLUGIN=Activator.PLUGIN_ID+".palette.seperator";

    privatestatic  PaletteRoot paletteRoot;

    privatefinalstatic  Class clazz=PaletteFactory.class.getClass();

   

    /**

     * 获取调色板工具栏

     * @return

     */

    @SuppressWarnings("unused")

    privatestatic  PaletteRoot getPaletteRoot(){

       if(null==paletteRoot)

       {

           paletteRoot=createPalette();

       }

       returnpaletteRoot;

    }

   

       /**

        * 创建调色板的控件工具组

        * @param root

        * @return

        */

       privatestatic PaletteContainer createControlGroup(PaletteRoot root) {

        

            //创建一组默认控件分组对象

           PaletteGroup controlGroup=new PaletteGroup(" Control Group ");

           //创建选中工具控件

           ToolEntry tool=new SelectionToolEntry();

           controlGroup.add(tool);

          

           //设置选中控件为默认的工具

           paletteRoot.setDefaultEntry(tool);

          

           //创建选中工具的框

           controlGroup.add(new MarqueeToolEntry());

           //创建分隔条

           PaletteSeparator  separator =new PaletteSeparator(PALETTE_OWNER_PLUGIN);

           separator.setUserModificationPermission(PaletteEntry.PERMISSION_NO_MODIFICATION);

           controlGroup.add(separator);

          

           //创建一个连接控件的工具

           controlGroup.add(

                    new ConnectionCreationToolEntry("Connections","Create connections",

                    null,

                    ImageDescriptor.createFromFile(clazz,"icons/connections16.gif"),

                    ImageDescriptor.createFromFile(clazz,"icons/connections24.gif")

                    ));

   

          return controlGroup;

       }

       /**

        * 创建调色板的组件工具类

        * @return

        */

       @SuppressWarnings("unchecked")

       privatestatic PaletteContainer createComponentsDrawer() {

          //创建调色板组件类

          PaletteDrawer componetsDrawer = new PaletteDrawer("Components", null);

          //容器组件集合

          List toolEntrys = new ArrayList();

          //创建节点类的(对于节点工具,要使用CombinedTemplateCreationEntry,并把节点类型作为

          //参数之一传给它,创建节点工具的代码如下所示)

          ToolEntry tool = new CombinedTemplateCreationEntry(

              "Node",

             "Create a new Node",

             Node.class,

             new SimpleFactory(Node.class),

             null, /* small icon */

             null/* large icon */

          );

          toolEntrys.add(tool);

          componetsDrawer.addAll(toolEntrys);

          return componetsDrawer;

       }

       /**

        * 获取所有调色板控件中分类列表

        * @param root

        * @return

        */

       @SuppressWarnings("unchecked")

     privatestatic List createCategories(PaletteRoot root) {

          //创建调色板分类集合

          List categories = new ArrayList();

          //添加控件组

          categories.add(createControlGroup(root));

          //添加组件组

          categories.add(createComponentsDrawer());

          return categories;

       }

       /**

         * 创建调色板工具栏

         */

       publicstatic PaletteRoot createPalette() {

        //创建调色板工具栏的Root

          PaletteRoot paletteRoot = new PaletteRoot();

          paletteRoot.addAll(createCategories(paletteRoot));

          return paletteRoot;

       }

 

}

在视图编辑器类中重写相关的方法如下:

  //

分享到:
评论

相关推荐

    GEF中属性页面的实现

    本文将深入探讨如何在GEF中实现属性视图,并通过一个处理器(Processor)模型的例子来阐述具体步骤。 1. **属性视图的概述** - 属性视图用于展示图形模型的相关属性,如处理器的温度、IP地址和类型等。 - 当图形...

    GEF实现拷贝粘贴

    实现拷贝粘贴功能在GEF中涉及到以下几个关键步骤: 1. **定义CopyCommand和PasteCommand**:你需要创建自定义的CopyCommand和PasteCommand类,继承自GEF提供的基础命令类,如DirectEditCommand或EditCommand。这些...

    gef 转折线的相关方法实现和 GEF的API chm 格式

    - `org.eclipse.gef.commands.Command`:命令模式在GEF中用于执行可撤销/重做的操作,如添加、删除或修改图形元素。 - `org.eclipse.gef.requests.Request`:表示用户或系统对编辑域的某种请求,如创建新对象或选择...

    GEF典型实现例子

    这两篇文章可能分别由CSDN博主和博客园博主分享了他们在使用GEF和相关技术,如Draw2D(用于在GEF中绘制2D图形的库)时的经验和技巧。 在深入理解GEF时,我们需要关注以下几个核心概念: 1. **模型-视图-控制器(MVC...

    GEF中文教程+代码

    在本教程中,我们将深入探讨GEF的基本概念、设计原则以及如何使用它来开发自己的图形编辑器。 **1. GEF简介** GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的...

    eclipse gef原理的详细介绍PPT,很有参考价值

    7. **调色板查看器**:允许用户从一个可定制的调色板中选择图形元素。 **教程目标与资源** 该教程的目标是介绍GEF和Draw2d,强调其主要特性,教导如何快速找到解决方案,并提供实践经验,帮助避免常见错误。参与者...

    GEF入门学习例子

    在GEF中,模型通常由`EObject`和`EObjectImpl`实现,可以使用EMF(Eclipse Modeling Framework)来生成。 2. **视图(View)**: 视图是模型的可视化表示,将模型数据呈现给用户。GEF中的视图由`GraphicalViewer`类...

    GEF原理的详细介绍+程序实例和程序源码

    **GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台中被广泛使用。GEF提供了一套全面的API和模型,帮助开发者快速构建可定制的、交互式的图形用户界面。该框架的核心...

    RCP与GEF课件,介绍RCP和GEF各组成部分和工作原理

    RCP允许开发者利用Java语言和Eclipse插件体系结构来创建可扩展、模块化的应用程序,这些应用程序可以具有丰富的用户界面和高度定制的功能。 RCP的关键组成部分包括: 1. **Workbench**:工作台是RCP应用的核心,它...

    GEF 入门版中文教程 源码

    4. **命令(Command)**:GEF中的命令模式用于封装对模型的修改操作,使得撤销/重做功能得以实现。命令对象记录了更改前后的状态,便于执行回滚或重复操作。 5. **图元(Figure)**和**绘图(Drawing)**:GEF通过SWT...

    GEF快速入门教程和EMF教程

    - **Draw2D**: 版本3.1.0或以上,通常包含在GEF中 - **EMF**: 版本2.1.0或以上 ### 创建RCP项目 1. **初始化项目**: - 打开Eclipse并选择“File” > “New” > “Other” > “Plug-in Project”。 - 为项目命名`...

    GEF的动态变化二

    在GEF中,动画通常涉及图元的帧序列,通过改变其位置、大小或其他属性来创造动态效果。可能包含关键帧动画、时间线控制、事件驱动的更新或者其他动画技术。 在GraphAnimation.java中,我们可能会看到以下知识点: 1...

    GEF入门必读 GEF入门系列 GEF-whole-upload

    1. **基本概念**:介绍GEF的关键概念,如Figure、EditPart、Command、Model等,以及它们在图形编辑中的角色。 2. **图形组件**:讲解如何创建和操作图形元素,如矩形、圆形、文本等,以及如何添加连接线和组合图形。...

    GEF入门实例代码2《Eclipse插件开发》中实例

    此外,理解MVC(模型-视图-控制器)模式和MVC在GEF中的应用对于提升开发效率至关重要。 总之,通过这个"GEF入门实例代码2",开发者可以了解到如何在Eclipse中构建一个基于GEF的图形编辑器,这不仅涉及数据模型的...

    IBM GEF 推广资料

    7. **调色板视图**:提供图形元素的选择和插入界面,帮助用户快速创建和编辑图形。 通过这个深入的教程,参与者不仅可以学习到GEF的基本用法,还能了解如何在实际项目中规划和应用GEF,从而提升开发高效图形编辑...

    GEF 入门教程 中文版

    - 添加新的图形元素是GEF中最常见的操作之一。 - 这些元素可以是节点、边、形状等。 **知识点2:实现步骤** 1. **定义新元素模型**:使用Java定义新元素的模型类。 2. **创建新元素视图**:使用GEF提供的绘图工具...

    GEF教程及demo源码GEF_RCP_DEMO.zip

    GEF中的Figure类负责图形绘制,通过重写paint()方法实现自定义图形的绘制,同时支持事件监听和交互。 5. **编辑操作与命令模式** GEF使用命令模式来处理用户的编辑操作,每个编辑操作对应一个Command对象。当用户...

    GEF实例教程PDF

    - **Draw2D**:包含在GEF中,版本3.1.0及以上 - **EMF (Eclipse Modeling Framework)**:2.1.0 及以上版本 #### 二、创建RCP项目 - **RCP (Rich Client Platform)**:基于Eclipse的富客户端平台,提供了一种构建...

    Eclipse开发使用GEF和EMF(IBM 红皮书)中英文对照版

    3. 图形编辑器的构建:详细步骤指导如何使用GEF创建可交互的图形编辑器,包括图元的创建、布局管理、编辑操作的实现等。 4. EMF模型的生成与使用:讲解如何定义XML Schema,由EMF自动生成Java类,以及如何在代码中...

Global site tag (gtag.js) - Google Analytics