|
01 #include <FL/Fl.H> 02 #include <FL/Fl_Window.H> 03
#include <FL/Fl_Button.H> 04 #include <stdio.h> 05 06
void MeineFunktion(Fl_Widget*w) 07 { 08 fprintf(stdout, "Knopf
gedrückt!n"); 09 } 10 11 int main() 12 { 13 Fl_Window
*Fenster = new Fl_Window(300,200,"Mein Fenster"); 14 Fl_Button
*Knopf = new Fl_Button(30,30,200,30, "Test"); 15
Knopf->callback(MeineFunktion); 16 Fenster->show(); 17 return(Fl::run()); 18 } Zusammengeklickt
Für die Gestaltung komplexer GUI-Layouts bringt Fltk das grafische Programm Fluid mit (Abbildung 1). Dort kann der Entwickler Widgets per Drag&Drop platzieren und ihre Eigenschaften in Dialogen festlegen. Diese Einstellungen speichert das Tool in Dateien mit der Endung ».fl«. Außerdem erzeugt es aus den Layouts die benötigten Header- und C++-Dateien, die sich gut im Programmiereditor weiterverarbeiten lassen.
Der Befehl »fltk-config --compile Programm.cpp« kompiliert das Programm dynamisch gelinkt. Der Aufruf »fltk-config --ldstaticflags« liefert die erforderlichen Optionen, um die Toolkit-Bibliotheken statisch zu linken.
Neben der Dokumentation auf der Fltk-Homepage empfehlen sich die Beispielprogramme des Entwicklers Greg Ercolano [3]. Er hat sie außerdem um zwei Screencasts bereichert, die den Einstieg in die Anwendungsentwicklung mit Fltk einfach machen.
Abbildung 1: Der Interface-Designer Fluid hilft dem Fltk-Entwickler beim GUI-Layout und spuckt außerdem ein nützliches Code-Skelett für die Programmierung aus.
Polyglott: Wx-Widgets
Ebenfalls in C++ umgesetzt ist Wx-Widgets (ehemals Wx-Windows genannt, [4]), das aber Bindings für eine enorme Zahl an Programmiersprachen bietet: Die Wx-Familie reicht von Python und Ruby bis Erlang und Haskell. Die unterstützten Plattformen reichen vom Betriebssystem-Mainstream bis zu Windows Mobile und zum I-Phone. Das Toolkit erlaubt außerdem Crosscompiling, also beispielsweise eine Windows-Anwendung unter Linux zu übersetzen. Eine der bekanntesten Open-Source-Anwendungen, die auf Wx-Widgets setzen, ist der freie Audio-Editor Audacity. Unauffällig
Wx-Widgets bildet eine dünne Abstraktionsschicht zu den auf einem System vorhandenen Widgets. Auf diese Weise passen sich Wx-Widgets-Anwendungen optisch in das vorhandene GUI ein. Unter Linux ist daher ein installiertes GTK+, Motif oder Lesstif Voraussetzung. Lediglich die Variante Wx-X11 verlangt nur nach einem X-Window-System.
Die stabile Version 2.8 lässt sich aus den Repositories aktueller Linux-Distributionen installieren, wobei sich das Toolkit auf mehrere »wx«-Pakete aufteilt. Die benötigten Header zum Beispiel finden sich unter Ubuntu im Paket »libwxgtk2.8-dev«.
Daneben ist es ratsam, auch die Code-Samples zu installieren. Schon am Beispiel »minimal.cpp«, das in stolzen 200 C++-Zeilen ein Fenster und einen About-Kasten erzeugt, wird deutlich: Wx-Widgets ist komplizierter als Fltk. Dafür bietet es aber auch mehr Features, beispielsweise Widgets für ganze Kalender oder HTML-Viewer.
Auch für Wx-Widgets existiert ein freier GUI-Layouter: Wx-Formbuilder [5] steht unter GPL und enthält einen Wysiwyg-Editor für Programmfenster, den zahlreiche Eigenschaften-Paletten ergänzen (Abbildung 2). Die Platzierung der Elemente erfolgt nicht absolut in Pixeln, sondern durch flexible Container, die andere Komponenten aufnehmen und ausrichten. So bleiben die Oberflächen beispielsweise auch bei sehr großen Schriftgraden noch les- und benutzbar.
Wx-Formbuilder generiert automatisch C++- und Headerdateien, die der Programmierer allerdings nicht antasten darf, möchte er sein Projekt weiterhin mit dem Layout-Tool bearbeiten. Der Königsweg besteht darin, eigene Klassen per Vererbung von den aus dem Formbuilder exportierten abzuleiten.
Abbildung 2: Wx-Formbuilder bringt alles mit, was der GUI-Layouter bei der Arbeit mit Wx-Widgets braucht.
Sag's in XML
Das Werkzeug exportiert noch ein weiteres, höchst interessantes Datenformat: Mit XRC bezeichnet das Wx-Widgets-Projekt Ressourcendateien in XML, die ein GUI beschreiben. Das Mozilla-Projekt beispielsweise verwendet mit seinem XML-Format XUL das gleich Prinzip. Der Vorteil: Wx-Widgets-Anwendungen können XRC-Dateien zur Laufzeit laden. Layoutänderungen lassen sich somit ohne Neukompilieren durchführen. Weitere Informationen zu XRC gibt es im Wx-Widgets-Wiki [6].
Wx-Widgets bietet noch einiges darüber hinaus, beispielsweise Unicode-Unterstützung, Open GL, Netzwerkprogrammierung sowie auf Wunsch statisches Linken. Die an die LGPL angelehnte Lizenz gestattet es auch, das Toolkit in proprietären Programmen zu verwenden, weshalb die Software-Industrie offenbar gerne zugreift. Eine der vielen auf der Homepage aufgelisteten Wx-Widgets-Anwendungen ist Caedium (Abbildung 3) der Firma Syscape, eine professionelle Suite von Programmen für das Computer-aided Engineering (CAE, [7]).
Abbildung 3: Wx-Widgets lässt sich auch in proprietären Programmen einsetzen, hier in der Windows-Version von Caedium, einer Softwaresuite für Computer-aided Engineering.
Esoterisch: EFL
Offiziell noch im Betastadium befinden sich die Enlightenment Foundation Libraries (EFL), die Carsten "Rasterman" Haitzler für die Entwicklerversion 0.17 des Enlightenment-Desktops [8] geschaffen hat. Stellenweise sind sie aber schon im Produktiveinsatz: In Openinkpot [9], einer freien Linux-Distribution für E-Book-Reader, finden die Bibliotheken für Anwendungen wie Bücherregal, Systemeinstellungen und Spiele Verwendung (Abbildung 4).
Das Reader-Projekt baut seine EFL-Pakete aus den regelmäßig veröffentlichten Snapshots der Bibliotheken. Diese sind laut Openinkpot-Gründer Mikhail Gusarov ausreichend stabil. Die Anwendungen laufen auf dem Framebuffer-X-Server Xfbdev und sind in C geschrieben, EFL bietet daneben Bindings für C++, Python, Perl und Ruby.
Zu den Enlightenment Foundation Libraries gehört beispielsweise die Layoutbibliothek Edje, die als Zwischenschicht zwischen Programmcode und auswechselbaren Themes dient. Sie lässt sich sogar mit Lua oder der Eigenentwicklung Embryo skripten. Die Canvas-Bibliothek Evas stellt die Fenster zur Verfügung, in die die Anwendungen malen, und Ecore kümmert sich um die Grundversorgung mit Events und Timern. Auf diesen Komponenten baut Elementary auf, das eine Widget-Sammlung anbietet.
Abbildung 4: Auch auf einem E-Book-Reader mit E-Ink-Display und bescheidener Rechenleistung lassen sich EFL-Anwendungen einsetzen.
Steiniger Weg
Die EFL-Komponenten stehen in komplexer Beziehung zueinander, sie existieren hauptsächlich im Quelltext-Repository, die dazugehörige Dokumentation ist lückenhaft und über das Web verstreut. Für außenstehende Entwickler ist es daher derzeit nicht leicht, einen Einstieg in die Arbeit mit den esoterischen Bibliotheken zu finden. Als Anfangspunkt bietet sich der EFL-Eintrag im Enlightenment-Wiki unter [10] an.
Dass die Enlightenment-Technologie aber gerade für Embedded-Geräte tauglich ist, zeigt folgendes Beispiel: Seit Ende 2009 läuft EFL auf über 2 Millionen Settop-Boxen des französischen Netzwerk-Anbieters Free.fr. Es wäre schön, wenn die Open-Source-Bibliotheken, die unter einer BSD-artigen Lizenz stehen, für ein größeres Publikum reif würden.
|