Es gibt zwar schon einige Threads zum Thema Menüstruktur, z.B.
Beitrag "Programmieren einer Menüstruktur in C" oder der Rat, mal in die
Quellen vom AVR Butterfly zu schauen
(http://ww1.microchip.com/downloads/en/DeviceDoc/AVRButterfly_application_rev07.zip).
Ich suche aber einen Ansatz, um die Struktur des Menüs flexibel zu
gestalten, d.h. optionale Einträge/Elemente in Abhängigkeit von
(Software-)Modulen zu haben.
Beispiel:
1 | Funktionen
|
2 | Einstellungen
|
3 | Display
|
4 | Kontrast
|
5 | Helligkeit
|
6 | Anzeigedauer
|
7 | [
|
8 | Audio
|
9 | Ein
|
10 | Frequenz
|
11 | Lautstärke
|
12 | ]
|
13 | LetzteEinstellung
|
14 | LetzterMenüEintrag
|
D.h. möglichst getrennt vom Hauptprogramm (und möglichst ohne #ifdefs),
soll im optionalen Modul "Audio" das Menü erweitert werden (vor
LetzteEinstellung, d.h. Einfügen).
Geht sowas irgendwie statisch (und constant)? Mir fällt nichts ein, denn
es müssten Indizes für die Menüeinträge bzw. die Verkettung vom
Präprozessor beeinflusst werden.
Oder muss die Struktur dafür dynamisch initialisiert und ggf. verändert
werden, also etwas wie
1 | Menu_init();
|
2 |
|
3 | // und im Modul dann etwa
|
4 |
|
5 | Menu_append(AUDIO, SETTINGS);
|
Der Nachteil ist dann wohl, dass nicht mehr alle structs "auf einen
Schlag" initialisiert werden können, und es stattdessen einige
Funktionsaufrufe geben muss, obwohl alle Daten eigentlich const sein
könnten.
Oder kann man Variablen irgendwie re-initialisieren, um z.B. einen
next-Zeiger in der "Display"-Menüeintrags-Struktur auf AUDIO
"umzuhängen" (und den in AUDIO auf LetzteEinstellung?