Alec Flett wrote:
John Anderson wrote:
Actually this isn't a CPIA issue, it's a platform issue. Consider the case when a window changes size. The platform notifies us of the change and we have to update the model, but we don't need to also change the platform widget, its already up to date.
I would argue in that case that size is part of the view, not the model. Perhaps that is true of selection, really.
If it's part of the view it can't be persisted, which won't work

Perhaps what we're looking at is that there are really 2 layers of MVC going on:

1) the collection is a model, the blocks are the view - when you update an item in the collection, the blocks should change to reflect the item.
2) the blocks are the model, the widgets are the view - when a block changes, the widgets must be updated.

The problem is that sometimes the blocks are the view, sometimes the model. Currently the blocks have a pointer to the collection, which allows for updates to the "collection" model to be reflected up through the blocks all the way up to the widgets.
Blocks should always be model, widgets should always be view.

So something like selection or sizing is weird: I mean who really owns this? It seems like selection and size are really part of the state of the view.. but what view? the blocks or the widgets? We store it in the blocks because we can persist it, but I really wonder if that's the right way to do this. This also means that we can go to the block and ask the block what the selection is - but really we have to do some work to make sure that the block selection stays in sync with the widget selection.
Window size is model data wich we store in block. Selection is a little tricky, currently it's part of the block, but I'm moving it out to the collection -- actually it's really going to be part of the index on the data.
The main thing to keep straight is that event driven platform frameworks keep the widgets up to date and all we need to do is reflect the change in the model. The completely different situation occurs when the data changes and for some reason the platform can't notice it. In that case we need to update the model and synchronize the widget to the new value.
see, this is what irks me: "when the data changes...we need to update the model and..." - shouldn't the data BE the model?
When the data changes we need to update the widget, e.g. view, not the model

So maybe the question is: is the block the proper location to be storing the selection? Or perhaps, when you a ask a block for selection, it should be asking the widget what part of the view is selected (i.e. what row of a table) and then use that to determine what part of the model to return.
If the selection isn't part of the block or the collection it won't be persisted, which won't work. In relality the selection is stored in both the widget and a block or collection. We need to keep they in sync. If the widget changes its selection we need to reflect it in a persistant model. If something outside the platform changes the persistent model we need to have a way to sychronize the widgets's idea of the selection.

Alec

The problem is that we're trying to do BOTH: update the view and the model manually, and then wishing the controller wasn't getting involved. The reason for this is that we don't have complete control of our widgets: when a user clicks the mouse, the widget wants to update itself whether or not the model has actually changed.

This is the one thing that always seems to be vaguely defined in the MVC implementations I've worked with, including CPIA: proper downstream (view -> model - maybe that's upstream? anyway..) communication.

My suggestion would be for the view (i.e. the widgets) to maintain some sort of state about the fact that its changing an attribute (selection) and then ignore notifications on selection. I don't think that collection notifications should have to shoulder this burden because its really proprietary to CPIA's design.
Yes, I\d like to ignore the notification. The problem is that I can't, because some of the notificaitons are asynchronous.

Alec


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

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

Reply via email to