Open Source im professionellen Einsatz
Linux-Magazin 12/2001
1020

Fenster und Files

Das erste fungiert als Steuerkonsole. Hier kann man das aktuelle Projekt sichern oder ein vor-handenes laden, aber auch die beiden anderen Werk- zeug-Fenster öffnen oder Projektoptionen ändern. Vom GUI-Designer erstellte Hauptcon- tainer, etwa Fenster oder Dialoge für die Farb-, Datei- oder Schriftauswahl, sind in Listenform unter der Knopfleiste anzeigbar. Klickt man deren Elemente zweimal an, öffnet sich das entsprechende Dialogfenster und lässt sich bearbeiten.

Aus dem Reiter »C Optionen« im Menüpunkt »Datei | Projekt Optionen« (Abbildung 2) ist ersichtlich, dass Glade vier Code-Dateien ablegt:

  • In »main.c« steht der Aufruf des Hauptfensters der Applikation.
  • »interface.c« enthält die Implementation des GUIs.
  • »callbacks.c« ist ein Skelett mit Definitionen aller Funktionen, die von Signalen gestartet und beim Anlegen des User-Interface unter Verwendung des Eigenschaftsfensters angelegt wurden. Den Inhalt dieser Funktionen muss man selbst schreiben.
  • »support.c« enthält ein paar Funktionen, die beispielsweise die Verbindung zwischen den vom Anwender geschriebenen Callback-Funktionen und den Objekten und Variablen der Interface-Datei vereinfachen.

Die Namen dieser vier Dateien können nach Gusto geändert werden, ihre Funktionalität bleibt dabei unberührt. Andere Quell- und Header-Dateien oder Bibliotheken werden (allerdings per Hand) in die Datei »Makefile.am« an den entsprechenden Stellen eingefügt.

Das Palettenfenster zeigt die Widgets, aus denen das Benutzer-Interface aufgebaut wird, aufgeteilt in zwei Kategorien: »GTK+ Basic« und »GTK+ Additional«. Falls Gnome-Unterstützung verfügbar ist, gibt es noch eine dritte: »Gnome«. Klickt man das Window-Icon in der oberen linken Ecke des Palettenfensters an, zeichnet Glade ein neues Fenster, in das man andere Widgets von der Palette hinzufügen kann.

Das Eigenschaftsfenster (Abbildung 3) ist ein kontextsensitiver Dialog, der jeweils den Namen und die aktuellen Eigenschaften des angeklickten Widgets anzeigt. Unter der Rubrik »Signale« können Handler-Funktionen an die verschiedenen Ereignissen des aktuellen Widgets gebunden werden.

Es gibt zwei Ansätze, mit Glade erzeugte GUIs in Programme einzubauen: Beim klassischen konstruiert man mit Glade das Interface, schreibt die Callback-Funktionen und kompiliert alles zusammen. Alternativ lässt sich das Interface mit »libglade« auch erst zur Laufzeit aus der GUI-Beschreibung bauen.

Beide Varianten haben Vor- und Nachteile: Verwendet man die »libglade«-Methode, braucht man das ausführbare Programm nicht neu übersetzen zu lassen, wenn sich das GUI ändert. Das Programm baut es on the fly, indem es über »libglade« die von Glade gespeicherte XML-Datei liest und die entsprechenden Widgets lokalisiert.

Dreimal "muss" zeigt die Nachteile des Verfahrens: Das neu generierte Interface muss alle Variablen enthalten, auf die das Programm zugreift, die XML-Datei mit der Interface-Beschreibung muss immer erreichbar sein, zudem muss die »libglade« auf dem ausführenden Rechner vorhanden sein, was die Portabilität des Programms (zurzeit) reduziert.

Bei der klassischen Methode dagegen gilt es, das Binary bei jeder Interface-Änderung neu zu kompilieren. Andererseits kommt es ohne zusätzliche Ressourcendateien (mit Ausnahme der üblichen Bibliotheken) aus.

 

Glade für alle

Glade liegt sowohl als Quelltext als auch als Binärdatei in unterschiedlichen Formaten vor: als Red-Hat-RPM (Source oder Binary), Debian-DEB-, Slackware- oder NetBSD-Paket und auch als Quelltext-Tar-Datei, die übrigens über eine kleine FAQ und einiges an Dokumentation verfügt (nach dem Auspacken des Tar-Balls im Verzeichnis »glade-0.5.11/doc/« zu finden). Besonders gepflegt ist der Baum von Kompilaten für die NetBSD-Plattform.

Um Glade erfolgreich zu übersetzen, benötigt man GTK+ in der Version 1.2.0 (oder höher). Diese Bibliothek besteht aus einer Sammlung von Objekten (so genannten Widgets), etwa Fenster, Knöpfe, Menüs. GTK+ seinerseits braucht die Glib-Bibliothek, die Funktionalität wie verkettete Listen, Bäume, Routinen zur Fehlerbehandlung und dynamische Speicher-Allokation bereitstellt und aus diesem Grunde zuerst installiert werden muss. Beide Bibliotheken sind bereits in allen aktuellen Linux-Distributionen vorhanden und ansonsten im Internet unter[6] zu finden.

Die Installation von Glade aus einer Tar-Datei erfolgt mit den üblichen Befehlen: »./configure« (beziehungsweise »./configure --prefix= Applikationsverzeichnis«), »make« und »make install«.

