Διαδρομές μενού και γραμμής εργαλείων

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

Διαδρομές μενού

Θα εξετάσουμε τις διαδρομές μενού κοιτώντας πρώτα το μενού Βοήθεια του πάγκου εργασίας.

Επώνυμες ομάδες στον πάγκο εργασίας

Οι θέσεις για την εισαγωγή νέων μενού και στοιχείων μενού ορίζονται με τη χρήση επώνυμων ομάδων. Μπορείτε να θεωρήσετε μια επώνυμη ομάδα ως μια υποδοχή ή ένα σύμβολο κράτησης θέσης το οποίο σας επιτρέπει να εισάγετε τα στοιχεία μενού σας σε συγκεκριμένα σημεία σε μια γραμμή μενού ή σε ένα αναπτυσσόμενο μενού.

Ο πάγκος εργασίας ορίζει όλα τα ονόματα υποδοχών ομάδας του στις κλάσεις IWorkbenchActionConstants και IIDEActionConstants. (Δυο διαφορετικές κλάσεις χρησιμοποιούνται αφού τα στοιχεία μενού που σχετίζονται με τους πόρους παράγονται εξωτερικά από τον γενικό πάγκο εργασίας). Για κάθε μενού του πάγκου εργασίας, οι επώνυμες ομάδες τοποθετούνται στο μενού στις θέσεις όπου αναμένεται ότι οι πρόσθετες λειτουργίες θα εισάγουν νέες ενέργειες.

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

   Standard Help menu actions
   Start group - HELP_START - "start"
   End group - HELP_END - "end"

Το συνηθισμένο μενού βοήθειας του πάγκου εργασίας ορίζει μια επώνυμη ομάδα που ονομάζεται "start," ακολουθούμενη από μια επώνυμη ομάδα που ονομάζεται "end". Ορίζοντας δυο ομάδες παρέχεται λίγο περισσότερος έλεγχος στις πρόσθετες λειτουργίες για το χώρο τοποθέτησης των συνεισφερόμενων στοιχείων εντός του μενού "Βοήθεια".  Όταν ορίζετε ένα μενού, μπορείτε να ορίσετε όσες υποδοχές επιθυμείτε. Με την προσθήκη περισσότερων υποδοχών παρέχεται περισσότερος έλεγχος σε άλλες πρόσθετες λειτουργίες για το χώρο τοποθέτησης των συνεισφορών τους σε σχέση με τις υπάρχουσες συνεισφορές.

Οι πρόσθετες λειτουργίες που προσθέτουν ένα στοιχείο μενού στο μενού "Βοήθεια" μπορούν να χρησιμοποιήσουν αυτά τα ονόματα ομάδων για να αποφασίσουν το χώρο τοποθέτησης των στοιχείων μενού τους. Για παράδειγμα, η πρόσθετη λειτουργία φύλλου υποδείξεων προσθέτει ένα σύνολο ενεργειών το οποίο περιέχει το μενού "Φύλλα υποδείξεων..." στον πάγκο εργασίας.  Δείτε παρακάτω τον κώδικα από το αρχείο plugin.xml της πρόσθετης λειτουργίας org.eclipse.ui.cheatsheets.

<extension
	point="org.eclipse.ui.actionSets">
	<actionSet
		label="%CHEAT_SHEETS"
		visible="true"
		id="org.eclipse.ui.cheatsheets.actionSet">
		<action
			label="%CHEAT_SHEETS_MENU"
			class="org.eclipse.ui.internal.cheatsheets.actions.CheatSheetHelpMenuAction"
			menubarPath="help/helpStart"
			id="org.eclipse.ui.cheatsheets.actions.CheatSheetHelpMenuAction">
		</action>
	</actionSet>
</extension>

Η νέα ενέργεια βοήθειας θα τοποθετηθεί στο μενού "Βοήθεια", μέσα στην ομάδα helpStart.

Πλήρως προσδιορισμένες διαδρομές μενού

Μια πλήρης διαδρομή μενού είναι απλά το "όνομα μενού/όνομα ομάδας."  Τα περισσότερα ονόματα μενού για τον πάγκο εργασίας ορίζονται στην IWorkbenchActionConstants. (Τα ονόματα μενού που σχετίζονται με τους πόρους ορίζονται στην IIDEActionConstants.) Εάν αναζητήσουμε το όνομα του μενού "Βοήθεια" σε αυτή την κλάση, θα ανακαλύψουμε ότι το πλήρως προσδιορισμένο όνομα διαδρομής για την ενέργεια βοήθειάς μας είναι το "help/helpEnd."

