org.eclipse.ui.popupMenus

Το σημείο επέκτασης org.eclipse.ui.popupMenus επιτρέπει σε μια πρόσθετη λειτουργία να συνεισφέρει στα αναδυόμενα μενού άλλων προβολών και λειτουργιών επεξεργασίας.

Μπορείτε να συνεισφέρετε μια ενέργεια σε ένα συγκεκριμένο αναδυόμενο μενού μέσω της ταυτότητάς του (viewerContribution) ή συσχετίζοντάς το με συγκεκριμένο είδος αντικειμένου (objectContribution). 

Το εργαλείο διαχείρισης αρχείων readme καθορίζει και τις δύο. Ας εξετάσουμε πρώτα τη συνεισφορά αντικειμένων.  

<extension point = "org.eclipse.ui.popupMenus">
   <objectContribution
   id="org.eclipse.ui.examples.readmetool"
        objectClass="org.eclipse.core.resources.IFile"
	    nameFilter="*.readme">
	    <action id="org.eclipse.ui.examples.readmetool.action1"
	       label="%PopupMenus.action"
	       icon="icons/ctool16/openbrwsr.png"
	      menubarPath="additions"
	       helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
	       class="org.eclipse.ui.examples.readmetool.PopupMenuActionDelegate"	
           definitionId="org.eclipse.ui.examples.readmetool.action1"
	       enablesFor="1">
	   </action>
	 </objectContribution>
 	 ...

Συνεισφορά αντικειμένων

Η ενέργεια "Εμφάνιση ενέργειας αρχείου readme" συνεισφέρεται για την κλάση αντικειμένου IFile. Αυτό σημαίνει ότι κάθε προβολή που περιλαμβάνει αντικείμενα IFile θα εμφανίσει την προβολή εάν επιλεγούν αντικείμενα IFile. Βλέπουμε ότι τα κριτήρια επιλογής περιορίζονται περαιτέρω με ένα φίλτρο ονόματος (nameFilter="*.readme") και για μοναδικές επιλογές (enablesFor="1"). Όπως περιγράψαμε προηγούμενα, η καταχώρηση αυτού του μενού δεν εκτελεί κώδικα από την πρόσθετη λειτουργία μας μέχρι να επιλεγεί ένα στοιχείο μενού.

Όταν επιλεγεί ένα στοιχείο μενού, ο πάγκος εργασίας θα εκτελέσει την καθορισμένη κλάση.  Εφόσον δηλωθεί το αναδυόμενο παράθυρο ως objectContribution, η παρεχόμενη κλάση πρέπει να υλοποιήσει την IObjectActionDelegate

Η ενέργεια υλοποιείται σε PopupMenuActionDelegate.  

   public void run(IAction action) {
      MessageDialog.openInformation(
         this.part.getSite().getShell(),
         "Readme Example",
         "Popup Menu Action executed");
   }

Μπορούμε να δούμε τη συνεισφορά αναδυόμενου μενού όταν επιλέξουμε το αρχείο readme από τη λειτουργία πλοήγησης πόρων.

Συνεισφορά λειτουργιών προβολής

Η συνεισφορά λειτουργίας προβολής χρησιμοποιείται για τη συνεισφορά σε ένα καθορισμένο αναδυόμενο μενού προβολής ή λειτουργίας επεξεργασίας με τη χρήση της ταυτότητάς του. Ακολουθεί η συνεισφορά λειτουργίας προβολής του εργαλείου διαχείρισης αρχείων readme.

      ...
      <viewerContribution
        id="org.eclipse.ui.examples.readmetool2"
        targetID="org.eclipse.ui.examples.readmetool.outline">
	    <action id="org.eclipse.ui.examples.readmetool.action1"
	       label="%PopupMenus.action"
	       icon="icons/ctool16/openbrwsr.png"
	      menubarPath="additions"
	       helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
           definitionId="org.eclipse.ui.examples.readmetool.action1"
	       class="org.eclipse.ui.examples.readmetool.ViewActionDelegate">	
	   </action>
       </viewerContribution>
   </extension>
Σημείωση:  Το όνομα viewerContribution είναι κάπως παραπλανητικό, καθώς δεν σχετίζεται με τις λειτουργίες προβολής JFace. Ένα καλύτερο όνομα θα ήταν popupMenuContribution.

Όταν η επέκταση είναι μια viewerContribution, η παρεχόμενη κλάση πρέπει να υλοποιεί τη διεπαφή IEditorActionDelegate ή IViewActionDelegate, ανάλογα εάν η συνεισφορά της ενέργειας γίνεται σε ένα αναδυόμενο μενού λειτουργίας επεξεργασίας ή προβολής. 

Η targetID προσδιορίζει την προβολή της όποίας το αναδυόμενο μενού θα τροποποιηθεί.  Στην περίπτωση αυτή, προσθέτουμε μια ενέργεια σε μια από τις προβολές του εργαλείου διαχείρισης αρχείων readme, τη λειτουργία διάρθρωσης.  Η ίδια η ενέργεια είναι παρόμοια με άλλες που έχουμε δει.   Καθορίζουμε τα γνωρίσματα id , label και icon της ενέργειας, και το path εντός του αναδυόμενου παραθύρου της συνεισφοράς μας. Η ενέργεια θα εμφανιστεί μόνο στο αναδυόμενο μενού της προβολής λειτουργίας διάρθρωσης του αρχείου readme.

`Σημειίωση: το definitionId επιτρέπει τη διασύνδεση της ενέργειας με μια εντολή που δημιουργήθηκε από την επέκταση org.eclipse.ui.commands, η οποία μπορεί να χρησιμοποιηθεί για δεσμούς πλήκτρων. Ανατρέξατε στο Εντολές.

Οι απαιτούμενες διεπαφές για τη συνεισφορά μιας viewerContribution στο σημείο επέκτασης popupMenus είναι οι ίδιες με αυτές που απαιτούνται από τα σημεία επέκτασης viewActions και editorActions. Εάν θέλετε να συνεισφέρετε την ίδια ενέργεια στο αναδυόμενο μενού και το τοπικό μενού μιας προβολής ή μιας λειτουργίας επεξεργασίας, μπορείτε να χρησιμοποιήσετε την ίδια κλάση και για τις δύο επεκτάσεις.