AMIGA-Magazin · Ausgabe 3/08 · Kurs: Reaction-Gadgets im Überblick (Teil 1)

Aktuelles Heft 3/08

Der GUI-Baukasten

Mit "AmigaOS 4" werden eine große Anzahl von verschiedenen Gadget-Typen mitgeliefert. Wir wollen in dieser Kursreihe die einzelnen Gadgets genauer ansehen, deren Einsatzzweck und die Tags zur Steuerung vorstellen. Der Kurs richtet sich darum vornehmlich an die Entwickler.

von Michael Christoph

Die Bezeichnung Reaction steht für die Bezeichnung "A resource construction toolkit for BOOPSI". Diese Gadgets sind eine konsequente Weiterentwicklung der von Commodore mit dem Betriebssystem 2.0 eingeführten BOOPSI-Gadgets ("Basic Object-Oriented Programming System for Intuition"). Obwohl viele vom Aussehen und Verhalten her mit den ebenfalls bei "AmigaOS 2.0" eingeführten Gadtools-Gadgets identisch sind, besteht kein direkter Zusammenhang.

Die Reaction-Gadgets haben vor allem den Vorteil, dass sie sich selbst layouten. Das bedeutet, man muss als Entwickler nicht mehr die Position und Größe der einzelnen Knöpfe und Buttons selber festlegen, sondern nur noch so genannte Layoutgruppen definieren, innerhalb derer die einzelnen Gadgets automatisch positioniert werden und den vorhandenen Platz ausfüllen. Auch bei der Änderung der Fenstergröße erfolgt diese Anpassung völlig selbstständig, ohne dass eine Zeile Programmcode dafür nötig wäre. Die Reaction-Gadgets sind eher vergleichbar mit dem MUI-System (Magic User Interface), welches aber den Nachteil hat, dass es lediglich ein "AddOn" ist. Darin sind viele Gadget-Typen nicht direkt im Standard vorhanden, sondern müssen auf verschiedenen Webseiten zusammengesucht werden. Zumindest vom Aussehen wurden die MUI-Grund- Gadgets so weit dem "AmigaOS 4"-Schema angepasst, dass der Anwender nicht sofort den Unterschied sieht. Somit ergibt sich zumindest vom Aussehen her ein einheitlicheres Bild auf der Workbench.

Entwicklungsgeschichte
Wer sich noch an die Zeiten von "Kickstart 1.x" erinnern kann, weiß, dass damals die Gadgets noch als Strukturen existierten, die vollständig ausgefüllt und verkettet werden mussten. Fonts existierten nur wenige - ebenso die Auflösungen. Die Größe konnte somit fix vorgegeben werden. Mit "Kickstart 2.x" wurde dann das GadTools-System eingeführt. Hiermit ließen sich die Gadgets viel einfacher anlegen. Dazu wurde bereits das Tag-System benutzt, sodass mit wenig Zeilen die einzelnen Gadgets erstellt werden konnten. Auch der Grundstein von BOOPSI wurde damals bereits gelegt. Erst mit der "Workbench 3.5" wurde das ReAction-GUI-System eingeführt, das auf BOOPSI aufsetzt und GUIs ermöglicht, die sich selbst layouten und fontsensitiv sind.

Mit diesem Kursteil wird nur das Layout-Gadget benutzt, weil es Grundlage einer jeden GUI ist. Die genaue Beschreibung dazu erfolgt allerdings erst später im Kurs. Auch auf das Erstellen eines Fensters wird diesmal eingegangen, damit die Gadgets auch im praktischen Einsatz zu sehen sind. Diese Kursreihe soll auch zum Experimentieren mit den unterschiedlichen Tags dienen, um deren Verhalten in kleinen Beispielprogrammen leichter zu erkennen und um so später die einzelnen Gadgets zielgerichtet in den verschiedenen Anwendungen einsetzen zu können.

