ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/docs/pws2004/gtk2.pod
Revision: 1.7
Committed: Mon May 24 23:37:39 2004 UTC (22 years, 4 months ago) by root
Branch: MAIN
Changes since 1.6: +22 -267 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.5 =encoding utf8
2    
3 root 1.1 =head1 Gtk+2 - ein erweiterbares GUI-Toolkit
4    
5     =head2 Abstract
6    
7 root 1.3 Gtk+2 (das {{G}}IMP {{T}}ool{{K}}it, Version 2) unterlief bei der
8     Entwicklung zu Version 2 tiefgreifende Änderungen. Das Typsystem wurde
9     stark abstrahiert, so daß Schnittstellen zu anderen Sprachen sich im
10     wesentlichen auf das Bereitstellen des Objektsystems beschränken.
11    
12     In diesem Dokument wird das Toolkit Gtk2 kurz vorgestellt, wobei Erfahrung
13     mit GUI-Programmierung vorausgesetzt wird. Im wesentlichen wird es jedoch
14     darum gehen, einige besondere Techniken vorzustellen sowie das Toolkit von
15     Perl aus selbst zu erweitern.
16 root 1.1
17 root 1.6 =head1 Gtk2 und Glib, eine Übersicht
18 root 1.1
19 root 1.3 =head2 Übersicht über die G-Module
20 root 1.1
21 root 1.3 Es gibt eine Menge Bibliotheken, deren Namen mit G anfängt und im
22     Dunstkreis von Gtk+ stehen. Vielleicht wäre es sinnvoll gewesen, eine neue
23     G-Hierarchie in Perl zu begründen, so muß man sich mit einer teilweise
24     nicht sehr logischen Namensgebung zurechtzufinden.
25    
26     =over 4
27    
28     =item Glib
29    
30     Glib ist die Schnittstelle zur C<libglib> (sowie zu C<libgobject>,
31     C<libgmodule> und C<libgthread>). Es bildet die Grundlage für das Objekt-
32     und Typ- und Signalsystem, bietet Hilfsfunktionen zum Umwandeln von
33     Dateinamen, Logging usf.
34    
35     Eine I<sehr> sauber geschriebene Bilbiothek, die auf GObject aufsetzt,
36     läßt sich praktisch ohne zusätzlichen Schnittstellencode nutzen: sobald
37     die entsprechenden Typen registriert wurden (geschieht meist in einer
38     Init-Funktion) kann man Objekte instantiieren und benutzen.
39    
40     =item Gtk2
41    
42     Dieses Modul ist eine Sammelstelle für diverse Bilbiotheken: neben
43     C<libgtk+> auch C<libgdk>, C<libgdk_pixbuf> und C<libpango>.
44    
45     Sie reicht für fast alle Anwendungen aus.
46    
47     =item Gtk2::GLExt, Gtk2::GladeXML, Gtk2::TrayIcon und Gtk2::Spell
48    
49     Bieten Integration von OpenGL, GladeXML, EggTryIcon und Spell-checking für
50     Text-Widgets.
51    
52     =item Gnome2
53    
54     Schnittstelle zur C<libgnome> und vielem mehr. Muss man nicht
55     benutzen, kann mir aber vorstellen, das sie für die Erstellung von
56     Gnome-Applikationen ganz nützlich sind :)
57    
58     =item Gnome2::Canvas, Gnome2::GConf, Gnome2::PanelApplet, Gnome2::Print,
59     Gnome2::Rsvg, Gnome2::VFS, Gnome2::Vte, Gnome2::Wnck.
60    
61 root 1.6 Jede Menge Gnome-Zeugs.
62 root 1.3
63     =back
64 root 1.1
65 root 1.6 =head2 Die Widgets von Gtk2 sind GObjects
66 root 1.1
67 root 1.3 Wie jedes andere Toolkit auch, bietet Gtk2 eine Menge vorgefertigter
68     I<Widgets>: I<Buttons>, I<Labels>, I<Frames> und andere "einfache"
69     Widgets, aber auch komplexe, wie das I<Text>- (komplett in Unicode,
70     einbettbare Objekte) oder das I<TreeView>- (Listen und Bäume im
71     MVC-Modell) Widget.
72    
73     =begin latex
74    
75     \begin{figure}[h]\includegraphics{gtk2-textwidget.png}\label{Das Text-Widget}\end{figure}
76    
77     =end latex
78    
79 root 1.6 Alle diese Widgets sind sogenannte I<GObjects> (davon abgeleitet sind
80     in Gtk2 dann sogenannte I<Widgets>, GUI-Objekte), und haben folgende
81     Features:
82 root 1.4
83     =over 4
84    
85     =item Eine Klasse
86    
87 root 1.6 Jedes GObject ist eine Instanz einer Klasse (C<GObjectClass>), eine
88     Datenstruktur, die Informationen über Methoden u.ä. speichert.
89    
90     Eine C<GObjectClass> ist allerdings nur ein Spezialfall eines
91     C<GType>s: Die Glib bildet ein komplettes Typsystem mit Klassen,
92     Aufzählungen, Flags, einfachen Datentypen wie Integer oder
93     Fließkommazahlen oder auch C-structs an. All dies ist zur Laufzeit in
94     einer Form verfügbar, in der sich auch neue - zur Compielzeit nicht
95     bekannte - Datentypen verwenden lassen.
96    
97     Schnittstellen für andere Sprachen werden dadurch einfach, da man
98     "lediglich" die Konzepte "Datentyp", "Konverter", "Klasse", "Methode",
99     "Bitset" usw. umsetzen muß. Konkrete Instanzen dieser Typen funktionieren
100     zur Laufzeit automatisch.
101    
102     Bei einer gut geschriebenen C-Bibliothek, die auf Glib bzw. GObject
103     aufsetzt, muß man eigetnlich nur die Initialisierungsfunktion aufrufen,
104     die die Datentypen registriert, und kann dann sofort von Perl darauf
105     zugreifen - ohne eine einzige XS-Funktion geschrieben zu haben.
106 root 1.4
107     =item Methoden
108    
109     Jedes GObjekt hat mindestens Methoden zum Erzeugen (C<constructor>)
110 root 1.6 und Zerstören (C<finalize>), Setzen und Lesen von Properties und eine
111 root 1.4 Spezialität von GObject - C<dispose>. Letzteres ist eine Art Anfrage an
112     ein Objekt, sich freiwillig aufzulösen.
113    
114 root 1.6 Gtk2 fügt noch einige weitere hinzu, wie die C<destroy>-Methode, die aktiv
115     versucht, ein Objekt zu zerstören: In GUI-Programmen ist es manchmal
116     schwer, alle Referenzen im richtigen Moment aufzulösen, da sie häufig
117     zirkulär sind. Manche Objekte "leben" auch ganz eigenständig, z.B. wird
118     ein Toplevel-Fenster im allgemeinen vom Benutzer "referenziert", was sich
119     aber nicht notwendigerweise im Referenz-Zähler niederschlägt.
120    
121     Um solche Objekte loszuwerden, kann man sie bitten, sich zu
122     I<destroyen>. Dabei gibt es alle Referenzen auf andere Objekte frei und
123     bittet diese, sich ebenfalls zu destroyen. Dadurch werden zirkuläre
124     Referenzen effektiv aufgebrochen.
125    
126 root 1.7 Methoden kann man in Perl nicht direkt implementieren, dafür aber eigene
127     Signale, die beliebige Parameter oder Rückgabewerte besitzen können und
128     mehr oder weniger direkt von C oder anderen Sprachen aus aufgerufen werden
129     können.
130 root 1.6
131 root 1.4 =item Signale
132    
133 root 1.6 Signale ähneln Methoden, Callbacks oder sogenannten "Delegates". Wie
134     Methoden sind sie fest an eine Klasse gebunden und rufen (in C) eine
135     Methode der Klasse auf, sobald sie ausgelöst werden.
136    
137     Ein Signal kann von jedem ausgelöst werden, insbesondere lösen aber
138     Ereignisse (Events) in Gtk2 Signale aus. Der Signal-Handler eines Objektes
139     verarbeitet das Ereignis (und beendet die Signalauslieferung) oder tut
140     nichts, woraufhin Gtk2 ein anderes Objekt als Empfänger sucht.
141    
142     Zusätzlich kann man vor oder nach dem eigentlichen Signal-Handler
143     des Objektes weitere Callbacks einklinken. Z.B. löst das Text-Widget
144     beim Mausklick rechts ein C<populate-menu>-Signal aus, das
145     normalerweise ein Popup-Menü generiert. Das kann man verändern oder
146     ganz überschreiben. Und wenn man Mausklicks abfangen möchte, kann man
147     das C<button-press-event>-Signal überschreiben und so Mausklicks vom
148     Text-Widget fernhalten.
149    
150 root 1.4 =item Properties (Eigenschaften)
151    
152 root 1.6 Properties sind von der jeweiligen Klasse definierte Eigenschaften, die
153     das Objektverhalten beeinflussen.
154    
155 root 1.7 #TODO#
156    
157 root 1.6 =item Schlüssel-Wert-Paare
158    
159 root 1.7 #TODO#
160    
161 root 1.4 =back
162 root 1.3
163 root 1.6 =head2 Informationen über Klassen zur Laufzeit abfragen
164 root 1.1
165 root 1.4 =head2 Leben und sterben lassen: Wie man seine Objekte wieder loskriegt
166    
167     =head2 Beispiel: Session-Management
168 root 1.1
169 root 1.4 =head2 Beispiel: Glade
170 root 1.1
171     =head1 Teil 2 - Gtk+ als solide Grundlage für Eigenentwicklungen
172    
173     =head2 Perl-Objekte vs. Glib-Objekte
174 root 1.3
175 root 1.7 =head3 Die Perl-Methode
176 root 1.1
177 root 1.7 =head3 Die unsaubere Glib-Methode
178 root 1.1
179 root 1.7 =head3 Die saubere Glib-Methode
180 root 1.1
181 root 1.7 =head2 Rapid Application Development mit Glade - mein Weg
182 root 1.1
183 root 1.7 =head2 Objekte aus anderen Sprachen nutzen
184 root 1.1
185 root 1.7 =head1 Verweise
186 root 1.1
187 root 1.7 =over 4
188 root 1.1
189 root 1.7 =item http://www.gtk.org/
190 root 1.1
191 root 1.7 Die Dokuemntation zu Gtk+, Glib usw.
192 root 1.1
193 root 1.7 =item apt-get install devhelp-book-gtk2 # oder devhelp-books
194 root 1.1
195 root 1.7 Installiert unter debian I<devhelp>, einen inetraktiven Help-Browser und
196     das Gtk2-Buch (dazu gehört auch GObject, Glib-Doku uvm.). Sehr hilfreich
197     beim Programmieren.
198 root 1.1
199 root 1.7 =back
200 root 1.1
201