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