Stosowanie warstw interfejsu użytkownika narzucone przez mechanizm modułów dodatkowych powoduje, że widoki często nie znają treści i natury innych widoków. Może to utrudniać operacje przeciągania i upuszczania między modułami dodatkowymi. Na przykład programista może chcieć udostępnić obsługę refaktoryzacji, w ramach której użytkownik przeciąga metodę z widoku schematu treści w edytorze Java do innego pliku Java w nawigatorze zasobów. Ponieważ nawigator zasobów nie ma żadnych informacji na temat treści kodu Java, nie wiadomo, jak ma się zachować w momencie upuszczenia do niego metody Java. Może również zajść potrzeba upuszczania wybranej treści z oprogramowania niezależnego producenta do jednej z przeglądarek Java.
Z myślą o takich sytuacjach platforma udostępnia punkt rozszerzenia org.eclipse.ui.dropActions. Mechanizm ten deleguje zachowanie związane z operacją upuszczania z powrotem do miejsca, w którym operacja ta ma swoje źródło. Zachowanie to jest zawarte w akcji, która musi implementować interfejs org.eclipse.ui.part.IDropActionDelegate. Przeglądarka będąca źródłem operacji upuszczania musi obsługiwać typ przekazywania org.eclipse.ui.part.PluginTransfer i umieścić w zdarzeniu przeciągania obiekt PluginTransferData. Informacje na temat dodawania obsługi przeciągania do przeglądarki zawiera dokument 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>
Poniżej przedstawiono przykładową funkcję nasłuchiwania dla operacji przeciągania, która korzysta ze zdefiniowanej powyżej akcji upuszczania.<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 = ...// Wprowadź dane do wysłania. event.data = new PluginTransferData( "my_drop_action", dataToSend); } } }Dokładniejszy przykład można znaleźć w pliku readme platformy. W przykładzie tym akcja upuszczania jest zdefiniowana w klasie ReadmeDropActionDelegate i stosowana przez klasę ReadmeContentOutlineDragListener.
Copyright (c) 2002, 2004 IBM Corporation i inne podmioty.
Wszelkie prawa zastrzeżone. Program ten oraz towarzyszące mu materiały są udostępniane na warunkach
licencji EPL (Eclipse Public License), wersja 1.0, dołączonej do nich i
dostępnej pod adresem http://www.eclipse.org/legal/epl-v10.html.