刘寨
精灵王
精灵王
  • UID136
  • 粉丝3
  • 关注2
  • 发帖数31
  • 社区居民
  • 忠实会员
阅读:11195回复:0

GEF插件开发(二,画板元素创建)

楼主#
更多 发布于:2016-08-10 15:07
com.laz.gef.usecase.plugin.demo2.zip
本章节在上一章节基础上,实现编辑器右侧画板元素的添加(添加GEF默认画板工具单选与多选、自定义图形工具)。
1.     定义画板对象PalettRoot,通过工具类PaletteUtil创建画板对象。
关键代码如下:

private PaletteRoot root; // 调色板对象                                                                                                                              
   /**
    * 配置编辑器右侧画板
    */
   @Override
   protected PaletteRoot getPaletteRoot() {
      if (root == null) {
        root = PaletteUtil.createPalette();
      }
      return root;
   }

2.     接下来在工具类中实现具体画板元素的创建。主要是通过在PaletteRoot对象中添加对应的分组信息与分组信息中的画板元素信息。
代码如下:

public class PaletteUtil {


   public static PaletteRoot createPalette() {
      PaletteRoot logicPalette = new PaletteRoot();
      //在画板跟元素中添加画板分组与元素信息
      logicPalette.addAll(createCategories(logicPalette));
      return logicPalette;
   }


   private static List createCategories(PaletteRoot root) {
      List<PaletteContainer> categories = new ArrayList<PaletteContainer>();
      // 创建选择分组工具(一般有GEF自带单选与多选工具)
      categories.add(createControlGroup(root));
      // 创建自定义分组工具(一般在此分组下放置自定义图形工具、可以用多个分组管理图形)在我们创建用例图的图形元素角色与用例
      categories.add(createEntityGroup(root));
      return categories;
   }


   private static PaletteContainer createEntityGroup(PaletteRoot root) {
      PaletteDrawer entities = new PaletteDrawer("元素");
      entities.add(createEntityEntry("角色", "用例角色", Object.class,
           "icons/actor16.gif", "icons/actor16.gif"));
      entities.add(createEntityEntry("用例", "用例描述", Object.class,
           "icons/usecase.gif", "icons/usecase.gif"));
      return entities;
   }


   private static PaletteEntry createEntityEntry(String name, String tip,
        Class<?> clazz, String icon, String bigIcon) {
      // 创建自定义画板工具(参数含义分别为显示名称、提示信息:如果提示信息与显示名称一样将不显示提示、创建工厂(一般采用SimpleFactory,并创建对应的模型类)、显示小图标、显示大图标)
      CreationToolEntry entry = new CreationToolEntry(name, tip,
           new SimpleFactory(clazz),
           UserCaseChartPlugin.getImageDescriptor(icon),
           UserCaseChartPlugin.getImageDescriptor(bigIcon));
      return entry;
   }


   private static PaletteContainer createControlGroup(PaletteRoot root) {
      PaletteGroup controlGroup = new PaletteGroup("画板");
      List<ToolEntry> entries = new ArrayList<ToolEntry>();
      ToolEntry tool = select();
      entries.add(tool);
      root.setDefaultEntry(tool);
      // 多选画板工具
      entries.add(new MarqueeToolEntry("多选", "选择多个图形"));
      controlGroup.addAll(entries);
      return controlGroup;
   }


   public static ToolEntry select() {
      // 单选画板工具
      ToolEntry tool = new PanningSelectionToolEntry("单选", "选择图形");
      return tool;
   }


}


3.     为了将插件进一步规范,更改插件中Activator类为UserCaseChartPlugin,并在plugin.xml的Overview tab页的Activator类信息改为UserCaseChartPlugin类全名。

4.     最后,画板元素添加后效果如下。
游客

返回顶部