Program Block
PUBLISHED
The program
block defines how your interface reacts to events. Programs can change the part state or trigger other events.
The events are handled as signals, which can be emitted between the application logic (code) and UI (theme). For more information, see Signal Handling.
Figure: Program block
program { /* Set the name of the program */ name: "programname"; /* Set the signals which trigger the program */ signal: "signalname"; /* Filter incoming signals depending on the sender name */ source: "partname"; /* Filter incoming signals depending on the part's state */ filter: "partname" "statename"; /* Delay the program by X seconds plus a random time between 0 and Y */ in: 0.3 0.0; /* Set the action to perform */ action: STATE_SET "statename" state_value; /* If the action is STATE_SET, define a transition from the current to the target state */ transition: LINEAR 0.5; /* If the action is SIGNAL_EMIT, set the name of the part which receives the signal */ target: "partname"; /* Run another program after the current one is done */ after: "programname"; after: "anotherprogram"; }
name [program name]
Sets the symbolic name of the program as a unique identifier.
signal [signal name]
Sets the signals that cause the program to run. The signal received must match the specified source to run. There can be several signals, but only one signal keyword per program can be used. Also, there are some predefined signals for touch event handling. The predefined signals are:
hold,on
: Holding on the mouse event matching the source that starts the programhold,off
: Holding off the mouse event matching the source that starts the programfocus,part,in
: Focusing in the matching source that starts the programfocus,part,out
: Focusing out of the matching source that starts the programmouse,in
: Moving the mouse into the matching source that starts the programmouse,out
: Moving the mouse out of the matching source that starts the programmouse,move
: Moving the mouse in the matching source that starts the programmouse,down,*
: Pressing the mouse button in the matching source that starts the programmouse,up,*
: Releasing the mouse button in the matching source that starts the programmouse,clicked,*
: Clicking any mouse button in the matching source that starts the programmouse,wheel,0,*
: Moving the mouse wheel in the matching source that starts the program. A positive number moves up and a negative number moves down.drag,start
: Starting a drag of the mouse in the matching source that starts the program. This signal works only in thedraggable
part.drag,stop
: Stopping a drag of the mouse in the matching source that starts the program. This signal works only in thedraggable
part.drag
: Dragging the mouse in the matching source that starts the program. This signal works only in thedraggable
part.
source [source name]
Sets the source of an accepted signal. There can be several signals, but only one source keyword per program can be used. For example,
source: button-*
means that signals from any part or program namedbutton-*
are accepted.filter [part] [state]
Filters the signals to be only accepted if the part is in the
[state]
state. Only 1 filter per program can be used. If the[state]
parameter is not given, the source of the event is used instead.in [from] [range]
Waits
[from]
seconds before executing the program and add a random number of seconds (from 0 to[range]
) to the total waiting time.action [type] (param1) (param2) (param3) (param4)
Sets the action to be performed by the program. The valid actions (only 1 can be specified) are:
STATE_SET
: Set thetarget part
state astarget state
ACTION_STOP
: Stop the ongoing transitionSIGNAL_EMIT
: Emit a signal to the application level. The application can register a callback for handling actions based on the EDC state.DRAG_VAL_SET
: Set a value for thedraggable
part (x, y values)DRAG_VAL_STEP
: Set a step for thedraggable
part (x, y values)DRAG_VAL_PAGE
: Set a page for thedraggable
part (x, y values)FOCUS_SET
: Set the focus to the target groupPLAY_SAMPLE "sample name" speed (channel)
: Play a music sample clipPLAY_SAMPLE
's (optional) channel can be one of:EFFECT/FX
BACKGROUND/BG
MUSIC/MUS
FOREGROUND/FG
INTERFACE/UI
INPUT
ALERT
PLAY_TONE "tone name" duration_in_seconds (Range 0.1 to 10.0)
: Play a predefined tone of a specific durationPLAY_VIBRATION "sample name" repeat (repeat count)
transition [type] [length] (interp val 1) (interp val 2) (option)
Determines how transitions occur using the
STATE_SET
action. The[type]
parameter is the style of the transition and the[length]
parameter is a double specifying the number of seconds in which to perform the transition. The valid types are:LIN
orLINEAR
SIN
orSINUSOIDAL
ACCEL
orACCELERATE
DECEL
orDECELERATE
ACCEL_FAC
orACCELERATE_FACTOR
DECEL_FAC
orDECELERATE_FACTOR
SIN_FAC
orSINUSOIDAL_FACTOR
DIVIS
orDIVISOR_INTERP
BOUNCE
SPRING
The types have the following requirements:
ACCEL_FAC
,DECEL_FAC
, andSIN_FAC
need the extra optionalinterp val 1
to determine thefactor
of curviness. 1.0 is the same as their non-factor counterparts and 0.0 is equal to linear. Numbers higher than 1.0 make the curve angles steeper with a more pronounced curve point.DIVIS
,BOUNCE
, andSPRING
also requireinterp val 2
in addition tointerp val 1
.DIVIS
uses[val 1]
as the initial gradient start (for example, 0.0 is horizontal, 1.0 is diagonal (linear), and 2.0 is twice the gradient of linear).[val 2]
is interpreted as an integer factor defining how much the value swings outside the gradient before going back to the final resting spot at the end. 0.0 for[val 2]
is equivalent to a linear interpolation. Note thatDIVIS
can exceed 1.0.BOUNCE
uses[val 2]
as the number of bounces (so it is rounded down to the nearest integer value), with[val 1]
determining how much the bounce decays; 0.0 gives a linear decay per bounce and higher values give much more decay.SPRING
is similar to bounce;[val 2]
specifies the number of spring swings and[val 1]
specifies the decay, but it can exceed 1.0 on the outer swings.- The valid options are:
CURRENT
: Causes the object to move from its current position. Can be used as the last parameter of any transition type.
target [target]
Sets the program or part on which the specified action acts.
after [after]
Determines the program that is run after the current program completes. The source and signal parameters of a program run as an
after
are ignored. Multipleafter
statements can be specified per program.