Akcje upuszczania

org.eclipse.ui.dropActions

Ten punkt rozszerzenia umożliwia dodawanie zachowania związanego z upuszczaniem do widoków zdefiniowanych w innych modułach dodatkowych.

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ład rozszerzenia akcji upuszczania:

    

<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.

Wartość atrybutu class musi być pełną nazwą klasy Java implementującej interfejs org.eclipse.ui.part.IDropActionDelegate. Klasa ta jest ładowana możliwie najpóźniej, co pozwala uniknąć ładowania całego modułu dodatkowego, zanim będzie naprawdę potrzebny.

W środowisku roboczym nie jest dostępna implementacja tego punktu rozszerzenia. Moduły dodatkowe mogą uzupełniać ten punkt rozszerzenia, dodając zachowanie związane z upuszczaniem do widoków zdefiniowanych w innych modułach dodatkowych.