a little pearl from SystemProgressMorph

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

a little pearl from SystemProgressMorph

Tudor Girba-2
Just for fun read the below piece of code :)


SystemProgressMorph>>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]

Cheers,
Doru

--
www.tudorgirba.com

"Every thing has its own flow"

Reply | Threaded
Open this post in threaded view
|

Re: a little pearl from SystemProgressMorph

Sean P. DeNigris
Administrator
Tudor Girba-2 wrote
Just for fun read the below piece of code :)
I don't understand... you mean you don't have to implement a custom method dispatch system to notify progress, lol?!?!

I'm glad that snippet no longer exists in Pharo :) There is more cleaning to be done there, but at least we have the beginnings of a real model.

Sean
Cheers,
Sean
Reply | Threaded
Open this post in threaded view
|

Re: a little pearl from SystemProgressMorph

Stéphane Ducasse
In reply to this post by Tudor Girba-2
And I removed the strip behavior.
In 2.0 it is not there.

Stef

On Jul 25, 2012, at 4:47 PM, Tudor Girba wrote:

> Just for fun read the below piece of code :)
>
>
> SystemProgressMorph>>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]
>
> Cheers,
> Doru
>
> --
> www.tudorgirba.com
>
> "Every thing has its own flow"
>


Reply | Threaded
Open this post in threaded view
|

Re: a little pearl from SystemProgressMorph

Tudor Girba-2
I checked in Pharo 2.0, and it looks ... well, how should I put it:
it's confusing. You took a clear piece of code that could be printed
on a nice A4 paper, and transformed it into a myriad of delegations.

I think you are just too afraid of if-statements. Clearly, a better
solution would have been to just use caseOf:.

Doru

p.s. :)


On Thu, Jul 26, 2012 at 8:55 PM, Stéphane Ducasse
<[hidden email]> wrote:

> And I removed the strip behavior.
> In 2.0 it is not there.
>
> Stef
>
> On Jul 25, 2012, at 4:47 PM, Tudor Girba wrote:
>
>> Just for fun read the below piece of code :)
>>
>>
>> SystemProgressMorph>>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]
>>
>> Cheers,
>> Doru
>>
>> --
>> www.tudorgirba.com
>>
>> "Every thing has its own flow"
>>
>
>



--
www.tudorgirba.com

"Every thing has its own flow"

Reply | Threaded
Open this post in threaded view
|

Re: a little pearl from SystemProgressMorph

Nicolas Cellier
As far as the DSL remain Turing complete, that does not matter ;)

Nicolas

2012/7/27 Tudor Girba <[hidden email]>:

> I checked in Pharo 2.0, and it looks ... well, how should I put it:
> it's confusing. You took a clear piece of code that could be printed
> on a nice A4 paper, and transformed it into a myriad of delegations.
>
> I think you are just too afraid of if-statements. Clearly, a better
> solution would have been to just use caseOf:.
>
> Doru
>
> p.s. :)
>
>
> On Thu, Jul 26, 2012 at 8:55 PM, Stéphane Ducasse
> <[hidden email]> wrote:
>> And I removed the strip behavior.
>> In 2.0 it is not there.
>>
>> Stef
>>
>> On Jul 25, 2012, at 4:47 PM, Tudor Girba wrote:
>>
>>> Just for fun read the below piece of code :)
>>>
>>>
>>> SystemProgressMorph>>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]
>>>
>>> Cheers,
>>> Doru
>>>
>>> --
>>> www.tudorgirba.com
>>>
>>> "Every thing has its own flow"
>>>
>>
>>
>
>
>
> --
> www.tudorgirba.com
>
> "Every thing has its own flow"
>

Reply | Threaded
Open this post in threaded view
|

Re: a little pearl from SystemProgressMorph

Stéphane Ducasse
In reply to this post by Tudor Girba-2

On Jul 27, 2012, at 1:06 PM, Tudor Girba wrote:

> I checked in Pharo 2.0, and it looks ... well, how should I put it:
> it's confusing. You took a clear piece of code that could be printed
> on a nice A4 paper, and transformed it into a myriad of delegations.
>
> I think you are just too afraid of if-statements. Clearly, a better
> solution would have been to just use caseOf:.

I did not check the code but using blocks as objects was a bad idea.