Windows-Benutzer stehen auch nicht im Regen: Sowohl Glade als auch die notwendigen GTK+-Bibliotheken stehen für Redmonder Betriebssysteme zum Download unter[7] beziehungsweise[8] bereit.

Voraussetzung für die automatische Erstellung von C-Code ist die Präsenz eines lauffähigen »autoconf« in der Version 2.13 und »automake« in der Version 1.4. Falls dazu noch Gnome-Support erwünscht ist, ist eine aktuelle Version (neuer als 1.0.50) der Gnome-Bibliotheken ein Muss.

Damit hat Glade weitere Widgets zur Verfügung. Doch schafft diese Erweiterung zurzeit Hindernisse bei der Portabilität des Programms auf andere Plattformen, da nur GTK+-Portierungen für fast alle gängigen Betriebssysteme vorliegen, nicht aber Gnome selbst.

Abbildung 2: Von Glade geschriebene Quell-Dateien.

Experimentierarbeit

Der beste Weg Glade kennenzulernen ist das Experimentieren, beispielsweise anhand eines einfachen Telefon- und Adressbuchs, das unter[10] gut kommentiert zum Download bereitsteht (Abbildung 7). Es verwendet die klassische Methodik ohne »libglade«. Unter[11] ist eine ähnliche Anwendung zu finden, die sowohl »libglade« benutzt als auch mit Gnome-Support gebaut wurde. Nähere Informationen zu dieser Vorgehensweise bietet auch[12].

Abbildung 7: Ein mit Glade erstelltes Telefonbuch

Man beginnt mit der Erstellung eines Hauptfensters, auf dem andere Widgets angebracht werden, in unserem Fall eine Menü- und eine Knopfleiste »menubar« (Klasse »GtkMenuBar«) respektive »toolbar« (Klasse »GtkToolbar«), eine Spaltenliste »clist« mit drei Spalten (Klasse »GtkClist«), eine Statuszeile »statusbar« (Klasse »GtkStatusbar«) sowie ein Eingabefeld »clist_cell_entry« (Klasse »GtkEntry«). Dazu braucht man zuerst eine vertikale Box »vbox1« (Klasse »GtkVBox«) mit vier Unterteilungen: zwei für die verschiedenen Leisten, die dritte für die Spaltenliste und die vierte für die Statuszeile und das Eingabefeld.

Um die beiden letztgenannten Widgets zusammen in der vierten vertikalen Box-Unterteilung unterzubringen, richtet man zuerst eine horizontale Box »hbox1« (Klasse »GtkHbox«) mit zwei Unterteilungen ein, in denen je ein Widget platziert wird. Die Attribute der neuen Widgets können im Eigenschaftsfenster im Detail bearbeitet werden. Diese Prozedur wiederholt sich im Laufe des gesamten Interface-Entwurfs, wie aus Abbildung 4 zu ersehen ist.

Um die Übersicht über die gesamte Widget-Struktur zu behalten, greift man auf den Widget-Baum (Abbildung 5) zurück, über den alle dargestellten Widgets auch erreichbar sind: Klickt man auf eines der GUI-Elemente, zeigt das Eigenschaftsfenster sofort seine Attribute. Das ist besonders hilfreich bei Projekten mit Hunderten Fenstern und Dialogen.

Abbildung 3: Ereignisse und deren Handler-Funktionen werden über den Eigenschaften-Dialog verknüpft.

Abbildung 4: Stein auf Stein - wie ein Lego-Spiel nimmt die Applikation Gestalt an.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Aufgetischt

    Moderne Benutzeroberflächen gestalten ist dank der GTK-Bibliothek keine Kunst für besondere Experten. Eine optisch ansprechende Gestaltung erfordert allerdings einiges an Arbeitszeit. Glade und Gazpacho gehen dem Programmierer in der GUI-Küche zur Hand.

  • Verkehrskontrolle

    Grafische Oberflächen mit GTK müssen Entwickler nicht in aufwändigem Spaghetti-Code definieren. Eine ausgefeilte Oberfläche entsteht mit dem GUI-Builder Glade per Drag&Drop. Die Beschreibung im XML-Format lesen Programme zur Laufzeit ein. So entsteht ein Netzwerk-Sniffer mit schöner Oberfläche.

  • Spurensuche

    Der Desktop mit der Pfote findet auch hierzulande immer mehr Anhänger. Damit wächst die Bedeutung von Gnome als Entwicklungsplattform, deren GUI-Toolkit GTK sogar auf Windows und Mac läuft. Dieser Artikel verhilft zur Orientierung auf den verschlungenen Entwicklungswegen.

  • GTK+

    Mit Python und GTK+ ist eine GUI-Anwendung für Linux rasch geschrieben. Mit ein wenig Installationsarbeit läuft der gleiche Code auch unter Windows und Mac OS X.

  • Perlen vor die Zwerge

    Dass Skriptsprachen inzwischen vollwertige Programmiersprachen sind, hat sich inzwischen herumgesprochen. Aber nur wenige Programmierer bauen komplette Applikationen mit grafischen Oberflächen daraus. Entsprechend wenige wissen deshalb auch, dass das wesentlich schneller geht, als es mit den etablierten Sprachen möglich wäre.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.