Πλαίσια διαλόγου εφαρμογών

Όταν ένα τυποποιημένο πλαίσιο διαλόγου είναι πολύ απλό για την πρόσθετη λειτουργία σας, μπορείτε να δημιουργήσετε τα δικά σας πλαίσια διαλόγου χρησιμοποιώντας την κλάση Dialog. Νωρίτερα, είδαμε τον τρόπο με τον οποίο το εργαλείο διαχείρισης αρχείων readme παρείχε μια ενέργεια "Άνοιγμα προγράμματος πλοήγησης αρχείων readme" σε ένα σύνολο ενεργειών.  Αυτό το σύνολο ενεργειών εμφανίζεται στη γραμμή εργαλείων του πάγκου εργασίας και στο μενού Παράθυρο->Λειτουργία επεξεργασίας αρχείου readme.    

Πλέον είμαστε έτοιμοι να εξετάσουμε την υλοποίηση αυτής της ενέργειας στην κλάση WindowActionDelegate του εργαλείου διαχείρισης αρχείων readme.

   public void run(IAction action) {
      SectionsDialog dialog = new SectionsDialog(window.getShell(),
         ReadmeModelFactory.getInstance().getSections(selection));
      dialog.open();
   }

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

Όταν ο χρήστης επιλέγει την ενέργεια, ανοίγει το SectionsDialog.

Το SectionsDialog υλοποιείται στην πρόσθετη λειτουργία του εργαλείου διαχείρισης αρχείων readme θέτοντας ως υπο-κλάση την κλάση Dialog στο org.eclipse.jface.dialogs πακέτο.

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

Η SectionsDialog δεν υλοποιεί μια μέθοδο okButtonPressed. Μεταβιβάζεται σε αυτή η υλοποίηση "καμία ενέργεια" από την Dialog. Αυτό δεν είναι σύνηθες. Το πλαίσιο διαλόγου σας συνήθως εκτελεί κάποια διεργασία αν προκύψει κάποιο πάτημα ενός κουμπιού του πλαισίου διαλόγου.

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

Αναδυόμενα πλαίσια διαλόγου

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

Παρόλο που ένα πλαίσιο διαλόγου της κλάσης PopupDialog έχει πολύ διαφορετική όψη από ένα κανονικό πλαίσιο διαλόγου, ο κώδικας στην υποκλάση της πρόσθετης λειτουργίας που προσδιορίζει το περιεχόμενο του πλαισίου διαλόγου είναι σχεδόν ο ίδιος. Για τη δημιουργία των στοιχείων ελέγχου SWT για το πλαίσιο διαλόγου, εξακολουθεί να χρησιμοποιείται η μέθοδος createDialogArea. Η κύρια διαφορά στον κώδικα εφαρμογής συνίσταται στο ότι η λειτουργία κατασκευής που δημιουργεί αυτό το πλαίσιο διαλόγου έχει πολύ περισσότερες παραμέτρους από την κανονική κλάση Dialog. Για παράδειγμα, η SectionsDialog θα μπορούσε να μετατραπεί σε PopupDialog αλλάζοντας απλώς την υπερκλάση του πλαισίου διαλόγου και ρυθμίζοντας το πλαίσιο διαλόγου στη λειτουργία κατασκευής:

   public class SectionsDialog extends PopupDialog {
      protected IAdaptable input;

      /**
      * Creates a new SectionsDialog.
      */
      public SectionsDialog(Shell parentShell, IAdaptable input) {
        super(parentShell, SWT.DEFAULT, false, // do not take focus when opened
        	false, // do not persist the bounds
        	false, // do not show a resize menu
        	false, // do not show a menu item for persisting bounds
        	null, //  no title
        	null); // no info text
        this.input = input;
      }
      ...