>
> Doru
>
> p.s. :)
>
>
> On Thu, Jul 26, 2012 at 8:55 PM, Stéphane Ducasse
> <[hidden email]> wrote:
>> And I removed the strip behavior.
>> In 2.0 it is not there.
>>
>> Stef
>>
>> On Jul 25, 2012, at 4:47 PM, Tudor Girba wrote:
>>
>>> Just for fun read the below piece of code :)
>>>
>>>
>>> SystemProgressMorph>>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]
>>>
>>> Cheers,
>>> Doru
>>>
>>> --
>>> www.tudorgirba.com
>>>
>>> "Every thing has its own flow"
>>>
>>
>>
>
>
>
> --
> www.tudorgirba.com
>
> "Every thing has its own flow"
>


Reply | Threaded
Open this post in threaded view
|

Re: a little pearl from SystemProgressMorph

Tudor Girba-2
I think you missed my p.s. :)

Doru


On Fri, Jul 27, 2012 at 2:21 PM, Stéphane Ducasse
<[hidden email]> wrote:

>
> On Jul 27, 2012, at 1:06 PM, Tudor Girba wrote:
>
>> I checked in Pharo 2.0, and it looks ... well, how should I put it:
>> it's confusing. You took a clear piece of code that could be printed
>> on a nice A4 paper, and transformed it into a myriad of delegations.
>>
>> I think you are just too afraid of if-statements. Clearly, a better
>> solution would have been to just use caseOf:.
>
> I did not check the code but using blocks as objects was a bad idea.
>
>>
>> Doru
>>
>> p.s. :)
>>
>>
>> On Thu, Jul 26, 2012 at 8:55 PM, Stéphane Ducasse
>> <[hidden email]> wrote:
>>> And I removed the strip behavior.
>>> In 2.0 it is not there.
>>>
>>> Stef
>>>
>>> On Jul 25, 2012, at 4:47 PM, Tudor Girba wrote:
>>>
>>>> Just for fun read the below piece of code :)
>>>>
>>>>
>>>> SystemProgressMorph>>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]
>>>>
>>>> Cheers,
>>>> Doru
>>>>
>>>> --
>>>> www.tudorgirba.com
>>>>
>>>> "Every thing has its own flow"
>>>>
>>>
>>>
>>
>>
>>
>> --
>> www.tudorgirba.com
>>
>> "Every thing has its own flow"
>>
>
>



--
www.tudorgirba.com

"Every thing has its own flow"

Reply | Threaded
Open this post in threaded view
|

Re: a little pearl from SystemProgressMorph

Stéphane Ducasse

On Jul 27, 2012, at 2:56 PM, Tudor Girba wrote:

> I think you missed my p.s. :)

No I saw it. Don't worry :)

>
> Doru
>
>
> On Fri, Jul 27, 2012 at 2:21 PM, Stéphane Ducasse
> <[hidden email]> wrote:
>>
>> On Jul 27, 2012, at 1:06 PM, Tudor Girba wrote:
>>
>>> I checked in Pharo 2.0, and it looks ... well, how should I put it:
>>> it's confusing. You took a clear piece of code that could be printed
>>> on a nice A4 paper, and transformed it into a myriad of delegations.
>>>
>>> I think you are just too afraid of if-statements. Clearly, a better
>>> solution would have been to just use caseOf:.
>>
>> I did not check the code but using blocks as objects was a bad idea.
>>
>>>
>>> Doru
>>>
>>> p.s. :)
>>>
>>>
>>> On Thu, Jul 26, 2012 at 8:55 PM, Stéphane Ducasse
>>> <[hidden email]> wrote:
>>>> And I removed the strip behavior.
>>>> In 2.0 it is not there.
>>>>
>>>> Stef
>>>>
>>>> On Jul 25, 2012, at 4:47 PM, Tudor Girba wrote:
>>>>
>>>>> Just for fun read the below piece of code :)
>>>>>
>>>>>
>>>>> SystemProgressMorph>>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]
>>>>>
>>>>> Cheers,
>>>>> Doru
>>>>>
>>>>> --
>>>>> www.tudorgirba.com
>>>>>
>>>>> "Every thing has its own flow"
>>>>>
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> www.tudorgirba.com
>>>
>>> "Every thing has its own flow"
>>>
>>
>>
>
>
>
> --
> www.tudorgirba.com
>
> "Every thing has its own flow"
>