INTERFACE - Die Schnittstelle zu GEM

Gute Bedienbarkeit ist für den Anwender eines Programms das A und O. Komplexe Programme ohne eine grafische Bedienungsoberfläche gehören heute in die Geschichtsbücher. Und so verwundert es nicht, daß immer mehr Zeit für die Entwicklung benutzerfreundlicher Oberflächen verbraucht wird. Interface ist ein Tool, das den Entwurf grafischer Elemente des GEM vereinfacht.

Doch eines gleich vorweg: Interface ist, obwohl der Name durchaus mehr erwarten ließe, ‘nur’ ein Resource Construction Set (RCS). Und doch ist es etwas anders. Geliefert wird es mit einem 90seitigen Handbuch auf einer Diskette.

Bedienung

Von einem Programm, das zur Entwicklung von Benutzeroberflächen angewandt wird, erwartet man selbstverständlich eine gute Bedienbarkeit. In diesem Punkt hat Interface einiges zu bieten; doch da es bereits einige RCS gibt, wird es sich mit eben diesen messen müssen.

Als allererstes fiel mir sehr angenehm auf, daß sich Interface an viele GEM-Konventionen hält. Dies verwundert nicht, denn es ist mit Routinen aus dem Buch ‘Vom Anfänger zum GEM-Profi’ entwickelt worden. Eine beispielhafte Aktion, die sich einige Entwickler anschauen sollten. So sieht das Desktop von Interface zum Beispiel Adimens oder Phönix sehr ähnlich (Bild 1) und motiviert zum sofortigen Arbeitsbeginn. Erschreckend fiel mir hier jedoch auf, daß die Standard-Menüeinträge ‘Cut’, ‘Copy’ und ‘Paste’ fehlen. Begründet wird dies durch das etwas andere Verhalten gegenüber, zum Beispiel, Texteditoren, bei denen immer eine Einfügposition vorhanden ist.

Neben der üblichen GEM-Funktionalität, bietet Interface stark erweiterte Dialogboxen, die vollständig über die Tastatur bedienbar sind. Es sind Clones der allseits geliebten FlyDials, so daß die Bedienung identisch ist. Zusätzlich sind auch die Edit-Felder verbessert worden: Es ist nun zum Beispiel möglich, den Text-Cursor mit der Maus an eine bestimmte Stelle im Text zu setzen.

Nach dem Erzeugen oder Laden einer Datei befindet man sich in einem Fenster, in dem alle vorhandenen Objektbäume zu sehen sind. Möchte man einen neuen Baum erzeugen, muß man zuerst den entsprechenden Menüeintrag und dann die gewünschte Baumart anwählen. Will man später einzelne Objekte erzeugen, muß man sich desselben Verfahrens bedienen. Dies empfand ich als lästig, denn zwei Klicks sind einer zuviel. Andere RCS hatten hier schon bessere Lösungen anzubieten. Es gibt fünf verschiedene Baumarten: Menüs, Dialoge, Alert-Boxen und freie Texte und Bilder. Man kann durch einen Doppelklick auf einen Baum in den entsprechenden Editor gelangen.

Der Menü-Editor ist um einiges intelligenter als die der Konkurrenz. So paßt er alle Titel und Einträge auf die entsprechende Größe an, wenn man zum Beispiel ihren Text in der Länge verändert. Einen neuen Titel erzeugt man, indem man einfach einen String auf die Menüleiste zieht.

Der Editor fügt diesen je nach der Mausposition automatisch ein. Ist man mit der Reihenfolge der Titel nicht zufrieden, kann man ihn durch Schieben an die passende Position versetzen, wobei alles weitere von Interface erledigt wird. Wenn man nun auf einen Titel klickt, klappt das Menü herunter und man kann mit den Einträgen genauso intelligent wie mit den Titeln umgehen.

