[comp.sys.mac.hypercard] Easy Buttons...

90_GRAZA%UNION.BITNET@MITVMA.MIT.EDU (05/19/88)

--Easy Buttons, By Jason Grazado, 5/18/88
--This script enables you to have simple control over all your buttons
--If you paste it in to your Card/Background/Stack/Home Card you will
--be able to do the following to buttons within the realm that this
--script has control of, while still using the 'browse' tool:
--     'Pop Open' its script by clicking with the command key down
--     Reposition it by holding down the option key and dragging it
--     constrain movement by holding down the shift key along w/option
--
--It is useful as you can manipulate buttons scripts while testing
--a stack without having to continuously choosing the button tool.
--
--It also, via a On NewButton script, sets the script of every new
--to allow for your own mousedown and mousestilldown scripts as long
--as they do not require the use of modifier keys.
--
--It is pretty much self explainatory...but is probably very unorthodoxed
--so if anyone has good ideas for improvements, features, bug fixes or
--speed improvement, feel free to modify it, but send me a copy so I
--might learn something.
--
--I hope some people might find it useful...but if you don't really
--understand hierarcy withing hypercard, I suggest you be careful with
--it.  Good Luck.
--         Jason Grazado
--         90_grazadoj@union.bitnet
--
--P.S.
--    Sorry its so long.......

on mousedown
  global diffX,DiffY,ShiftDir,targloc
  if the commandkey is down then edit script of the target
  if the optionkey is not down then exit mousedown
  put the loc of the target into TargLoc
  put (item 1 of TargLoc - item 1 of the clickloc) into diffX
  put (item 2 of TargLoc - item 2 of the clickloc) into diffY
  if the shiftkey is down then
    GetShiftDir
  else
    put "" into shiftDir
  end if
end mousedown

on mousestilldown
  global TargLoc,DiffX,Diffy,shiftDir
  if the optionkey is not down then exit mousestilldown

  if shiftDir is "H" then
    --confine along horizontal exis
    put (item 1 of the mouseloc + diffX) & "," & (item 2 of TargLoc) B
    into NewLoc
  else

    if shiftDir is "V" then
      --confine along vertical axis
      put (item 1 of TargLoc) & "," & (item 2 of the mouseloc+ diffY) B
      into NewLoc
    else

      --Do not restrain movement at all
      put (item 1 of the mouseloc + diffX) & "," & (item 2 of the mouselocB
      + diffY) into NewLoc

    end if
  end if
  set the loc of the target to NewLoc
end mouseStillDown

on GetShiftDir  --Which Axis Restrain?
  global shiftdir
  put abs(item 1 of the mouseloc - item 1 of the clickloc) into Horiz
  put abs(item 2 of the mouseloc - item 2 of the clickloc) into Verti
  if horiz is verti then
    getnewdir
  else
    if horiz > verti then
      put "H" into shiftdir
    else
      put "V" into shiftdir
    end if
  end if
end GetShiftDir

on modifier
  global ismodified
  if the shiftkey is down or the commandkey is down or the optionkey isB
  down then
    put true into isModified
  else
    put false into isModified
  end if
end modifier

on newbutton
  put the name of the target into NewTarget
  put "On MouseDown" & return after NewScript
  put "global IsModified" & return after NewScript
  put "Modifier --Check for Sft/Cmd/Opt Keys down" & Return B
  after NewScript
  put "if isModified is true then pass MouseDown --to the stack" & return B
  after NewScript
  put Return after NewScript
  put "--your MouseDown script begins here" & return & returnB
  after NewScript
  put "End MouseDown" & return & Return & Return after NewScript
  put "On MouseUp" & return & return after NewScript
  put "End MouseUp" after NewScript
  set the script of NewTarget to NewScript
end newbutton

--Oops...change all those random capital B's to option-return characters in
HC.