So, die versprochene Dokumentation über die XML-Tags. Spielt mit dem Zeugs rum, wenn etwas nicht funktioniert sagt es mir. Über Bugreporte freue ich mich in der Tat.
Welche XML-Tags versteht das MGK?
Eine Einführung zu XML generell spare ich mir, sie würde auch sicherlich den Rahmen sprengen. Wer mit XML nichts anfangen kann soll Google oder Wikipedia befragen.
Ich gebe hier mal eine kurze Beispieldatei:
Wir erstellen hier zuerst eine GUI, die wir "TestGUI" nennen. Innerhalb dieser GUI wird ein Widget vom Typ "Window" erstellt und innerhalb dieses Widget dann wiederrum ein anderes Widget vom Typ Button. Dieses Button-Widget erhält dann noch ein Outlet namens "OnClick", dies ist das Outlet, das ausgeführt wird wenn jemand auf den Button klickt.
Anbei eine Auflistung aller XML-Tags die das MGK versteht:
<gui> Elterntag: Keiner Untertags: <name>, <widget>
Der gui-Tag ist der Wurzel- oder Roottag der XML-Datei. Streng genommen ist es eigentlich egal welchen Tag man als Roottag verwendet, aber in späteren Versionen wird das MGK eventuell nur XML-Dateien als GUI lesen, die auch mit <gui> beginnen.
<widget> Elterntag: <gui> oder <widget> Untertags: <name>, <widget>, <type>, <outlet> (Weitere je nach typ)
Der Widget-Tag beschreibt ein Widget. Der Widget-Tag muss entweder unterhalb des gui-Tag oder unterhalb eines anderen Widget-Tags definiert sein, je nachdem ob das Widget an oberster Stelle der Hierarchie stehen soll, oder zu einem anderen Widget gehören soll.
<outlet> Elterntag: <widget> Untertags: <name>, <text>
Der Outlettag erzeugt ein Outlet für das zugehörige Widgetobjekt.
<name> Elterntag: <gui>, <widget> oder <outlet> Untertags: Keine
Der Nametag gibt der GUI, dem Widget oder dem Outlet einen eindeutigen Namen. Innerhalb einer GUI oder eines Widget kann es jeden Namen nur einmal geben. Es findet keine Überprüfung statt, wird ein Name doppelt verwendet wird das ältere Objekt dieses Namens mit dem neueren überschrieben.
<type> Elterntag: <widget> Untertags: Keine
Gibt den Typ des Widget an. Mögliche Werte sind:
Window/Windows, Label, Button, Text, Icon
<x> <y> <z> <width> <height> Elterntag: <widget> Untertags: Keine
Alle bisherigen Widgets nehmen einen rechteckigen Raum auf dem Screen ein. Mit diesen Tags wird die Position sowie Größe des Widgets bestimmt. Die X- und Y-Werte sind dabei relativ zum jeweiligen Bezugssystems, das entweder das direkt übergeordnete Widget ist, oder der Screen, sofern das Widget direkt unterhalb der GUI steht. Die Z-Werte sollten optimalerweise bei 800 beginnen und steigen wenn das Widget eine Ebene tiefer erstellt wurde.
<caption> Elterntag: <widget> Untertags: Keine
Dieser Tag funktioniert für Label- und Button-Widgets und gibt den String an, der auf diesen Widgets angezeigt wird. Wird dieser Tag weggelassen zeigen die Widgets ihre Namen an.
<text> Elterntag: <outlet> oder <widget> Untertags: Keine
Ist dieser Tag unter einem outlet-Tag aufgeführt so enthält der den Ruby-Code der bei Aufruf des Outlets ausgeführt wird.
Ist der Elterntag ein Widget-Tag vom Typ Text, so wird innerhalb dieses Tags der Text bestimmt, den das Textwidget zu Beginn anzeigen soll. Sollte der Text mit einem Zeilenumbruch beginnen wird dieser entfernt, ansonsten wird der Text nur an expliziten Zeilenumbrüchen umgebrochen.
<colorRed> <colorBlue> <colorGreen> Elterntag: <widget> Untertags: Keine
Mit diesen drei Tags können die Farbwerte für die Schriftfarbe des Widgets festgelegt werden. Bisher reagieren nur Label- und Buttonwidgets auf diese Tags. Werden diese Tags weggelassen wird in der Standardfarbe geschrieben (Weiß).
<fontName> Elterntag: <widget> Untertags: Keine
Ändert bei Label- und Buttonwidgets die Schriftart.
<fontSize> Elterntag: <widget> Untertags: Keine
Ändert bei Label- und Buttonwidgets die Schriftgröße.
<showBorder> Elterntag: <widget> Untertags: Keine
Mögliche Werte sind "true", "false" oder eine Zahl (0 für false, alles andere für true). Bestimmt ob das Label-, Button- oder Textwidget von einem dünnen weißen Rand umgeben sein soll.
<file> Elterntag: <widget> Untertags: Keine
Gibt bei einem Icon-Widget den Dateinamen des verwendeten Bildes an. Das Bild muss dabei als "Icon" importiert worden sein.
#{datei}
Mit diesem "Tag" kann der Inhalt einer anderen Datei in die XML-Datei eingefügt werden bevor diese in eine GUI umgewandelt wird.
Das sind bisher alle verstandenen Tags. Zu sagen ist nur, daß der text-Tag bei outlets demnächst durch einen "code"-Tag ersetzt wird. Die bisherigen Tags für Schriftformatierungen sind auch nur temporär eingebaut. Ich plane ein Formatierungssystem mit externen Dateien und ids ähnlich wie CSS mit HTML funktioniert.