A causa della suddivisione in layer dell'interfaccia utente imposta dal meccanismo di plugin, le viste spesso non rilevano il contenuto o la natura delle altre viste. Questo può rendere le operazioni di trascinamento e rilascio tra plugin piuttosto complesse. Ad esempio, si potrebbe desiderare di fornire un supporto di refactoring Java, che consenta di trascinare un metodo da una funzione di struttura del contenuto dell'editor Java in un altro file Java, nella selezione risorse. Poiché la selezione risorse non conosce il contenuto Java, non sa come comportarsi quando metodi Java vengono rilasciati al suo interno. Ugualmente, un ISV potrebbe rilasciare parte del contenuto in uno dei visualizzatori Java.
Il punto di estensione org.eclipse.ui.dropActions viene fornito dalla piattaforma per risolvere queste situazioni. Questo meccanismo delega la funzione di rilascio all'elemento che ha originato l'operazione di trascinamento. La funzione è contenuta in un'azione che deve implementare org.eclipse.ui.part.IDropActionDelegate. Il visualizzatore che costituisce l'origine dell'operazione di trascinamento deve supportare il tipo di trasferimento org.eclipse.ui.part.PluginTransfer, e posizionare un oggetto PluginTransferData nell'evento trascinamento. Per apprendere come aggiungere un supporto di trascinamento ad un visualizzatore, consultare org.eclipse.jface.viewers.StructuredViewer#addDragSupport.
<!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>
Segue un esempio di un listener di trascinamento che utilizza l'azione di rilascio sopra riportata.<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 = ...//immettere i dati da inviare. event.data = new PluginTransferData( "my_drop_action", dataToSend); } } }Per un esempio più esaustivo, consultare l'esempio readme della piattaforma. Nell'esempio, l'azione di rilascio è definita in ReadmeDropActionDelegate, ed è utilizzata da ReadmeContentOutlineDragListener.
Copyright (c) 2002, 2004 IBM Corporation e altri.
Tutti i diritti riservati. Questo programma e il materiale di accompagnamento sono disponibili secondo i termini della Eclipse Public
License v1.0 che sono distribuiti con il prodotto, e disponibili all'indirizzo
http://www.eclipse.org/legal/epl-v10.html