Σύνολα ενεργειών

org.eclipse.ui.actionSets

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

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

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

Η σύνταξη είναι η ίδια για τα στοιχεία enablement και visibility. Και τα δύο περιέχουν ένα υποστοιχείο λογικής έκφρασης. Στην πιο απλή περίπτωση, θα πρόκειται για ένα στοιχείο objectClass, objectState, pluginState ή systemProperty. Στην πιο σύνθετη περίπτωση, είναι δυνατός ο συνδυασμός των στοιχείων and, or και not για τη διαμόρφωση μιας λογικής έκφρασης. Τόσο το στοιχείο and, όσο και το or πρέπει να περιέχουν 2 υποστοιχεία. Το στοιχείο not πρέπει να περιέχει μόνο 1 υποστοιχείο.

<!ELEMENT extension (actionSet+)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT actionSet (menu* , action*)>

<!ATTLIST actionSet

id          CDATA #REQUIRED

label       CDATA #REQUIRED

visible     (true | false)

description CDATA #IMPLIED>

Αυτό το στοιχείο χρησιμοποιείται για τον ορισμό μιας ομάδας ενεργειών ή/και μενού.



<!ELEMENT action (selection* | enablement?)>>

<!ATTLIST action

id               CDATA #REQUIRED

label            CDATA #REQUIRED

accelerator      CDATA #IMPLIED

definitionId     CDATA #IMPLIED

menubarPath      CDATA #IMPLIED

toolbarPath      CDATA #IMPLIED

icon             CDATA #IMPLIED

disabledIcon     CDATA #IMPLIED

hoverIcon        CDATA #IMPLIED

tooltip  CDATA #IMPLIED

helpContextId    CDATA #IMPLIED

style            (push|radio|toggle|pulldown) "push"

state            (true | false)

pulldown         (true | false)

class            CDATA #IMPLIED

retarget         (true | false)

allowLabelUpdate (true | false)

enablesFor       CDATA #IMPLIED>

Αυτό το στοιχείο ορίζει μια ενέργεια την οποία μπορεί ο χρήστης να καλέσει στο περιβάλλον χρήστη.



<!ELEMENT menu (separator+ , groupMarker*)>

<!ATTLIST menu

id    CDATA #REQUIRED

label CDATA #REQUIRED

path  CDATA #IMPLIED>

Αυτό το στοιχείο χρησιμοποιείται για να ορίσει ένα νέο μενού.



<!ELEMENT separator EMPTY>

<!ATTLIST separator

name CDATA #REQUIRED>

Αυτό το στοιχείο χρησιμοποιείται για τη δημιουργία ενός διαχωριστικού στο νέο μενού.



<!ELEMENT groupMarker EMPTY>

<!ATTLIST groupMarker

name CDATA #REQUIRED>

Αυτό το στοιχείο χρησιμοποιείται για τη δημιουργία μιας επώνυμης ομάδας στο νέο μενού. Δεν έχει οπτική αναπαράσταση στο νέο μενού, αντίθετα με το στοιχείο separator.



<!ELEMENT selection EMPTY>

<!ATTLIST selection

class CDATA #REQUIRED

name  CDATA #IMPLIED>

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