Μερικά μενού διαθέτουν ένθετα υπομενού. Και εδώ χρειάζονται οι διαδρομές μεγαλύτερου μήκους. Εάν το μενού "Βοήθεια" είχε ορίσει ένα υπομενού με το όνομα "submenu" με μια επώνυμη ομάδα που ονομάζεται "submenuStart," τότε η πλήρης προσδιορισμένη διαδρομή μενού για μια ενέργεια στο νέο υπομενού θα είναι "help/submenu/submenuStart."

Τοπική προσαρμογή ετικετών περιβάλλοντος χρήστη

Το παραπάνω παράδειγμα δείχνει μια τεχνική για την τοπική προσαρμογή σειρών χαρακτήρων οι οποίες εμφανίζονται στο περιβάλλον χρήστη.  Οι τοπικά προσαρμοσμένες σειρές χαρακτήρων χρησιμοποιούνται για την απλοποίηση της μετάφρασης του περιβάλλοντος χρήστη της πρόσθετης λειτουργίας σε άλλες γλώσσες.  Μπορούμε να προσαρμόσουμε τοπικά τις σειρές χαρακτήρων στα plugin.xml αρχεία μας αντικαθιστώντας τη σειρά χαρακτήρων με ένα κλειδί (%CHEAT_SHEETS_MENU) και δημιουργώντας καταχωρήσεις στο αρχείο plugin.properties της μορφής:

	CHEAT_SHEETS_MENU = Cheat Sheets...

Το αρχείο plugin.properties μπορεί να μεταφραστεί για διάφορες γλώσσες και το αρχείο plugin.xml δεν θα χρειάζεται να τροποποιηθεί.

Προσθήκη νέων μενού και ομάδων

Σε πολλά από τα παραδείγματα που έχουμε δει έως τώρα οι ενέργειες που συνεισφέρονται από τις πρόσθετες λειτουργίες που παρέχονται ως δείγμα έχουν προστεθεί σε υπάρχουσες επώνυμες ομάδες μέσα στα μενού.

Τα σημεία επέκτασης actionSets, viewActions, editorActions και popupMenus σας επιτρέπουν επίσης να ορίσετε νέα μενού και ομάδες εντός των συνεισφορών σας. Αυτό σημαίνει ότι μπορείτε να ορίσετε νέα υπομενού ή νέα αναπτυσσόμενα μενού και να συνεισφέρετε τις ενέργειές σας σε αυτά τα μενού. Σε αυτή την περίπτωση η διαδρομή για τη νέα σας ενέργεια θα περιέχει το όνομα του νέου ορισμένου σας μενού.

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

   <extension point = "org.eclipse.ui.actionSets">
   <actionSet id="org_eclipse_ui_examples_readmetool_actionSet"
	   label="%ActionSet.name"
	   visible="true">
	   <menu id="org_eclipse_ui_examples_readmetool"
		   label="%ActionSet.menu"
		   path="window/additions"> 
		   <separator name="slot1"/>
		   <separator name="slot2"/>
		   <separator name="slot3"/>
	   </menu>
	   <action id="org_eclipse_ui_examples_readmetool_readmeAction"
		   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
		   toolbarPath="readme"
		   label="%ReadmeAction.label"
		   tooltip="%ReadmeAction.tooltip"
		   helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
		   icon="icons/ctool16/openbrwsr.png"
		   class="org.eclipse.ui.examples.readmetool.WindowActionDelegate"
		   enablesFor="1">
		   <selection class="org.eclipse.core.resources.IFile"
				name="*.readme">
		   </selection>
	   </action>
	   ...

Προσθέσαμε ένα νέο μενού με το όνομα "org_eclipse_ui_examples_readmetool" του οποίου η ετικέτα ορίζεται από το κλειδί "%ActionSet.name" στο αρχείο ιδιοτήτων. Εντός αυτού του μενού ορίζουμε τρεις επώνυμες ομάδες:  "slot1," "slot2," και "slot3."  Προσθέτουμε αυτό το νέο μενού στη διαδρομή "window/additions."

Εάν επιστρέψουμε στη IWorkbenchActionConstants, βλέπουμε αυτό τον ορισμό του μενού παραθύρου στο javadoc:

    * <h3>Standard Window menu actions</h3>
    * <ul>
    * <li>Extra Window-like action group (<code>WINDOW_EXT</code>)</li> 

