`

增加Palette的拖放支持

    博客分类:
  • GEF
 
阅读更多

 

注意:这篇文章是从刘刚的博客中获取的,主要是考虑到自己碰到类似需求,所以直接拷贝过来了,当做资料积累。

 

默认情况下,GEF中要创建一个新的结点都是通点在Palette上选择一个结点,然后在Editor区域单击实现的。

 

也有一些是通过拖放Palette中的一个对象到Editor区域来实现的。

 

要实现一个拖放支持也是很容易的。GEF中默认实现了一组drag-drop listener用来支持拖放实现:

 

1。TemplateTransferDropTargetListener

 

     因为是要从palette上拖到Editor中,所以此监听事件显示是应该安放在Editor上,在GEF中就是GraphicalViewer,可以在initializeGraphicalViewer()方法中加上:

 

getGraphicalViewer().addDropTargetListener(new TemplateTransferDropTargetListener(
      getGraphicalViewer()));

 

2。TemplateTransferDragSourceListener

 

     显示此事件需要加在palette上,也就是PaletteViewer上,可以在initializePaletteViewer()方法中加上:

 

getPaletteViewer().addDragSourceListener(new TemplateTransferDragSourceListener(getPaletteViewer()));

 

回头再看一下我们对Palette上的Item的声明:

 

 CombinedTemplateCreationEntry(String label, String shortDesc,
  CreationFactory factory, ImageDescriptor iconSmall, ImageDescriptor iconLarge)

 

需要注意CombinedTemplateCreationEntry构造方法的选用。认为上述构造方法为默认选择,而CreationFactory类为SimpleFactory。

 

如果选择另一个构造方法:

 

CombinedTemplateCreationEntry(String label, String shortDesc, Object template,
  CreationFactory factory, ImageDescriptor iconSmall, ImageDescriptor iconLarge)

 

则我们需要注意:如果template和factory都是SimpleFactory则没有问题,因为默认的template就是SimpleFactory。否则我们需要根据自己的template值来得到对应的model,也就是要实现自己的CreationFactory。例如:

 

Java代码   收藏代码
  1. CombinedTemplateCreationEntry elementCreationEntry = new CombinedTemplateCreationEntry(  
  2.         "Element""Element type",ModelCreationFactory.ELEMENT_TYPE,new ModelCreationFactory(ModelCreationFactory.ELEMENT_TYPE), Activator  
  3.                 .getImageDescriptor("icons/element.png"), Activator  
  4.                 .getImageDescriptor("icons/element.png"));  
  5. CombinedTemplateCreationEntry attributeCreationEntry = new CombinedTemplateCreationEntry(  
  6.         "Attribute""Attribute type",ModelCreationFactory.ATTRIBUTE_TYPE, new ModelCreationFactory(ModelCreationFactory.ATTRIBUTE_TYPE), Activator  
  7.                 .getImageDescriptor("icons/attribute.png"), Activator  
  8.                 .getImageDescriptor("icons/attribute.png"));  

 

Java代码   收藏代码
  1. getGraphicalViewer().addDropTargetListener(new CustomTemplateTransferDropTargetListener(  
  2.                 getGraphicalViewer()));  

 

 

Java代码   收藏代码
  1. public class ModelCreationFactory implements CreationFactory {  
  2.   
  3.     private int objectType;  
  4.   
  5.     public static final int ELEMENT_TYPE = 0x01;  
  6.     public static final int ATTRIBUTE_TYPE = 0x02;  
  7.     public static final int ROOT_TYPE = 0x04;  
  8.   
  9.     public ModelCreationFactory(int objectType) {  
  10.         super();  
  11.         this.objectType = objectType;  
  12.     }  
  13.   
  14.     public Object getNewObject() {  
  15.         switch (objectType) {  
  16.         case ELEMENT_TYPE:  
  17.             return new ElementType();  
  18.         case ATTRIBUTE_TYPE:  
  19.             return new AttributeType();  
  20.         case ROOT_TYPE:  
  21.             return new RootType();  
  22.         default:  
  23.             break;  
  24.         }  
  25.         return null;  
  26.     }  
  27.   
  28.     public Object getObjectType() {  
  29.         return objectType;  
  30.     }  
  31.   
  32. }  

 

Java代码   收藏代码
  1. public class CustomTemplateTransferDropTargetListener extends  
  2.         TemplateTransferDropTargetListener {  
  3.   
  4.     public CustomTemplateTransferDropTargetListener(EditPartViewer viewer) {  
  5.         super(viewer);  
  6.     }  
  7.   
  8.     @Override  
  9.     protected CreationFactory getFactory(Object template) {  
  10.         return new ModelCreationFactory(((Integer)template).intValue());  
  11.     }  
  12.   
  13. }  

 

分享到:
评论

相关推荐

    ReportMachine7.rar

    Delphi XE系列是Embarcadero Technologies公司发布的一系列Delphi开发工具,包括Delphi XE、XE2、XE3、XE4等,它们在Delphi 2010的基础上增加了许多新特性,如支持Unicode、64位编译和跨平台开发等。 在【压缩包子...

    TEECHART学习文档_TeeChart_

    1. **3D图表**: 支持3D效果,增加视觉层次感。 2. **地图图表**: 提供地理图表功能,可用于展示地理位置数据。 3. **动画效果**: 可为图表添加动态加载或过渡效果。 **七、打印与导出** 1. **打印**: 将图表直接...

    AlphaControls v13.04.rar

    2. **AlphaControls**:AlphaControls 是一套高级的 Delphi 组件集,它扩展了 Delphi IDE 的内置组件,增加了许多独特和功能强大的控件,如自定义的按钮、滑块、日历、进度条等。这些组件通常具有高度可定制的外观和...

    Raize3.09.rar

    1. **安装组件**:首先,你需要将Raize3.09.rar文件解压缩,然后在C++ Builder 6.0中通过“Component Palette”导入解压后的组件包。这样,新的控件就会出现在工具箱中,方便在设计界面中拖放使用。 2. **设计阶段*...

    Ehlib安装包For Delphi7.0

    3. **安装组件面板**:添加完成后,Ehlib的组件将出现在工具箱(Tool Palette)中,便于在设计时拖放到窗体上。这包括了各种数据库连接组件、查询组件、数据集组件等。 4. **配置连接**:Ehlib支持多种数据库引擎,...

    Delphi读取EXCEL表实例

    - 在Delphi的Form上,拖放一个JExcelUnit的组件(例如,`TJvExcelApp`)和一个StringGrid(`TStringGrid`)。 3. **连接组件** - 将JvExcelApp的`Workbook`属性设置为你想要打开的Excel文件路径。 - 设置`Open...

    Mscomm组件安装Delphi2010

    - 打开Delphi2010中的项目,找到“Tool Palette”面板,从中选择“Mscomm”控件并拖放到窗体上。 2. **设置基本属性** - 配置控件的基本属性,如通信端口(Port)、波特率(BaudRate)等。 - 设置OnComm事件...

    JMenuBar简介

    3. **配置属性**:在对象观察器窗口中选中`JMenuBar`,可以在属性对话框中修改其属性,如增加或删除菜单、调整外观等。 #### 五、总结 `JMenuBar`是Java Swing框架中用于构建图形用户界面的重要组件之一。它不仅...

    PSCAD学习教程

    脚本条支持用户编写自定义脚本来扩展PSCAD的功能。这些脚本可以用于自动化重复任务、创建复杂的行为模式或是实现高级的计算功能。 #### 十、Variable Real/Integer Input Slider 变量输入滑块 变量输入滑块是一种...

Global site tag (gtag.js) - Google Analytics