Sliding Divider-Resizer Object
Phil Davis
revdev at pdslabs.net
Thu Jan 8 14:47:03 EST 2009
Gregory Lypny wrote:
> Hello Everyone,
>
> I'd like to learn more about scripting interface objects and I was
> wondering whether anyone has a script for one of those sliding
> divider-resizing things like the one in Apple's Mail app that lets you
> increase the size of the message list on top while decreasing the size
> of the active message below. I started dabbling with it, and created
> a long, skinny button to be used as the divider. The first bit of my
> script was to change the cursor, but embarrassingly, I ran into a wall
> because the following does nothing except cause the default cursor to
> flicker rapidly.
>
> on mouseEnter
> set the cursor to hand
> end mouseEnter
>
> The mouseWithin handler did nothing either.
>
> Any hints would be most appreciated.
>
> Gregory
Hi Gregory,
Here's something I used in a recent project. The adjustor object is a
button, and it keeps the bottom of the "top" field a consistent distance
from the "bottom" field while allowing you to move the boundary between
them vertically.
Other facts:
- The button height = (top of "bottom" fld) - (bottom of "top" field)
- the button is in a group, referred to as "the owner of the target".
- the button has "uTopBounds" and "uBottomBounds" custom props telling
how close (in pixels) it can get to the top of the top field & the
bottom of the bottom field.
-- "adjustor" button script:
on mouseDown
-- params are <shortNameOfUpperField>,<shortNameOfLowerField>
_resizeFields "editItem","editItemDescription"
end mouseDown
-- handler in card script:
on _resizeFields pTopField,pBottomField
-- prep
get the loc of the target
put item 1 of it into tMyH
put (item 2 of the loc of the owner of the target - item 2 of it)
into tOffsetV
put the rect of fld pTopField into tTopRect
put item 2 of tTopRect + (the uTopBounds of the target) into tTopBounds
put the rect of fld pBottomField into tBottomRect
put item 4 of tBottomRect - (the uBottomBounds of the target) into
tBottomBounds
repeat until the mouse is up
put the mouseV into tMouseV
if (tMouseV < tTopBounds) or (tMouseV > tBottomBounds) then next
repeat
lock screen
set the loc of the owner of the target to (tMyH,tMouseV+tOffsetV)
put the top of the owner of the target into item 4 of tTopRect
put the bottom of the owner of the target into item 2 of tBottomRect
set the rect of fld pTopField to tTopRect
set the rect of fld pBottomField to tBottomRect
-- reposition bottom field label if there is one
get (pBottomField && "label")
if there is a field it then
set the top of fld it to the top of fld pBottomField
end if
unlock screen
wait 0 secs
end repeat
end _resizeFields
Hopefully this will get you started.
--
Phil Davis
PDS Labs
Professional Software Development
http://pdslabs.net
More information about the use-livecode
mailing list