It has been done like that because sometimes ( and in fact quite often for complex UIs ), the model want to perform some actions before the UI is updated. But I am agree that for some instructions, like selection changes, it could (should ?) be send directly by the morph.
Ben On Feb 6, 2012, at 5:49 AM, S Krish wrote: > > I am checking out on the basics of the PluggableTextMorph and > PluggableListMorph .. and its cousins. > > PluggableListMorph >> > changeModelSelection: anInteger > > setIndexSelector ifNotNil: > [model perform: setIndexSelector with: anInteger]. > > here it is the responsibility of the model to send #changed: > getIndexSelector. why..? > > why not a simpler generic: > > changeModelSelection: anInteger > > setIndexSelector ifNotNil: > [model perform: setIndexSelector with: anInteger]. > "sends the call to all dependents of the model implicitly" > model perform: #changed: with: getIndexSelector > > thereof the models anywhere need not bother sending #changed: calls... ! > > similarly: > > acceptTextInModel > > ..... > [^setTextSelector isNil or: > [setTextSelector numArgs = 2 > ifTrue: [model perform: setTextSelector with: > acceptedText with: self] > ifFalse: [model perform: setTextSelector with: > acceptedText]] > ] ensure: [unstyledAcceptText := nil]. > model perform: #changed with: getTextSelector > > We can avoid these in the methods if implemented across all Pluggable??Morphs > > Workspace class>> > openContents: aString > > ^ self new > open; > contents: aString; "funny is this itself calls #changed:" > "changed: #contents;" > yourself > > Makes common sense to me.. rather than expecting the model to explicity call > #changed:..this "view" / widget knows its model and it implicitly invoking > #changed: is cleaner abstraction, unless a use case exists which may break > infrastructure/ whole base doing this.. > > This way all models associated with various Pluggable??Morphs will work > perfectly fine on just a setter call without extra line being added > everywhere in the application code, apps need to bother about changes to > other symbol viz: updating a list selection index causes another widget to > refresh its content.. > > > >
