Class AbstractDialog<T>

java.lang.Object
de.willuhn.jameica.gui.dialogs.AbstractDialog<T>
Type Parameters:
T - Der Typ des Objektes.
Direct Known Subclasses:
About, AbstractCertificateDialog, AppointmentProviderDialog, AttachmentManageDialog, AttachmentSettingsDialog, BackgroundTaskDialog, BackupRestoreDialog, BookmarkAddDialog, BookmarkSearchDialog, CalendarDialog, ChooseBoxesDialog, DependencyDownloadDialog, DependencyMissingDialog, ListDialog, LogDetailDialog, LoginDialog, NewPasswordDialog, PasswordDialog, PluginSourceDialog, PluginUnInstallDialog, ReminderAppointmentDialog, RepositoryEditDialog, SearchOptionsDialog, SimpleDialog, StorageProviderDialog, SystemCertificatesDialog, UpdateEditDialog, WaitDialog, YesNoDialog

public abstract class AbstractDialog<T> extends Object
Das ist die Basisklasse fuer modalen Dialogfenster.

Modal heisst: Ist das Dialogfenster einmal geoeffnet, kann die restliche Anwendung solange nicht mehr bedient werden, bis dieses Fenster geschlossen wurde.

Diese abstrakte Implementierung schreibt keinen Inhalt in den Dialog sondern stellt lediglich das Fenster mit einem definierten Design zu Verfuegung, behandelt die Dispatch-Vorgaenge mit dem Benutzer und definiert einen Fenster-Titel.

Der Dialog kann mittels der beiden Konstanten POSITION_MOUSE und POSITION_CENTER im Konstruktor entweder mittig auf dem Bildschirm oder an der momentanen Position der Mouse dargestellt werden.

Ableitende Klassen muessen die Methode paint(Composite) implementieren und dort ihre darzustellenden Elemente reinmalen.

Der Dialog wird mittels open() geoeffnet. Beim Schliessen des Dialogs wird die Methode getData() aufgerufen. Das ist gleichzeitig der Rueckgabewert von open().

Eine ableitende Klasse muss also z.Bsp. in paint(Composite) einen OK-Button erzeugen, einen Listener anhaengen, der auf Druecken des Buttons reagiert, in der aufgerufenenen Methode des Listeners den zu uebergebenden Wert als Member speichern und danach close() aufrufen, um den Dialog zu schliessen.

