james(a)dis-dot-dat.net wrote:
I'd prefer not to have to move my app from C to
C++ just to implement the interface, so that's quite a few out of the
window.
I'm sure that I dislike C++ even more than you do and I can completely
understand why you'd want to keep you app as C.
However, GUIs is actually one of the few applications where IMHO
C++ may actually have some benefits over C. It would definitely
be possible to do a C++ GUI which communicates with a C backend
but it would be necessay place a clothes peg over one's nose
while doing the C++ stuff.
That said, I have done GUIs in GTK+ (which is C) and it is doable,
especially if you spend some time wrapping the the GTK+ trivialities
into something more managable. So for instance, it you need 5 buttons
that are basically the same bar button names etc, instead of doing
button1 = gtk_new_button("button1 name") ;
gtk_fiddle_with (button1) ;
button2 = gtk_new_button("button1 name") ;
gtk_fiddle_with (button2) ;
...
button5 = gtk_new_button("button1 name") ;
gtk_fiddle_with (button5) ;
do something like:
struct button_s
{ const char * name ;
int xpos, ypos, xsize, ysize ;
} ;
static struct button_s deez_buttons [] =
{ { "button1_name", 0, 0, 20, 20 },
{ "button2_name", 0, 0, 20, 20 },
{ "button3_name", 0, 0, 20, 20 },
{ "button4_name", 0, 0, 20, 20 },
{ "button5_name", 0, 0, 20, 20 }
} ;
and then write a function that takes an array of button_s structs
and does whatever is required to make them happen.
I also like to have all button messages pass back through one
callback. Each button will have a unique identifier so that in
the callback I can just switch on the button identifier.
This can easily be extended to have all GUI callbacks passing
through the one callback function and them make the whole thing
a model controller view thing.
I don't really want huge dependencies for a knob,
text box and a
button, either.
Most GUI widget toolkits have a huge set of dependancies regardless :-).
GTK+ is no different in this regard.
And something that's installed as default in most
distros would be
good, too.
GTK+ is shipped with most distros.
Erik
--
+-----------------------------------------------------------+
Erik de Castro Lopo
+-----------------------------------------------------------+
"Perl as a language has less a design than a thousand special features
flying in close formation."
-- From the c2 wiki