Variable transfers Between Stacks and Sub-Stacks.

Trevor DeVore lists at mangomultimedia.com
Thu Mar 29 12:18:16 EDT 2007


On Mar 29, 2007, at 8:42 AM, Richmond Mathewson wrote:

> 1. So let's have a merry drop-down button on the Main
> Stack to change units.
>
> 2. on mouseUp
>       the mouseLine
>       if it is "inches" then
>         do FANCY CONVERSION ROUTINE NUMBER 999
>       end if
>      end mouseUp
>
> where FANCY CONVERSION ROUTINE NUMBER 999 pushes all
> the values contained in all the list fields on the
> main stack and all the substacks through the required
> algorithm to convert (say) millimetres to inches.

Hi Richmond (sorry, this somehow turned into a long post),

While there is nothing difficult about the example you provide above,  
I see a broadcasting system (like the one Dave has talked about) as  
making your code cleaner and easier to read.

The above example only changes the property in once place (as is  
common for many application preferences).  But there are some  
scenarios where you can change a property of an object from multiple  
locations.  For example, if I wanted to change the title of an image  
in an image cataloging application I might have a command like the  
following:

image_setProp theImageObject, "title", theNewTitle


-- Without Broadcasting --

Using your technique above you might then add a second call which  
updated the title of the image anywhere it appeared in the program  
(maybe in a thumbnail window and an editor window) so you end up with  
something like this anywhere you want to change the title:

image_setProp theImageObject, "title", theNewTitle
UpdateImageAnywhereItAppearsInProgram theStepControl


-- With Broadcasting --

Using broadcasting, you could register the thumbnail window and the  
editor window to receive messages whenever the "title" property of a  
image was updated using a handler that might be defined as follows:

object_addPropertyListener pObject, pProperties, pTargetObject, pMessage

And in practice might be called like this when a new image was created:

object_addPropertyListener theNewImageObject, "title", the long id of  
stack "ThumbnailViewer", "ImagePropertyUpdated"
object_addPropertyListener theNewImageObject, "title", the long id of  
stack "Editor", "ImagePropertyUpdated"

Now in my code I can just set the image title from anywhere I would  
like (using image_setProp) and I know that it will be updated  
everywhere in the program.  I don't have to remember to set the title  
and then call another function to update windows everywhere.


-- Implementing Broadcasting --

Some development environments, like Flash, have built-in broadcasting  
support.  Revolution does not so you end up having to create your own  
libraries to handle it.  While this is a little more effort at first  
to write the library it really pays off for folks who prefer the  
broadcasting approach.

For example, in the "image_setProp" handler (which can be used to set  
any number of properties) you would then have the following call near  
the end of it's definition which would handle broadcasting the  
changed property to any "listeners":

on image_setProp pControlReference, pProperty, pValue
     ## DO WHATEVER TO STORE PROPERTY
     ....

     ## BROADCAST PROPERTY CHANGE
     object_broadcastPropertyChange pObject, pProperties
end image_setProp

In the end you are getting the same behavior.  I happen to think  
broadcasting is a cleaner way of approaching the problem and use that  
approach in my projects as well.


-- 
Trevor DeVore
Blue Mango Learning Systems
www.bluemangolearning.com    -    www.screensteps.com
trevor at bluemangolearning.com





More information about the use-livecode mailing list