[Dev] notifications about the collection itself

Andi Vajda vajda at osafoundation.org
Fri Sep 9 19:20:30 PDT 2005


> John/Ted -
> So right now the way notifications work is if any items in a collection
> get modified/etc, then a notification goes out to subscribers.
> 
> In the case of color, I'm actually interested in getting notified when
> the 'color' attribute on the collection itself, not a member of the
> collection, is changed. I can change it via a menu right now, but the
> calendar code doesn't know the color changed, so it doesn't know to
> redraw.
> 
> what would you guys think about making notifications fire for both the
> collection items, as well as changes to the collection itself?

Don't use notifications for that, use a monitor.
For example:

    class AlecsItem(Item):

       def aColorChangedSomewhere(self, op, item, attribute):

          if op == 'set' and isCollection(item) and attribute == 'color':
              print 'gosh, a colored collection changed to', item.color

Attach the monitor:

    Monitors.attach(alecsItemInstance, 'aColorChangedSomewhere', 'set', 'color')

Et voila. Monitors are persistent so you only need to set this up once.
Collection notifications, as implemented today, are a UI-only device fired 
from the wx event loop's OnIdle() method. They are asynchronous and rather 
heavy as they are broadcast all subscribers of a set, indiscriminately.

Monitors are synchronous and broadcast only to items monitoring the given 
op/attribute combination.

Andi..


More information about the Dev mailing list