org.eclipse.ui.views

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

Το σημείο επέκτασης org.eclipse.ui.views επιτρέπει σε πρόσθετες λειτουργίες να προσθέσουν προβολές στον πάγκο εργασίας. Οι πρόσθετες λειτουργίες που συνεισφέρουν μια προβολή πρέπει να καταχωρήσουν την προβολή στο αρχείο τους plugin.xml και να παρέχουν πληροφορίες ρύθμισης σχετικά με την προβολή, όπως η κλάση υλοποίησής της, η κατηγορία (ή η ομάδα) προβολών στην οποία ανήκει, και το όνομα και το εικονίδιο που πρέπει να χρησιμοποιηθούν για την περιγραφή της προβολής σε μενού και ετικέτες.

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

Υλοποιήσαμε μια επέκταση ελάχιστης προβολής στο παράδειγμα hello world. Τώρα θα εξετάσουμε μια προβολή που γνωρίζει άλλες προβολές του πάγκου εργασίας και απαντά στις αλλαγές πλοήγησης και επιλογών του χρήστη στον πάγκο εργασίας. Πρώτον, ας ρίξουμε μια ματιά στη δήλωση της επέκτασης στο αρχείο plugin.xml.

<extension 
   point="org.eclipse.ui.views">
	<category 
	   id="org.eclipse.ui.examples.readmetool"
	   name="%Views.category">
	</category>
	<view
 	   id="org.eclipse.ui.examples.readmetool.views.SectionsView"
	   name="%Views.ReadmeSections"
	   icon="icons/view16/sections.png"
	   category="org.eclipse.ui.examples.readmetool"
	   class="org.eclipse.ui.examples.readmetool.ReadmeSectionsView">
	</view>
</extension>

Πρέπει να φαίνεται αρκετά οικείο. Βλέπουμε ότι μια νέα προβολή, ReadmeSectionsView, συνεισφέρεται στον πάγκο εργασίας. Τα γνωρίσματα view id, name και category καθορίζονται όπως είδαμε προηγουμένως. Παρέχεται επίσης ένα icon για την προβολή, χρησιμοποιώντας μια διαδρομή που είναι σχετική με τον κατάλογο εγκατάστασης της πρόσθετης λειτουργίας.

Ας εξετάσουμε τη ReadmeSectionsView. Μπορείτε να εμφανίσετε οποιαδήποτε προβολή στον πάγκο εργασίας επιλέγοντας Παράθυρο > Εμφάνιση προβολής > Άλλο... και επιλέγοντας την προβολή από τη λίστα Εμφάνιση προβολής.

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

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

Θα ξεκινήσουμε με την οικεία μέθοδο createPartControl.  Όπως είδαμε στο παράδειγμα Hello World, εκεί είναι που δημιουργούνται τα όργανα που αντιπροσωπεύουν μια προβολή.  Θα παραβλέψουμε μέρος του κώδικα για να ξεκινήσουμε.

public void createPartControl(Composite parent) {
      viewer = new ListViewer(parent);
      ...
      // add myself as a global selection listener
      getSite().getPage().addSelectionListener(this);

      // prime the selection
      selectionChanged(null, getSite().getPage().getSelection());
   }

Η προβολή δημιουργεί και αποθηκεύει μια ListViewer και καταχωρεί την ίδια ως λειτουργία ακρόασης επιλογής στη σελίδα της. Λαμβάνει τη σελίδα από μια IViewSite, η οποία περιέχει πληροφορίες σχετικά με το περιβάλλον της προβολής, όπως το παράθυρο του πάγκου εργασίας, την περιέχουσα σελίδα και την πρόσθετη λειτουργία της. Όταν ειδοποιηθούμε για αλλαγή επιλογής, τι συμβαίνει;Εκτελείται ο ακόλουθος κώδικας:

   public void selectionChanged(IWorkbenchPart part, ISelection sel) {
      //if the selection is a readme file, get its sections.
      AdaptableList input = ReadmeModelFactory.getInstance().getSections(sel);
      viewer.setInput(input);
   }

Φαίνεται σαν η κλάση ReadmeModelFactory να είναι υπεύθυνη για τη μετατροπή της επιλογής σε ενότητες αρχείου readme και οι ενότητες αυτές συνιστούν δεδομένα εισόδου για τη λειτουργία προβολής που δημιουργήσαμε στη μέθοδο createPartControl.

Πώς όμως η λειτουργία προβολής συμπλήρωσε τα όργανα της λίστας της;  Προς το παρόν, ας υποθέσουμε ότι μόλις η λειτουργία προβολής ενημερωθεί για το στοιχείο εισόδου της, γνωρίζει πώς να συμπληρώσει τα όργανα της λίστας της με τις πληροφορίες- άλλωστε είναι μια ListViewer.  Εάν πρέπει να γνωρίζετε αμέσως τι ακριβώς είναι αυτή η λειτουργία προβολής, μετακινηθείτε στην ενότητα Λειτουργίες προβολής

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

   public AdaptableList getSections(ISelection sel) {
      // If sel is not a structured selection just return.
      if (!(sel instanceof IStructuredSelection))
     return null;
      IStructuredSelection structured = (IStructuredSelection)sel;

      //if the selection is a readme file, get its sections.
      Object object = structured.getFirstElement();
      if (object instanceof IFile) {
         IFile file = (IFile) object;
         String extension = file.getFileExtension();
         if (extension != null && extension.equals(IReadmeConstants.EXTENSION)) {
            return getSections(file);
         }
      }

      //the selected object is not a readme file
     return null;
   }

Ελέγχουμε την επιλογή για να δούμε εάν πρόκειται για δομημένη (πολλαπλή) επιλογή.  (Η έννοια της δομημένης επιλογής προέρχεται από λειτουργίες προβολής JFace .)  Για το πρώτο αντικείμενο στην επιλογή, ελέγχουμε εάν είναι πόρος αρχείου (IFile).  Εάν ναι, ελέγχουμε την επέκτασή του για να δούμε εάν αντιστοιχεί με την επέκταση ".readme".  Μόλις μάθουμε ότι έχουμε ένα αρχείο readme, μπορούμε να χρησιμοποιήσουμε άλλες μεθόδους για την ανάλυση των ενοτήτων.   Μπορείτε να αναζητήσετε τα υπόλοιπα των ReadmeModelFactoryMarkElement και DefaultSectionsParser για τις λεπτομέρειες σχετικά με την ανάλυση αρχείου.

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