[squeak-dev] Progress bar design pattern
yoshiki at vpri.org
Thu Mar 31 22:06:55 UTC 2011
At Thu, 31 Mar 2011 18:53:29 -0300,
Martin Dias wrote:
> What you sent makes me think...
> I am not convinced of this other solution, but with announcements could be:
> self doA.
> self announce: (WorkAnnoucement finished: #doA).
> self doB.
> self announce: (WorkAnnoucement finished: #doB).
> self doC.
> self announce: (WorkAnnoucement finished: #doC).
> and the specific observer subscribed to this algorithm knows what percentage corresponds to each selector. And you could
> easily plug an observer that logs to Transcript.
Well, say self has an inst var called progress, which may be nil or
something that understands #value:.
progress ifNotNil: [progress value: #doA].
progress ifNotNil: [progress value: #doB].
progress ifNotNil: [progress value: #doC].
All you have to do is to assign a block that looks like:
[:v | Transcript print: v; cr].
to progress to get Transcript. Or, you can assign the bar block from
displayProgress: and get UI update. Or, the block can have some
#announce: if you want to get multiple parties to get notified.
#value: is generic. A block understands it but also you can just
create a class with #value: and let it do anything you want. Again,
if the original goal it to "decouple" the algorithm from progress
notification, complicating the entire thing with announcement is
More information about the Squeak-dev