Grant Baillie wrote:
On 29 Jun, 2006, at 15:16, Bryan Stearns wrote:
- there's a list of dependent attributes, allowing us to set up item/attribute notifications to keep things up to date in the UI. If we use Calculateds for indexing, we might need the repository to hook into this so that indexes get updated when dependent attributes change - we'll talk about this more later.
Interesting: What parts of the UI (tables, attribute editors, ...) set up these notifications?
Block :-)

Any Block that implements onItemNotification, has a viewAttribute attribute, and has an item in 'contents', will get that onItemNotification method called if the attribute with that name changes on that item while the block is rendered. This "viewAttribute on the contents item" thing is the default behavior implemented by Block.getWatchList; if more attributes (or even attributes on other items) need to be watched, the block can override getWatchList to add other item/attribute pairs (or replace the list completely).

You can see many of these overrides in Detail.py: this is how, for instance, item-dependent visibility is handled (so when you toggle the "all day" checkbox, the actual attribute change fires a synchronous notification through this mechanism, which notifies the blocks that want to update the detail view display of an event's start & end time as you're dragging it around the calendar, or show or hide themselves based on the allDay attribute.

Fun fact to know and tell: It turns out that there are seven blocks who need to update themselves when allDay changes: the two "time" parts of start & end time, the "at" labels before each of them, the status and timezone popups (we don't show it for allday events), and the block containing the allday label/checkbox itself (which hides itself on read-only non-allday events).

Because this mechanism is centralized in Block, there's only one repository item-watcher set up, even though there are six subscribers, which reduces overhead for Andi.

One caveat: Be careful not to change attribute values in your onItemNotification method, unless you want to spend forever there.

...Bryan

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev

Reply via email to