Einfaches Menüsystem: Unterschied zwischen den Versionen
Stella (Diskussion | Beiträge) (Die Seite wurde neu angelegt: Mit Control6 kann mit minimalem Aufwand ein kleines Menüsystem, zum Beispiel auf einem LCD-Display, erstellt und wiedergegeben werden. Das Ausgabemedium ist relat...) |
Stella (Diskussion | Beiträge) |
||
Zeile 30: | Zeile 30: | ||
In der Hauptschleife wird regelmäßig überprüft ob das Menü noch nicht aktiv ist (bzw. wieder verlassen wurden). Falls ja, wird versucht ein Zeichen aus dem TTY-Eingabepuffer zu lesen. Ist dies ein Newline-Zeichen (als Ausfluss der Eingabetaste), wird das Menü gestartet. | In der Hauptschleife wird regelmäßig überprüft ob das Menü noch nicht aktiv ist (bzw. wieder verlassen wurden). Falls ja, wird versucht ein Zeichen aus dem TTY-Eingabepuffer zu lesen. Ist dies ein Newline-Zeichen (als Ausfluss der Eingabetaste), wird das Menü gestartet. | ||
+ | |||
+ | |||
+ | == Untermenüs == | ||
+ | Selbstverständlich kann man auch Untermenüs anlegen. Dies geht mit der Direktive ''SUBMENU'', der als erstes Argument einen Name für das Untermenü erwartet und als zweites Argument schließlich einen Satz von Menüdefinitionen, analog der Funktion ''MENU''. | ||
+ | |||
+ | Hier zur Verdeutlichung ein kleines Beispiel, diesmal ohne Befehle die ''MENUITEM'' ausführen soll, weil's einfach übersichtlicher ist: | ||
+ | |||
+ | <pre> | ||
+ | MENU(COLS, 2, 0, " ** Wecky **", | ||
+ | MENUITEM("Testitem A") | ||
+ | MENUITEM("Testitem B") | ||
+ | |||
+ | SUBMENU("MPD Client", | ||
+ | MENUITEM("Play") | ||
+ | MENUITEM("Pause") | ||
+ | MENUITEM("Previous") | ||
+ | MENUITEM("Next") | ||
+ | MENUITEM("Stop") | ||
+ | ) | ||
+ | |||
+ | MENUITEM("Testitem C") | ||
+ | ) | ||
+ | </pre> | ||
+ | |||
[[Category:Control6 Examples]] | [[Category:Control6 Examples]] |
Version vom 23. Juni 2009, 14:26 Uhr
Mit Control6 kann mit minimalem Aufwand ein kleines Menüsystem, zum Beispiel auf einem LCD-Display, erstellt und wiedergegeben werden. Das Ausgabemedium ist relativ flexibel, da das Ganze auf dem TTY Layer fußt.
Die Menüfunktion steht noch relativ am Anfang der Entwicklung, deswegen sind momentan auch nur sehr einfache Menüs machbar, aber immerhin.
Eine einfache Auswahlliste
Zunächst die Definition des Menüs selbst:
MENU(COLS, 2, 0, " ** Wecky **", MENUITEM("Test 1", DEBUG("Chosen menuitem: 1")) MENUITEM("Test 2", DEBUG("Chosen menuitem: 2")) MENUITEM("Test 3", DEBUG("Chosen menuitem: 3")) MENUITEM("Test 4", DEBUG("Chosen menuitem: 4")) )
Die Funktion MENU hat fünf Argumente. Zunächst die breite des zu verwendenden TTY-Fensters, dann die Position (Y- und X-Koordinate) und der Menütitel. Das fünfte Argument beinhaltet die Untermenüpunkte.
In diesem Fall sind dies alles MENUITEM (andere werden momentan ohnehin noch nicht unterstützt (:mrgreen:)). Diese bekommen als erstes Argument einen Anzeigetext. Das zweite Argument stellt den Code dar, der ausgeführt werden soll, wenn der Eintrag selektiert wird. Dies ist im konkreten Fall nur ein DEBUG-Aufruf, kann aber grundsätzlich beliebig komplexer Control6-Code sein.
Das beste Menü hilft aber nicht, wenn es nie sichtbar wird. Dies können wir durch folgendes Stück Code erreichen:
UNLESS MENU_STARTED() DO ON TTY_GETCH() == 10 DO MENU_START() END END
In der Hauptschleife wird regelmäßig überprüft ob das Menü noch nicht aktiv ist (bzw. wieder verlassen wurden). Falls ja, wird versucht ein Zeichen aus dem TTY-Eingabepuffer zu lesen. Ist dies ein Newline-Zeichen (als Ausfluss der Eingabetaste), wird das Menü gestartet.
Untermenüs
Selbstverständlich kann man auch Untermenüs anlegen. Dies geht mit der Direktive SUBMENU, der als erstes Argument einen Name für das Untermenü erwartet und als zweites Argument schließlich einen Satz von Menüdefinitionen, analog der Funktion MENU.
Hier zur Verdeutlichung ein kleines Beispiel, diesmal ohne Befehle die MENUITEM ausführen soll, weil's einfach übersichtlicher ist:
MENU(COLS, 2, 0, " ** Wecky **", MENUITEM("Testitem A") MENUITEM("Testitem B") SUBMENU("MPD Client", MENUITEM("Play") MENUITEM("Pause") MENUITEM("Previous") MENUITEM("Next") MENUITEM("Stop") ) MENUITEM("Testitem C") )