Η αφανής πλευρά του πάγκου εργασίας

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

Πάγκος εργασίας

Με τον όρο πάγκος εργασίας εννοούμε γενικά "εκείνο το παράθυρο που ανοίγει κατά την εκκίνηση της πλατφόρμας". Ας ψάξουμε, ωστόσο, λίγο βαθύτερα να βρούμε κάποια από τα οπτικά στοιχεία που απαρτίζουν τον πάγκο εργασίας.

Πάγκος εργασίας με τρεις προβολές και μια λειτουργία επεξεργασίας σε μια σελίδα

Στην υπόλοιπη ανάλυση, όπου χρησιμοποιείται ο όρος πάγκος εργασίας, αναφέρεται στο παράθυρο του πάγκου εργασίας (IWorkbenchWindow). Το παράθυρο του πάγκου εργασίας είναι το παράθυρο ανωτέρου επιπέδου σε έναν πάγκο εργασίας. Είναι το πλαίσιο που περιέχει τις σελίδες και τις γραμμές μενού, εργαλείων, κατάστασης και συντομεύσεων. Γενικά, δε χρειάζεται να συνδεθείτε στο παράθυρο του πάγκου εργασίας. Πρέπει απλά να ξέρετε ότι υπάρχει.

Σημείωση:  Μπορείτε να ανοίξετε πολλά παράθυρα πάγκου εργασίας, ωστόσο κάθε παράθυρο πάγκου εργασίας αποτελεί ένα αυτόνομο σύνολο λειτουργιών επεξεργασίας και προβολών, γι'αυτό θα επικεντρωθούμε σε ένα μόνο παράθυρο.

Για το χρήστη, ο πάγκος εργασίας περιέχει προβολές και λειτουργίες επεξεργασίας. Χρησιμοποιούνται ωστόσο λίγες ακόμη κλάσεις για την υλοποίηση του παραθύρου πάγκου εργασίας. 

Σελίδα

Στο παράθυρο του πάγκου εργασίας, θα βρείτε μια σελίδα (IWorkbenchPage), η οποία περιέχει επιμέρους τμήματα. Οι σελίδες αποτελούν μηχανισμό υλοποίησης για την ομαδοποίηση τμημάτων. Συνήθως δε χρειάζεται να συνδεθείτε στη σελίδα, αλλά θα εμφανιστεί στο περιβάλλον προγραμματισμού και λειτουργίας εντοπισμού και διόρθωσης σφαλμάτων.

Προοπτικές

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

Προβολές και λειτουργίες επεξεργασίας

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

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

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

Φαίνεται απλό; Μπορεί να γίνει απλό. Αυτό είναι το χάρισμα των προβολών και των λειτουργιών επεξεργασίας του πάγκου εργασίας. Είναι απλοί περιέκτες οργάνων και μπορούν να γίνουν όσο απλοί ή πολύπλοκοι χρειάζεται. Νωρίτερα είδαμε τις απλούστερες προβολές όταν κατασκευάσαμε μια προβολή hello world. Ας ξαναδούμε αυτό το παράδειγμα τώρα που έχουμε εξηγήσει περισσότερο το τί συμβαίνει.

   package org.eclipse.examples.helloworld;

   import org.eclipse.swt.widgets.Composite;
   import org.eclipse.swt.widgets.Label;
   import org.eclipse.swt.SWT;
   import org.eclipse.ui.part.ViewPart;

   public class HelloWorldView extends ViewPart {
      Label label;
      public HelloWorldView() {
      }
public void createPartControl(Composite parent) {
         label = new Label(parent, SWT.WRAP);
         label.setText("Hello World");
      }
      public void setFocus() {
         // set focus to my widget.  For a label, this doesn't
         // make much sense, but for more complex sets of widgets
         // you would decide which one gets the focus.
      }
   }

Δε χρειάστηκε να υλοποιήσουμε τη μέθοδο αποδέσμευση() εφόσον δεν κάναμε τίποτα περισσότερο από το να δημιουργήσουμε μια ετικέτα στη μέθοδο createPartControl(parent). Αν είχαμε κατανείμει πόρους περιβάλλοντος χρήστη, όπως εικόνες ή γραμματοσειρές, σε αυτό το σημείο θα τις αποδεσμεύαμε. Εφόσον επεκτείναμε την κλάση ViewPart, μεταβιβάζεται η υλοποίηση "καμία ενέργεια" της αποδέσμευσης().