Dadurch, daß alles automatisch geschieht, ist man allerdings gezwungen, Strings zu verwenden. Dies ist durchaus nicht zwingend, denn kleine Bilder in den Einträgen können, sparsam und konsistent angewandt, viele Worte sparen (siehe Macintosh). Das Handbuch verweist hier auf die Möglichkeit, den Menübaum in einen Dialog umzuwandeln, wo man alle Objekttypen verwenden kann. Dies ist jedoch nicht empfehlenswert, denn man kann so einfach die Struktur des Menüs zerstören. Außerdem ist der Umgang mit Menüs im Dialog-Editor kein Zuckerschlecken.

Im Dialog-Editor verbringt man die meiste Zeit seiner Arbeit, und so ärgert die schon oben beschriebene Tatsache, daß man zwei Klicks für ein neues Objekt verbraucht. Doch kann man durch umfassende Selektier- und Kopiermöglichkeiten diese Schwachstelle schnell ausbügeln. Mehrere Objekte kann man zum Beispiel wie üblich mit Shift-Klick anwählen oder mit Alternate und der Maus einen Bereich aufziehen, der dann alle enthaltenen Objekte selektiert. Klickt man ein Objekt nur einmal an, schießt ein Pop-up-Menü auf, das je nach Objektart mehr oder weniger viele Optionen anbietet. Diese haben jedoch immer die selbe Struktur: es gibt Funktionen zum Bearbeiten, zum Löschen und zum Konvertieren. Im Bereich Bearbeiten hat man die Möglichkeit, an alle Daten des Objekts heranzukommen. Über die Editierfunktion gelangt man in die RCS-übliche Riesendialogbox, die weiter unten noch genauer besprochen wird. Weiterhin gibt es Funktionen zum Zentrieren, Einpassen, pixelgenauen Plazieren und Verstecken. Interface denkt wie immer mit, denn erst wenn ein Objekt versteckt wird, kann die Funktion Aufdecken aktiviert werden. Auch beim Löschen hat man sich eine Finesse einfallen lassen: hat ein Objekt nämlich Kinder, kann man es entfernen, ohne diese mitzulöschen. Oft kommt es vor, daß man aus einem String ein Textobjekt machen möchte, da dieses mehr Optionen bietet. Selbstverständlich kann Interface auch das.

Alert-Boxen gestalten sich mit Interface besonders einfach. In einer Dialogbox kann man alle Informationen eintragen: die einzelnen Textzeilen, die Buttons und das Icon. Die Alert-Box wird dann automatisch auf die richtige Anzahl der Buttons oder Textzeilen angepaßt. Wichtig ist, daß man sofort danach das tatsächliche Ergebnis begutachten kann.

Neu hinzugekommene Funktionen, die man bisher vergeblich gesucht hat, sind zum Beispiel das globale Setzen der Flags und das Suchen eines bestimmten Objekts. Oft kommt es vor, daß man eine Menge ähnlicher Objekte kreiert hat und nun zum Beispiel alle selektierbar machen möchte. Normalerweise müßte man jedes einzelne Objekt anwählen und das entsprechende Flag selektieren. In Interface geht das alles viel schneller, indem man alle Objekte anwählt und über die Funktion ‘Flags setzen’ alle auf einmal verändert. Man möchte aber die bereits vorhandenen Flags nicht verändern, daher gibt es in der entsprechenden Dialogbox (Bild 4) sogenannte Tristate-Buttons: Ist der Button selektiert bzw. nicht, wird das Flag gesetzt bzw. gelöscht. Ist er jedoch gepunktet, wird der vorherige Zustand nicht verändert.

Bild 1: Der Interface-Desktop
Das Interface-Menü
Bild 2: Die Editorbox
Bild 3: Der Iconeditor
Bild 4: Globales setzen der Flags
Bild 5: Ausgabeformate

Die Editierbox

Traditionell enthält fast jedes RCS in der Geschichte (des Atari) eine supergroße Dialogbox, die alle Einstellungen auf einmal zur Verfügung stellt. Auch Interface macht hier keine Ausnahme (Bild 2). Auffallend ist, daß die Box trotz hohem Informationsgehalt sehr übersichtlich bleibt. Erreicht wurde dies vor allem durch günstige Verwendung der Pop-Up-Menüs. So hat man nicht alle Farben auf einmal auf dem Bildschirm, sondern erst nach der Betätigung des entsprechenden Buttons.

