2016-02-08 11:31 GMT+01:00 Nicolai Hess <nicolaihess@gmail.com>:


2016-02-08 10:37 GMT+01:00 stepharo <stepharo@free.fr>:
Hi guys

I should say that I'm sick (gift from my little boy) so may be this is obvious.

I'm looking at the code of Spec and I hate this code :)

widgetDo: aBlock

�� �� ^ self widget ifNotNil: aBlock


I do not see why widgetDo: has to test for nil
So I transformed

widgetDo: aBlock

�� �� ^ self widget ifNotNil: aBlock

into


widgetDo: aBlock

�� �� ^ aBlock cull: self widget

BTW I hate all the cull: call. They are connected with sloppiness). It is far too easy to use cull:
I do not know how many arguments, I do not care I use cull:
cull: is slow slow and help producing messing API.

aBlock value: value: value:��

does not much better than cull:, imho. Usually, the api documentation of the block are just what you'll find in existing code, nothing else.
��

And it broke. The methodBrowser example did not work anymore and many others.
Debugger felt down....
I feel sad. Now my brain is dead so I cannot concentrate more.


Stef


This is a big problem with morphic/spec ui elements. You never know for sure
what code this
self update ---> search through all (dynamicly added) dependents and notify
will finally call.

I don't think there is any way around it. You have to decouple view(s) from model(s), and, hence have those propagation constraints by way of notifications.

Of course, a true alternative would be to use a proper propagation constraint system...
��
In this example we are about to *built* the widgets and in this run , we change a component that
will update all dependents goes back and forth between model, adapter and widget. And all
before the widget is actually accessible for the widgetDo: call.

(and, REALLY we need to clean this up. This is really bad code if we announce a textChanged announcement for
a text component, if we *initialize* an *empty textcomponent* with an *empty text*!).

In short, whatever way you look at it, this initialization difficulty is a hard problem.

Morphic makes it a bit harder than expected because a Morph can be considered as active as soon as it is created, not just when it has been opened in the world.

Thierry