[Glade-users] custom handlers in libglade and gtk builder
Gerald Britton
gerald.britton at gmail.com
Fri May 1 12:19:52 EDT 2009
Aha! Well, I think I already have those in place from the old code.
On Fri, May 1, 2009 at 11:45 AM, Tristan Van Berkom
<tristan.van.berkom at gmail.com> wrote:
> Oh sorry, sometimes the question is so simple that is escapes you :)
>
> If I'm not mistaken, you are talking about set_custom_handler()
> from libglade to handle custom properties in the xml... now that
> you have a real type - all you need is to support object properties
> in the standard way (in C that would be g_object_class_install_property()
> from the class initializer).
>
> Cheers,
> -Tristan
>
>
> On Fri, May 1, 2009 at 11:37 AM, Gerald Britton
> <gerald.britton at gmail.com> wrote:
>> OK. Thanks to your help before, I've been able to define custom
>> objects and use them in both glade-3 and GtkBuilder. Now, I'm working
>> on using these new types to replace the old custom widgets. These old
>> widgets make us of the set_custom_handler function. The custom
>> handler that is set by that function, in the current code, on the
>> value of the field "Creation Function:" in the definition of the
>> custom object in glade. So today, I have something like:
>>
>> <widget class="Custom" id="lon_entry">
>> <property name="visible">True</property>
>> <property name="creation_function">ValidatableMaskedEntry</property>
>> <property name="int1">0</property>
>> <property name="int2">0</property>
>> <property name="last_modification_time">Fri, 23 Mar 2007
>> 20:18:43 GMT</property>
>> </widget>
>>
>> Then, I have this code:
>>
>> from gtk.glade import set_custom_handler
>>
>> def get_custom_handler(glade, function_name, widget_name,
>> str1, str2, int1, int2):
>> if function_name == 'ValidatableMaskedEntry':
>> return ValidatableMaskedEntry()
>> if function_name == 'StyledTextEditor':
>> return StyledTextEditor()
>>
>> set_custom_handler(get_custom_handler)
>>
>> Which, as you can see, returns one of two possible "handlers"
>> depending on the value of the "creation function" field.
>>
>> In my progress so far towards converting these to GtkBuilder, I've
>> constructed a custom widget like this:
>>
>> <object class="ValidatableMaskedEntry" id="val_mask1">
>> <property name="visible">True</property>
>> <property name="can_focus">True</property>
>> <property name="invisible_char">●</property>
>> <property name="text" translatable="yes">valmask</property>
>> </object>
>>
>> and built a python class to handle it:
>>
>> import gobject
>> import gtk
>>
>> class ValidatableMaskedEntry(gtk.Entry):
>> __gtype_name__ = 'ValidatableMaskedEntry'
>>
>> def __init__(self):
>> gtk.Entry.__init__(self)
>>
>> After setting up the proper env vars and starting glade-3, I can use
>> my new custom object. Similarly, at run time, I include the class
>> definition before calling the add_from_file method on my new glade
>> file. At this point, all is well.
>>
>> So, what I need to grasp is what the set_custom_handler function does
>> in the old gtk,glade world how to accomplish the same thing in the
>> GtkBuilder world, while reusing as much existing code as I can.
>> Unfortunately, I found the docs on set_custom_handler a little on the
>> terse side. They state:
>>
>> "This gtk.glade.set_custom_handler() function allows you to override
>> the default behaviour when a Custom widget is found in an interface. "
>>
>> which is great but where is the default behavior defined?
>>
>> On Fri, May 1, 2009 at 11:07 AM, Tristan Van Berkom
>> <tristan.van.berkom at gmail.com> wrote:
>>> Hi,
>>> GtkBuilder does not support this method of inserting custom objects
>>> in the interface, instead GTK+ now allows all widgets to be loadable
>>> with builder and the way GtkBuilder builds your objects can be customized
>>> using the GtkBuilder interface.
>>>
>>> We assume here that if you are not introducing a real type, if you only
>>> had a function that created stock widgets manually and returned that;
>>> you can easily replace that by adding manually built widgets to a known
>>> container in the project.
>>>
>>> With Glade, we have for a long time supported getting your widget
>>> types into the palette and thats been improving over the years,
>>> the documentation is pretty up to date but its a little terse (its not
>>> a tutorial):
>>> http://glade.gnome.org/docs/
>>>
>>> Keep in mind that its possible to mimic your widget type completely
>>> by just writing up a few lines of xml, while the docs describe lots of
>>> things you can do with a plugin library, usually most of that is unneeded.
>>> Also remember that if you provide the actual type at runtime to Glade
>>> in the form of a library, Glade will introspect your custom widgets properties
>>> and signals etc - if you fake the type in the catalog you'll have to define
>>> properties for it manually in the Glade catalog.
>>>
>>> Cheers,
>>> -Tristan
>>>
>>> On Fri, May 1, 2009 at 10:36 AM, Gerald Britton
>>> <gerald.britton at gmail.com> wrote:
>>>> Hi -- I'm converting a project from libglade to gtkbuilder and I've
>>>> run into a snag with custom objects. In the code I'm working on there
>>>> is the line:
>>>>
>>>> from gtk.glade import set_custom_handler
>>>>
>>>> followed by a function definition:
>>>>
>>>> def get_custom_handler(glade, function_name, widget_name,
>>>> str1, str2, int1, int2)
>>>>
>>>> ...
>>>>
>>>> and
>>>>
>>>> set_custom_handler(get_custom_handler)
>>>>
>>>> I need to know how to do the same sort of thing in the gtkbuilder
>>>> world. So, how does one set up custom handlers in the gtk.builder
>>>> world?
>>>>
>>>> --
>>>> Gerald Britton
>>>> _______________________________________________
>>>> Glade-users maillist - Glade-users at lists.ximian.com
>>>> http://lists.ximian.com/mailman/listinfo/glade-users
>>>>
>>>
>>
>>
>>
>> --
>> Gerald Britton
>>
>
--
Gerald Britton
More information about the Glade-users
mailing list