Ένα περιβάλλον μπορεί να χρησιμοποιηθεί για να επηρεάσει τις εντολές που είναι διαθέσιμες στο χρήστη κάθε δεδομένη στιγμή. Τα περιβάλλοντα είναι πολύ πιο δυναμικά από τις δραστηριότητες. Ενώ μια δραστηριότητα αντιπροσωπεύει ένα ευρύ σύνολο λειτουργιών που είναι διαθέσιμο στο χρήστη τις περισσότερες φορές, τα περιβάλλοντα περιγράφουν την έμφαση του χρήστη σε ένα συγκεκριμένο σημείο στο χρόνο. Για παράδειγμα, οι διαθέσιμες εντολές προς το χρήστη κατά την τροποποίηση κειμένου ίσως είναι διαφορετικές από αυτές που του είναι διαθέσιμες κατά την τροποποίηση κειμένου Java ή αναζήτηση πακέτων στην εξερεύνηση πακέτων.
Τα περιβάλλοντα δηλώνονται στο σημείο επέκτασης org.eclipse.ui.contexts. Εξετάστε το ακόλουθο περιβάλλον που ορίζεται για την τροποποίηση κειμένου:
<extension point="org.eclipse.ui.contexts"> <context name="%context.editingText.name" description="%context.editingText.description" id="org.eclipse.ui.textEditorScope" parentId="org.eclipse.ui.contexts.window"> </context>Στα περιβάλλοντα αντιστοιχείται ένα όνομα και μια περιγραφή που χρησιμοποιούνται κατά την εμφάνιση στο χρήστη πληροφοριών σχετικά με το περιβάλλον . Η ταυτότητα του περιβάλλοντος χρησιμοποιείται κατά τη σύνδεση συνεισφορών περιβάλλοντος χρήστη, όπως εντολές σε συγκεκριμένο περιβάλλον.
Η φύση των περιβαλλόντων είναι ιεραρχική. Όταν ένα περιβάλλον είναι ενεργό, οι διαθέσιμες εντολές στο περιβάλλον και στα γονικά του περιβάλλοντα είναι επίσης διαθέσιμες. Αυτό είναι χρήσιμο για τον ορισμό επιπέδων περιβαλλόντων που κινούνται από πολύ γενικές καταστάσεις έως πιο ειδικά περιβάλλοντα. Στον παραπάνω ορισμό περιβάλλοντος, σημειώστε ότι υπάρχει μια ταυτότητα γονικού στοιχείου που αντιστοιχείται στο περιβάλλον:
<context name="%context.editingText.name" description="%context.editingText.description" id="org.eclipse.ui.textEditorScope" parentId="org.eclipse.ui.contexts.window"> </context>Το γονικό περιβάλλον ορίζει το πιο γενικό περιβάλλον εργασίας εντός παραθύρου. Το γονικό του στοιχείο ορίζει ένα ακόμα πιο γενικό περιβάλλον εργασίας εντός παραθύρου ή πλαισίου διαλόγου.
<context name="%context.window.name" description="%context.window.description" id="org.eclipse.ui.contexts.window" parentId="org.eclipse.ui.contexts.dialogAndWindow"> </context> <context name="%context.dialogAndWindow.name" description="%context.dialogAndWindow.description" id="org.eclipse.ui.contexts.dialogAndWindow"> </context>
Έως τώρα, ασχοληθήκαμε με τον ορισμό μιας ιεραρχίας περιβαλλόντων. Το περιβάλλον είναι χρήσιμο όταν χρησιμοποιείται για παραπομπή της περιγραφής άλλης συνεισφοράς περιβάλλοντος χρήστη. Η πιο κοινή χρήση των περιβαλλόντων είναι στους δεσμούς πλήκτρων. Όταν ένα περιβάλλον συσχετιστεί με ένα δεσμό πλήκτρων, ο δεσμός θα είναι ενεργός μόνο όταν ο χρήστης βρίσκεται σε αυτό το περιβάλλον. Για παράδειγμα, η ακόλουθη μορφοποίηση προσδιορίζει το κεντρικό πλαίσιο διαλόγου και πλαίσιο παραθύρου ως το περιβάλλον ενός δεσμού πλήκτρων:
<extension point="org.eclipse.ui.bindings"> <key sequence="M1+X" contextId="org.eclipse.ui.contexts.dialogAndWindow" commandId="org.eclipse.ui.edit.cut" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"/> </extension>
Το περιβάλλον του πάγκου εργασίας περιλαμβάνει ένα API για εργασία με καθορισμένα περιβάλλοντα και για ορισμό κριτηρίων για την ενεργοποίηση ενός συγκεκριμένου περιβάλλοντος. Οι περισσότερες πρόσθετες λειτουργίες δεν χρειάζεται να ασχολούνται με το API αυτό, όμως είναι χρήσιμο κατά τον ορισμό εξειδικευμένων προβολών ή λειτουργιών επεξεργασίας που ορίζουν νέα περιβάλλοντα.
Το σημείο έναρξης της εργασίας με περιβάλλοντα στον πάγκο εργασίας είναι το IContextService. Οι πρόσθετες λειτουργίες μπορούν να λάβουν τη χρήση καθολικής υποστήριξης περιβάλλοντος από τον πάγκο εργασίας.
IContextService contextService = (IContextService)PlatformUI.getWorkbench() .getService(IContextService.class);
Οι υπηρεσίες όπως IContextService, IHandlerService, και IBindingService μπορούν να ανακτηθούν χρησιμοποιώντας ένα IServiceLocator. Οι IWorkbench, IWorkbenchWindow, και IWorkbenchSite είναι IServiceLocator.
Η IContextService ορίζει πρωτόκολλο για τη λήψη όλων των καθορισμένων ή ενεργοποιημένων ταυτοτήτων περιεχομένου και της συσχετισμένης Context για μια συγκεκριμένη ταυτότητα. Τα αντικείμενα αυτά μπορούν να χρησιμοποιηθούν για να διατρέξετε τον ορισμό ενός περιβάλλοντος σε API, όπως η λήψη της ταυτότητας, του ονόματος ή της ταυτότητας του γονικού περιβάλλοντος. Οι λειτουργίες ακρόασης μπορούν να καταχωρηθούν στη λειτουργία διαχείρισης περιβαλλόντων ή στα ίδια τα περιβάλλοντα για τον εντοπισμό αλλαγών στον ορισμό συγκεκριμένου περιβάλλοντος ή στην ίδια τη λειτουργία διαχείρισης περιβαλλόντων. Δείτε το πακέτο org.eclipse.core.commands.contexts για περισσότερες πληροφορίες.
Τα περιεχόμενα μπορούν να ενεργοποιηθούν με προγραμματισμό:
IContextActivation activation = contextService.activateContext("org.eclipse.ui.textEditorScope");
Το IContextActivation είναι ένα στοιχείο που μπορεί να χρησιμοποιηθεί για την απενεργοποίηση ενός ενεργού περιβάλλοντος. Πρέπει να είστε βέβαιοι ότι ενεργοποιείτε μόνο το καθορισμένο περιβάλλον.
Εάν ενεργοποιείτε ένα πιο συγκεκριμένο περιβάλλον στο τμήμα σας (είτε Προβολή είτε Λειτουργία επεξεργασίας) μπορείτε να χρησιμοποιήσετε τη λειτουργία εντοπισμού υπηρεσιών δικτυακού τόπου του τμήματος για να ενεργοποιήσετε το περιβάλλον σας. Το IContextService του τμήματος θα αναλάβει την ευθύνη ενεργοποίησης και απενεργοποίησης του περιβάλλοντος καθώς το τμήμα σας ενεργοποιείται ή απενεργοποιείται. Επίσης θα αποδεσμεύσει το περιβάλλον όταν αποδεσμευθεί το τμήμα.