So I have a working mechanism to add a "Don't Ask Again" check box to the existing standard Answer Dialog on the fly. I offer it up to the community for anyone who needs it and for anyone who may want to improve the code. The scripts are below. There is a sample usage you can place in a clickable button and below that is a BEHAVIOR script that must be in button whose name matches what is used in the clickable button.

This is the first time I have really found a use for the "before" and "after" handlers. What a great addition to LiveCode!

Essentially, I add a behavior to the card of the standard "Answer Dialog" that positions and cleans up the Don't Ask Again check box AFTER the proOpenCard handler has positioned everything else AND a BEFORE mouseUp handler to trap clicks for changing the checkbox hilite that would otherwise close the dialog and return a clicked button name.

I needed to set a number of properties for the checkbox because the preOpenCard treats ANY button in the Answer Dialog like regular buttons and hides those not in use by making them 1px in size and moving them off screen. I may not have needed to change every property I did, but I didn't have the time to go through the Answer Dialog card script to determine exactly what properties those scripts were changing that I needed to reset.

I think it would be great in LC, Ltd. could fold this into the standard 'answer' command some how.


-- Sent when the mouse is released after clicking
-- pMouseButton specifies which mouse button was pressed
on mouseUp pMouseButton
  dontaskagain "on"
  answer warning "Some message I may not want to see again." with "Cancel" or "OK" titled "A Message"
  put it into tAnswer
  put dontaskstatus() into tDontAskAgain
  dontaskagain "off"
  --
  put "Don't Ask is:"&&tDontAskAgain &&"And button clicked is:"&&tAnswer
end mouseUp

command dontaskagain pActivate
  switch pActivate
    case "on"
      set the behavior of cd 1 of stack "Answer Dialog" to the long id of btn "DontAskBehavior" of this cd
      break
    case "off"
      set the behavior of cd 1 of stack "Answer Dialog" to empty
      delete btn "DontAskAgain" of cd 1 of stack "Answer Dialog"
      break
  end switch
end dontaskagain

function dontaskstatus
  if exists(btn "DontAskAgain" of cd 1 of stack "Answer Dialog") then
    put the hilite of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" into tDontAskAgain
    return tDontAskAgain
  else
    return false
  end if
end dontaskstatus

BEHAVIOR BUTTON SCRIPT

after preOpenCard
  if exists(btn "DontAskAgain" of cd 1 of stack "Answer Dialog") then
    set the style        of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to "checkbox"     set the autoHilite   of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to false     set the opaque       of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to false     set the threeD       of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to false     set the showBorder   of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to false     set the hiliteBorder of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to false

    set the height       of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to 25     set the width        of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to 120     set the bottomLeft   of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to the bottomLeft of cd 1 of stack "Answer Dialog"
  else
    -- setup the templateButton
    set the style of the templateButton to "checkbox"
    set the label of the templateButton to "Don't Ask Again."
    --
    create btn "DontAskAgain" in cd 1 of stack "Answer Dialog"
    --
    reset the templateButton
    --
    set the style        of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to "checkbox"     set the autoHilite   of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to false     set the opaque       of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to false     set the threeD       of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to false     set the showBorder   of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to false     set the hiliteBorder of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to false

    set the height       of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to 25     set the width        of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to 120     set the bottomLeft   of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to the bottomLeft of cd 1 of stack "Answer Dialog"
  end if
end preOpenCard

before mouseUp pMouseButton
  -- if the target is the check box, check the box and do not pass mouseUp
  if the long ID of the target = the long id of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" then     set the hilite of btn "DontAskAgain" of cd 1 of stack "Answer Dialog" to not (the hilite of btn "DontAskAgain" of cd 1 of stack "Answer Dialog")
    exit to top
  end if
end mouseUp


_______________________________________________
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