Re: Help with Mx.ItemView in Python



Hi,

On Sun, Dec 16, 2012 at 10:27:55PM +0000, Nox Deleo wrote:
Hi,

I'm using Clutter and Mx in Python using GObject introspection bindings.
I've got a Clutter.ListModel full of data, which I'm trying to use with an
Mx.ItemView. My problem is that I can't seem to subclass either
Mx.ItemFactory or any Clutter.Actor in a way that the ItemView accepts.

If I try to subclass ItemFactory (to use with Mx.ItemView.set_factory), it
tells me my object needs to be a GObject derivative. If I try to subclass
from GObject, it tells me it's expecting an ItemFactory. I'm probably
missing something obvious.
 
MxItemFactory is an interface, so you have to subclass a GObject _and_
implement the interface.

On the other hand, if I try to subclass a Clutter.Actor, use it with
Mx.ItemView.set_item_type, and add attribute mappings, I can't seem to get
my custom properties into the class. The properties from the parent class
make it in, but any I declare in the __gproperties__ attribute of my class
just get ignored. It's fine if I subclass straight from GObject, but then
it rightfully complains that it's not a derivative of Actor.

This should work as well.


Here's some sample code to clarify both methods:

from gi.repository import GObject, Clutter, Mx
Clutter.init([])


class CustomActor(Clutter.Text):
    def get_custom(self):
        return self.get_text()

    def set_custom(self, value):
        print 'setting custom property to "%s"' % value
        self.set_text(value)

    custom = GObject.Property(get_custom, set_custom, str)



class CustomFactory(GObject.Object, Mx.ItemFactory):
    def do_create(self):
        # note the 'do_' prefix when implementing a vfunc
        print 'creating actor from factory'
        return CustomActor()


stage = Clutter.Stage()
stage.connect('destroy', lambda stage: Clutter.main_quit())

model = Clutter.ListModel()
model.set_types([str])
model.set_names(['custom'])

for i in range(10):
    model.insert_value(i, 0, 'custom value %d' % i)

view = Mx.ListView()

# either use the GType with the custom ClutterActor
#view.set_item_type(CustomActor)

# or the custom MxItemFactory
view.set_factory(CustomFactory())

view.add_attribute('custom', 0)
view.set_model(model)
stage.add_child(view)

stage.show()
Clutter.main()


I hope that helps a bit

so long

:wq buz
-- 
GnuPG Fingerprint: 2FFF FC48 C7DF 1EA0 00A0  FD53 8C35 FD2E 6908 7B82

Attachment: signature.asc
Description: Digital signature



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