`
popjxc
  • 浏览: 67668 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Add Drag and drop to GMF Editor

    博客分类:
  • GMF
阅读更多

 

*node: Before you read this article, you should have a idea of how use GMF to generator a simple Graphics Editor, and this acticle is base on that.

Drag from Palette: http://wiki.eclipse.org/GMF_Newsgroup_Q_and_A#How_to_enable_drag-n-drop_from_the_palette.3F

Drag from a view: We should do three things, add drag support to the view, add DropTargetListener to the gmf editor, install the DragDropEditPolicy to the editor's root editpart.

1. add drag support of the view

 

 

TreeViewer viewer = .....
DelegatingDragAdapter dragAdapter = new DelegatingDragAdapter();
		dragAdapter.addDragSourceListener(new TransferDragSourceListener() {
			public Transfer getTransfer() {
				return ResourceTransfer.getInstance(); //replace with your own transfer
			}

			public void dragStart(DragSourceEvent event) {
				if (!viewer.getSelection().isEmpty()) {
					event.doit = true;
					return;
				}
				event.doit = false;
			}

			public void dragSetData(DragSourceEvent event) {
			}

			public void dragFinished(DragSourceEvent event) {
			}
		});
		viewer.addDragSupport(DND.DROP_MOVE, dragAdapter.getTransfers(),
				dragAdapter);
 

 

2. add DropTargetListener to gmf editor

first look at our DropTargetListener :

 

 

public class GmfDropListener extends DiagramDropTargetListener {

	public GmfDropListener(EditPartViewer viewer, Transfer xfer) {  
        super(viewer, xfer);          
    }  
  
    @Override  
    protected void handleDragOver() {  
        updateTargetRequest();  
        updateTargetEditPart();  
        showTargetFeedback();  
    }  
  
    @Override  
    protected List getObjectsBeingDropped() {  
        List a = new ArrayList<String>();
        a.add(new JobImpl()); // Job is the model class of my figure node
        return a;  
    }  

}
 

 

the method getObjectsBeingDropped() return the source object of we drag.

Second add this listener to the editor.

In the editor class # method: configureGraphicalViewer()

we add this code:

 

 

viewer.addDropTargetListener(new GmfDropListener(viewer,  
	                ResourceTransfer.getInstance()));     //replace with your own transfer
 

 

3. install the DragDropEditPolicy to the editor's root editpart.

In my case, the root editpart is called diagram, so in the class DiagramEditPart # method createDefaultEditPolicies() we add code:

 

 

installEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE, new DropObjectEditPolicy());
 

 

and the DropObjectEditPolicy class is in below:

 

 

public class DropObjectEditPolicy extends DiagramDragDropEditPolicy  {


	@Override
	protected Command createViewsAndArrangeCommand(
			DropObjectsRequest dropRequest, List viewDescriptors) {
		CompoundCommand cm = new CompoundCommand();
		Iterator elements = dropRequest.getObjects().iterator();
		while (elements.hasNext()) {
			Object obj = elements.next();
			if (obj instanceof EObject) {
				Command cmd = getDropElementCommand((EObject)obj, dropRequest);
				if (cmd != null)
					cm.add(cmd);
			}
		}
		return cm;
	}

	
	protected Command getDropElementCommand(EObject element,  
            DropObjectsRequest request) {  
  
          
        IElementType type = EmfgeneratorElementTypes.Job_2002;  
        CreateElementRequest cer = new CreateElementRequest(type);  
                cer.setContainer(((View) getHost().getModel()).getElement());  
        cer.setNewElement(element);  
        
        ViewAndElementDescriptor viewDescriptor = new ViewAndElementDescriptor(  
                new CreateElementRequestAdapter(cer), Node.class,  
                ((IHintedType) type).getSemanticHint(),  
                EmfgeneratorDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);  
  
        CreateViewAndElementRequest req = new CreateViewAndElementRequest(  
                viewDescriptor);  
        req.setLocation(request.getLocation());  
        Command c = getHost().getCommand(req);  
        return c;  
    }
 

 

In this article I use ResourceTransfer, you need to replace it with your own transfer in order to transfer data.

 

That's all done.

 

0
0
分享到:
评论

相关推荐

    Java中的Drag and Drop拖拽技术

    "Java中的Drag and Drop拖拽技术" Java中的Drag and Drop拖拽技术是指在Java应用程序中,实现拖拽操作的技术。Drag and Drop技术可以将数据从一个组件拖拽到另一个组件中,实现数据的传输和交互操作。 Drag and ...

    Android中Drag and Drop拖拽功能的使用

    在Android开发中,拖放(Drag and Drop)功能是一种常见的用户交互方式,允许用户通过手势将一个对象从一处移动到另一处。这个功能在许多场景下都非常实用,比如整理应用抽屉、移动文件或者在布局中调整控件位置等。...

    Android简单的拖拽操作(DragAndDrop)

    在Android开发中,拖放(DragAndDrop)功能是一个常用且有趣的交互方式,它允许用户通过手势将一个视图移动到另一个位置,或者在不同的视图之间传递数据。本示例将详细介绍如何实现一个简单的拖放操作,并解决你在...

    DragandDrop.rar_dragAndDrop

    本资料"DragandDrop.rar_dragAndDrop"聚焦于在Internet Explorer(IE)浏览器中实现文件拖放的扩展功能,为开发者提供了宝贵的指导。 文件拖放技术的核心在于HTML5中的Drag and Drop API,这是一个强大的功能,使得...

    Drag and Drop Component Suite 3.7 (拖放)

    《Drag and Drop Component Suite 3.7:Delphi中的拖放技术详解》 在软件开发过程中,用户界面的易用性和交互性是至关重要的因素之一。"Drag and Drop Component Suite 3.7"是一个专为Delphi开发者设计的组件包,它...

    DragAndDrop_Demo源码

    【标题】"DragAndDrop_Demo源码"是关于C++编程的一个实例,主要展示了拖放(Drag and Drop)功能的实现。在计算机图形用户界面(GUI)开发中,拖放功能允许用户通过鼠标或其他输入设备将一个对象从一处拖动到另一处...

    C#实现Drag and Drop操作例子

    在C#编程中,Drag and Drop操作是一种常见且实用的功能,允许用户通过鼠标将对象从一个位置拖动到另一个位置,比如在不同的控件、窗口甚至应用程序之间移动数据。这个功能在开发桌面应用时,特别是在文件管理或者...

    表格拖拽排序插件 Table Drag and Drop JQuery plugin v0.7

    表格拖拽排序插件 Table Drag and Drop JQuery plugin v0.7 最新0.7版本

    Drag and Drop Component Suite Version 5.2 Full Source

    "Drag and Drop Component Suite Version 5.2 Full Source" 是一个专门用于开发具有拖放功能的组件套件的完整源代码版本。这个组件库通常是为了帮助程序员在应用程序中实现更直观、用户友好的交互设计而设计的。在这...

    DragAndDrop_src源码

    "DragAndDrop_src源码" 是一个专门针对C++编程语言设计的项目,它提供了实现拖放(Drag and Drop)功能的源代码。在Windows应用开发中,拖放操作是常见的用户交互方式,允许用户通过鼠标将一项内容从一处拖动到另一...

    draganddrop拖放库vuedndmobile

    Vue DnD Mobile,全称为"Vue Drag and Drop Mobile",是专门为Vue.js开发的一个拖放库,专为移动设备优化,使得在触摸屏上的交互变得更加自然和流畅。 拖放(Drag and Drop,简称DnD)是一种常见的用户交互模式,...

    WPF鼠标拖放操作DragAndDrop

    在Windows Presentation Foundation (WPF) 中,鼠标拖放操作(DragAndDrop)是一种常见的用户交互方式,它允许用户通过鼠标将一个元素从一处移动到另一处。这种功能在各种应用程序中都有广泛的应用,例如文件管理器...

    Ole Drag and Drop Example.

    标题 "Ole Drag and Drop Example" 提供了一个关于如何在应用程序中实现OLE拖放操作的示例。在编程中,OLE(Object Linking and Embedding)是微软开发的一种技术,允许不同应用程序之间的数据共享和交互。拖放功能...

    掌握JavaScript中的Drag and Drop API:交互式Web应用开发指南

    本文将详细介绍Drag and Drop API的基本概念、事件处理、以及如何在JavaScript中使用这个API来实现拖拽功能。 Drag and Drop API为Web应用带来了强大的交互性。通过本文的介绍和示例代码,开发者应该能够理解并实现...

    The Drag and Drop Component Suite for Delphi XE10

    对于Delphi开发者来说,"The Drag and Drop Component Suite for Delphi XE10"是一款非常实用的工具,它极大地简化了在Delphi XE10环境下实现拖放功能的复杂度。 该组件套件是基于先前版本XE7的修改版,经过优化后...

    ios-iOS11 Drag and Drop功能演示.zip

    在iOS 11中,Apple引入了一项名为“Drag and Drop”的强大功能,极大地提升了用户在设备上处理和移动内容的便捷性。这个功能允许用户通过简单的手势将内容(如文本、图片、文件等)从一个应用拖动到另一个应用,从而...

    shell drag and drop for .net

    Shell Drag and Drop for .NET 是一个专为.NET框架设计的组件,它允许开发者在Windows应用程序中实现更加丰富和直观的拖放操作。这个组件的独特之处在于它能够在拖放过程中显示一个图片来呈现拖动的轨迹,提升了用户...

    jquery 实现Drag and drop的例子

    本篇文章将深入探讨如何使用jQuery实现拖放(Drag and Drop)功能,特别是针对图片的拖放操作。拖放功能是网页交互中常见的一种增强用户体验的方式,常用于文件上传、页面元素排序等场景。 首先,我们需要引入jQuery...

    拖拽 Draganddrop.html

    【标题】:“拖拽 Draganddrop.html” 在Web开发中,拖放(Drag and Drop)功能是一项常用的技术,允许用户通过鼠标操作将元素从一处拖动到另一处,实现数据移动或交互。在这个实例中,“Draganddrop.html”很可能...

    基于HTML5 拖拽接口(Drag and drag-and-drop interfaces based on HTML5

    HTML5是现代网页开发的重要标准,它引入了许多新特性,其中拖放(Drag and Drop)功能就是一项增强用户交互体验的重要接口。拖放接口允许用户通过鼠标或触控设备将元素从一个位置拖动到另一个位置,使得网页的互动性...

Global site tag (gtag.js) - Google Analytics