Back to button basics
Tereza Snyder
tereza at califex.com
Wed Dec 6 00:30:28 EST 2006
On Dec 5, 2006, at 9:05 PM, Jan Sælid wrote:
> ...
> What I want to do is to just change the icon according to the state of
> onstate property. Should I use a visited icon or a hilited icon? No
> matter
> what I turn off or on I seem to get some additional behaviour. Like
> a border
> or the traversal border. I’m sorry that I have to bother you with
> this but
> my early days of lessons is just hidden under layers of other
> priorities.
>
If all the buttons do is signal a state change that will be acted on
later, I would put the following script in the group:
on mouseup
set the hilite of the target to not (the hilite of the target)
end mouseup
I would set the hiliteIcon property to get my custom icon. I would
set the autohilite of the buttons to false, and just to make sure I
would set the hiliteborder and hilitefill of the buttons to false, too.
If I didn't want a focus border (and I never do), I would set the
showfocusborder of the buttons AND of the group to false (otherwise,
in Windows, the dotted line focus border shows up on the buttons
anyway).
If I want rollover behavior, I would use the new hoverIcon property
instead of the autoArm and armedIcon property; so I'd set autoArm of
the buttons to false, and I would set the armBorder and armFill of
the buttons to false too, for good measure.
I'd set the traversalOn of the group and the buttons to true.
I'd avoid the visitedIcon unless you really have a "visited" state
you need to convey (i.e. this button has been clicked already but
it's not disabled--I guess it's a Unix thing.)
If I need to carry around the state of the buttons (assuming they
record states), I'd do something like:
repeat with N = 1 to the number of buttons of grp "states"
put the hilite of btn N of grp "states" into \
tStateArray[the short name of btn N of grp "states"]
end repeat
...and then later:
if tStateArray["meaningfulButtonName"] then ....
If it's against your religion to conflate a gui state with a program
state, it's still easier and clearer when you avoid elaborate if
statements, just to transfer Boolean values; that is, use:
set the hilite of me to the onstate of me
rather than:
if the onState of me is true then set the hilite of me to true
HTH,
t
--
Tereza Snyder
Califex Software, Inc.
www.califexsoftware.com
--
Tereza Snyder
Califex Software, Inc.
www.califexsoftware.com
More information about the use-livecode
mailing list