Hi Hugh and Tiemo,

That's a nice explanation, Hugh. Usually, I do it slightly differently, though. I don't pass the closeStackRequest message but lock messages instead.

on menuPick theItem
  if theItem is "Close" then
    answer "Really?" with "OK" or No"
    if it is "OK" then
      close this stack
    end if
  end if
  -- rest of script
end menuPick

-- only triggered by close stack command
on closeStack
  doStuffBeforeClosing
end closeStack

-- click closebox
on closeStackRequest
   answer "Really?" with "OK" or No"
   if it is "OK" then
     doStuffBeforeClosing
     lock messages
     close this stack
     unlock messages
   end if
end closeStackRequest

on doStuffBeforeClosing
  -- blabla
end doStuffBeforeClosing

This way, I don't need to keep states in boolean variables and avoid confusion when the cancel button is clicked.

There is nothing wrong with Hugh's approach and my aproach is hardly different, but I like to keep things as simple as possible. To make it even simpler, I could have put the doStuffBeforeClosing handler into the menuPick handler and get rid of the closeStack handler, but that would force me to add the doStuffBeforeClosing handler in all scripts that close the stack. Locking messages is particularly useful if closing the stack implies quitting the application and you want to call a script like the one at <http://runrev.info/Save%20Way%20to%20a%20Quit.htm >.

--
Best regards,

Mark Schonewille

Economy-x-Talk Consulting and Software Engineering
http://economy-x-talk.com
http://www.salery.biz
Dutch forum: http://runrev.info/rrforum/

Benefit from our inexpensive hosting services. See http://economy-x-talk.com/server.html for more info.

On 14 okt 2008, at 17:32, Hugh Senior wrote:

Hi Tiemo,

'closeStackRequest' and 'closeStack' are messages, not commands. This means
you cannot send a 'closeStackRequest' any more than you can send a
'closeStack'. You can only 'close' a stack.

A stack will always get a 'closeStack' message, but if the user clicks the red closebox the stack will also get a 'closeStackRequest' message first. This means that when the user clicks the red closeBox, a closeStackRequest
message is sent followed by a closeStack message.

Lastly, you have to 'pass closeStackRequest' to continue with the close. This is so you can optionally change your mind. This means you can stop a
closeStackRequest, but you cannot stop a closeStack.

To handle both a scripted close and a red-cross close, place your closing routine into a shared handler and trap wheter the routine has already been
run (otherwise you will get it twice when the user clicks the red
closebox)...

on mouseUp
 close this stack
end mouseUp

local isClosing
on closeStackRequest
 answer "Are you sure?" with "Yes" or "No"
 if it <> "yes" then exit closeStackRequest
 put "true" into isClosing
 doMyCloseStackStuff
 pass closeStackRequest
end closeStackRequest

on closeStack
 if isClosing <> "true" then doMyCloseStackStuff
end closeStack

on doMyCloseStackStuff
 [../..]
end doMyCloseStackStuff


I have scripted the above so you can see what happens. Personally, I would
put the trap in the doMyCloseStuff handler thus...

on doMyCloseStackStuff
 if isClosing = "TRUE" then exit doMyCloseStuff
 else put "TRUE" into isClosing
 [../..]
end doMyCloseStackStuff

Hope this helps.

/H


_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to