Drag Element
The "Drag Element" Behavior
What it does
Makes an element of a multi-sprite draggable. When you attach this
to a Window Element or Menu Element,
when the user mouses down on the element, they can drag the element
around as long as you also have a copy of the "Drag
Element b" parent script in a cast. If you don't have a copy
of this in a cast, WFS will remind you to do it because the "Drag
Element" behavior needs the "Drag Element b" parent script.
You can configure the "Drag Element" behavior so that the
element is constrained in its movement within a rectangle related to
the position of the background sprite of the multi-sprite that the element
is part of. By WFS convention, the background element of a multi-sprite
is the element below the Manager in the Score.
When you make an element draggable, you may wish to also drop the "Cursor
Control" behavior on the element and configure that behavior
so that it is set to "Drag and Drop" so the cursor indicates
to the user that the element is draggable. You don't have to do this,
but it is sound interface design.
This behavior is used in scene 13
of the demo. To find it used in the demo DIR file, open the DIR, display
the Score, then open the WFS 4 cast in the Cast window, right-click
on the "Drag Element" behavior, and select "Find in Score".
What to attach it to
Attach "Drag Element" to Window Elements or Menu Elements
(not to Managers). Window Elements and Menu Elements have the "4:
Window/Menu Element" behavior attached to them.
"Drag Element b" parent script
If you use the "Drag Element" behavior, drop a copy of the
"Drag Element b" parent script into
a cast. You don't need to do anything else concerning this script. You
just need one copy of it in some cast.
Parameter Dialog Box

If you leave the first box checked, then the element will be brought
to front on mousedown. This doesn't bring the window it's part of to
front. Whether the window it's part of is brought to front depends on
the configuration of the
Window Manager's Parameter Dialog Box. If the top box in the graphic
to the right is not checked, the element is not brought to front on
mouseDown..
If you leave the second box unchecked, then you'll be able to drag
the element around without constraints. If you check this box, then
the element will be constrained in its motion by the margins you define
in the next four boxes. These margins are relative to the background
element of the window that the element you've dropped the behavior on
is part of.
If you check the top box and leave the others at 0, then the element
will be constrained in its movement to be within the background sprite
of the multi-sprite the element is part of.
Positive values among the last four parameters are like margin settings.
Negative values make the constraints move beyond the constraining window's
border.
In the graphic, the check box is checked, so constraints are in effect.
The Left Margin is set to 20. This means that the element will not be
able to be dragged farther left than 20 pixels to the right of the window's
left.
The Top Margin is 0, so the element will be draggable no higher than
the window's top.
The Right Margin is -50, so the element will be draggable 50 pixels
to the right of the window's right border, ie, negative values expand
the border.
Public Handler
wfsSetDragConstraints BringElementToFrontWhenDragging,
constrainToWindow, theLeft, theTop, theRight, theBottom
Function
wfsSetDragConstraints allows you to change the constraints on the fly.
You don't need to call this unless, after the sprite becomes instantiated,
you want to change the constraints you've configured.
Parameters
BringElementToFrontWhenDragging: This boolean
determines whether the element will be brought in front of all other
WFS elements when you drag it (TRUE) or not (FALSE)..
constrainToWindow: This is a boolean that
determines whether the element is constrained in its movement by the
multi-sprite it's an element of (TRUE) or unconstrained in its movement
(FALSE).
theLeft: This is an integer. It is only relevant
if you have specified constrainToWindow to be TRUE. Positive values
for theLeft determine how far to the right of the left border of the
constraining window the constraint will be. Negative values for theLeft
let the user move the element further to the left than the constraining
window's left border.
theTop: Same sort of idea as for theLeft
only theTop determines the constraint concerning top vertical movement.
theRight: Same sort of idea as for theLeft
only theTop determines the constraint concerning movement to the right
theBottom: Same sort of idea as for theLeft
only theTop determines the constraint concerning vertical movement down.
Example
In the below examples, suppose that the "Drag Element" behavior
is attached to sprite 7.
sprite(7).wfsSetDragConstraints(TRUE, 0,0,0,0)
The above constrains sprite 7 to moving within the area defined by
the background of the multi-sprite that sprite 7 is an element of.
sprite(7).wfsSetDragConstraints(FALSE, 0,0,0,0)
The above makes sprite 7 unconstrained in its draggability.
sprite(7).wfsSetConstraints(TRUE, 10,10,10,10)
The above constrains sprite 7 to moving within a rectangle that is
10 pixels inside the border of the window sprite 7 is part of.
sprite(7).wfsSetConstraints(TRUE, -10,-10,-10,-10)
The above constrains sprite 7 to moving within a rectangle whose perimeter
is 10 pixels outside the border of the window sprite 7 is part of.
|