Feedbacks and Actions

So far we have been using the included Template Behaviors to define how a component interacts with a parameter.

When we want to customize individual parts of a behavior or even create one from scratch (without selecting a Template Behavior) we need to understand Feedback Handlers and Actions (formally known as Event Handlers)

Feedback Handlers

FeedbackHandlers are the parts of the behavior that define what a component shows. They can adjust things the LED color, display text and elements and even the position of a motor fader.

Every Behavior and Layer has a Default Feedback. This is what is shown automatically. Additionally there are the so called Conditional Feedbacks, that are only active when their Active-If condition returns true.

Lets take a look at the available fields in a Feedback Handler:

There are several groups of Fields:

General Feedback Fields

Description

Give your Feedback Handler a readable description. This will be shown in the header and can make your behavior more easy to understand

Intensity

Intensity defines the strength of the LED light. It can be Off, Dimmed or On.

Color

Set the LED Color. You can select one from the color picker or even use a parameter to define the color of a component. NOTE: you will not see a color show up if Intensity is OFF

Text Display

Title

The title appears on top of the display.

Title Font

Select a font variation for the title.

Solid Title Bar

Select if the Title Bar shall have a solid white background of be transparent. In SKAARHOJ default configs a transparent title bar is often used to indicate that a button "Sets" the value written on it, while displays with a solid header bar usually show the current state of a value

With Solid Header Bar

Without Solid Header Bar

Textline 1 & Textline 2

Specify the main Text for the component. You can add dynamic values with parameters into the text using the helper window or braces {}

Textline Helper Window

Text Size

Select a specific test size. This value corresponds to the font width and height as a comma separated pair: 0,0 = Auto, 1,1 = smallest, 3,3 = largest, 1,2 = Tall and narrow etc.

AutoWrap

AutoWrap will automatically break the contents of Textline 1 to Textline 2 if the text gets longer than the available display space

Use Graphics for Unicode

By default our displays do not support unicode characters. When turning on this option, text that contains unicode will automatically be rendered into an image that will then be shown, so the displays can fully support unicode.

(Note: This might sometimes change the rendering slightly or modify text size and font)

Icons

Icons

Set a condition when to show the lock icon

State Icon NoAccess

Set a condition when to show the no access (forbidden sign)

State Icon Fine

Set a condition when to show the fine icon, generally used to indicate when coarse mode is active

Modifier Icon

Select one of several modifier icons to use. Modifier Icons are usually used to indicate what type of interaction is possible.

Tip: If you need these to be shown based on a condition you will need to use several conditional feedback handlers.

Advanced Feedback Fields

Don't Inherit

Turning on this option will ensure no parameters are inherited from the Template Behavior for this entire Feedback. Read more about inheritance here: Behavior Inheritance


Actions

Actions are the parts of the Behavior that defines what the component actually does when it is interacted with in different ways. There can be multiple Actions on every Behavior, to add different kinds of possible interactions, or to make the component control different parameters.

Actions can also have an Active-If condition, but in difference to Conditional Feedbacks the Actions are always active by default.

General Action Settings

Lets take a look at the available fields in an Action:

Handler Type

Handler Type is a special field, as it will change the other available fields to configure.

An Action can have one main type of trigger it interacts with. The trigger types are (as described earlier in Hardware Components) Binary, Pulsed, Analog and Speed.

  • A BinaryComponent can create ActDown and ActUp triggers
  • A PulsedComponent can create PulsedValue triggers like +1 and -1
  • A AnalogComponent can create a AnalogValue triggers from 0 to 1000
  • A SpeedComponent can create a SpeedValue triggers from -500 to +500, it will always reset to 0 when released.

After the Handler Type has been selected you can still add PreProcessors to the Action, that define how to react when a different trigger type comes in.

General Action Fields

Parameter

Each Action can specify a different parameter to control. If no parameter is specified the one defined in the top of the behavior form will be used.

Active If Condition

Each Action can have a condition. If the condition is false the Action stays disabled and is not used.

