1 | LIBGLADE |
---|
2 | ======== |
---|
3 | |
---|
4 | Author: James Henstridge <james@daa.com.au> |
---|
5 | |
---|
6 | This library allows you to load glade interface files in a program at runtime. |
---|
7 | It doesn't require GLADE to be used, but GLADE is by far the easiest way to |
---|
8 | create the interface files. |
---|
9 | |
---|
10 | For an idea of how to use the library, see test-libglade.c and |
---|
11 | glade/glade-xml.h. |
---|
12 | |
---|
13 | To compile, you will need the libxml package (aka the gnome-xml module in CVS) |
---|
14 | which can be found on the GNOME FTP site or its mirrors. If you want GNOME |
---|
15 | support, you will also need the gnome-libs package installed. |
---|
16 | |
---|
17 | When I started developing this library, I was using a 486, and did not have |
---|
18 | any problems with the speed. Since then, I have reduced its memory usage |
---|
19 | and increased its speed a bit, so you should not have problems with the |
---|
20 | library's speed :) |
---|
21 | |
---|
22 | I would like to thank Damon Chaplin for writing GLADE, which is one of the |
---|
23 | best user interface builders I have used. |
---|
24 | |
---|
25 | |
---|
26 | LIBGLADE INTERNALS |
---|
27 | ================== |
---|
28 | |
---|
29 | If you are interested in how libglade works, here is a small description: |
---|
30 | |
---|
31 | When glade_xml_new is called, the XML file is loaded using libxml. |
---|
32 | Libglade uses the SAX interface because it is faster and allows me to |
---|
33 | store the data in a more compact representation. The data in the XML |
---|
34 | file is cached, so that if you load the interface again, the file does |
---|
35 | not need to be reparsed. If the file has changed though, it will be |
---|
36 | reparsed. |
---|
37 | |
---|
38 | The styles in the glade file are first passed to the GTK RC system, so |
---|
39 | they can be applied to the widgets when the interface is built. Note |
---|
40 | that newer versions of GLADE have removed the widget style code. |
---|
41 | |
---|
42 | Now glade_xml_build_widget is called for all the toplevel widgets in |
---|
43 | the interface (or if the second argument to glade_xml_new was non |
---|
44 | NULL, the widget it refers to is treated as the toplevel). |
---|
45 | |
---|
46 | For each of these widgets, they are created by a function specific to |
---|
47 | the widget type, and then glade_xml_build_widget is called for each |
---|
48 | child widget, which is then packed into its parent. This is done |
---|
49 | recursively, so the whole interface is constructed. |
---|
50 | |
---|
51 | New widget types are added to the widget class hash with the |
---|
52 | glade_register_widgets function. For an example, see the end of glade-gtk.c. |
---|
53 | |
---|
54 | The automatic signal connection system uses the introspective capabilities of |
---|
55 | dynamic linking. By openning a handle on NULL, we can get at all the global |
---|
56 | symbols (global functions, global variables) in the executable, and the |
---|
57 | libraries it is linked against. This is used to find the address of a signal |
---|
58 | handler from its name, so that gtk_signal_connect can be called automatically |
---|
59 | for you. |
---|
60 | |
---|
61 | Of course, there are other ways of connecting the signals if your platform |
---|
62 | doesn't support this feature. |
---|