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>
<extension point=
"org.eclipse.ui.dropActions"
>
<action
id=
"my_drop_action"
class=
"com.xyz.eclipse.TestDropAction"
>
</action>
</extension>
Poniżej przedstawiono przykładową funkcję nasłuchiwania dla operacji przeciągania, która
korzysta ze zdefiniowanej powyżej akcji upuszczania.
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.