Example: This can be used to specify different Actions dependent the value of a variable

Invert Condition

Specifies a condition that (if true) inverts the normal direction for control. If you would like to always invert it simply select true

Description

Give the Action a general description

Specific Settings: Binary

Binary Type

When set you can specify if this handler only reacts on a down press (ActDown) or only on a release (ActUp). When not set it will fire in both cases

EdgeFilter

When mapped to a 4 way button or encoder you can use this setting to filter for a specific event, like only pressing up

Set Mode

This allows you to specify how a press of the component will change the parameter. The following options are available

  • Set

    Set a specific value (specified using set values, see below)

  • Cycle Up

    Cycle up through the available options

  • Cycle Down

    Cycle down through the available options

  • Cycle Up and Roll Over

    Cycle up through the available options and continue at the start weh going over the maximum

  • Cycle Down and Roll Over

    Cycle down through the available options and continue at the maximum when going below the start

  • Random

    Set a completely random value out of the possible ones, that is not the same as the current value

  • Sequence

    Sequence allows you to set several values after each other, even for different parameters. You can even specify a different parameter on each step. Simply choose sequence and add several steps

    Binary Sequence Example
  • Array Specific options for Variables:

    See Chapter Variables

Set Values

Specify the list of values that this Action selects from. This defaults to using all options from the main parameter of the behavior (:All modifier)

Specific Settings - Pulsed

Rollover Condition

Specify a condition in which so called Rollover is allowed. Rollover means that when the end of the value range of the parameter is reached the next step will jump to the other end of the range again.

Fine Step

Specify the fine Step Size for stepping through the parameter. You can either use the default for the behaviors parameter (Behavior:IOReference:FineSteps) or specify your own. For example: selecting Literal Values -> then type 0.01 in the field.

The fine step size is used by default, unless the CoarseCondition is true (see below)

Coarse Step

Specify the fine coarse Step Size for stepping through the parameter. You can either use the default for the behaviors parameter (Behavior:IOReference:CoarseSteps) or specify your own. For example: selecting Literal Values -> then type 10 in the field.

The coarse step size is used when the CoarseCondition is true (see below). In Reactor Built in Behaviors like Change by step for long ranges this is used when pressing down an encoder.

Coarse Condition

Selects between using fine step (when false) or coarse step (when true).

In Reactor Built in Behaviors like Change by step for long ranges this is used when pressing down an encoder.

Ganged Control Mode

When this is set to "Relative" and the component controls multiple parameters at once they will all be stepped relative to their own values.

Otherwise, only the first value will be stepped and all other values will be set to the destination value of the first.

Specific Settings - Analog

Discontinuity

Discontinuity specifies what happens if the parameter that is controlled has a different value than the analog component is set to currently. It specifies the take over strategy

For example: Iris is mapped to a RCP Joystick but has been changed on the camera in the meanwhile.

  • Double Linear: Double linear will map the value linearly to the desired point
  • None: Value will jump to the correct mapped value when component is moved

Some information on this feature can be found in this youtube video:

Note: This is not recommended to be used with MultiBehaviors

Specific Settings - Speed

Speed handlers currently don't have configuration options exposed in the UI.

Advanced Action Fields

Event Preprocessor

Event Pre processors allow all kinds of advanced modifications, like hold down, repeat and other tricks. See the advanced chapter on Event Preprocessors for more details.

Don't Inherit

Turning on this option will ensure no parameters are inherited from the Template Behavior for this entire Feedback. Read more about inheritance here: Behavior Inheritance

Inheritance of Feedback and EventHandlers from Template Behaviors

When adding Feedback handlers to a behavior that uses a Template Behavior they will be combined with the ones from the Template. You can see the ones defined on the template marked as Inherited.

Feedback Handlers that have the same index number in the template and the behavior will be merged (overridden). The same goes for Actions with the same name

Above example shows: After making a change to the feedback handler with index 10 to the color we can still see the fields that inherits from the Template Behavior's Feedback handler with index 10