GUI
Zur Erstellung von grafischen Benutzeroberflächen enthält Ethersex die MenuDesigner Bibliothek von Malte Marwedel.
http://sourceforge.net/projects/menudesigner/
Inhaltsverzeichnis
Grundlagen
MenuDesigner ist eine GUI Bibliothek zur Erstellung und Darstellung von grafischen Menüs. Sie ist auf Systeme mit sehr beschränkten Ressourcen zugeschnitten und benötigt vergleichsweise wenig Flash und RAM. Folgende Widgets werden zur Zeit Unterstützt:
- Windows
- Subwindows
- Box (ein einfaches Rechteck)
- Buttons
- Label
- Checkbox
- Radiobutton
- Listen (scrollbar)
- Grafiken
Alle Texte können zur Laufzeit geändert werden.
Es stehen Events zur Verfügung, die Ausgelöst werden wenn der Benutzer eine Aktion durchführt (Button angeklickt, Radiobutton ausgewählt, etc.)
Für eine genaue Beschreibung verweise ich auf Mikrocontroller.net und SourceForge
Einbindung in Ethersex
Ethersex enthält einen Wrapper (services/glcdmenu/) für das eigentliche Menüsystem, der vom Anzeigemedium abstrahiert und Events über das HOOK-System von Ethsersex weiterleitet.
Aktiverung
in menuconfig unter Applications -> Graphic Menu
Display
Das Menusystem benötigt ein Grafikdisplay (oh Wunder!). Zur Zeit wird nur der S1D13305 Controller unterstützt.
Schnittstellen
Zur Ansteuerung des Menüs in der eigenen Applikation genügt es, die glcdmenu.h einzubinden. Es werden Funktionen zum Setzen und Lesen von Checkbox- und Radiobutton-Zuständen, zum Abfragen von Listen (aktuelle Auswahl, beliebiges Listenelement) und zum Setzen aller dynamischen Texte (auch Listeninhalte) bereitgestellt.
Diese Funktionen erwarten jeweils die ID des jeweiligen grafischen Elements, diese wird bei der Erstellung des Menus vergeben (siehe unten).
Für eine genaue Beschreibung der Funktionen siehe die Kommentare in glcdmenu.c.
Weiterhin lässt sich mittels
glcdmenuKeypress(unsigned char key_uc)
ein Tastendruck an die GUI weiterleiten, mit
glcdmenuMouseEvent(uint16_t xPos_ui16, uint16_t yPos_ui16, unsigned char button_uc)
ein Mausereignis (Klick, Mausbewegung, noch ungetestet) und mit
glcdmenuRedraw(void)
wird ein Neuzeichnen der Benutzeroberfläche ausgelöst.
Hooks
Mittels Hooks kann sich die eigene Applikation bei Menuereignissen (Button gedrückt, etc.) aufrufen lassen. Dazu ist es nötig, in der eigenen Applikation eine Handler-Funktion definieren:
void menu_hook_handler(uint8_t menuAction) {
debug_printf("hook: %d\n", menuAction);
/* Do something here */
}
Und in der Init-Funktion für den Hook zu registrieren:
int myApp_init() {
hook_menu_action_register(menu_hook_handler);
}
Einbindung eigener Menüs
Im Git-repository ist ein Beispiel-Menu enthalten, das zum Testen verwendet werden kann. Eigene Menus erstellt man mit dem MenuEditor (siehe unten).
Die MenuEditors generiert die Dateien menudata-progmem.c und menuinterpreter-config.h. Diese enthalten die Konfiguration des Menus und müssen nach /services/glcdmenu/menu-interpreter/ kopiert werden und ersetzen somit vorhandenen Dateien.
Der MenuEditor
Der MenuEditor ist das grafische Tool zum Zeichnen von Benutzeroberflächen. Das Tool ist zu finden unter /contrib/menuEditor. Aus Platzgründen (und wegen der Plattformunabhängigkeit) ist es im Quelltext abgelegt um muss zuerst übersetzt werden. Dazu ist Lazarus notwendig. Das Projekt in Lazarus öffnen und einmal compilieren, dann sollte es laufen.
--- Weitere Beschreibung folgt ----
TODO
- VNC Support
- Weitere Grafikcontroller unterstützen
- Maus-Funktion testen