Debido a la disposición en capas de la UI, impuesta por el mecanismo de los conectores, sucede a menudo que las vistas no conocen el contenido y la naturaleza de otras vistas. Esto puede llegar a dificultar las operaciones de arrastrar y soltar entre conectores. Por ejemplo, supongamos que se quiere proporcionar soporte de refactorización Java, mediante el que el usuario arrastra un método desde el esquematizador de contenido del editor Java hasta otro archivo Java situado en el navegador de recursos. Como el navegador de recursos no tiene conocimiento del contenido Java, no sabe cómo comportarse cuando los métodos Java se sueltan en él. De modo similar, puede suceder que un ISV quiera soltar parte de su contenido en uno de los visores Java.
Para solucionar estas situaciones, la plataforma proporciona el punto de extensión org.eclipse.ui.dropActions. Este mecanismo delega el comportamiento de la operación de soltar en el originador de la operación de arrastrar. Este comportamiento está contenido en una acción que debe implementar org.eclipse.ui.part.IDropActionDelegate. El visor que actúa como origen de la operación de arrastrar debe dar soporte al tipo de transferencia org.eclipse.ui.part.PluginTransfer, y colocar un objeto org.eclipse.ui.part.PluginTransferData en el evento de arrastrar. Consulte org.eclipse.jface.viewers.StructuredViewer#addDragSupport para aprender cómo añadir soporte de arrastrar a un visor.
<!ELEMENT extension (action*)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT action EMPTY>
<!ATTLIST action
id CDATA #REQUIRED
class CDATA #REQUIRED>
Aquí tenemos un ejemplo de un escuchador de arrastrar que hace uso de la acción de soltar anteriormente definida.<extension point=
"org.eclipse.ui.dropActions"
>
<action id=
"my_drop_action"
class=
"com.xyz.eclipse.TestDropAction"
>
</action>
</extension>
class MyDragListener extends DragSourceAdapter { public void dragSetData(DragSourceEvent event) { if (PluginTransfer.getInstance().isSupportedType(event.dataType)) { byte[] dataToSend = ...//especificar los datos que deben enviarse. event.data = new PluginTransferData( "my_drop_action", dataToSend); } } }Para obtener un ejemplo más completo, consulte el ejemplo del archivo readme de la plataforma. En ese ejemplo, la acción de soltar está definida en ReadmeDropActionDelegate, y la utiliza el escuchador ReadmeContentOutlineDragListener.
Copyright (c) 2002, 2004 IBM Corporation y otros.
Reservados todos los derechos. Este programa y sus materiales adjuntos están
disponibles bajo los términos de la licencia pública común (Eclipse Public
License) v1.0 que acompaña a esta distribución, y está disponible en
http://www.eclipse.org/legal/epl-v10.html