[Glade-users] Viewing custom widget sub-widgets in Glade tree-view



Hi and thank you very much for answering so fast!

Your explaination is clear and I now I can clearly see how much I'm not in
this (simple) case.
I'll explain the structure of my custom widget to help you help me.

My custom widget isn't a container. I mean that in glade, or in the code
using it,
there shouldn't be ways to add something to it directly.

Instead, the use will simply change parametters:
My widget inherit from GtkAlignment and contains only a GtkTable. Now the
table is automatically filled with GtkToggleButtons.
I exposed column-width and column-height in parametters of my custom widget
and when you change it, it will automatically destroy and create toggle
buttons in the table to fill it. That's all done in the custom widget.
What I want is to allow the user to edit the buttons (everithing in it, like
normal button edit) without being allowed to touch the structure of the
custom widget other than what I voluntarly exposed in the interface.

Now, if I understood correctly, I'm in the case where I need to
 1. implement get-internal-child
 2. have to get new buttons created in the widget and make glade widgets for
them.

That's what I've done and it almost works perfectly so far. I just had to
add get-children to make the widgets visible in the tree view of glade (I'm
still not sure why).
So the problem I have is that is I add 1 to the column number, the widget
will add buttons automatically and make glade widgets too. However, only the
widget tree view in glade will not update.
It will only update on creation of the widget, or when I load it from a
saved file.

Yesterday I found that get-internal-child is called when I load it from a
saved file, so I was thinking that maybe I have to make a call to a function
or send a signal for the tree-view to get internal children again?



On Mon, Oct 4, 2010 at 18:20, Tristan Van Berkom <tvb at gnome.org> wrote:

On Tue, Oct 5, 2010 at 12:18 AM, Klaim <mjklaim at gmail.com> wrote:
Hi,
as disscussed there :
http://www.gtkforums.com/viewtopic.php?p=18030#18030
I've managed to make my sub-widgets appear where I wanted, in the
treeview.
However, the treeview content will not be updated when I'll add new
seb-widget to my custom widget, or remove some from it.
I've been analzing and trying to reproduce some techniques that are used
in
gtk widgets plugin code that we can find here :
http://git.gnome.org/browse/glade3/tree/plugins/gtk+/glade-gtk.c
I've been trying for several days but couldn't update the tree view.
I've implemented a plugin for glade, it provide (wired in the xml file) :
    post-create-function
    set-property-function
    get-internal-child-function
    get-children-function
I see that the get-internal-child-function is not even called by glade
(then
I don't undersand when it should be called) but at the moment I
implemented
get-children-function I started to see the subwidgets in the glade
tree-view.
I've been following advices given there
: http://www.mail-archive.com/gtk-app-devel-list at gnome.org/msg12349.html

I think I'm missing something simple as the gtk glade plugin code don't
seem
too complicated but I can't find how it makes the sub-children updated in
the treeview.
When I load a gui built with glade and saved with modified number of
sub-widgets in my custom widget, I get the right count of sub-widgets in
the
tree-view. Only modifying it will not update the tree-view.
My custom widget have two properties with widgets counts that will add or
remove widgets from the custom widget (in the widget code).
So in the plugin I've only added in post-create-function and
set-property-functino some way to call
glade_widget_adaptor_create_internal() on new digets added to the custom
widget.
It's the same function that is called in the two functions but it seem to
work only with post-create-function.
Any suggestion?
I'm not sure if that question is clear enough, but tell me if it's not.

I'm a little confused about what exactly is not working for you.

If you have a custom widget that is a GtkContainer, so long as
it works like an ordinary container you should not need to implement
anything custom along the lines of get-children or any of that.
(take the GtkBox implementation for reference in this case; it
uses a virtual 'size' property to decide how many placeholders
to expose in the Glade workspace).

Note that get-internal-child is for indirect children of composite
widgets. Thats what lets a GtkDialog configure properties and
add children to its internal 'vbox' or 'action-area' (I think thats
out of context for you, I think you just have a normal container).

What you need to do when implementing a normal container
is usually add placeholders to it if and when appropriate; then
you need to implement add-child-function/remove-child-function
and replace-child-function (replace-child will be called if your
plugin uses GladePlaceholder ... the Glade core will replace
the placeholder with a widget from the palette; giving it the
initial packing properties of the placeholder).

So, generally you should just start with add-child and remove-child
functions... you should not need to call
glade_widget_adaptor_create_internal()
unless you are exposing an internal child of a complex composite

You dont need to implement get-children-function either unless you need
to add something to the generic child list already returned by your
container's implementation of GtkContainerClass->forall().

Does that help ?

Please let me know in more detail what is the nature of your container
so I can better help you, is it a basic container widget that only lays out
it's children in a custom way ?

Cheers,
        -Tristan


Thanks for reading
Joel Lamotte.
_______________________________________________
Glade-users maillist  -  Glade-users at lists.ximian.com
http://lists.ximian.com/mailman/listinfo/glade-users



-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/glade-users/attachments/20101005/b5e2686a/attachment.html 




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]