Einzelauswahlwidget hinzufügen

Kombinationsfeld, Optionsfeldgruppe und Listenfeld sind einander ähnlich, weil der Benutzer hier stets eine einzige Option aus einer Gruppe von Optionen auswählen muss.

Wie das Kontrollkästchenwidget müssen auch die Einzelauswahlwidgets an eine Variable gebunden werden, die ihren Status darstellt. Statt einer booleschen Variablen müssen die Einzelauswahlwidgets jedoch an eine Variable des Typs INT gebunden werden, damit der Index der gegenwärtig ausgewählten Option dargestellt wird.

  1. Erstellen Sie in einem Konsolenformular (ConsoleForm) das Widget unter Verwendung der vordefinierten Abschnitte:
    record singleSelectForm type ConsoleForm 
      { formsize=[12,40] }
      myRadio consoleRadioGroup 
        {name = "radio", bounds = [1,2,4,17]};
      myCombo consoleCombo 
        {name = "combo", bounds = [7,2,1,15]};
      myList ConsoleList 
        {name ="list", bounds = [9,2,2,18]};
    end
  2. Geben Sie mindestens die folgenden Felder für das Widget an:
    name
    Dies ist ein mnemonisches Zeichen, mit dessen Hilfe das Widget später mit einem Ereignishandler verknüpft wird.
    bounds
    Geben Sie eine Gruppe von vier ganzen Zahlen an. Diese Zahl stellen die Zeilen, die Spalten, die Höhe und die Breite des Widgets dar.
  3. Erstellen Sie im Programm eine ganzzahlige Variable (Typ INT), um den Status des Widgets darzustellen:
    radioValue, comboValue, listValue int = 2;
  4. Definieren Sie zwischen der Erstellung der Formularvariablen und der Anzeige des Formulars in einem Fenster die Optionen im Widget mit einem Bereich von Variablen oder Literalen:
    myWindow WINDOW {name="myWindow", position=[1,1]};
    openWindow(myWindow);
    myForm singleSelectForm{};
    
    myForm.myCombo.items = 
      ["Option One", "Option Two", "Option Three"];
    myForm.myRadio.items = 
      ["Option One", "Option Two", "Option Three"];
    myForm.myList.items = 
      ["one","two","three","four","five","six"];
    
    displayForm(myForm);
  5. Öffnen Sie das Formular mit einer Anweisung openUI und binden Sie die Variablen an die Widgets:
    openUI myForm 
        bind radioValue, comboValue, listValue
        //event handlers go here
    end
  6. Geben Sie in der Anweisung openUI einen Ereignishandler für das Ereignis SELECTION_CHANGED des Widgets an:
    onEvent (ConsoleRadioGroup.SELECTION_CHANGED : "radio")
      SysLib.writeStdout("Radio selected: "::radioValue); 
    onEvent (ConsoleCombo.SELECTION_CHANGED : "combo")
      SysLib.writeStdout("Combo selected: "::comboValue);
    onEvent(ConsoleList.SELECTION_CHANGED : "list")
      SysLib.writeStdout("List selected: "::listValue);

Nachfolgend ist ein umfassendes Beispiel für ein Programm der Konsolenbenutzerschnittstelle dargestellt, das ein Kombinationsfeldwidget und ein Optionsfeldgruppenwidget auf diese Weise verwendet.

Die Datei programs/singleSelectTest.egl enthält Folgendes:
package programs;

import forms.singleSelectForm;

program singleSelectTest type BasicProgram {}

  radioValue, comboValue, listValue int = 2;
  
  function main()
    myWindow WINDOW {name="myWindow", position=[1,1]};
    openWindow(myWindow);
    myForm singleSelectForm{};
    
    myForm.myCombo.items = 
      ["Option One", "Option Two", "Option Three"];
    myForm.myRadio.items = 
      ["Option One", "Option Two", "Option Three"];
    myForm.myList.items = 
      ["one","two","three","four","five","six"];
    
    displayForm(myForm);
    
    openUI myForm
    bind radioValue, comboValue, listValue
    onEvent (ConsoleRadioGroup.SELECTION_CHANGED : "radio")
      SysLib.writeStdout("Radio selected: "::radioValue); 
    onEvent (ConsoleCombo.SELECTION_CHANGED : "combo")
      SysLib.writeStdout("Combo selected: "::comboValue);
    onEvent(ConsoleList.SELECTION_CHANGED : "list")
      SysLib.writeStdout("List selected: "::listValue);
    end
    
  end
  
end
Die Datei forms/singleSelectForm.egl enthält Folgendes:
package forms;

record singleSelectForm type ConsoleForm 
  { formsize=[12,40] }
  myRadio consoleRadioGroup 
    {name = "radio", bounds = [1,2,4,17]};
  myCombo consoleCombo 
    {name = "combo", bounds = [7,2,1,15]};
  myList ConsoleList 
    {name ="list", bounds = [9,2,2,18]};
end

Wenn Sie das EGL-Programm im Modus für die Rich-Client-Plattform (RCP) ausführen, sieht die Benutzerschnittstelle folgendermaßen aus:

Abbildung der Schnittstelle mit Optionsfeldgruppen-, Kombinationsfeld- und Listenfeldwidgets
Jedes Mal, wenn Sie die Auswahl in einem der Widgets ändern, wird der entsprechende Ereignishandler ausgeführt und gibt in diesem Fall eine Nachricht in der Konsolensicht aus:
In der Konsolensicht ausgegebene Nachrichten des Ereignishandlers

Das Listenfeld kann auch als Mehrfachauswahlwidget verwendet werden, bei dem der Benutzer mehrere Einträge in der Liste auswählen darf. Damit Benutzer mehrere Einträge in der Liste auswählen können, müssen Sie für die Eigenschaft multipleSelect des Widgets die Einstellung 'true' festlegen:
myForm.list1.multipleSelect = TRUE;
Wenn für multipleSelect die Einstellung 'false' (also die Standardeinstellung) festgelegt ist, enthält der Wert der Variablen, die an das Widget gebunden ist, den Index des ausgewählten Eintrags. Wird der erste Eintrag ausgewählt, enthält die Variable die Zahl 1. Ist der fünfte Eintrag ausgewählt, enthält die Variable die Zahl 5. Ist für multipleSelect die Einstellung 'true' festgelegt, enthält die Variable eine binäre Darstellung der ausgewählten Einträge. Jedem Eintrag in der Liste wird gemäß seiner Position ein Vielfaches von 2 zugeordnet: Der erste Eintrag erhält die Zahl 1, der zweite die Zahl 2, der dritte die Zahl 4, der vierte die Zahl 8, der fünfte die Zahl 16, der sechste die Zahl 32 usw. Der Wert der Variablen ist die Summe der Werte aller ausgewählten Einträge. Falls beispielsweise nur der erste Eintrag ausgewählt ist, enthält die Variable den Wert 1. Sind der erste und der zweite Eintrag ausgewählt, enthält die Variable den Wert 3, also die Summe der Werte für die beiden ausgewählten Einträge. Sind der zweite, der fünfte und der sechste Eintrag ausgewählt, enthält die Variable den Wert 50 (also 2+16+32).

Feedback