On Dec 8, 2016, at 10:31 PM, Mark Wieder 
<ahsoftw...@sonic.net<mailto:ahsoftw...@sonic.net>> wrote:
I think the best explanation of the message path is still Richard Gaskin's 
chart and web page. Although I have to give props to Dar Scott for his message 
primer as well.

I tend to think of behavior scripts (and I know there are other viewpoints on 
this, so ymmv) as private backscripts fitting into the message path right 
behind the objects that use them. And in that sense behavior scripts have the 
same functionality as other library scripts:

behavior handlers extend the functionality of an object or a group of similar 
objects

behaviors can be chained: for me this makes them more useful than substacks, 
since you can't have substacks of substacks, but behaviors allow me to have a 
library with compartmentalized functionality, i.e., a math library with a 
special section for imaginary or complex numbers.

behavior handlers can be overridden: a handler in the library script is in the 
message path unless a handler of the same name is earlier in the message path

Thanks again, Mark. Your conceptualization matches how I thought about 
behaviors until recently. I may not have accurately communicated exactly what 
I’ve seen, so I’ll take Mike Kerner’s advice and provide a couple of examples. 
Just to be clear - I don’t have a problem with behaviors, I don’t think there’s 
anything wrong with the current implementation of behaviors, and I’m not 
advocating for any changes. In fact, I think it’s pretty clever. I just wanted 
to make sure that this is the intended design and if it is, to highlight the 
potential power and complexity of behaviors that can easily be missed.

Example 1

Script of Button A
on mouseUp
   TestScript
end mouseUp

Command ScriptInA1
   Answer "you are in Button A"
end ScriptInA1

Script 2
command TestScript
   ScriptInA1
end TestScript

Given the script of button A and that script 2 is the script of the card that 
owns button A, then a mouseUp on Button A will result in a “can’t find handler 
error” when line 2 of script 2 is reached in the card. This is consistent with 
the traditional Livecode control based message path. Alternatively, if the 
behavior of Button A is set to a button with script 2, then the engine finds 
the script in button A and there is no error. This is consistent with the 
concept that script 2 is concatenated onto the end of the script of Button A. 
It is inconsistent with the traditional message path.


Example 2

Script of Button A
on mouseUp
   TestScript
end mouseUp

Command ASharedHandlerName
   Answer "you are in Button A"
   # pass ASharedHandlerName
end ASharedHandlerName

Script 3
command TestScript
   ASharedHandlerName
end TestScript

Command ASharedHandlerName
   Answer "you are in Script 3"
end ASharedHandlerName

Given the script of button A and that script 3 is the script of the card that 
owns button A, then a mouseUp on Button A will result in an answer dialog with 
“You are in Script 3” as the prompt. This is consistent with the traditional 
Livecode control based message path. Alternatively, if the behavior of Button A 
is set to a button with script 3 and you think that behaviors are a private 
message path as Mark described, you would expect that you’d still get an answer 
dialog with “You are in Script 3” as the prompt just like when script 3 was the 
card script; but you’d be wrong. Instead you get an answer dialog with the “you 
are in Button A” prompt, consistent with the idea that script 3 is concatenated 
onto the end of the script of button A rather than being the next step in the 
message path. Making things even more interesting - leaving script 3 as a 
behavior of Button A, if you uncomment the “pass” control structure in the 
script of button A, then a mouseUp on Button A will result in 
“ASharedHandlerName” being executed from Button A and then “ASharedHandlerName” 
executed in the behavior script in Script 3. This is a combination of the 
traditional message path and a concatenation of Script 3 with the script of 
Button A.

Tim Bleiler, Ph.D.
Instructional Designer, HSIT
University at Buffalo

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to