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