Devido à esquematização em níveis da UI, imposta pelo mecanismo de plugins, as vistas frequentemente não estão a par do conteúdo e natureza de outras vistas. Isto pode dificultar as operações de arrastar e largar entre plugins. Por exemplo, caso pretenda facultar suporte de refactorização Java, em que o utilizador arrasta um método do esquematizador de conteúdo do editor Java para outro ficheiro java no navegador de recursos. Dado que o navegador de recursos não possui qualquer conhecimento sobre o conteúdo Java, não sabe qual o comportamento a adoptar quando nele são largados métodos java. De forma semelhante, um ISV poderá pretender largar parte do seu conteúdo num dos visualizadores Java.
O ponto de extensão org.eclipse.ui.dropActions é facultado pela Plataforma para dar resposta a estas situações. Este mecanismo delega o comportamento de largar para o originador da operação de largar. Este comportamento está contido numa acção que tem de implementar org.eclipse.ui.part.IDropActionDelegate. O visualizador origem da operação de largar tem de suportar o tipo de transferência the org.eclipse.ui.part.PluginTransfer e colocar um objecto PluginTransferData no evento de arrastar. Consulte org.eclipse.jface.viewers.StructuredViewer#addDragSupport para saber como arrastar suporte para um visualizador.
<!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>
De seguida é apresentado um exemplo de um ouvinte de arrastar que utiliza a acção de largar acima defina.<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 = ...//introduzir os dados a enviar. event.data = new PluginTransferData( "my_drop_action", dataToSend); } } }Para obter um exemplo mais completo, consulte o exemplo do ficheiro readme da plataforma. Nesse exemplo, é definida uma acção de largar em ReadmeDropActionDelegate e é utilizada por ReadmeContentOutlineDragListener.
Copyright (c) 2002, 2004 IBM Corporation e outros.
Todos os direitos reservados. Este programa e os materiais que o acompanham estão disponíveis sob os termos da Eclipse Public License v1.0, que acompanha esta distribuição, e estão disponíveis em http://www.eclipse.org/legal/epl-v10.html