Aποποίηση ευθύνης: το σημείο επέκτασης org.eclipse.ui.menus
στο eclipse 3.2 υλοποιείται μόνο μερικώς. Δεν υποστηρίζει μενού ούτε ορισμούς ή
επεκτάσεις της γραμμής εργαλείων (πρέπει να χρησιμοποιηθούν οι τρέχουσες
επεκτάσεις συνεισφοράς). Πρόκειται, ωστόσο, για τον μοναδικό μηχανισμό μέσω
του οποίου συνεισφέρονται τα όργανα 'αποκοπής' στον πάγκο εργασίας. Στην παρούσα
ενότητα περιγράφεται ο τρόπος χρήσης του για αυτό το σκοπό.
Ένα όργανο 'αποκοπής' είναι ένα στοιχείο ελέγχου που βρίσκεται σε μια τοποθεσία (η οποία ονομάζεται 'περιοχή αποκοπής') στο εξωτερικό περίγραμμα του παραθύρου του πάγκου εργασίας. Το πιο συνηθισμένο παράδειγμα είναι η γενική 'γραμμή κατάστασης', την οποία σχεδόν όλες οι λειτουργίες GUI τοποθετούν στο κάτω μέρος του παραθύρου. Το σημείο επέκτασης org.eclipse.ui.menus επιτρέπει σε πρόσθετες λειτουργίες να προσθέσουν προβολές στον πάγκο εργασίας. Οι πρόσθετες λειτουργίες που συνεισφέρουν αποκοπή πρέπει να καταχωρήσουν την αποκοπή στο αρχείο plugin.xml και να παρέχουν πληροφορίες ρύθμισης σχετικά με την αποκοπή, όπως την κλάση υλοποίησής της, την ομάδα αποκοπών (γραμμή αποκοπών) στην οποία βρίσκεται καθώς και πληροφορίες διάταξης, όπως το εάν η αποκοπή θα χρησιμοποιήσει διαθέσιμο 'επιπλέον' χώρο κατά τη διάταξή της εντός της περιοχής αποκοπής.
Η διεπαφή για την αποκοπή που συνεισφέρεται καθορίζεται στο IWorkbenchWidget, αλλά οι πρόσθετες λειτουργίες μπορούν (και μάλιστα ενθαρρύνονται) να επιλέξουν την επέκταση της κλάσης AbstractWorkbenchTrimWidget αντί να υλοποιήσουν τη διεπαφή από την αρχή.
Για το παράδειγμα του εργαλείου διαχείρισης αρχείων readme, έχουμε συνεισφέρει ένα απλό όργανο αποκοπής, το οποίο απλά εμφανίζει μια σειρά χαρακτήρων και μια ένδειξη σε ποια πλευρά σταθεροποιείται η αποκοπή.
Ας ρίξουμε μια ματιά στον ορισμό του σημείου επέκτασης που χρησιμοποιείται για τη συνεισφορά αυτού του τμήματος αποκοπής:
Η πρώτη ενότητα της επέκτασης (ο ορισμός 'ομάδα') ορίζει απλά την ταυτότητα της ομάδας και καθορίζει μια 'θέση' για την ομάδα σαν να βρίσκεται στην αρχή της ομάδας 'κατάσταση' (π.χ. στην αρχή της κάτω περιοχής αποκοπής). Η δεύτερη ενότητα (ο ορισμός 'όργανο') καθορίζει την 'κλάση' υλοποίησης του οργάνου και καθορίζει την 'τοποθεσία' του οργάνου σαν να βρίσκεται εντός της ομάδας που καθορίστηκε προηγουμένως.
Σημειώστε ότι και στις δύο περιπτώσεις το 'είδος' της γραμμής ορίζεται ως αποκοπή (είναι το μοναδικό είδος που υποστηρίζεται).
Μόλις εγκατασταθεί το κανονικό παράδειγμα readmetool
ρίξτε
μια ματιά στην υλοποίηση της μεθόδου ReadmeTrimWidget's fill
. Αυτό
είναι διαφορετικό από τις άλλες μεθόδους fill
που χρησιμοποιούνται
κατά την προσθήκη οργάνων σε γραμμές εργαλείων ή μενού, επειδή η αποκοπή μπορεί
να τραβηχτεί από τη μια περιοχή στην άλλη, μεταβιβάζει επίσης την 'πλευρά'
στην οποία τοποθετείται η αποκοπή, δίνοντας τη δυνατότητα στον υλοποιητή να
προσαρμόσει την εμφάνιση του οργάνου βάσει της τοποθεσίας του, αλλάζοντας τον
προσανατολισμό κλπ. Η τρέχουσα υλοποίηση αλλάζει απλά το κείμενο που
εμφανίζεται ώστε να αντανακλά την τρέχουσα θέση. Σημειώστε επίσης τον τρόπο
χειρισμού του κύκλου ζωής 'dispose'/'fill'. Θα υπάρξουν επανειλημμένες κλήσεις
στο dispose
και στο fill
που έχουν
δημιουργηθεί λόγω αλλαγών στον πάγκο εργασίας (π.χ. αλλαγή προοπτικών ή
τράβηγμα της αποκοπής σε άλλη πλευρά).
Αυτό που δεν αντανακλάται στον κωδικό του δείγματος είναι η στήριξη της
λειτουργίας διαχείρισης διάταξης αποκοπής στη σωστή υλοποίηση αποκοπής της
μεθόδου computeSize
του στοιχείου ελέγχου του οργάνου. Το όργανο
πρέπει να έχει τη δυνατότητα υπολογισμού και επιστροφής του
'προτιμώμενου' μεγέθους, εφόσον χρησιμοποιείται σε όλη την υλοποίηση της
λειτουργίας διαχείρισης διάταξης, για παράδειγμα, πόσος χώρος χρειάζεται για
μια συγκεκριμένη περιοχή αποκοπής. Ανατρέξατε στην τεκμηρίωση του SWT για
σημειώσεις σχετικά με τον κατάλληλο τρόπο υλοποίησης του computeSize
.