Nodes are the main component of the Data Processing area in Quill. They are used to process data between an application and the GUI. The Source Node and Global Source Node are the only entry points data entering and exiting the UI, using the data api.
Nodes have four main parts:
Some node types have a top component, which may be a Template Reference, an identifing name, etc.
Control major functional differences of a node's behavior.
User created inputs and outputs.
Core inputs and outputs.
Global Source nodes access a single dataset based on the
Source Name option.
Multiple Global Source nodes that reference the same
Source Name will all interact with the same data, regardless of which template or scene they may be in.
You can add outputs using the
New Field button.
These outputs are accessible using the Data API.
inkd main_d = ink_global_source(ink, I_main); inkd_charp(main_d, I_user_field, "Hello World");
The source node is similar to the Global Source node in that it provides an access point for data to flow in and out of the UI. It differs however in that a new data set is created for each instance of the containing template. And when the instance the source node is in is removed, the data set is also destroyed. Refer to the Data Events API for information on how to handle source nodes being created and destroyed.
We recommend you use Global Source nodes over this node when you don't need per-instance data sets.
Data nodes allow you to construct list data in Quill.
List items can be created and edited from the
Edit Data button.
Scene nodes allow you to create new scenes on the scene stack.
When checked, the scene created by this node will disable focus on all scenes below it on the stack.
When checked, the scene created by this node will focus any child view that has Request Default Focus when the scene is created.
When checked, all scenes below this one won't be drawn or receive events.
Inputs and Outputs#
When triggered, any scene created by this node will be removed from the scene stack.
When triggered, this node will create a new scene. Triggering again while a scene is already created by this node will not create another scene.
back will destroy which ever scene is currently on the top of the scene stack. This works regardless of who triggers it and where.
removeSelf will remove the scene that this template is the root of.
So for example if you have a scene that instantiates a template named "Options Screen", the scene stack node would only close scene if it was in the "Options Screen" template.
Allows you to combine text, numbers, and integers into a single
formatted text output.
Node inputs added using the
New Variable button can be substituted in the
Template field using double curly brackets:
The Selector Node is used to add "selected" state tracking to a list of data. Each item in the connected data have access the following special fields:
Keeps track of which item(s) in the list of data are selected.
When this impulse is set, the selector node first sets
selectedto False for all other items in the list, then sets it to True for this item.
selectedto False for all items in the list.
See the Selector Node Example for a step by step walk through on how to use this node.
Incoming list of data to add state tracking to.
This impulse will be set when one or more item in the list changes selected state, or if an item requests to be selected with
selectSingle(even if it results in no state change.)
A list of data containing all items from the input
listregardless of selected state.
A list of data containing only items from the input
listthat have a
selectedmember with a truthy value.
A list of data containing only items from the input
listthat do not have a
selectedmember, or do but with a falsy value.
When set, the item after the last-most selected item is selected, unselecting all other items. If there is no selection, or the the last item is selected, the first item in the list will be selected.
Has the same behavior as
selectNextexcept in reverse order. If there is no selection, the last item will be selected.
selectedfield of each item to False.
The Slice Node allows you to create a subset of list.
The output list will be all items in the input list within the range of
Ranges are 1 based and inclusive.
from: 2 to: 3 [a, b, c, d] => [b, c]
Like all nodes that operate on lists of data, all items in the new output list are only references to the items in the input list. No data is duplicated. Changes to an item in the created output list will exist in the input list as well.
Used to find data within a list.
query in the illustration on the right, are the values to match on while output values will be set to the list entry members for the first matching entry.
In this example the
list type expects two members, "query" and "found", on each item in the list.
The Filter Node looks at each item in the input
list and checks for a field with the name specified in the node's
If that field has a value equal to the
equal_to input, the item is put into the
filtered output list.
The Sort Node filters the
list input based on each item's field value where the field's name matches
The Extract Node is used to access individual fields on a single item in a list.
Index is used to specify which item in
list to access.
1 being the first item,
2 being the second and so on.
Index value is clamped to the list's length, so if you ask for the 7th item but there are only 5 it will give you the 5th item.
The top component of a Billboard Set node is its name.
Multiple Billboard Set nodes across any number of templates have the same data set if they have the same name.
add is true, the value of
identifier is added to the data set.
contains is true if the
identifier is currently in the data set, and
total if there are any values period in the data set.
Billboard Sets are incredibly useful for sharing information about state across a UI.
Triggering the impulse causes the focus system to navigate in the specified direction. Navigation events generated by this node do not get intercepted by event filters.
Allows you to create event filters separate from in a view.
onEvent output may only be connected to a On Event property.
Text Event Filter#
onEvent output is connected to an On Event property, any text events not handled by event filters specified on the view are matched against this nodes options.
If the event matches
impulse is fired, otherwise
unhandled is fired with the event information.
Current index of the cursor.
0is before the first glyph,
1is before the second glyph etc. A value of
-1indicates that the text is not currently being edited by the user.
selection_end(Integer) Same indexing rules as
selection_start(Integer) Same indexing rules as
Simulate Text Event#
simulate's output (on the right side) is triggered, the impulse will be passed on with the value
text associated with it with the
INK_TEXT_INPUT key state.
Send To Focused is true, then the impulse is also sent to the focused view just the same as though the user had typed the text value on a keyboard (except no UP or DOWN key states are sent, only INSERT.)
Simulate Action Event#
simulate's output (on the right side) is triggered,
simulates's input will fire twice with the associated KEY_DOWN and KEY_UP key states with the specified
feedback output to a Feedback property.
The other outputs will relate to various state information of the connected view.
height will be the measured size of the referenced
A and list
B into a single list.
Uses a Processing Template to operate on each item in a list.
Pass Data Through is set, the input's type (on the left side of the map node) will include all the members of the output's type, in addition to the referenced template's inputs.
Overrides, added using the "New Override" button, allow you to set a single value that is used for each item in the list.
A call node instantiates a single instance of a processing template and provide inputs and outputs that match the referenced template's inputs and outputs. Call nodes are useful for encapsulating complex node collections to re-use in multiple locations.
discard input is true, the template instance is hidden from its containing list.
For example if the template is being used as an inline list template, you can use this node to filter out list entries.
Refer to the Lua Scripting section for behavior information.
Takes a gif image and animates it over time, outputting the current frame which may then be connected to an image property.
start causes the animation to begin running starting at the first frame.
stop halts the animation immediately and reverts the
image output to the gif's first frame.
If the input
image is not a gif with multiple frames, it simply passes the image through ignoring animations.
When a value is backflowed to
editing, it doesn't automatically backflow on
Instead, the value is stored and if
commit is triggered it is backflowed on
revert is triggered the editing value is discarded and set to the value of
modified will be true once any value is backflowed on
editing, and won't be false until either
revert is triggered.
modified is true, any change to the
input value is not passed on to
When the input
When the output
impulse (on the right side) is triggered, after
delay seconds the input
impulse will fire, unless
cancel is triggered.
Impulse Restarts is true, the delay timer is reset if the output
impulse is triggered again while counting down.
Passes an impulse through right to left if
allow (Boolean) is true.
Passes an trigger through left to right if
allow (Boolean) is true.
impulse is triggered
input's boolean value is reversed.
AND output is true when both inputs are true.
OR output is true when one of its inputs are true.
NOT output is true when the input is false.
switch is true,
if_true is assigned to
if_false's value is assigned.
Performs a math operation on two numbers.
Performs a math operation on two integers.
Performs a math operation on two dimensions.
Converts a number to a dimension.
Converts an integer to a dimension.