lampert@yale.UUCP (Robin Lampert) (06/16/88)
I'm working on a hypercard stack. It has (background) buttons which pop up (background) fields, and then clicking on the field makes it go away. Unfortunately, there are also some transparent card buttons which connect to other cards which overlap with the fields. So, when the user clicks on the field in a spot which happens to also have one of these transparent buttons there, the user ends up on a different card, instead of simply getting rid of the field. I'd like to fix it so that this doesn't happen. I'd like to be able to freeze/unfreeze all the card buttons (but not the background buttons) in a single command or very short sequence. (Disabling all the card buttons one at a time in a loop takes too much time.) Does anyone know how to do this? or have any other possibly useful suggestions? -- -Robin Lampert lampert@cs.yale.edu
pem@cadnetix.COM (Paul Meyer) (06/18/88)
[]
Suggestion 1:
Make the link buttons' scripts check for the popped-openness
of the fields that should obscure them before doing their jumps:
on mouseup -- link unless obscured
if not the visible of field xyzzy
go to card 71077345
end mouseup
Suggestion 2:
Have you thought about using a global Hypertalk variable, or a
hidden background field, to control the *buttons'* scripts?
This would also simplify the logic for determining when to
disable the buttons, too: (pardon any syntax problems--I don't do
Hypertalk that often.)
on mouseup -- pop up my field
if the visible of field xyzzy then
hide field xyzzy
put field popcount - 1 into field popcount
else
show field xyzzy
put field popcount + 1 into field popcount
endif
end mouseup
on opencard -- on entering a card of this background, close all the ~
popups.
hide field xyzzy
hide field plugh
hide field dwarf
put 0 into field popcount
end opencard
on mouseup -- link if no fields popped up
if field popcount < 1 go to card 71077345
end mouseup
Suggestion 2':
Perhaps you want the link buttons to still be creatable by the
"create link" option. In this case, you could follow method 2 but
patch the "go" command at the background level. (This is where my
lack of recent hyperhacking shows badly, but a few minutes with the
manuals should make this work.) Leave the opencard and popup-button
handlers alone, but put this in the background script:
on go alfa bravo charlie delta echo foxtrot golf hotel
if (alfa = "to") and (bravo = "card") and (charlie = "id") -- or ~
some such nonsense--check a "create link"'ed button ~
for what the syntax it uses is
if field popcount < 1 go to card id delta
else
pass go alfa bravo charlie delta echo foxtrot golf hotel --collect $200
endif
end go
Summary: instead of manipulating all the buttons, make their behavior
match what you want them to do--that's the power of scripting!
Paul Meyer pem@cadnetix.COM
Cadnetix Corp.
5775 Central Ave. {uunet,boulder}!cadnetix!pem
Boulder, CO 80301 (303)444-8075x244pem@cadnetix.COM (Paul Meyer) (06/18/88)
[]
Oops--I did all those examples assuming that you wanted the
button clicked again to hide the field, but that change is pretty
trivial...
Paul Meyer pem@cadnetix.COM
Cadnetix Corp.
5775 Central Ave. {uunet,boulder}!cadnetix!pem
Boulder, CO 80301 (303)444-8075x244