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
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
Blink Pattern
Make the component blink in a certain pattern. This is useful for cases in which you want a button attract additional attention, like warnings or others.
Text Display
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
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 {}
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
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
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
-
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