<!ELEMENT enablement (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Αυτό το στοιχείο χρησιμοποιείται για τον ορισμό της ενεργοποίησης της επέκτασης.



<!ELEMENT visibility (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Αυτό το στοιχείο χρησιμοποιείται για τον ορισμό της ορατότητας της επέκτασης.



<!ELEMENT and (and | or | not | objectClass | objectState | pluginState | systemProperty)>

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



<!ELEMENT or (and | or | not | objectClass | objectState | pluginState | systemProperty)>

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



<!ELEMENT not (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Το στοιχείο αυτό εκφράζει ένα λογικό τελεστή ΝΟΤ στο αποτέλεσμα της αποτίμησης των εκφράσεων των υποστοιχείων του.



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

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



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Αυτό το στοιχείο χρησιμοποιείται για την αποτίμηση γνωρίσματος state κάθε αντικειμένου της τρέχουσας επιλογής. Εάν κάθε αντικείμενο στην επιλογή έχει προσδιορισμένο το γνώρισμα state, η έκφραση αποτιμάται ως true. Για την αποτίμηση αυτού του είδους έκφρασης, κάθε αντικείμενο στην επιλογή πρέπει να υλοποιεί ή να προσαρμόζεται στη διεπαφή org.eclipse.ui.IActionFilter.



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

Αυτό το στοιχείο χρησιμοποιείται για την αποτίμηση της κατάστασης μιας πρόσθετης λειτουργίας. Μια πρόσθετη λειτουργία μπορεί να βρίσκεται σε μία από τις παρακάτω καταστάσεις: installed (ισοδύναμη με την έννοια "resolved" του OSGi) ή activated (ισοδύναμη με την έννοια "active"του OSGi).



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Αυτό το στοιχείο χρησιμοποιείται για την αποτίμηση της κατάστασης μερικών ιδιοτήτων συστήματος. Η τιμή ιδιότητας ανακτάται από το java.lang.System.



Το παρακάτω είναι ένα παράδειγμα συνόλου ενεργειών (σημειώστε τα υποστοιχεία και τον τρόπο που χρησιμοποιούνται τα γνωρίσματα)

    

<extension point =

"org.eclipse.ui.actionSets"

>

<actionSet id=

"com.xyz.actionSet"

label=

"My Actions"

>

<menu id=

"com.xyz.xyzMenu"

label=

"XYZ Menu"

path=

"additions"

>

<separator name=

"group1"

/>

<separator name=

"option1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&Run XYZ Tool"

style=

"toggle"

state=

"false"

menubarPath=

"com.xyz.xyzMenu/group1"

icon=

"icons/runXYZ.gif"

tooltip=

"Run XYZ Tool"

helpContextId=

"com.xyz.run_action_context"

class=

"com.xyz.actions.RunXYZ"

enablesFor=

"1"

>

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

/>

</action>

<action id=

"com.xyz.runABC"

label=

"&Run ABC Tool"

style=

"push"

menubarPath=

"com.xyz.xyzMenu/group1"

toolbarPath=

"Normal/XYZ"

icon=

"icons/runABC.gif"

tooltip=

"Run ABC Tool"

helpContextId=

"com.xyz.run_abc_action_context"

retarget=

"true"

allowLabelUpdate=

"true"

>

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<not>

<objectState name=

"extension"

value=

"java"

/>

</not>

</and>

</enablement>

</action>

<action id=

"com.xyz.runDEF"

label=

"&Run DEF Tool"

style=

"radio"

state=

"true"

menubarPath=

"com.xyz.xyzMenu/option1"

icon=

"icons/runDEF.gif"

tooltip=

"Run DEF Tool"

class=

"com.xyz.actions.RunDEF"

helpContextId=

"com.xyz.run_def_action_context"

>

</action>

<action id=

"com.xyz.runGHI"

label=

"&Run GHI Tool"

style=

"radio"

state=

"false"

menubarPath=

"com.xyz.xyzMenu/option1"

icon=

"icons/runGHI.gif"

tooltip=

"Run GHI Tool"

class=

"com.xyz.actions.RunGHI"

helpContextId=

"com.xyz.run_ghi_action_context"

>

</action>

<action id=

"com.xyz.runJKL"

label=

"&Run JKL Tool"

style=

"radio"

state=

"false"

menubarPath=

"com.xyz.xyzMenu/option1"

icon=

"icons/runJKL.gif"

tooltip=

"Run JKL Tool"

class=

"com.xyz.actions.RunJKL"

helpContextId=

"com.xyz.run_jkl_action_context"

>

</action>

</actionSet>

</extension>

Στο παραπάνω παράδειγμα, το προσδιορισμένο σύνολο ενεργειών, με όνομα "My Actions", δεν είναι αρχικά ορατό σε κάθε προοπτική διότι το γνώρισμα visible δεν έχει προσδιοριστεί.

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

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

Οι ενέργειες DEF, GHI και JKL εμφανίζονται ως στοιχεία μενού με κουμπιά επιλογής. Είναι ενεργοποιημένα συνέχεια, ανεξάρτητα από την τρέχουσα κατάσταση της επιλογής.

Η τιμή του γνωρίσματος κλάσης πρέπει να είναι ένα πλήρες όνομα κλάσης που υλοποιεί org.eclipse.ui.IWorkbenchWindowActionDelegate ή org.eclipse.ui.IWorkbenchWindowPulldownDelegate. Η τελευταία πρέπει να υλοποιηθεί σε περιπτώσεις που το γνώρισμα style έχει την τιμή pulldown. Η κλάση είναι η ρουτίνα χειρισμού που είναι υπεύθυνη για την εκτέλεση της ενέργειας. Εάν το γνώρισμα retarget είναι true, τότε αγνοείται και δεν πρέπει να παρέχεται. Αυτή η κλάση φορτώνεται όσο το δυνατόν αργότερα για την αποφυγή φόρτωσης ολόκληρης της πρόσθετης λειτουργίας προτού αυτή καταστεί αναγκαία.

Τα κριτήρια ενεργοποίησης για μια επέκταση ενέργειας καθορίζονται αρχικά από το γνώρισμα enablesFor, και επίσης από τα στοιχεία selection ή enablement. Ωστόσο, μόλις δημιουργηθεί χρήση για την παραπομπή ενέργειας, μπορεί άμεσα να ελέγχει την κατάσταση ενεργοποίησης της ενέργειας από τη μέθοδο selectionChanged.

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

Οι ετικέτες ενεργειών και μενού μπορούν να περιέχουν ειδικούς χαρακτήρες για την κωδικοποίηση μνημονικών με χρήση των παρακάτω κανόνων:

  1. Τα μνημονικά προσδιορίζονται χρησιμοποιώντας το σύμβολο '&' μπροστά από τον επιλεγμένο χαρακτήρα στο μεταφρασμένο κείμενο. Εφόσον το σύμβολο "&" δεν επιτρέπεται σε σειρές χαρακτήρων XML, μπορείτε να χρησιμοποιήσετε την οντότητα χαρακτήρα &.
Εάν γίνεται συνεισφορά δύο ή περισσοτέρων ενεργειών σε μενού ή γραμμή εργαλείων με μία μοναδική επέκταση, οι ενέργειες θα εμφανιστούν με την αντίστροφη σειρά από αυτή που ακολουθούν στη λίστα του αρχείου plugin.xml. Αυτή η συμπεριφορά είναι ομολογουμένως μη διαισθητική. Ωστόσο, ανακαλύφθηκε μετά το κλείδωμα του ΑΡΙ της πλατφόρμας Eclipse. Η αλλαγή της συμπεριφοράς αυτή τη στιγμή θα διέκοπτε κάθε πρόσθετη λειτουργία που βασίζεται στην υπάρχουσα συμπεριφορά.

Τα στοιχεία selection και enablement δεν μπορούν να συνυπάρχουν. Το στοιχείο enablement μπορεί να αντικαταστήσει το στοιχείο selection χρησιμοποιώντας τα υπο-στοιχεία objectClass και objectState. Για παράδειγμα, το ακόλουθο:

 

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

>

</selection>

μπορεί να εκφραστεί χρησιμοποιώντας:
 

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<objectState name=

"extension"

value=

"java"

/>

</and>

</enablement>

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

Τα μενού ανωτέρου επιπέδου δημιουργούνται με τη βοήθεια των ακόλουθων τιμών για το γνώρισμα διαδρομής:

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

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

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