$Id: glademm-guide.html,v 1.10 1999/08/12 09:06:39 christof Exp $

Glade-- User's Guide (revised for 1.1.x)

This document attempts to give you a basic understanding on how to use glade-- and to indicate where it's strengths and weeknesses are.

Glade-- is a backend to glade and glade-2. Glade is a GUI builder for the Gimp Toolkit (gtk). Glade is entirely written in C. It operates on an XML file and can output C sourcecode. Glade-- is written in C++ and makes use of recent C++ features such as the STL.

As you might already know there are different versions of gtk+ around:

You can use glade-- to read a XML file generated with any of the glade versions to generate code for any target gtk--/gtkmm2 version. But it's easier if you use the correspondences mentioned above.

As a side note I recommend using a version control system for your projects, e.g. CVS, subversion or bitkeeper. It makes source code management really easy and if you by chance delete a file or overwrite it you can easily get it back. You might even get your old files back if your design decisions misleaded you. Besides that you can light-heartedly delete no longer necessary files, you can get their content back if you need to.

Table of contents

Abstract
Table of contents
Create your glade file
Create your initial program files (glade--)
Special Widgets, special glade-- features
    Optionmenu (offers deactivate signal)
You changed the glade file
    The widget map
    User types
    Using glade-- generated widgets within another context (components, user defined widgets)
Strengths of glade--
Weaknesses of glade--
Future development
How to get it

Further reading (more documentation, tutorials, contact)

Create your glade file

Design your GUI up to your favor. I recommend tables, they look great.
For numeric input I use spinbuttons, it doesn't cost you more and the user might use the extra functionality.

For textual input you might prefer option menus or combo boxes.
You should also take a look at the fancy SearchCombo widget of the gtk--addons I put to cvs.gnome.org.

! You will not see the C++ code options in glade unless you select C++ as your language. (Project options)

Think about partitioning complex windows into substructures. Toplevel windows always come in their own file (and their own class). Signal callback functions are part of the topmost widget's class.
Feel free to break this via the 'separate class' or 'separate_file' switch. I recommend up to ten to twenty callbacks in one class. But on the other hand you lose the ability to easily access widgets outside your class if you partition too much.

Then think whether you need to access a widget in your program. If you need to access it (e.g. read or alter values) inside your scope (class) declare it as protected. (Attaching signals to widget does not count as a need to access it)

If you need to access it outside your scope, mark it as public. Then include the appropriate header file, glade-- has generated a GMM_* macro for easy access:
   GMM_WINDOW1->show();
But remember this breaks all OO design rules! I do not recommend it. A better way is to pass the widget (or it's containing class) to other classes' ctors.

Create your initial program files (glade--)

Look into glade's project options (the sheet) and adjust the pathnames.
I recommend to put the glade file near to your program and let glade create fresh files in a subdirectory (source directory option in glade). Then copy the files you need into your current directory.

Simply invoke glade-- by pressing the gear's button in glade or by hand:
    glade-- <project file>

Note that some glade-- options are only available from the command line.

Glade-- will generate the following files:

You changed the glade file

Since you should not edit the *_glade.cc and *_glade.hh files glade will overwrite them. Similar for the glademm_support.?? files. But what about the rest? Glade-- creates new files: Never rename a widget which form a class! (Unless you want to do a lot of search/replace work)
I usually use a whenever I did huge changes. Did I mention that CVS is a good idea? Use it! Accidental overwrites will not cause you any harm. And glade has no undo function ...

The widget map (not recommended, see here)

Glade-- creates a map of public widgets. Access them via the GMM_FOO1 macros. But never access them before they are created or after they have been destroyed.

User types

glade supports custom widgets. Glade-- takes the creation function name as include file name (.hh added) and class type.
If neccessary you can include and wrap any other class inside the expected header file. Glade-- uses some tricks so you can even use template widgets and uncommon parameter types. Simply abuse the creation function, e.g. Foo<int>(Class(1,2)).

Using glade-- generated widgets within another context (components, user defined widgets)

If you want to use components I propose the following route:

Strengths of glade--

Weaknesses of glade--

Future development

How to get it

http://home.wtal.de/petig/Gtk/ for released versions
anoncvs.gnome.org for development versions (recommended)

Further reading

Automake + Autoconf tutorial by a gtkmm maintainer http://www.murrayc.com/learning/linux/automake/automake.shtml

Gtk+ online documentation

Gtk-- online documentation

Glade tutorial

Splitting a glademm project into subdirectories (by Mark Jones)

Glade-- mailing list and it's archives

Glade-- bug tracking system and project page