Εάν κοιτάξουμε παρακάτω στον ορισμό της κλάσης, θα δούμε αυτούς τους σχετικούς ορισμούς:

   public static final String MENU_PREFIX = "";
   ...
   public static final String M_WINDOW = MENU_PREFIX+"window";
   ...
   public static final String MB_ADDITIONS = "additions";  // Group.
   ...
   public static final String WINDOW_EXT = MB_ADDITIONS;   // Group.

Από αυτές τις πληροφορίες μπορούμε να ανασυνθέσουμε τη διαδρομή για την προσθήκη κάποιου στοιχείου στο μενού "Παράθυρο" του πάγκου εργασίας.  Το μενού αυτό ονομάζεται "window" και ορίζει μια υποδοχή που ονομάζεται "additions."  Χρησιμοποιούμε τη διαδρομή "window/additions" για να προσθέσουμε το νέο μας μενού.

Στη δήλωση συνόλου ενεργειών, προσθέτουμε μια ενέργεια στο νέο ορισμένο μας μενού, χρησιμοποιώντας τη διαδρομή "window/org_eclipse_ui_examples_readmetool/slot1."

Άλλες πρόσθετες λειτουργίες θα μπορούσαν να προσθέσουν στοιχεία στο μενού μας χρησιμοποιώντας την ίδια διαδρομή (ή ίσως μια από τις άλλες υποδοχές) για να προσθέσουν ένα από τα μενού τους.  

Στο παράδειγμα του εργαλείου διαχείρισης αρχείων readme χρησιμοποιούμε το γνώρισμα separator για τον προσδιορισμό των ονομάτων των ομάδων.  Έτσι θα προκληθεί η εμφάνιση μιας γραμμής διαχωριστικού ανάμεσα σε αυτές τις ομάδες όταν περιέχουν στοιχεία.  Θα μπορούσαμε από την άλλη να χρησιμοποιήσουμε το γνώρισμα groupMarker εάν επιθυμούμε να ορίσουμε μια επώνυμη ομάδα χωρίς την εμφάνιση κανενός διαχωριστικού στο μενού για το διαχωρισμό των ομάδων.

Διαδρομές γραμμής εργαλείων

Οι διαδρομές γραμμής εργαλείων λειτουργούν με παρόμοιο τρόπο με τις διαδρομές μενού.  

Επώνυμες γραμμές εργαλείων στον πάγκο εργασίας

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

Η ακόλουθη περιγραφή των γραμμών εργαλείων του πάγκου εργασίας έχει προσαρμοστεί από τον ορισμό κλάσης IWorkbenchActionConstants.

// Workbench toolbar ids
public static final String TOOLBAR_FILE = "org.eclipse.ui.workbench.file"
public static final String TOOLBAR_NAVIGATE = "org.eclipse.ui.workbench.navigate"; 

// Workbench toolbar group ids.  To add an item at the beginning of the group, 
// use the GROUP id.  To add an item at the end of the group, use the EXT id.
public static final String PIN_GROUP = "pin.group"; 
public static final String HISTORY_GROUP = "history.group"; 
public static final String NEW_GROUP = "new.group"; 
public static final String SAVE_GROUP = "save.group"; 
public static final String BUILD_GROUP = "build.group"; 

Στην απλούστερη περίπτωση, μια πρόσθετη λειτουργία μπορεί να συνεισφέρει ένα στοιχείο γραμμής εργαλείων στη δική της γραμμή εργαλείων.  Για παράδειγμα, παρέχεται μια διαδρομή γραμμής εργαλείων στις ενέργειες του εργαλείου διαχείρισης αρχείων readme που συνεισφέρονται στο μενού:

<action id="org_eclipse_ui_examples_readmetool_readmeAction"  
   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
   toolbarPath="readme"
...

Εφόσον δεν υπάρχει καμία παραπομπή στις διαδρομές ή τις ομάδες της γραμμής εργαλείων του πάγκου εργασίας, οι ενέργειες των αρχείων readme εμφανίζονται στη δική τους ομάδα στη γραμμή εργαλείων.  Με τον καθορισμό της ακόλουθης διαδρομής θα γίνει τοποθέτηση του στοιχείου στη γραμμή εργαλείων του αρχείου στην ομάδα αποθήκευσης:

...
<action id="org_eclipse_ui_examples_readmetool_readmeAction"  
   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
   toolbarPath="org.eclipse.ui.workbench.file/save.group"
...

Οι διαδρομές που ορίζονται στη διεπαφή IWorkbenchActionConstants μπορεί να γίνονται παραπομπή στις διαδρομές της γραμμής εργαλείων άλλων πρόσθετων λειτουργιών.

