Ενέργειες συνόλου ενεργειών μεταβλητής εμβέλειας

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

<extension point = "org.eclipse.ui.actionSets">
	   <actionSet id="org_eclipse_ui_examples_readmetool_actionSet"
		   label="%ActionSet.name"
		   visible="true">
...
<action id="org_eclipse_ui_examples_readmetool_readmeRetargetAction"
   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
   toolbarPath="readme"
   label="%ReadmeRetargetAction.label"
   tooltip="%ReadmeRetargetAction.tooltip"
   helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
   icon="icons/ctool16/openbrwsr.png"
   retarget="true">
</action>
<action id="org_eclipse_ui_examples_readmetool_readmeRelabelRetargetAction"
   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
   toolbarPath="readme"
   label="%ReadmeRelabelRetargetAction.label"
   tooltip="%ReadmeRelabelRetargetAction.tooltip"
   helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
   icon="icons/ctool16/openbrwsr.png"
   retarget="true"	
   allowLabelUpdate="true">
</action>
...

Οι ενέργειες μεταβλητής εμβέλειας προσδιορίζονται χρησιμοποιώντας το γνώρισμα retarget="true".  Αυτό θα προκαλέσει τη δημιουργία μιας RetargetAction στο σύνολο ενεργειών.  Σημειώστε ότι οι ενέργειες μεταβλητής εμβέλειας δεν προσδιορίζουν γνώρισμα class υλοποίησης, καθώς εναπόκειται σε κάθε προβολή ή λειτουργία επεξεργασίας στην πρόσθετη λειτουργία να ρυθμίσει μια ρουτίνα χειρισμού που να υλοποιεί κάθε ενέργεια.  Εάν η allowLabelUpdate είναι true, τότε θα δημιουργηθεί αντίθετα μια LabelRetargetAction.

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

Μενού λειτουργίας επεξεργασίας αρχείου Readme με δύο γκρι και ένα ενεργοποιημένο στοιχείο

 

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

Η ReadmeEditorActionBarContributor μεριμνά γι' αυτό για λογαριασμό της λειτουργίας επεξεργασίας.  Πρώτον, ορίζει τις ρουτίνες χειρισμού για τις ενέργειες.

public ReadmeEditorActionBarContributor() {
	...
	handler4 = new EditorAction(MessageUtil.getString("Editor_Action4")); 
	handler5 = new EditorAction(MessageUtil.getString("Editor_Action5")); 
	handler5.setToolTipText(MessageUtil.getString("Readme_Editor_Action5"));
	...
}

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

public void init(IActionBars bars, IWorkbenchPage page) {
	...
	bars.setGlobalActionHandler(IReadmeConstants.ACTION_SET_RETARGET4, handler4);
	bars.setGlobalActionHandler(IReadmeConstants.ACTION_SET_LABELRETARGET5, handler5);
	...
}

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

public void setActiveEditor(IEditorPart editor) {
	...
	handler4.setActiveEditor(editor);
	handler5.setActiveEditor(editor);
	...
}

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

Μενού λειτουργίας επεξεργασίας αρχείων readme με ενεργοποιημένες ενέργειες 

Σημειώστε ότι η ετικέτα για την πρώτη ενέργεια μεταβλητής εμβέλειας ("Editor Action 4") δεν χρησιμοποιήθηκε εφόσον η μορφοποίηση XML του συνόλου ενεργειών δεν όρισε allowLabelUpdate.

Η ReadmeContentOutlinePage ορίζει τις ρουτίνες χειρισμού της στο ίδιο σημείο που όρισε τις ρουτίνες χειρισμού για τις ενέργειες μεταβλητής εμβέλειας της λειτουργίας επεξεργασίας:

    public void createControl(Composite parent) {
	...
	action = new OutlineAction(MessageUtil.getString("Outline_Action4")); 
	+getSite().getActionBars().setGlobalActionHandler(
		IReadmeConstants.ACTION_SET_RETARGET4, 
		action);  
	action = new OutlineAction(MessageUtil.getString("Outline_Action5")); 
	action.setToolTipText(MessageUtil.getString("Readme_Outline_Action5")); 
	+getSite().getActionBars().setGlobalActionHandler(
		IReadmeConstants.ACTION_SET_LABELRETARGET5, 
		action);  
}

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

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