---
name: "CT TREE"
type: topic
aliases: ["DialogControls-Tree", "Tree View"]
source: https://community.bistudio.com/wiki/CT_TREE
revid: 352088
updated: 2024-02-01T23:24:41Z
---

# CT TREE

### Introduction

The [CT_TREE](../topics/CT_TREE.md), also referred to as tree view (tv), is a control with similar functionality as the [CT_LISTBOX](../topics/CT_LISTBOX.md). In addition to that it supports multiple levels of entries as well as a search functionality.\
Since Arma 3 v2.01: Multiple selections are now also supported via commands.

> [!IMPORTANT]
> The engine driven search is very slow. Searching a tree view with many entries can freeze the game.

#### Related commands & functions

- Commands: General
- Commands: UI Eventhandlers
- Commands: Tree View

#### Related User Interface Eventhandlers

- [Events: General](../topics/User_Interface_Event_Handlers.md#generic-events)
- [Events: Tree View](../topics/User_Interface_Event_Handlers.md#tree-events)

### Alphabetical Order

> [!NOTE]
> TokenNames common to most controls, such as x, y, w, h, text, idc... can be found [**here**](../topics/Arma~3A_GUI_Configuration.md#common-properties).

> [!WARNING]
> Not all of the listed attributes might have an effect nor might the list be complete. All attributes were gathered with [this](https://github.com/7erra/BIKI.VR/blob/master/fnc/generateCTPage.sqf) config crawler.

```cpp
#define CT_TREE 12
```

#### B

##### borderSize

**Type:** Number

**Description:** Shows a border around the control. Setting the size to 0 will not hide the border. Set the `colorBorder` to transparent instead.

```cpp
borderSize = 0;
```

#### C

##### colorArrow

> [!IMPORTANT]
> This attribute is mandatory for the control to work!

**Type:** Array

**Description:** Has no effect but without it an error is thrown.

```cpp
colorArrow[] = {1,1,1,1};
```

##### colorBorder

**Type:** Array

**Description:** With `borderSize = 1` determines the color of that border.

```cpp
colorBorder[] = {0,0,0,0};
```

##### colorLines

**Type:** Array

**Description:** These lines connect the different entries for better clarity.

```cpp
colorLines[] = {0,0,0,0};
```

##### colorMarked

**Type:** Array

**Description:** Background color of all subsequently selected entries when `multiselectEnabled = 1;`.

```cpp
colorMarked[] = {0.2,0.3,0.7,1};
```

##### colorMarkedSelected

**Type:** Array

**Description:** Background color of the first selected entry with `multiselectEnabled = 1;`.

```cpp
colorMarkedSelected[] = {0,0.5,0.5,1};
```

##### colorMarkedText

**Type:** Array

**Description:** Text color of secondarly selected entries with `multiselectEnabled = 1;`.

```cpp
colorMarkedText[] = {0,0,0,1};
```

##### colorPicture

**Type:** Array

**Description:** Left picture color of an unselected entry.

```cpp
colorPicture[] = {1,1,1,1};
```

##### colorPictureDisabled

**Type:** Array

**Description:** Left picture color when control is disabled.

```cpp
colorPictureDisabled[] = {1,1,1,0.25};
```

##### colorPictureRight

**Type:** Array

**Description:** Right picture color of an unselected entry.

```cpp
colorPictureRight[] = {1,1,1,1};
```

##### colorPictureRightDisabled

**Type:** Array

**Description:** Right picture color when control is disabled.

```cpp
colorPictureRightDisabled[] = {1,1,1,0.25};
```

##### colorPictureRightSelected

**Type:** Array

**Description:** Right picture color of an selected entry.

```cpp
colorPictureRightSelected[] = {0,0,0,1};
```

##### colorPictureSelected

**Type:** Array

**Description:** Left picture color of an selected entry.

```cpp
colorPictureSelected[] = {1,1,1,1};
```

##### colorSearch

**Type:** Array

**Description:** Color of the entries that fit the search of the idcSearch listbox.

```cpp
colorSearch[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.77])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.51])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.08])",1};
```

##### colorSelect

**Type:** Array

**Description:** Entry's background when `multiselectEnabled = 0;`.

```cpp
colorSelect[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.77])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.51])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.08])",1};
```

##### colorSelectBackground

**Type:** Array

**Description:** n/a

```cpp
colorSelectBackground[] = {0,0,0,0.5};
```

##### colorSelectText

**Type:** Array

**Description:** Text color of a selected entry with `multiselectEnabled = 0;`.

```cpp
colorSelectText[] = {0,0,0,1};
```

#### D

##### defaultItem

**Type:** Array

**Description:** n/a

```cpp
defaultItem[] = {"BLU_F","Infantry"};
```

##### disableKeyboardSearch

**Type:** Number

**Description:** n/a

```cpp
disableKeyboardSearch = 1;
```

##### disableSearchHighlight

**Type:** Number

**Description:** n/a

```cpp
disableSearchHighlight = 1;
```

#### E

##### expandedTexture

**Type:** String

**Description:** "Arrow" texture on the left side, if non is given ("") a minus with box will be displayed.

```cpp
expandedTexture = "A3\ui_f\data\gui\rsccommon\rsctree\expandedTexture_ca.paa";
```

##### expandOnDoubleclick

**Type:** Number

**Description:** Enable/disable expanding and collapsing with double-click.

```cpp
expandOnDoubleclick = 1;
```

#### H

##### hiddenTexture

**Type:** String

**Description:** "Arrow" texture on the left side, if non is given ("") a plus with box will be displayed.

```cpp
hiddenTexture = "A3\ui_f\data\gui\rsccommon\rsctree\hiddenTexture_ca.paa";
```

#### I

##### iconFolder

**Type:** String

**Description:** n/a

```cpp
iconFolder = "\a3\3DEN\Data\Cfg3DEN\Layer\icon_ca.paa";
```

##### iconFolderDefault

**Type:** String

**Description:** n/a

```cpp
iconFolderDefault = "\a3\3DEN\Data\Cfg3DEN\Layer\iconDefault_ca.paa";
```

##### idcSearch

**Type:** Number

**Description:** IDC of a [CT_EDIT](../topics/CT_EDIT.md) control which functions as the search input.

```cpp
idcSearch = 283;
```

#### M

##### maxHistoryDelay

**Type:** Number

**Description:** n/a

```cpp
maxHistoryDelay = 1;
```

##### multiselectEnabled

**Type:** Number

**Description:** Enable/disable multi selection with CTRL or SHIFT to select all entries up to the first selected entry.

> [!NOTE]
> Commands to retrieve all selected entries in a multi selection tv are only available after Arma 3 v2.01.

```cpp
multiselectEnabled = 1;
```

### Default Classes

> [!NOTE]
> **Arma 3:** **AddOns:** Classes need to be initialised first with `class SomeClass;`
>
> ---
>
> **Missions:** Since Arma 3 v2.02 one can use `import SomeClass;` to initialise a class (see the [import](../topics/import_~28Config~29.md) keyword).
>
> In older versions, use `"Default" call BIS_fnc_exportGUIBaseClasses;` and paste the result into the [description.ext](../topics/Description.ext.md).

#### RscExample

```cpp
class RscTree
{
    deletable = 0;
    fade = 0;
    access = 0;
    type = CT_TREE;
    colorBackground[] = {0,0,0,0};
    colorSelect[] = {1,1,1,0.7};
    colorDisabled[] = {1,1,1,0.25};
    colorText[] = {1,1,1,1};
    colorSelectText[] = {0,0,0,1};
    colorBorder[] = {0,0,0,0};
    colorSearch[] =
    {
        "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.13])",
        "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.54])",
        "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.21])",
        "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])"
    };
    colorMarked[] = {0.2,0.3,0.7,1};
    colorMarkedText[] = {0,0,0,1};
    colorMarkedSelected[] = {0,0.5,0.5,1};
    multiselectEnabled = 0;
    colorPicture[] = {1,1,1,1};
    colorPictureSelected[] = {0,0,0,1};
    colorPictureDisabled[] = {1,1,1,0.25};
    colorPictureRight[] = {1,1,1,1};
    colorPictureRightSelected[] = {0,0,0,1};
    colorPictureRightDisabled[] = {1,1,1,0.25};
    colorArrow[] = {1,1,1,1};
    maxHistoryDelay = 1;
    shadow = 0;
    style = ST_LEFT;
    font = "RobotoCondensed";
    sizeEx = GUI_TEXT_SIZE_MEDIUM;
    expandedTexture = "A3\ui_f\data\gui\rsccommon\rsctree\expandedTexture_ca.paa";
    hiddenTexture = "A3\ui_f\data\gui\rsccommon\rsctree\hiddenTexture_ca.paa";
    x = 0;
    y = 0;
    w = 0.1;
    h = 0.2;
    rowHeight = 0.0439091;
    colorSelectBackground[] = {0,0,0,0.5};
    colorLines[] = {0,0,0,0};
    borderSize = 0;
    expandOnDoubleclick = 1;
    class ScrollBar : ScrollBar
    {
    };
};
```

### Other examples

#### RscTree with search functionality

```cpp
class Dialog
{
    idd = -1;
    class Controls
    {
        class _CT_EDIT
        {
            idc = 100;
            type = 2;
            style = "512";
            x = GUI_GRID_CENTER_X + 10 * GUI_GRID_CENTER_W;
            y = GUI_GRID_CENTER_Y + 0 * GUI_GRID_CENTER_H;
            w = 20 * GUI_GRID_CENTER_W;
            h = 2 * GUI_GRID_CENTER_H;
            font = "PuristaMedium";
            sizeEx = 0.04;
            autocomplete = "";
            canModify = true;
            maxChars = 100;
            forceDrawCaret = false;
            colorSelection[] = {0,1,0,1};
            colorText[] = {1,1,1,1};
            colorDisabled[] = {1,0,0,1};
            colorBackground[] = {0,0,0,0.8};
            text = "";
            tooltip = "Type to search";
        };
        class _CT_TREE
        {
            /* Common properties */
            idc = 200;
            /* Add some entries */
            onLoad = "params ['_tv'];\
                    _classes = 'true' configClasses (configFile >> 'CfgVehicles');\
                    for '_i' from 0 to 10 do\
                    {\
                        _tv tvAdd [[], configName selectRandom _classes];\
                        for '_j' from 0 to 10 do\
                        {\
                            _tv tvAdd [[_i], configName selectRandom _classes];\
                            for '_k' from 0 to 10 do\
                            {\
                                _tv tvAdd [[_i, _j], configName selectRandom _classes];\
                            };\
                        };\
                    };";
            moving = 0;
            type = CT_TREE;
            style = ST_LEFT;
            x = GUI_GRID_CENTER_X + 10 * GUI_GRID_CENTER_W;
            y = GUI_GRID_CENTER_Y + 3 * GUI_GRID_CENTER_H;
            w = 20 * GUI_GRID_CENTER_W;
            h = 23 * GUI_GRID_CENTER_H;
            sizeEx = GUI_TEXT_SIZE_MEDIUM;
            font = "RobotoCondensed";
            colorText[] = {1,1,1,1};
            colorBackground[] = {0,0,0,0.8};
            colorDisabled[] = {1,1,1,0.25};
            shadow = 0;
            access = 0;

            /* CT_TREE specific properties */
            idcSearch = 100;
            colorSelect[] = {1,1,1,0.7};
            colorSelectText[] = {0,0,0,1};
            colorBorder[] = {0,0,0,0};
            colorSearch[] =
            {
                "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.13])",
                "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.54])",
                "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.21])",
                "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])"
            };
            colorMarked[] = {0.2,0.3,0.7,1};
            colorMarkedText[] = {0,0,0,1};
            colorMarkedSelected[] = {0,0.5,0.5,1};
            multiselectEnabled = 0;
            colorPicture[] = {1,1,1,1};
            colorPictureSelected[] = {0,0,0,1};
            colorPictureDisabled[] = {1,1,1,0.25};
            colorPictureRight[] = {1,1,1,1};
            colorPictureRightSelected[] = {0,0,0,1};
            colorPictureRightDisabled[] = {1,1,1,0.25};
            colorArrow[] = {1,1,1,1};
            maxHistoryDelay = 1;
            colorSelectBackground[] = {0,0,0,0.5};
            colorLines[] = {0,0,0,0};
            class ScrollBar : ScrollBar
            {
            };
            expandedTexture = "A3\ui_f\data\gui\rsccommon\rsctree\expandedTexture_ca.paa";
            hiddenTexture = "A3\ui_f\data\gui\rsccommon\rsctree\hiddenTexture_ca.paa";
            rowHeight = 0.0439091;
            borderSize = 0;
            expandOnDoubleclick = 1;

            /* CT_TREE user interface eventhandlers */
            onTreeSelChanged = "systemChat str ['onTreeSelChanged',_this]; false";
            onTreeLButtonDown = "systemChat str ['onTreeLButtonDown',_this]; false";
            onTreeDblClick = "systemChat str ['onTreeDblClick',_this]; false";
            onTreeExpanded = "systemChat str ['onTreeExpanded',_this]; false";
            onTreeCollapsed = "systemChat str ['onTreeCollapsed',_this]; false";
            onTreeMouseMove = "systemChat str ['onTreeMouseMove',_this]; false";
            onTreeMouseHold = "systemChat str ['onTreeMouseHold',_this]; false";
            onTreeMouseExit = "systemChat str ['onTreeMouseExit',_this]; false";
        };
    };
};
```

### Scripting Example

|  |  |
|---|---|
| ```sqf<br>private ["_count", "_current", "_data", "_text", "_value", "_pic"];<br>_CT_TREE tvAdd [[], "Parent_A"];<br>_CT_TREE tvAdd [[0], "Child_A"];<br>_CT_TREE tvAdd [[0,0], "Grandchild_A"];<br>_CT_TREE tvAdd [[], "Parent_B"];<br>_CT_TREE tvAdd [[1], "Child_B"];<br>``` |  |
| ```sqf<br>_count = _CT_TREE tvCount []; // return 2<br>_CT_TREE tvSetCurSel [0,0,0]; // select grandchild_A<br>``` |  |
| ```sqf<br>_current = tvCurSel _CT_TREE; // return [0,0,0]<br>_CT_TREE tvSetData [_current, "I'm grandchild_A"];<br>_data = _CT_TREE tvData _current; // "I'm grandchild_A"<br>_text = _CT_TREE tvText _current; // "Grandchild_A"<br>_CT_TREE tvSetValue [_current,14];<br>_value = _CT_TREE tvValue _current; // 14<br>_CT_TREE tvSetPicture [_current, getText (configFile >> "CfgWeapons" >> "optic_NVS" >> "picture")];<br>_pic = _CT_TREE tvPicture _current;<br>``` |  |
| `_CT_TREE tvExpand [1];` |  |
| ```sqf<br>_CT_TREE tvSort [[], false];<br>_CT_TREE tvSortByValue [[], false];<br>``` |  |
| ```sqf<br>_CT_TREE tvDelete [0,0]; // remove child_b<br>tvClear 12;<br>_CT_TREE tvCollapse [];<br>``` |  |

<sub>Source: [BI Community Wiki — CT TREE](https://community.bistudio.com/wiki/CT_TREE) (revision 352088).</sub>