Jeder Objekttyp hat eine eigene Dialogbox. Diese unterscheiden sich manchmal jedoch kaum voneinander. Allen gemeinsam sind der Eintrag für den Namen und die Einstellungen der Flags und Stati. Die Boxen sind so intuitiv aufgebaut, daß man kaum das Handbuch zu Hilfe nehmen muß. Nur die Behandlung der Tedinfos geschieht ganz anders als bis jetzt. Es ist nur noch eine Maske anzugeben, was sehr praktisch ist und trotzdem Tedinfos voll ausnützt. Der Default-Text wird in die Maske selbst eingesetzt und zur Unterscheidung hell dargestellt (Bild 2).

Der Icon-Editor

Interface enthält einen sehr guten Icon-Editor (Bild 3). Er besitzt die wichtigsten Funktionen eines Malprogramms und viele weitere iconspezifische Optionen. So ist es zum Beispiel möglich, Punkte, Linien, Kreise und Polygone zu zeichnen oder Flächen zu füllen. Dabei hat man drei Farben zur Wahl: Vordergrund, Hintergrund und Maske. Und obwohl man die Farbe vor dem Zeichnen bestimmen muß, merkt es Interface, wenn man ein bereits gesetztes Pixel anklickt und löscht dieses dann. Wichtig ist auch, daß es für alle Funktionen eine Undo-Möglichkeit gibt. Doch damit ist es noch nicht getan. Interface bietet einige Funktionen, die man bei anderen RCS vergeblich suchen wird. So kann man den Inhalt des Bildes nicht nur hin- und herschieben, sondern ihn auch zentrieren. Diese Funktion, so hat sich gezeigt, ist sehr hilfreich beim Erstellen eines Icons. Man muß sich beim Zeichnen nicht mehr darum kümmern, wo innerhalb des Icons sich der eigentliche Bildinhalt befindet; man zeichnet einfach drauflos und zentriert dann das Icon. Die Maske war auch schon Grund vielen Kopfschüttelns, sehen die Icons mit vollständig gesetzter Maske doch etwas blaß aus. Meistens möchte man, daß das Bild sauber sichtbar ist, während an den Stellen, wo sich keine Flächen befinden, der Hintergrund zum Vorschein kommt. Mit Interface dauert es nur einen Klick lang, und schon ist alles erledigt.

Oft hat man nicht die Zeit, ein Bild von Grund auf neu zu zeichnen. Eventuell besitzt man vielleicht bereits Vorlagen. Man scannt sich zum Beispiel eine Zeichnung und möchte diese dann weiterverarbeiten. Die einzige Voraussetzung ist, daß sich das Bild im Standardformat (IMG) befindet. Man kann es nun in den Icon-Editor laden und von dort aus Blöcke mit der Größe des Icons ausschneiden. Das Bild wird intelligenterweise solange im Speicher gehalten, bis das nicht mehr erwünscht ist. Da die RCS von Digital Research keinen Icon-Editor enthielten, boten sie die Option an, diese aus einer Quelltextdatei (ICN) zu laden. Interface kann darüber hinaus Bilddaten auch in diesem Format speichern.

Erweiterungen

Die bis jetzt aufgezählten Features sind zwar vielfältig gegenüber alten RCS verbessert worden, bieten aber an sich nichts Neues. Eine echte Neuerung hingegen ist die Möglichkeit, eigene Typen bereits beim Editieren zu berücksichtigen. Gerade Fly-Dials zum Beispiel bieten zwar viele neue Funktionen an, bisher war es aber immer sehr schwierig, diese zu erstellen, denn das Ergebnis wurde erst in der Anwendung sichtbar. Interface erlaubt, daß, während man eine Dialogbox testet, über eine Schnittstelle die Funktionen zur Behandlung eigendefinierter Objekte eingebunden werden. So kann man schon beim Erstellen das Ergebnis begutachten und es gegebenenfalls verbessern.

Anpassung

