I know :D nice no? :D Specific class please!!
It's specially nice when you want to inspect it and figure out on how to use it :/ On 2012-05-14, at 16:56, Sean P. DeNigris wrote: > Holy crap, SystemProgressMorph's "instance creation" method doesn't return an > instance at all but a block. I really wish I understood this design decision > before I try to cut all this out. Yikes, check out > SystemProgressMorph>>label:min:max: > > label: shortDescription min: startMinValue max: startMaxValue > "Answer the block that updates the progress bar." > > "some fun stuff added (by kph) > > - bar value: #label. - tell me my current label. > - bar value: 'newLabel'. - enable changing the label from within the > workBlock > - bar value: #increment. - enable progress by one without keeping a > counter > - bar value: #decrement. - go backwards (if you really have to, useful > for > an abort, or rollback)! > > - bar value: newBigNum. - change the max on the fly - when you find > there > is more to do. > - bar value: (bar value: #setMax) + 20 - change the max on the fly - > when > you find there is more/less to do. > - bar value: (bar value: #setMin) - 20 - change the min on the fly - not > sure why you would want to. > " > | slot range barSize lastRefresh maxValue minValue bar| > maxValue := startMaxValue. > minValue := startMinValue. > ((range := maxValue - minValue) <= 0 or: [(slot := self nextSlotFor: > shortDescription) = 0]) > ifTrue: [^[:barVal| 0 ]]. > self recenter. > self openInWorld. > barSize := -1. "Enforces a inital draw of the morph" > lastRefresh := Time millisecondClockValue. > bar := bars at: slot. > ^[:barValArg | | barVal return newBarSize | > barVal := barValArg. > return := nil. > bar := bars at: slot. > "new fun stuff here" > barVal == #current ifTrue: [ return := barSize ]. > barVal == #label ifTrue:[ return := (labels at: slot) contents > ]. > barVal == #setMax ifTrue: [ return := maxValue. maxValue := > minValue ]. > barVal == #setMin ifTrue: [ return := minValue. minValue := > maxValue ]. > barVal == #increment ifTrue: [return := barVal := barSize + 1]. > barVal == #decrement ifTrue: [ return := barVal := barSize - 1]. > (barVal isString and: [barVal isSymbol not]) ifTrue: [ > (labels at: slot) contents: barVal. > barVal := #refresh]. > barVal == #refresh ifTrue: [self currentWorld displayWorld. > return := > true]. > (barVal == SmallInteger maxVal or: [ barVal == #finished ]) > ifTrue: > [return := slot]. > return ifNil: [ > barVal > maxValue ifTrue: [return := maxValue := > barVal]. > barVal < minValue ifTrue: [return := minValue := > barVal]. > (barVal between: minValue and: maxValue) > ifTrue: [newBarSize := (barVal - minValue / > range * BarWidth) truncated. > newBarSize = barSize > ifFalse: [barSize := > newBarSize. > (Time > millisecondsSince: lastRefresh) > 25 > > ifTrue: [barVal := #refresh ]]]. > barVal == #refresh ifTrue: [ > ((bar valueOfProperty: #useStripes) > ifNil: [false]) > ifTrue: [bar fillStyle origin: > bar position - ((Time > millisecondClockValue // 50 \\ 30) @ 0)]. > bar barSize: barSize. > self currentWorld displayWorld. > lastRefresh := Time > millisecondClockValue]]. > return] > > -- > View this message in context: > http://forum.world.st/Notify-progress-with-Announcements-instead-of-Exceptions-tp4629057p4630148.html > Sent from the Pharo Smalltalk mailing list archive at Nabble.com. >
