Program

program
{
   // name of the program
   name: "programname";
   // 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;
   // action to perform
   action: STATE_SET "statename" state_value;
   // if action is STATE_SET, define a transition from the current to the target state
   transition: LINEAR 0.5;
   // if action is SIGNAL_EMIT, the name of the part which will receive the signal
   target: "partname";
   // run another program after the current one is done
   after: "programname";
   after: "anotherprogram";
}

Program

Programs define how your interface reacts to events. Programs can change the state of parts or trigger other events.

  • name [program name]
    Symbolic name of program as a unique identifier.
  • signal [signal name]
    Specifies signals that cause the program to run. The signal received must match the specified source to run. There may 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 program.
  • “hold,off”: Holding off the mouse event matching the source that starts the program.
  • “focus,part,in”: Focusing in the matching source that starts the program.
  • “focus,part,out”: Focusing out of the matching source that starts the program.
  • “mouse,in”: Moving the mouse into the matching source that starts the program.
  • “mouse,out”: Moving the mouse out of the matching source that starts the program.
  • “mouse,move”: Moving the mouse in the matching source that starts the program.
  • “mouse,down,*”: Pressing the mouse button in the matching source that starts the program.
  • “mouse,up,*”: Releasing the mouse button in the matching source that starts the program.
  • “mouse,clicked,*”: Clicking any mouse button in the matching source that starts the program.
  • “mouse,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 the draggable part.
  • “drag,stop”: Stopping a drag of the mouse in the matching source that starts the program. This signal works only in the draggable part.
  • “drag”: Dragging the mouse in the matching source that starts the program. This signal works only in the draggable part.
  • source [source name]
    Source of accepted signal. There may be several signals, but only one source keyword per program can be used. For example, source: “button-*”; (signals from any part or program named “button-*” are accepted).
  • filter [part] [state]
    Filter signals to be only accepted if the part is in state named [state]. Only one filter per program can be used. If [state] is not given, the source of the event is used instead.
  • in [from] [range]
    Wait [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)
    Action to be performed by the program. Valid actions (only one can be specified) are:
    • STATE_SET: Set “target part” state as “target state”
    • ACTION_STOP: Stop the ongoing transition.
    • SIGNAL_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 the dragable part (x, y values).
    • DRAG_VAL_STEP: Set a step for the dragable part (x, y values).
    • DRAG_VAL_PAGE: Set a page for the dragable part (x, y values).
    • FOCUS_SET: Set the focus to the target group.
    • FOCUS_SET: Set the focus to the target group.
    • PLAY_SAMPLE “sample name” speed (channel): Play a music sample clip.
      PLAY_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 duration.
    • PLAY_VIBRATION “sample name” repeat (repeat count)
  • transition [type] [length] (interp val 1) (interp val 2) (option)
    Defines how transitions occur using STATE_SET action. [type] is the style of the transition and [length] is a double specifying the number of seconds in which to preform the transition. Valid types are:
    • LIN or LINEAR
    • SIN or SINUSOIDAL
    • ACCEL or ACCELERATE
    • DECEL or DECELERATE
    • ACCEL_FAC or ACCELERATE_FACTOR
    • DECEL_FAC or DECELERATE_FACTOR
    • SIN_FAC or SINUSOIDAL_FACTOR
    • DIVIS or DIVISOR_INTERP
    • BOUNCE
    • SPRING

ACCEL_FAC, DECEL_FAC and SIN_FAC need the extra optional “interp val 1” to determine the “factor” 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 and SPRING also require “interp val 2” in addition to “interp val 1”.

DIVIS uses [val 1] as the initial gradient start (0.0 is horizontal, 1.0 is diagonal (linear), 2.0 is twice the gradient of linear, etc.). [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 linear interpolation. Note that DIVIS 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 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.

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]
    Program or part on which the specified action acts.
  • after [after]
    Specifies a program that is run after the current program completes. The source and signal parameters of a program run as an after are ignored. Multiple after statements can be specified per program.