and a new GM is born for everyone...

David Burgun dburgun at dsl.pipex.com
Sat Apr 16 05:17:01 EDT 2005


Hi,

>The number of controls might require this in terms of speed (querying if the
>script contains is long) - the agent also uses a cached index to speed this
>up in the repeat loop though. I have also found that I use mostly templates
>and thus limit the repeat search to just groups so scripts are more
>dedicated or localized.

I handn't thought of looking in the script to see if a handler or 
function or whatever existed. Wow! That's so powerfull. Of course, I 
suppose someone *could* have already of used that name, so it might 
be better to prefix it with "MGM_" or something so that it is less 
likely to clash.

What are you worried about in terms of speed? If you said that the 
"doresize" (or whatever) was always near the start of the script then 
would this make a difference?

I do something similar to this in a Generic Arrow Resize Object I 
have created. The way I am trying to do it is to have an 
Initialization Handler in each control that sets a CustomProperty, in 
this case we could call it cpResizeHandler. The script would look 
something like this:


--
--  Called from openScipt or openCard
--
on Initialize()
put the number of controls into controlsmax
   repeat with x = 1 to controlsmax
       if "MGMInitianize" is in the script of control x then
        send "MGMInitialize" to control x
   end repeat
end

--
--  The in the Script of each Control
--
on MGMInitialize
if the script of me contains "MGMDoResize" then
   set cpResizeHandler to "MGMDoResize"
else
   set cpResizeHandler to "MGMDoResize"
end if
end


Then do the following in the resize stack command:

put this into your stack script...
<this>
on resizeStack
   MagicGM
   pass resizestack -- if you dont pass, the RevErrorDialog (RED) or other
stacks might not resize correctly although the RED still doesnt yet...
end resizeStack

on MagicGM
   put the number of controls into controlsmax
   repeat with x = 1 to controlsmax

     if  the  cpResizeHandler of control x is not empty then
       send the cpResizeHandler of control x
     end if

   end repeat
end MagicGM
</this ;>

(((***Question? What are <text> and </this ;> lines?***)))

This shoud speed it up at the expense of adding time to the openStack 
or openCard command. The advantage is that you don't have to change 
the Stack/Card Script you add a new control.

One question though. If the control does not contain an MGMInitialize 
handler, the Custom Property,  cpResizeHandler will not exist. Do I 
need a seperate test for his as in:

if exists  cpResizeHandler of control x then
    if  the  cpResizeHandler of control x is not empty then
       send the cpResizeHandler of control x
     end if
end if

Any suggestions/comments greatly appreciated.

All the Best
Dave















More information about the use-livecode mailing list