Ich glaube eine Frage bezüglich dieses Codes war noch offen.
M2_STRLIST(el_bw, "l4w12", &el_bw_first, &el_bw_cnt, el_bw_getstr);
M2_SPACE(el_space, "w1h1");
M2_VSB(el_bw_vsb, "l4w1r1", &el_bw_first, &el_bw_cnt);
M2_LIST(list_bw) = { &el_bw, &el_space, &el_bw_vsb };
M2_HLIST(el_bw_hlist, NULL, list_bw);
Zunächste einmal: Es gibt
Listen und
Elemente.
Alles was "M2_LIST" heisst, sind Listen, alles andere sind Elemente.
Die ersten beiden Argumente der Elemente sind immer gleich:
1. Name des Elementes
2. Ein Format String
Über den Namen kann das Element später referenziert werden. Achtung: Elemente werden immer über &Name referenziert. (Bei Listen ist es nur der Name!)
Der Format String enthält zusätzliche Angaben in der Form "Buchstabe" + "Zahl"
Beispielsweise bedeutet
"w1": Breite (Width) von einem Zeichen
"l4": Anzahl der Zeilen (Lines) von 4
"r1": Read-Only
Die genaue Bedeutung steht jeweils bei der Elementbeschreibung
Hier nochmals die Beschreibung des STRLIST Elements:
http://code.google.com/p/m2tklib/wiki/elref#STRLISTDort steht beispielsweise, dass der "l" Parameter notwendig (required) ist. Man muss das also angeben. Klar, sonst weiss nämlich m2tklib nicht, wie viele Zeilen dargestellt werden sollen.
Der Format-String selbst, ist hier beschrieben:
http://code.google.com/p/m2tklib/wiki/elref#Element_Format_StringBetrachten wir nochmal kurz das Ergebnis:

Ganz rechts ist eine Spalte mit dem Scrollbalken. Das Ding heisst VSB (vertical scroll bar) und ist hier dokumentiert:
http://code.google.com/p/m2tklib/wiki/elref#VSBDie ersten beiden Parameter sind die üblichen:
M2_VSB(el_bw_vsb, "l4w1r1", &el_bw_first, &el_bw_cnt);
Er ist 4 Zeichen hoch ("l4") ein Zeichen breit ("w1") und soll nicht veränderbar durch den User sein ("r1").
Über die beiden folgenden Parameter drei und vier kommuniziert die VSB mit der STRLIST. Sozusagen ist die Scrollbar über diese beiden Variablen mit der Liste verknüpft und die VSB zeigt den passenden Ausschnitt am Display an.
Links neben der VSB befindet sich eine leere Spalte. Diese wurde mit M2_SPACE erzeugt. SPACE bekommt nur die bekannten zwei parameter. Wiederum definiert der Format-String "w1h1" die Größe des Leerraums.
Über "w1" ist also festgelegt, dass eine Spalte belegt ist.
Ganz links ist die STRLIST, die hier den größten Raum beansprucht. Auf meinem 16x4 Display sind das 14 Spalten.
M2_STRLIST(el_bw, "l4w12", &el_bw_first, &el_bw_cnt, el_bw_getstr);
Die Breitenangabe "w12" gibt übrigens die Netto-Breite an, also ohne den Platz für den Cursor (die eckigen Klammern). Die Breite der STRLIST ist also tatsächlich 12+2= 14 Spalten. An dritter und vierter Parameterstelle folgen wieder die beiden Variablen, über die die STRLIST mit der VSB kommuniziert (wenn denn eine VSB da ist. Wenn keine VSB da ist, braucht die STRLIST aber die Parameter trotzdem) Auch hier wird über & die Adresse der Variablen übergeben und nicht der Inhalt der Variablen. Als fünfter und letzter Parameter wird dann die Callback-Prozedur übergeben (siehe oben).
Jetzt müssen noch diese drei Elemente gelayoutet werden. Dazu bietet M2tk diverse Kontainer-Elemente an. Dies sind derzeit:
- XYLIST --> Manuelles Plazieren der Elemente per (x,y) Koordinate
- VLIST --> Automatisches Plazieren vertikal
- HLIST --> Automatisches Plazieren horizontal
- GRIDLIST --> Automatisches Plazieren als Matrix
Damit die Kontainer arbeiten können, muss ihnen eine Liste der Elemente übergeben werden. Das ist die angesprochene M2_LIST.
- M2_LIST klammert mehrere Elemente
- Die Reihenfolge der Elemente in der M2_LIST kann wichtig sein (für VLIST, HLIST und GRIDLIST)
- M2_LIST selbst ist KEIN Element.
Nochmal der Code:
M2_LIST(list_bw) = { &el_bw, &el_space, &el_bw_vsb };
M2_HLIST(el_bw_hlist, NULL, list_bw);
Die Liste bekommt einen Namen "list_bw". Die Elemente stehen (wie in C üblich) zwischen { und }. Die Elemente werden über den & Operator referenziert. Da später die HLIST verwendet wird, ist die Reihenfolge wichtig: Zuerst (ganz links) die STRLIST (el_bw), dann das SPACE und am Schluß die VSB.
Schließlich wird am Schluss das Kontainer-Element selbst definiert: Eine HLIST ordnet das ganze horizontal (von links nach rechts) an. Einen Format-String bekommt die HLIST nicht, deshalb wird NULL übergeben, was soviel heisst wie: "Es gibt keinen Format String". Als dritter Parameter muss die Liste angegeben werden: Achtung: KEIN & für die Listen.
So, das war mein Versuch Deine Fragen zu beantworten. Wer auch immer es bisher mit dem Lesen geschafft hat: Vielen Dank und viel Spass mit M2tklib
Oliver