Re: [gtkmm] writing a custom cellrenderer



Roel Vanhout wrote:
Hello all,


Hi,

have you looked at the example located in examples/customcellrenderer in the gtkmm source distribution. I have successfully created a custom cell renderer in my program GSpeakers based on this example. Please have a look at:

http://cvs.sourceforge.net/viewcvs.py/gspeakers/gspeakers2/src/cellrendererpopup.h?view=markup
http://cvs.sourceforge.net/viewcvs.py/gspeakers/gspeakers2/src/cellrendererpopup.cc?view=markup

http://cvs.sourceforge.net/viewcvs.py/gspeakers/gspeakers2/src/cellitemcrossover.h?view=markup
http://cvs.sourceforge.net/viewcvs.py/gspeakers/gspeakers2/src/cellitemcrossover.cc?view=markup

Regards

Daniel Sundberg

---
http://sumpan.com

I spend the bigger part of yesterday evening trying to write a custom cellrenderer for Gtk::TreeView but I didn't get it to work. I'm porting an application from plain C Gtk to C++ with gtkmm. In the original application I used the code from http://scentric.net/tutorial/sec-custom-cell-renderers.html, which was luckily exactly what I needed (in C). I thought that for a C++ version all I'd have to is derive my own class from Gtk::CellRenderer, override a few methods (that would have been declare pure virtual so that the compiler would point me to them) and that would be it. Turns out I was wrong. I started by looking at http://www.gtkmm.org/docs/gtkmm-2.4/docs/reference/html/classGtk_1_1CellRend erer.html. I didn't see anything there that indicated what functions I had to override to make my own so I just write a small class, overriding get_size(), _property_renderable() and render() and copied the code from my original C renderer to the corresponding functions. I had to massage it a bit to get it into C++ format and then it compiled. I used the add_column() method that takes a custom renderer and when all of that compiled I thought it'd work, but all I saw was a blank cell. So I looked at the implementation of the CellRendererText and -Pixbut in the gtkmm source and to my horror I found all the structs from the C version in there - the init thing and a sort of virtual vtable and all the things I hoped I would never have to bother with again when I switched to gtkmm. I'm still hoping that this is only because they wrap the C version and that it is possible to write one in pure C++. Ok so sorry if this sounds frustrated (it's because I am), but here are a few questions that I have:

- What functions do I have to override and what do I have to implement to get a custom cellrenderer, a complete new one and not one that just wraps a C version? I think I'm missing two things: first, registering a custom property ('progress' in my case), and secondly registring the cellrenderer itself somewhere. - All properties (like property_xalign()) have comments like "You rarely need to use properties because there are get_ and set_ methods for almost all of them.". But are there really? Where are they declared? How should I use those properties? - What are the protected methods in CellRenderer (like get_size_vfunc() ) used for? Should I override them? - Why are there two versions of get_size? Is there an easy way to implement the one in terms of the other or should I write full implementations for both?

I've attached the code that I have so far. Some of it is commented out, that's what I was trying after I got everything to compile but when it didn't work. It's mostly copied from CellRendererText, but that one wraps the C version so it's not quite the same as what I try to do.
Thanks in advance.


cheers,

roel





------------------------------------------------------------------------

_______________________________________________
gtkmm-list mailing list
gtkmm-list gnome org
http://mail.gnome.org/mailman/listinfo/gtkmm-list




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