Bsp.:


 protected void paint(Composite parent) throws Exception
 {
   // [...]
   final Text text = GUI.getStyleFactory().createText(parent);
   final Button button = GUI.getStyleFactory().createButton(parent);
   button.setText("OK");
   button.addMouseListener(new MouseAdapter() {
     public void mouseUp(MouseEvent e) {
       this.enteredText = text.getText();
       close();
     }
   }
 }
 protected Object getData() throws Exception
 {
   return this.enteredText;
 }
 
Author:
willuhn
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected de.willuhn.util.I18N
     
    static final int
    Positioniert den Dialog auf dem Monitor, auf dem sich das Jameica-Fenster befindet.
    static final int
    Positioniert den Dialog auf dem Primaer-Monitor.
    static final int
    Positioniert den Dialog mittig auf dem Bildschirm.
    static final int
    Positioniert den Dialog an der aktuellen Maus-Position.
  • Constructor Summary

    Constructors
    Constructor
    Description
    AbstractDialog(int position)
    Erzeugt einen neuen Dialog.
    AbstractDialog(int position, boolean resizable)
    Erzeugt einen neuen Dialog.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addCloseListener(org.eclipse.swt.widgets.Listener l)
    Fuegt einen Listener hinzu, der beim Schliessen des Fensters ausgeloest wird.
    protected final void
    addShellListener(org.eclipse.swt.events.ShellListener l)
    Fuegt dem Dialog einen Shell-Listener hinzu.
    final void
    Schliesst den Dialog.
    protected org.eclipse.swt.widgets.Shell
    createShell(org.eclipse.swt.widgets.Shell parent, int flags)
    Erzeugt die Shell des Dialogs.
    protected abstract T
    Diese Funktion wird beim Schliessen des Dialogs in open() aufgerufen und liefert die ausgewaehlten Daten zurueck.
    protected final org.eclipse.swt.widgets.Display
    Liefert das Display des Dialogs.
    protected final org.eclipse.swt.widgets.Shell
    Liefert die Shell des Dialogs.
    protected boolean
    Durch Ueberschreiben dieser Funktion und zurueckliefern von "true" kann man einen Dialog nicht-modal machen, sodass man im Hauptfenster weiterhin Eingaben vornehmen kann, waehrend der Dialog offen ist.
    protected void
    Kann ueberschrieben werden, um zu beeinflussen, was passieren soll, wenn der User versucht, den Dialog mit Escape zu beenden.
    final T
    Oeffnet den Dialog.
    protected abstract void
    paint(org.eclipse.swt.widgets.Composite parent)
    Muss vom abgeleiteten Dialog ueberschrieben werden.
    void
    setMonitor(int monitor)
    Legt fest, auf welchem Monitor der Dialog angezeigt werden soll.
    void
    Legt einen abweichenden Text fuer das Panel direkt unter dem Titel fest.
    final void
    setSideImage(org.eclipse.swt.graphics.Image image)
    Fuegt dem Dialog links ein Bild hinzu.
    final void
    setSize(int width, int height)
    Legt Breite und Hoehe des Dialogs fest.
    void
    Setzt den anzuzeigenden Titel.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • POSITION_MOUSE

      public static final int POSITION_MOUSE
      Positioniert den Dialog an der aktuellen Maus-Position.
      See Also:
    • POSITION_CENTER

      public static final int POSITION_CENTER
      Positioniert den Dialog mittig auf dem Bildschirm.
      See Also:
    • MONITOR_PRIMARY

      public static final int MONITOR_PRIMARY
      Positioniert den Dialog auf dem Primaer-Monitor.
      See Also:
    • MONITOR_CURRENT

      public static final int MONITOR_CURRENT
      Positioniert den Dialog auf dem Monitor, auf dem sich das Jameica-Fenster befindet. Das ist der Default-Wert.
      See Also:
    • i18n

      protected de.willuhn.util.I18N i18n
  • Constructor Details

    • AbstractDialog

      public AbstractDialog(int position)
      Erzeugt einen neuen Dialog. Er ist nicht groessenaenderbar.
      Parameters:
      position - Position des Dialogs.
      See Also:
    • AbstractDialog

      public AbstractDialog(int position, boolean resizable)
      Erzeugt einen neuen Dialog.
      Parameters:
      position - Position des Dialogs.
      resizable - true, wenn der Dialog groessenaenderbar sein soll.
      See Also:
  • Method Details

    • isModeless

      protected boolean isModeless()
      Durch Ueberschreiben dieser Funktion und zurueckliefern von "true" kann man einen Dialog nicht-modal machen, sodass man im Hauptfenster weiterhin Eingaben vornehmen kann, waehrend der Dialog offen ist. Default ist "false".
    • createShell

      protected org.eclipse.swt.widgets.Shell createShell(org.eclipse.swt.widgets.Shell parent, int flags)
      Erzeugt die Shell des Dialogs. Kann von abgeleiteten Klassen ueberschrieben werden. Tu das aber bitte nur, wenn du genau weisst, was du tust.
      Parameters:
      parent - die Parent-Shell.
      flags - die Flags.
      Returns:
      die Shell.
    • addShellListener

      protected final void addShellListener(org.eclipse.swt.events.ShellListener l)
      Fuegt dem Dialog einen Shell-Listener hinzu. Der wird u.a. aufgerufen, wenn der User versucht, den Dialog ueber den Schliessen-Knopf im Fenster-Rahmen zu beenden. Gerade bei Passwort-Eingaben ist es sinnvoll, dies zu verhindern, damit sichergestellt ist, dass auf jeden Fall ein Passwort eingegeben wurde.
      Parameters:
      l - der ShellListener.
    • getDisplay

      protected final org.eclipse.swt.widgets.Display getDisplay()
      Liefert das Display des Dialogs.
      Returns:
      Display.
    • getShell

      protected final org.eclipse.swt.widgets.Shell getShell()
      Liefert die Shell des Dialogs.
      Returns:
      Shell.
    • addCloseListener

      public void addCloseListener(org.eclipse.swt.widgets.Listener l)
      Fuegt einen Listener hinzu, der beim Schliessen des Fensters ausgeloest wird. Ob das Schliessen nun durch Klick auf den Schliessen-Button oder z.Bsp. durch Auswahl eines Elements im Dialog stattfindet, ist egal. Dabei wird die Methode Listener.handleEvent(Event) des Listeners aufgerufen. Das ausgewaehlte Objekt befindet sich dann im Member data des Events.
      Parameters:
      l - zu registrierender Listener.
    • setTitle

      public void setTitle(String title)
      Setzt den anzuzeigenden Titel. Dies kann auch nachtraeglich noch ausgefuehrt werden, wenn das Panel schon angezeigt wird.
      Parameters:
      title -
    • setPanelText

      public void setPanelText(String text)
      Legt einen abweichenden Text fuer das Panel direkt unter dem Titel fest. Per Default wird dort nochmal der Text des Dialog-Titels angezeigt.
      Parameters:
      text - ein abweichender Text fuer das Panel.
    • setMonitor

      public void setMonitor(int monitor)
      Legt fest, auf welchem Monitor der Dialog angezeigt werden soll.
      Parameters:
      monitor - der Monitor.
      See Also:
    • setSize

      public final void setSize(int width, int height)
      Legt Breite und Hoehe des Dialogs fest. Wird die Funktion nicht aufgerufen, dann wird der Dialog genauso gross gemalt, wie der Inhalt. Wenn eine der beiden Groessen nicht bekannt ist oder nicht gesetzt werden soll, kann man auch SWT.DEFAULT uebergeben.
      Parameters:
      width - gewuenschte Breite.
      height - gewuenschte Hoehe.
    • setSideImage

      public final void setSideImage(org.eclipse.swt.graphics.Image image)
      Fuegt dem Dialog links ein Bild hinzu.
      Parameters:
      image - Side-Image.
    • paint

      protected abstract void paint(org.eclipse.swt.widgets.Composite parent) throws Exception
      Muss vom abgeleiteten Dialog ueberschrieben werden. In dieser Funktion soll er sich bitte malen. Sie wird anschliessend von open() ausgefuehrt.
      Parameters:
      parent - das Composite, in dem der Dialog gemalt werden soll. Hinweis: Das Composite enthaelt bereits ein einspaltiges GridLayout.
      Throws:
      Exception - Kann von der abgeleiteten Klasse geworfen werden. Tut sie das, wird der Dialog nicht angezeigt.
    • getData

      protected abstract T getData() throws Exception
      Diese Funktion wird beim Schliessen des Dialogs in open() aufgerufen und liefert die ausgewaehlten Daten zurueck. Die ableitende Klasse sollte hier also die Informationen rein tuen, die sie dem Aufrufer gern geben moechte.
      Returns:
      das ausgewaehlte Objekt.
      Throws:
      Exception
    • onEscape

      protected void onEscape()
      Kann ueberschrieben werden, um zu beeinflussen, was passieren soll, wenn der User versucht, den Dialog mit Escape zu beenden. Per Default wirft die Funktion eine OperationCancelledException, um den Dialog zu schliessen. Die Exception wird bis zum Aufrufer durchgereicht. Wenn er also um das open() ein try/catch macht und die OperationCancelledException faengt, kann er erkennen, ob der Dialog abgebrochen wurde. Um zum Beispiel zu verhinden, dass ein Dialog mit Escape abgebrochen werden kann, ueberschreibt man die Funktion einfach laesst sie leer. Will man hingegen zulassen, dass mit Escape abgebrochen wird, man dieses Event jedoch mitkriegen will, dann ueberschreibt man die Funktion, fuehrt dort die gewuenschten Aufgaben aus und macht anschliessend ein super.onEscape() um die OperationCancelledException auszuloesen. Alternativ kann man sie auch selbst werfen.
    • open

      public final T open() throws Exception
      Oeffnet den Dialog.
      Returns:
      das ausgewaehlte Objekt.
      Throws:
      Exception - wenn es beim Oeffnen zu einem Fehler gekommen ist.
      OperationCanceledException - wenn der User den Dialog mit Escape abgebrochen hat.
    • close

      public final void close()
      Schliesst den Dialog.