Eine Liste stellt eine Alternative zu den Choices dar. Es bietet dem Benutzer ebenfalls eine vordefinierte Auswahlmöglichkeit an. Diese Auswahlmöglichkeiten werden in Form von anwählbaren Strings dargestellt. Eine bestimmte Anzahl der Strings ist permanent sichtbar, die restlichen sind über einen Scrollbalken erreichbar. Im Gegensatz zur Choice bietet die List die Möglichkeit auch mehrere Einträge zu selectieren.
Das folgende Beispiel demonstriert zunächst die Programmierung einer Liste mit einer einfachen Wahlmöglichkeit.
/* Example list.c */ : list = j_list(frame,6); j_additem(list,"red"); j_additem(list,"green"); j_additem(list,"blue"); j_additem(list,"yellow"); j_additem(list,"white"); j_additem(list,"black"); j_additem(list,"pink"); j_additem(list,"orange"); j_select(list,2); : while(1) { : if(obj==list) { switch(j_getselect(list)) { case(0):j_setnamedcolorbg(frame,J_RED); break; case(1):j_setnamedcolorbg(frame,J_GREEN); break; case(2):j_setnamedcolorbg(frame,J_BLUE); break; case(3):j_setnamedcolorbg(frame,J_YELLOW); break; case(4):j_setnamedcolorbg(frame,J_WHITE); break; case(5):j_setnamedcolorbg(frame,J_BLACK); break; case(6):j_setnamedcolorbg(frame,J_MAGENTA); break; case(7):j_setnamedcolorbg(frame,J_ORANGE); break; } j_deselect(list,j_getselect(list)); } : } :
Man erkennt, daß die Programmierung ähnlich ist, wie bei den Choice Objekten. Mit der Anweisung:
list = j_list(frame,6);
Wird eine Liste generiert, die 6 sichtbare Items enthält. Der erste Parameter bestimmt also die Hoehe des sichtbaren Bereichs. Die Breite ist nicht fest bestimmbar, denn sie wird durch den Inhalt der Strings bestimmt. Eine Liste hat eine Default Einstellung von 4 sichtbaren Zeilen. Dieser Wert wird übernommen, wenn als weiter Parameterder j_list() Funktion eine 0 übergeben wird.
Wie bei den Choices werden mit den wiederholten Anweisungen:
j_additem(list,"red");
Auswahlstrings hinzugefügt. Diese Auswahlelemente werden ebenfalls intern mit fortlaufenden Nummern versehen, und zwar in der Reihenfolge, in der diese der Liste zugefügt werden. Die Anweisungen j_remove() und j_insert() funktionieren ebenfalls analog zu den Choices.
Die Defaulteinstellung einer Liste ist die 1 aus n Auswahl. Wird vom Benutzer ein String per Doppelklick ausgewählt, so wird die Applikation mit der Identifikationsnummer der Liste benachrichtigt. Analog zu den Choices kann nun mittels
j_getselect(list)
das ausgewählte Element ermittelt werden.
Mit der Funktion:
j_deselect(list,j_getselect(list));
kann ein Element deselectiert werde. Im Beispiel wird das ein selectierte Element sofort wieder deselectiert.
Es wurde bereits erwähnt, das in einer Liste auch mehrfache Selektierungen möglich sind. Um dies zu erreichen, muß der Liste die Anweisung:
j_multiplemode(list,J_TRUE);
übermittelt werden. Mit dem zweiten Parameter der Funktion kann die Mehrfachselektion ein- und ausgeschaltet werden. Um auf eine mehrfache Selektion reagieren zu können, meldet die Liste nun jeden einfachen Klick auf ein Element. Da nun mehrere Element selektiert sein können, sollte mit der Anweisung:
j_isselect(int choice, int element_nummer)
der Zustand jedes Element abgefragt werden. Ein Aufruf von j_getselect(list) liefert nur das erste selectierte Element zurück. Das folgende Beispielprogramm demomstriert diese Arbeitsweise:
: list = j_list(frame,3); j_additem(list,"Red"); j_additem(list,"Green"); j_additem(list,"Blue"); j_multiplemode(list,J_TRUE); j_select(list,0); j_select(list,1); while(1) { : if(obj==list) { r=j_isselect(list,0)?255:0; g=j_isselect(list,1)?255:0; b=j_isselect(list,2)?255:0; j_setcolorbg(frame,r,g,b); } : }
Sobald der Benutzer durch einfaches Anklicken eines Elements dessen Zustand ändert, wird die Applikation benachrichigt. Die drei Auswahlelemente werden überprüft, und entsprechend des Zustands die Hintergrundfarben gesetzt.
Anstatt direkt die Events der Liste abzufangen, kann alternativ auch ein zusätzlicher OK-Button verwendet werden. In dessen Event Reaktion kann dann überprüft werden, welche Einträge selektiert sind. Dies gibt dem Benutzer die Möglichkeit in Ruhe die geeigneten Einträge auszuwählen. Das Beipiel benutzt einen solchen Button nicht, und reagiert somit immer sofort auf einen Selektionswechsel.
Die im Beispiel nicht benutzten Funktionen zum Manipulieren einer Liste funktionieren analog zum Choice-Element.
j_insert(int list, int pos, string title) j_remove(int list, int pos,) j_getitem(int list, int nr, char* str) j_getitemcount(int list)