Was ich schon lange vermißt habe, ist die Möglichkeit, die Benutzeroberfläche eines Programms an eigene Bedürfnisse anzupassen. Mit Interface wird nicht nur die zugehörige Resource-Datei mitgeliefert, sondern auch die Definitionsdatei. Damit ist es möglich, Interface mit sich selbst zu modifizieren. Dies ist sehr praktisch, da man damit alle Tastencodes ändern kann. Und da Interface das Ausgabeformat der Header-Datei in String-Bäumen speichert, kann man sich auch dieses an seine eigene Form und Sprache anpassen.

Das Interface

Selbst wenn auf viele Wünsche Rücksicht genommen wurde, ist es doch unmöglich, absolut alles in ein Programm zu integrieren. Es gibt einfach zu verschiedene Bedürfnisse. Daher stellt der Programmierer des Interfaces alle Datenstrukturen und Fensterfunktionen über ein Protokoll dem Benutzer zur Verfügung. In der Praxis geht man so vor: man schreibt sich ein Accessory (dieses könnte auch kommerziell vertrieben werden), das über die GEM-Pipeline mit Interface kommunizieren kann. Nun könnte das Accessory, falls es aufgerufen würde, zum Beispiel umfangreiche Such- oder Umbenennungsaktionen in der Resource-Datei durchführen, die sich gerade an der obersten Stelle in der Fensterhierarchie befänden. So könnte man beispielsweise Probleme einiger ausländischer Entwickler eliminieren, indem man mehrsprachige Resource-Dateien erlaubt. Die Möglichkeiten dieser offenen Programmstruktur sind nur durch den Erfindungsgeist des Anwenders begrenzt.

MyDials

Wie gesagt, verwendet Interface FlyDials-ähnliche Dialogboxen. Diese nennen sich MyDials und verleihen ihre Fähigkeiten nicht nur Interface, sondern können mit Hilfe der mitgelieferten Bibliothek in eigene Turbo/Pure-C-Programme eingebunden werden. Dies ist sehr begrüßenswert, weil damit nicht nur der Entwicklungsaufwand für eigene, ähnliche Objekte entfällt, sondern auch der Vielfalt Halt geboten wird: Es ist einfach frustrierend, wenn sich nahezu gleiche Objekte total unterschiedlich verhalten.

Die erweiterten Fähigkeiten sind zum Beispiel von Mac und Windows entliehene Radio- und Checkbuttons. Alle Buttons können, indem man einen Kontrollbuchstaben angibt, über die Tastatur angesteuert werden. Ein weiterer Objekttyp ist die Überschrift, die unterstrichen ausgegeben wird. Auch wird die Anwendung der Pop-Up-Menüs unterstützt, wobei der wunderschöne Cyclebutton die einzelnen Einträge durchwählt.

Das Handbuch

Das mitgelieferte Handbuch bestätigt den guten Eindruck von Interface. Es ist zwar nicht für absolute Einsteiger in Sachen GEM gedacht, geht aber nicht von extrem hohem Wissensstand des Lesers aus. Von einem reinen Benutzerhandbuch unterscheidet es sich vor allem dadurch, daß es Informationen über die innere Datenstruktur von Interface angibt. Es werden die wichtigsten Variablen und der Zugriff auf sie über die Accessory-Pipeline erklärt, ebenso wie ein Beispiel für eigendefinierbare Objekte angegeben wird.

Fazit

Bis heute hatte jeder Programmierer mindestens zwei RCS zu Hause stehen. Es gab einfach kein absolut bestes Programm. Auch Interface weist einige kleine Macken bei der Bedienung auf, ist aber meiner Meinung nach das beste RCS auf dem Markt. Viele neue ergonomische Funktionen und ein großer Lieferumfang samt gutem Service von Shift sind sicher DM 99,- wert. Doch die Zeit der Resource Construction Sets geht langsam aber sicher zu Ende. Man darf gespannt sein, ob es eine neue Version von Interface, die mehr an den Interface Builder auf dem NeXT erinnert, geben wird.

Bezugsadresse:
Shift
Unterer Lautrupweg 8
W-2390 Flensburg


Grischa Ekart
Aus: ST-Computer 11 / 1991, Seite 34

Links

Copyright-Bestimmungen: siehe Über diese Seite