Skip to content

Template configuration

Thomas Rößl edited this page Oct 15, 2023 · 6 revisions

The flowchart nodes are configured with JSON files. Each node type has a corresponding configuration.

These configurations are found in the flowtutor directory under templates, each available language has its own directory.

Properties

  • label: The name of the node shown to the user (e.g. on button labels).
  • node_label (optional): The text that is displayed on the drawn node in the flowchart. Can be a Jinja template string (see also the body property).
  • shape_id: The shape of the node. Can be one of the following:
    • data
    • data_internal
    • process
    • predefined_process
    • preparation
    • decision
    • terminator
  • control_flow (optional):
    • loop
    • post-loop
    • decision
  • color (optional): The color of the node, defined by its RGB values
  • parameters: The user-facing parameters, that can be changed when using the node. A parameter has the following properties:
    • name: The name that is referenced in the template body, to insert the argument.
    • label: The user-facing label of the parameter.
    • default (optional): The default value of the parameter.
    • options (optional): A predefined list of values, that the parameter is constrained to. The user is presented with a dropdown.
    • visible: An expression in Python syntax, that can reference other parameters, to conditionally hide this parameter.
  • body (optional): A string that is inserted in the source code. If this value is omitted, a Jinja template file of the same name as the configuration must be present (e.g. for while-loop.template.json there has to be a file called while-loop.jinja). Documentation for the Jinja template syntax can be found here.

Example

open_file.template.json

{ "label": "Open file", "node_label": "Open file: {{FILE}} as {{VAR_NAME}}", "shape_id": "data", "color": "(147, 171, 255)", "parameters": [ { "name": "VAR_NAME", "label": "Name" }, { "name": "FILE", "label": "File Path" }, { "name": "MODE", "label": "Mode", "default": "r", "options": [ "r", "r+", "w", "w+", "a", "a+" ] } ] }

open_file.jinja

FILE *{{VAR_NAME}}; {{VAR_NAME}} = fopen({{FILE}}, "{{MODE}}");

declaration.template.json

{ "label": "Declaration", "node_label": "{% if IS_STATIC %}static {% endif %}{{VAR_TYPE}} {% if IS_POINTER %}*{% endif %}{{VAR_NAME}}{% if IS_ARRAY %}[{{ARRAY_SIZE}}]{% endif %}{% if VAR_VALUE %} = {{VAR_VALUE}}{% endif %}", "shape_id": "data_internal", "parameters": [ { "name": "VAR_NAME", "label": "Name" }, { "name": "VAR_TYPE", "label": "Type", "default": "int", "options": [ "char", "unsigned char", "short", "unsigned short", "int", "unsigned int", "long", "unsigned long", "float", "double", "long double" ] }, { "name": "IS_POINTER", "label": "Pointer", "type": "checkbox" }, { "name": "IS_ARRAY", "label": "Array", "type": "checkbox" }, { "name": "ARRAY_SIZE", "label": "Size", "visible": "IS_ARRAY" }, { "name": "IS_STATIC", "label": "Static", "type": "checkbox" }, { "name": "VAR_VALUE", "label": "Value" } ], "body": "{% if IS_STATIC %}static {% endif %}{{VAR_TYPE}} {% if IS_POINTER %}*{% endif %}{{VAR_NAME}}{% if IS_ARRAY %}[{{ARRAY_SIZE}}]{% endif %}{% if VAR_VALUE %} = {{VAR_VALUE}}{% endif %};" }
Clone this wiki locally