Haben Sie schon 'mal versucht, eine Graphikapplikation von einem Fenstersystem auf ein anderes zu portieren? War viel Arbeit, oder? Der Portierungsaufwand von Applikationen, die mit Open Interface von Neuron Data entwickelt worden sind, beschränkt sich auf Übersetzen und Binden. Unterstützt werden die Fenstersysteme Motif, OPEN LOOK, Macintosh, Microsoft Windows und Presentation Manager.
Open Interface besteht aus einer WYSIWYG-Oberflächen-Entwicklungsumgebung, openedit und Plattform spezifischen Laufzeitbibliotheken. Durch point and click Operationen wird mit openedit die Applikation aus Ressourcen wie menu bar, radio button oder check button zusammengestellt. openedit generiert aus der graphisch erstellten Information
Die hervorstechendste Eigenschaft der mit Open Interface entwickelten Applikationen ist die einfache Portierbarkeit auf andere Fenster- bzw. Betriebssysteme. Erreicht wird dies durch Einführung eines virtuellen Fenstersystems (Virtual Graphics Machine). VGM stellt einerseits die graphic primitive Funktionen zur Verfügung, mit denen Linien gezeichnet, Text ausgegeben oder Farben eingestellt werden können, andererseits werden die Events des Basisfenstersystems auf ein einheitliches Format gebracht und können dann auf der Applikationsseite ausgewertet werden. Das look and feel der Applikation, sprich der verwendeten Ressourcen, wird im Open Interface eigenen Toolkit festgelegt. Die verwendbaren Ressourcen können vom Nutzer jederzeit erweitert werden.
Abbildung 1: Die Architektur von Open Interface.
Abbildung 1 zeigt die Architektur von Open Interface.
Einem Entwickler steht nicht die Vereinigungsmenge der Funktionalität der unterstützten Fenstersysteme zur Verfügung, sondern nur die von der VGM bereitgestellte. So wird z.B. ein X-Entwickler in aller Regel keine Applikation entwerfen, ohne den Einsatz des X Ressource Managements zu berücksichtigen. Unter Open Interface gibt es keine derartige Technik.
Es gibt die Möglichkeit, direkt auf die Funktionalität des Basisfenstersystems zuzugreifen. Darauf sollte man allerdings nur in Ausnahmefällen zurückgreifen, da der Portierungsaufwand dann doch drastisch ansteigt.
openedit ist ein interaktiver WYSIWYG-Editor, mit dem die Oberfläche einer Applikation erstellt wird. Als Ausgangspunkt stehen komplexe Ressourcen wie z.B. Fenster, Menues und widgets sowie einfache Ressourcen (Farben, Cursor und Schriften) zur Verfügung. Aus diesen Objekten wird mittels point and click die Applikation erstellt. Um das Aussehen der vier Klassen von Ressourcetypen festzulegen, gibt es entsprechende, auf das Problem zugeschnittene Editoren.
Abbildung 2: Ein Taschenrechner wird mit openedit entwickelt.
In Abbildung 2 ist openedit in Aktion zu sehen. In dem oberen linken Fenster ist die Hierarchie der Fenster zu sehen, das schmale Fenster links enthält einen Teil der benutzbaren widgets, der Taschenrechner im rechten unteren Fenster wird gerade entwickelt.
Abbildung 3: Ein push button wird zurecht gemacht.
Abbildung 3 zeigt den Editor, mit dem die Eigenschaften eines push buttons eingestellt werden.
Das Verhalten der Applikation, das von den verwendeten Ressourcen abhängt, kann direkt während der Entwicklung getestet werden.
openedit generiert eine Datei, in der für jedes widget eine Funktion definiert ist, die bei Eintreffen des entsprechenden Events aktiviert wird. Um die gewünschte Funktionalität der Applikation zu bekommen, muß diese Datei in aller Regel vom Entwickler modifiziert werden.
...
static void C_FAR Hp_lookANDfeelNfy L2(TButPtr, tbut, TButNfyEnum, code)
{ static int look_and_feel = DSPLY_LOOKMOTIF;
ERR_TRACEIN;
if (code != TBUT_NFYHIT) { TBUT_DefNfy(tbut, code); ERR_TRACEOUT; }
switch (look_and_feel) { /* von hier bis */
case LOOKMOTIF: DSPLY_SetLook(DSPLY_LOOKOPENLOOK);
look_and_feel = LOOKOPENLOOK;
TBUT_SetLabel(tbut, "OpenLook"); break;
case LOOKOPENLOOK: DSPLY_SetLook(DSPLY_LOOKMSW);
look_and_feel = LOOKPM;
TBUT_SetLabel(tbut, "Msw"); break;
case LOOKPM: DSPLY_SetLook(DSPLY_LOOKPM);
look_and_feel = LOOKMSW;
TBUT_SetLabel(tbut, "PM"); break;
case LOOKMSW: DSPLY_SetLook(DSPLY_LOOKMAC);
look_and_feel = LOOKMAC;
TBUT_SetLabel(tbut, "Mac"); break;
case LOOKMAC: DSPLY_SetLook(DSPLY_LOOKMOTIF);
look_and_feel = LOOKMOTIF;
TBUT_SetLabel(tbut, "Motif"); break;
} /* hier wurde der C-Text */
ERR_TRACEOUT; /* von Hand implementiert*/
}
...
Abbildung 4: Ausschnitt aus einer Ressource Datei
Abbildung 4 zeigt eine Notification-Procedure, die das look and feel der Applikation verändert. Der von Hand ergänzte C-Text ist gekennzeichnet. Da diese Datei jedesmal neu generiert werden muß, wenn sich die Anzahl widgets ändert, ist man gut beraten, die entsprechenden Änderungen erst nach Fertigstellung des Layouts der Applikation zu machen. Es existiert leider kein Mechanismus, der den Inhalt einer existenten mit dem der zu generierenden Datei geeignet mischt.
Die logisch vorhandene Trennung zwischen Layout und Funktionalität wird in Open Interface auf Dateiebene konsequent fortgeführt. In den Ressourcedateien, die im ASCII-Format vorliegen, werden alle graphischen Attribute wie Farbe, Position, Größenangaben usw. abgelegt. Da sich in dieser Datei auch alle string-Ressourcen befinden, können diese mit einem Editor verändert werden. Somit ist es ganz leicht, einer englisch sprachigen Oberfläche ohne Neuübersetzung Deutsch beizubringen. Die Texte, die von lokal entwickelten Funktionen in die Applikation geschrieben werden, müssen natürlich mit entsprechenden Techniken modifiziert werden.
...
(TBut.Compile
Name: "Hp.Hp.one"
Label: "1"
FgColor: "TBut.DefFgColor"
BgColor: "TBut.DefBgColor"
Font: "TBut.DefFont"
Pen: "Wgt.DefPen"
Pattern: "Patt.Empty"
Cursor: "Curs.DefArrow"
X: 10
Y: 155
W: 39
H: 27
)
...
Abbildung 5: Ausschnitt aus einer Ressource Datei
Abbildung 5 zeigt einen Ausschnitt aus einer Ressource Datei.
Die Portierung einer Applikation auf ein anderes Fenster- bzw. Betriebssystem ist eine leichte Fingerübung. Die zu der Applikation gehörenden C-Quelldateien werden auf die Zielplattform gebracht, übersetzt und mit den entsprechenenden Laufzeitbibliotheken gebunden. Die environment Variable OIT_LOOK wird ensprechend initialisiert und die Ressourcedatei mit rescomp übersetzt -- das wars.
Die mitgelieferte Dokumentation besteht aus dem User's Guide (ca. 120 Seiten) und einem Reference Manual (ca. 800 Seiten). Die Qualität des Reference Manual ist, was Aufbau und Ausführlichkeit betrifft, gut, aber leider haben sich einige Fehler eingeschlichen. So wird z.B. in der Deklaration der Funktion DRAW_Line der Typ PointPtr verwendet, dieser wird aber nicht deklariert. Der Blick in die entsprechenden Include-Dateien hilft aber rasch weiter, da diese sehr ausführlich kommentiert sind.
Eine gut dokumentierte Applikation hilft sehr nachhaltig, die Einarbeitungszeit zu verkürzen.
Mit Open Interface lassen sich effizient zwischen den verschiedenen Fenster- bzw. Betriebssystemen portable Applikationen entwickeln. Die zur Verfügung gestellten Werkzeuge sind vernünftig und relativ schnell zu erlernen. Nur ist das Resultat keine Motif- oder MS-Windows Applikation, die sich demzufolge auch nicht ganz exakt an die spezifischen Spielregeln hält, sondern eine Applikation, die so aussieht als ob. Betrachtet man Open Interface-Applikationen unter Motif, offenbaren sich diese Schwächen ganz klar. Das X Ressource Management wird ebensowenig unterstützt wie die Idee der Compound-Strings. Somit können mit diesem Werkzeug keine Applikationen entwickelt werden, die die komplette von Motif bereitgestellte Funktionalität nutzen können. Die von den verschiedenen Fenstersystemen angebotene Funktionalität läßt sich i.a.R. nicht nutzen.
Open Interface wird von der Firma NEXUS Gesellschaft für wissensverarbeitende Systeme mbH vertrieben, die uns freundlicherweise ein Testsystem zur Verfügung gestellt hat. Das System wurde auf einer SPARCstation unter X11, R5 getestet.