Λόγω της διαστρωμάτωσης του περιβάλλοντος χρήστη που επιβάλλει ο μηχανισμός πρόσθετης λειτουργίας, οι προβολές συχνά δεν γνωρίζουν το περιεχόμενο και τη φύση άλλων προβολών. Αυτό μπορεί να καταστήσει δύσκολες τις λειτουργίες τραβήγματος και εναπόθεσης μεταξύ πρόσθετων λειτουργιών. Για παράδειγμα, όταν κάποιος θέλει να παράσχει υποστήριξη βελτιστοποίησης δομής Java ενώ ο χρήστης τραβά μια μέθοδο από τη λειτουργία διάρθρωσης περιεχομένου της λειτουργίας επεξεργασίας Java σε άλλο αρχείο java στη λειτουργία πλοήγησης πόρων. Εφόσον η λειτουργία πλοήγησης πόρων δεν γνωρίζει τίποτα για το περιεχόμενο Java, δεν γνωρίζει πώς να συμπεριφερθεί όταν εναποτίθενται σε αυτή μέθοδοι java. Ομοίως, ένα ISV μπορεί να θέλει να εναποθέσει μέρος του περιεχομένου του σε μία από τις λειτουργίες προβολής Java.
Το σημείο επέκτασης org.eclipse.ui.dropActions παρέχεται από την πλατφόρμα για την αντιμετώπιση τέτοιων καταστάσεων. Αυτός ο μηχανισμός αναθέτει τη συμπεριφορά εναπόθεσης πίσω στον εντολέα της λειτουργίας τραβήγματος. Αυτή η συμπεριφορά περιέχεται σε μια ενέργεια που πρέπει να υλοποιεί org.eclipse.ui.part.IDropActionDelegate. Η λειτουργία προβολής που είναι η προέλευση της λειτουργίας τραβήγματος πρέπει να υποστηρίζει το είδος μεταβίβασης org.eclipse.ui.part.PluginTransfer και να τοποθετεί ένα αντικείμενο PluginTransferData στο συμβάν τραβήγματος. Δείτε 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>
class MyDragListener extends DragSourceAdapter { public void dragSetData(DragSourceEvent event) { if (PluginTransfer.getInstance().isSupportedType(event.dataType)) { byte[] dataToSend = ...//enter the data to be sent. event.data = new PluginTransferData( "my_drop_action", dataToSend); } } }Για ένα πιο πλήρες παράδειγμα, δείτε αυτό του αρχείου readme πλατφόρμας. Στο παράδειγμα αυτό, μια ενέργεια εναπόθεσης ορίζεται στη ReadmeDropActionDelegate και χρησιμοποιείται από τη ReadmeContentOutlineDragListener.
Copyright (c) 2002, 2004 IBM Corporation και άλλων.
Με την επιφύλαξη παντός δικαιώματος. Αυτό το πρόγραμμα και τα
συνοδευτικά του υλικά διατίθενται βάσει των όρων της κοινής άδειας
χρήσης Eclipse Public License v1.0 που συνοδεύει αυτή τη διανομή και
διατίθεται στην ακόλουθη διεύθυνση:
http://www.eclipse.org/legal/epl-v10.html.