Προσθήκη στα σύνολα ενεργειών άλλης πρόσθετης λειτουργίας

Ας υποθέσουμε ότι μια πρόσθετη λειτουργία επιθυμεί τα στοιχεία γραμμής εργαλείων της να ενοποιηθούν καλύτερα με ενέργειες από μια διαφορετική πρόσθετη λειτουργία.  Ας εξετάσουμε τον τρόπο με τον οποίο η πρόσθετη λειτουργία εξωτερικών εργαλείων (org.eclipse.ui.externaltools) ενοποιεί την ενέργειά της με τη γραμμή εργαλείων της λειτουργίας εντοπισμού και διόρθωσης σφαλμάτων.  Η λειτουργία εντοπισμού και διόρθωσης σφαλμάτων (org.eclipse.debug.ui) ορίζει τις ενέργειες γραμμής εργαλείων της ως εξής:

<extension
      point="org.eclipse.ui.actionSets">
   <actionSet
         label="%LaunchActionSet.label"
         visible="false"
         id="org.eclipse.debug.ui.launchActionSet">
   ...
   <action
         toolbarPath="debug"
         id="org.eclipse.debug.internal.ui.actions.RunDropDownAction"
         hoverIcon="icons/full/ctool16/run_exc.png"
         class="org.eclipse.debug.internal.ui.actions.RunToolbarAction"
         disabledIcon="icons/full/dtool16/run_exc.png"
         icon="icons/full/etool16/run_exc.png"
         helpContextId="run_action_context"
         label="%RunDropDownAction.label"
         pulldown="true">
   </action>
   ...

Όπως συμβαίνει και με το εργαλείο διαχείρισης αρχείων readme, η πρόσθετη λειτουργία της λειτουργίας εντοπισμού και διόρθωσης σφαλμάτων ορίζει τη δική της διαδρομή γραμμής εργαλείων, το οποίο σημαίνει ότι τα δικά της στοιχεία γραμμής εργαλείων θα βρίσκονται εντός της δικής τους γραμμής εργαλείων στον πάγκο εργασίας.  Ποια είναι η λειτουργία της πρόσθετης λειτουργίας εξωτερικών εργαλείων;

<extension point="org.eclipse.ui.actionSets">
	<actionSet
		id="org.eclipse.ui.externaltools.ExternalToolsSet"
		label="%ActionSet.externalTools"
		visible="true">
		...
		<action
			id="org.eclipse.ui.externaltools.ExternalToolMenuDelegateToolbar"
			definitionId= "org.eclipse.ui.externaltools.ExternalToolMenuDelegateToolbar"
			label="%Action.externalTools"
			toolbarPath="org.eclipse.debug.ui.launchActionSet/debug"
			disabledIcon="icons/full/dtool16/external_tools.png"
			icon="icons/full/etool16/external_tools.png"
			hoverIcon="icons/full/ctool16/external_tools.png"
			tooltip="%Action.externalToolsTip"
			pulldown="true"
			class="org.eclipse.ui.externaltools.internal.menu.ExternalToolMenuDelegate">
		</action>
	</actionSet>
   </extension>

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

Όταν γίνεται προσθήκη σε μια γραμμή εργαλείων του συνόλου ενεργειών, μπορούν επίσης να οριστούν νέες ομάδες.  Εάν η πρόσθετη λειτουργία των εξωτερικών εργαλείων όριζε τη διαδρομή toolbarpath του ως "org.eclipse.debug.ui.launchActionSet/external", θα δημιουργόταν μια νέα ομάδα για την ενέργεια στη γραμμή εργαλείων.  Όπως συμβαίνει με τα μενού, οι ομάδες γραμμών εργαλείων διαχωρίζονται με τη χρήση διαχωριστικών. 

Χρήση διαδρομών από μια άλλη πρόσθετη λειτουργία

Γενικά, δεν αποτελεί καλή πρακτική η συνεισφορά σε μενού ή γραμμή εργαλείων άλλης πρόσθετης λειτουργίας λαμβάνοντας το όνομα της διαδρομής από το αρχείο plugin.xml εκτός εάν έχει επισημανθεί ειδικά ως διαθέσιμη για πελάτες.  Είναι δυνατόν να μια μελλοντική εκδοχή της πρόσθετης λειτουργίας να μπορούσε να αλλάξει τα ονόματα των διαδρομών.  Δυο κοινοί τρόποι για να επισημάνετε τις ταυτότητες και τις διαδρομές του συνόλου ενεργειών της πρόσθετης λειτουργίας σας ως θεμιτούς στόχους είναι: