Re: signal/properties/enums/flags defs
- From: murrayc t-online de (Murray Cumming)
- To: James Henstridge <james daa com au>
- Cc: "language-bindings gnome org" <language-bindings gnome org>
- Subject: Re: signal/properties/enums/flags defs
- Date: 10 Oct 2001 17:31:03 +0200
On Wed, 2001-10-10 at 16:34, James Henstridge wrote:
> On 10 Oct 2001, Murray Cumming wrote:
>
> > Here is a program to generate the .defs sections for signals,
> > properties, enums, and flags. You can get it by checking out the
> > gtkmm-1.3 module.
> >
> > http://cvs.gnome.org/bonsai/cvsblame.cgi?file=gtkmm-root/tools/generate_extra_defs.cc&rev=&root=/cvs/gnome
>
> Few comments on the code. First of all, you shouldn't need to instantiate
> the type you are working with. In order to get the signal info, the code
> should just look something like this:
>
> get_signals(GType type)
> {
> /* we get a reference to the object class because the class_init
> * routine (which creates the signals) isn't guaranteed to have
> * been run yet.
> */
> GObjectClass *oclass = g_type_class_ref(type);
> guint n_signals, i;
> guint *signals = g_signal_list_ids(type, &n_signals);
>
> for (i = 0; i < n_signals; i++) {
> GSignalQuery query;
>
> g_signal_query(signals[i], &query);
> ... do stuff here ...
> }
> g_type_class_unref(oclass);
> }
>
> Similar can be done for get_properties routine. This should make the
> script run a lot faster, as it doesn't have to create any object
> instances.
Done. That is simpler.
>
> The get_type_name() function will need a bit more work. Boxed types need
> a * on the end as well, for instance, and name of G_TYPE_STRING is
> actually "gchararray", which needs to be mapped to "gchar*".
Done.
>
> As a stylistic note, it is probably better to use GTK_TYPE_BUTTON and
> GTK_TYPE_CONTAINER macros in the main() function rather than the
> get_type() routines directly.
Done.
>
> >
> > And here's a sample .defs file, for GtkButton and GtkContainer. Does
> > anyone know how I can dynamically get a list of all the GTK/GDK types,
> > instead of having to hand-code gtk_button_get_type(),
> > gtk_container_get_type() etc?
>
> Parsing the output of nm, or going through the headers are probably the
> best options. Scanning the headers is a better idea, as it won't pick up
> private objects.
Hmm, maybe I'll play with h2defs.py
>
> Probably the best way to structure this tool would be to put all these
> helper functions for outputing defs into a small static library, then have
> a script that scans for a list of types in a library, outputs a small
> program and links it against the helper library and the lib being scanned,
> and then runs the resulting program.
Couldn't you just use the libary from h2defs.py?
>
> >
> > http://www.murrayc.com/temp/gtk_extra.defs
>
> looks good.
>
> >
> > It only does signals and properties at the moment. Does anyone know how
> > I can ask a GObject, or glib itself, for it's enums and flags?
>
> There isn't a standard way to do this. Again, we need to scan for the
> *_TYPE_* variables/macros in the headers. Your get_defs() function would
> probably handle objects, enums and flags:
> if (G_TYPE_IS_OBJECT(type))
> get_object_defs(type)
> else if (G_TYPE_IS_ENUM(type))
> get_enum_defs(type)
> else if (G_TYPE_IS_FLAGS(type))
> get_flags_defs(type)
> else
> print an error message.
>
> James.
>
> --
> Email: james daa com au
> WWW: http://www.daa.com.au/~james/
>
>
>
> _______________________________________________
> language-bindings mailing list language-bindings gnome org
> http://mail.gnome.org/mailman/listinfo/language-bindings
>
>
--
Murray Cumming
murrayc usa net
www.murrayc.com
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]