[15323] | 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. |
---|