On 21 Mar 2013, at 12:08, Benjamin <benjamin.vanryseghem.ph...@gmail.com> wrote:

> Yes, endless loop with step as far as I remember
> 
> stepAt: millisecondClockValue in: aWindow
>       | newText |
> 
>       (CodeHolder smartUpdating and: [(millisecondClockValue - self 
> timeOfLastListUpdate) > 8000]) "Not more often than once every 8 seconds"
>               ifTrue:
>                       [self updateListsAndCodeIn: aWindow.
>                       timeOfLastListUpdate := millisecondClockValue].
> 
>       newText := self contentsIsString
>               ifTrue: [self selection]
>               ifFalse: ["keep it short to reduce time to compute it"
>                       self selectionPrintString ].
>       newText = contents ifFalse:
>               [contents := newText.
>               self changed: #contents]
> 
> stepTimeIn: aSystemWindow
>       ^ (selectionUpdateTime ifNil: [0]) * 10 max: 1000
> 
> Tadaaa :)
> The old Browser was doing the same, and a lot of Morphs are doing this :s

Yeah ;-)

Now, from the user/developer standpoint it is of course nice to have an IDE 
that is as close as possible to a live objects environment. For browsers, 
announcement are a solution. For inspectors or debuggers showing arbitrary 
instance variables of objects, the question of how to implement that behaviour 
seems like an open question.  

> Ben
> 
> On Mar 21, 2013, at 12:00 PM, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> 
>> Ben,
>> 
>> But then how does this work ?
>> 
>> | point |
>> point := 1@2.
>> point inspect.
>> [ 5 seconds asDelay wait.
>>  point setX: 10 setY: 20 ] fork. 
>> 
>> You can see the inspector change its printString, without 
>> ValueHolders>>contents: being involved, just a direct instance variable 
>> assignment.
>> 
>> Sven
>> 
>> On 21 Mar 2013, at 11:41, Benjamin <benjamin.vanryseghem.ph...@gmail.com> 
>> wrote:
>> 
>>> For this kind of situation, my solution is to use a valueHolder
>>> 
>>> instead of storing your string directly in an inst var, store it into the 
>>> value holder
>>> 
>>> initialize
>>>     string := '' asValueHolder
>>> 
>>> string: aString
>>>     string contents: aString
>>> 
>>> string
>>>     ^ string contents
>>> 
>>> And then what you can do in your initialise is 
>>> 
>>> string whenChangedDo: [:newValue | self label contents: newValue ]
>>> 
>>> Something like this should work ^^
>>> 
>>> 
>>> The other solution (which is baaad, but can still be seen) is to have a 
>>> step method refreshing the Morph.
>>> But this is really not efficient
>>> 
>>> Hope it helps,
>>> Ben
>>> 
>>> On Mar 21, 2013, at 11:24 AM, MartinW <w...@fastmail.fm> wrote:
>>> 
>>>> I asked the same question on Stackoverflow
>>>> (http://stackoverflow.com/questions/15534305/how-to-bind-a-labelmorph-textmorph-to-a-variable-so-that-the-morph-reflects-chan)
>>>> but as i do not know how much the audiences overlap i hope you do not mind
>>>> if i repeat it here:
>>>> 
>>>> How to bind a LabelMorph/TextMorph to a variable so that the Morph reflects
>>>> changes of the variable?
>>>> 
>>>> - I have an object with a variable containing a String.
>>>> - I have a window containing a LabelMorph/TextMorph (or some other Morph
>>>> that displays Text?).
>>>> How do i bind the LabelMorph/TextMorph to the variable, so that the label
>>>> updates when the String in the variable changes?
>>>> 
>>>> - classic Smalltalk-80 dependent/change/update mechanism?
>>>> - Pharo Announcement framework?
>>>> - something different??
>>>> How would i do this? Which Morph should i use?
>>>> 
>>>> Martin.
>>>> 
>>>> 
>>>> 
>>>> --
>>>> View this message in context: 
>>>> http://forum.world.st/How-can-my-Morph-reflect-changes-in-the-object-it-displays-tp4677629.html
>>>> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
>>>> 
>>> 
>> 
>> 
> 


Reply via email to