Im Lieferumfang von "AmigaOS 3.5" gab es "ReActor", ein Programm zum einfachen Erstellen der Benutzeroberflächen mit der Maus. Die damit erstellte Resource-Datei wurde im eigenen Programmcode nur noch geladen. Eine endgültige Version des Programms existiert bis heute noch nicht. Eine Alternative sollte der "AVD GuiBilder" von Jamie Krueger sein. Deren Zukunft ist allerdings auch ungewiss. Die beste Kontrolle hat man aber immer noch, wenn man alle Elemente manuell erstellt und ausprogrammiert, wobei die Programmierung mittels Reaction-Gadgets sehr einfach und mit wenig Codezeilen möglich ist.

In der Praxis
Kursübersicht
Teil 1: Einführung und Grundgerüst
Teil 2: Gadget-Grundtypen (z.B. Button, String, Integer, Sliders und Scrollbars)
Teil 3: Auswahllisten erstellen (u.a. Chooser, Pop-up, Checkbox, Radiobutton und Scrollbars)
Teil 4: ASL-Auswahl-Requester (getFile, getFont, get-Screenmode, getColor)
Teil 5: Sonstige Gadget-Typen (Fullauge, Dateibrowser, Testeditor, Colorwheel, Gradient-Slider)
Teil 6: Seitengestaltung (Layout, Page, Clickbar)
Teil 7: Images (Label, BitMap, Glyph)
Teil 8: "All Reaction Gadgets"
Ziel dieses ersten Kursteiles soll ein leeres Fenster sein, das in den zukünftigen Teilen als Grundlage zum Einbinden der verschiedenen Gadget-Typen dienen wird. Das Programm ist ohne Funktionen, wird aber voll funktionsfähig sein. Deshalb wird auch die komplette Message-Verarbeitung bereits in diesem Teil behandelt. Das Fenster wird auf die gleiche Weise wie die Gadgets erstellt. Dies erfolgt mit der Funktion NewObject() aus der intuition.library. Damit wurde das Fenster allerdings erst im Speicher angelegt. Damit es auch sichtbar ist, wird RA_OpenWindow() aufgerufen. Das Gegenstück zum Verstecken lautet RA_CloseWindow(). Die Speicherstrukturen gibt DisposeObject() frei. Der Programmcode setzt sich aus drei Teilen (Funktionsblöcken) zusammen: dem Erstellen der Objekte (CreateAll), der Nachrichtenschleife (MsgLoop) und dem Aufräumen (DestroyAll). Die main-Funktion beschränkt sich daher auf den Aufruf dieser drei Funktionen (s. Listing 1).

Alle drei Funktionen sind kommentiert und einfach zu verstehen. Auf eine genaue Vorstellung der einzelnen Funktionen wird daher verzichtet. Interessierte finden Erklärungen in den Autodocs zu Intuition und den einzelnen Gadgets.

Auf das Öffnen der benötigten Libraries kann man getrost verzichten und diese Aufgabe dem Code von "AutoInit" überlassen. Hierzu fügen Sie lediglich beim Linken die entsprechende Bibliothek mit -l auto hinzu. Aber auch in den Folgeteilen öffnen Sie die einzelnen Gadgets nicht extra. Diese Aufgabe übernimmt die Anweisung:

-l ra auto

Dabei steht ra in der Option für ReAction. Dadurch sparen Sie sich viel Code bei der GUI-Gestaltung. Im nächsten Kursteil beschäftigen wir uns mit den Gadget-Grundtypen, die es bereits seit der ersten Version von AmigaOS gibt. Diese Typen sind zwar identisch mit denen der aktuellen OS-Version, die Erstellung der Gadgets und deren Aussehen ist aber deutlich anders.

Das vollständige Listing und die ausführbare Datei des Beispiels befindet sich in beispiel.zip.

lb

Erster Schritt:
Das Resultat des ersten Beispiels ist wenig spektakulär ein einfaches Fenster.


Hauptseite © 2008 All Rights Reserved. Alle Rechte vorbehalten Franzis' Verlag GmbH
Veröffentlichung und Vervielfältigung nur mit schriftlicher Genehmigung des Verlags

Kommentare, Fragen, Korrekturen und Kritik bitte an Webmaster AMIGA schicken.
Zuletzt aktualisiert am 30.4. 2008.