[Dev] notifications about the collection itself

Ted Leung twl at osafoundation.org
Mon Sep 12 15:10:19 PDT 2005


Let's take this up at the review on Thursday.

Ted

On Sep 12, 2005, at 10:15 AM, Alec Flett wrote:

> John Anderson wrote:
>> Maybe we should get rid collection notifications and use monitors  
>> instead since notification don't do what we need -- what do you  
>> think?
>>
> I think monitors and notifications each have their place, and I'd  
> be really against getting rid of notifications - I think  
> notifications are a fine solution to this problem, and their  
> asynchronicity is important for having a responsive app.
>
> (though it would be nice if the fact that one is asynchronous and  
> one is synchronous wasn't a decision that we had to make. In my  
> case, I'd probably prefer an asynchronous monitor, but using the  
> detail view's approach (a collection with one item) seems like  
> overkill to watch just one attribute)
>
> In the end I'm going to use a monitor for the case of color - its  
> really the right tool for the job in this case and the  
> synchronicity shouldn't be too much a problem
>
> Alec
>
>> John
>>
>> Andi Vajda wrote:
>>
>>>
>>>> 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..
>>
>

----
Ted Leung                 Open Source Applications Foundation (OSAF)
PGP Fingerprint: 1003 7870 251F FA71 A59A  CEE3 BEBA 2B87 F5FC 4B42




More information about the Dev mailing list