Arma 3 Scripting

CT LISTNBOX

Topic · Markdown · JSON · original wiki page

Introduction

Similar to CT_LISTBOX. Additionally this control supports multiple columns which all have their own text, data and value. Another feature is the ability to define idcLeft and idcRight to add buttons to the currently selected row.

Important

CT_LISTNBOX controls frequently cause unexpected issues with other controls if idcLeft and idcRight are set to -1. Use other values for idcLeft and idcRight to avoid these issues.

Alphabetical Order

Note

TokenNames common to most controls, such as x, y, w, h, text, idc... can be found here.

Warning

Not all of the listed attributes might have an effect nor might the list be complete. All attributes were gathered with this config crawler.

#define CT_LISTNBOX 102

A

arrowEmpty

Type: String

Description: n/a

arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";

arrowFull

Type: String

Description: n/a

arrowFull = "#(argb,8,8,3)color(1,1,1,1)";

autoScrollDelay

Type: Number

Description: n/a

autoScrollDelay = 5;

autoScrollRewind

Type: Number

Description: n/a

autoScrollRewind = 0;

autoScrollSpeed

Type: Number

Description: n/a

autoScrollSpeed = -1;

C

canDrag

Type: Number

Description: n/a

canDrag = 1;

color

Type: Array

Description: n/a

color[] = {0.95,0.95,0.95,1};

colorPicture

Type: Array

Description: n/a

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

colorPictureDisabled

Type: Array

Description: n/a

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

colorPictureSelected

Type: Array

Description: n/a

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

colorPlayerItem

Type: Array

Description: n/a

colorPlayerItem[] = {1,1,1,1};

colorScrollbar

Type: Array

Description: n/a

colorScrollbar[] = {0.95,0.95,0.95,1};

colorSelect

Type: Array

Description: n/a

colorSelect[] = {1,1,1,1};

colorSelect2

Type: Array

Description: n/a

colorSelect2[] = {0,0,0,1};

colorSelect2Right

Type: Array

Description: n/a

colorSelect2Right[] = {1,1,1,1};

colorSelectBackground

Type: Array

Description: n/a

colorSelectBackground[] = {1,1,1,0.25};

colorSelectBackground2

Type: Array

Description: n/a

colorSelectBackground2[] = {1,1,1,0.3};

colorSelectRight

Type: Array

Description: n/a

colorSelectRight[] = {1,1,1,1};

colorShadow

Type: Array

Description: n/a

colorShadow[] = {0,0,0,0.5};

columns

Type: Array

Description: Define the left starting position of each column. The values are offsets ratios (not spacing ratios). Tip: Use {-0.01} in first column to fix unwanted offset, if desired.

columns[] = {"7.2 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)","15.8 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)"};

D

disableOverflow

Type: Number

Description: Don't allow text to continue in next column.

disableOverflow = 1;

drawSideArrows

Type: Number

Description: Each row can be linked to 2 arrow buttons which are shown on the left and right of the row.

Important

drawSideArrows attribute is irrelevant and does not control the appearance of the left and right arrows/buttons despite the intention, and it could be ignored all together. Instead, idcLeft and idcRight attributes control these arrows/buttons.

drawSideArrows = 1;

I

idcLeft

Type: Number

Description: The IDC of the control to be used for the left control that shows up in the selected row.

Important

Buttons will only be drawn if both idcLeft and idcRight are defined. Furthermore, the position of the first column needs to be adjusted so that the button does not overlap with the text. The button's height will be adjusted to the rowHeight property of the CT_LISTNBOX and the button's x, y, w and h properties can be set to -1.

Important

-1 is a valid idc for this attribute!

idcLeft = 24468;

idcRight

Type: Number

Description: The IDC of the control to be used for the right control that shows up in the selected row.

Important

-1 is a valid idc for this attribute!

idcRight = 24469;

idcx

Type: Number

Description: Used in the Arsenal, can be ignored.

idcx = 984;

Items

Type: Class

Description: List of default items. See CT_COMBO#Items for more details.

class Items
{
    class Presence
    {
        text = "";
        value = 1;
        data = "value";
    };
    class Name
    {
        text = "Name";
        value = -1;
    };
    class Author
    {
        text = "Author";
        value = -1;
    };
};

L

ListScrollBar

Type: Class

Description: n/a

class ListScrollBar
{
    color[] = {1,1,1,0.6};
    colorActive[] = {1,1,1,1};
    colorDisabled[] = {1,1,1,0.3};
    thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa";
    arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
    arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
    border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa";
    shadow = 0;
    scrollSpeed = 0.06;
    width = 0;
    height = 0;
    autoScrollEnabled = 0;
    autoScrollSpeed = -1;
    autoScrollDelay = 5;
    autoScrollRewind = 0;
};

M

maxHistoryDelay

Type: Number

Description: n/a

maxHistoryDelay = 1;

MuteCheckBoxTemplate

Type: Class

Description: n/a

class MuteCheckBoxTemplate
{
    x = 0;
    y = 0;
    w = "0.8 * (((safezoneW / safezoneH) min 1.2) / 40)";
    h = "0.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
    textureChecked = "\A3\Ui_f\data\IGUI\RscIngameUI\RscDisplayChannel\MuteVON_ca.paa";
    textureUnchecked = "\A3\Ui_f\data\IGUI\RscIngameUI\RscDisplayChannel\MuteVON_crossed_ca.paa";
    textureFocusedChecked = "\A3\Ui_f\data\IGUI\RscIngameUI\RscDisplayChannel\MuteVON_ca.paa";
    textureFocusedUnchecked = "\A3\Ui_f\data\IGUI\RscIngameUI\RscDisplayChannel\MuteVON_crossed_ca.paa";
    textureHoverChecked = "\A3\Ui_f\data\IGUI\RscIngameUI\RscDisplayChannel\MuteVON_ca.paa";
    textureHoverUnchecked = "\A3\Ui_f\data\IGUI\RscIngameUI\RscDisplayChannel\MuteVON_crossed_ca.paa";
    texturePressedChecked = "\A3\Ui_f\data\IGUI\RscIngameUI\RscDisplayChannel\MuteVON_ca.paa";
    texturePressedUnchecked = "\A3\Ui_f\data\IGUI\RscIngameUI\RscDisplayChannel\MuteVON_crossed_ca.paa";
    textureDisabledChecked = "\A3\Ui_f\data\IGUI\RscIngameUI\RscDisplayChannel\MuteVON_ca.paa";
    textureDisabledUnchecked = "\A3\Ui_f\data\IGUI\RscIngameUI\RscDisplayChannel\MuteVON_crossed_ca.paa";
    idc = -1;
    type = 77;
    deletable = 0;
    style = 0;
    checked = 0;
    color[] = {1,1,1,0.7};
    colorFocused[] = {1,1,1,1};
    colorHover[] = {1,1,1,1};
    colorPressed[] = {1,1,1,1};
    colorDisabled[] = {1,1,1,0.2};
    colorBackground[] = {0,0,0,0};
    colorBackgroundFocused[] = {0,0,0,0};
    colorBackgroundHover[] = {0,0,0,0};
    colorBackgroundPressed[] = {0,0,0,0};
    colorBackgroundDisabled[] = {0,0,0,0};
    tooltipColorText[] = {1,1,1,1};
    tooltipColorBox[] = {1,1,1,1};
    tooltipColorShade[] = {0,0,0,0.65};
    soundEnter[] = {"",0.1,1};
    soundPush[] = {"",0.1,1};
    soundClick[] = {"",0.1,1};
    soundEscape[] = {"",0.1,1};
};

P

padding

Type: Number

Description: n/a

padding = 0.004;

period

Type: Number

Description: Time it takes to pulsate between the select colors.

period = 1.2;

R

rowHeight

Type: Number, String

Description: The height of a single row.

Number example:

rowHeight = 0;

String example:

rowHeight = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";

rows

Type: Number

Description: n/a

rows = 25;

S

selectWithRMB

Type: Number

Description

Enable row selection with the right mouse button.

Note

Arma 3: Since Arma 3 v2.00.

selectWithRMB = 0;

shadowPictureLeft

Type: Number

Description: n/a

shadowPictureLeft = 0;

shadowPictureRight

Type: Number

Description: n/a

shadowPictureRight = 0;

shadowTextLeft

Type: Number

Description: n/a

shadowTextLeft = 0;

shadowTextRight

Type: Number

Description: n/a

shadowTextRight = 0;

soundSelect

Type: Array

Description: n/a

soundSelect[] = {"",0.1,1};

soundSelect

Type: Array

Description: n/a

soundSelect[] = {"",0.1,1};

T

tooltipPerColumn

Type: Boolean

Description

If set to true, each cell can have a different tooltip. (Optional - default: false)

Note

Arma 3: Since Arma 3 v2.01.147037.

tooltipPerColumn = true;

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 keyword).

In older versions, use "Default" call BIS_fnc_exportGUIBaseClasses; and paste the result into the description.ext.

RscListNBox

class RscListNBox
{
    deletable = 0;
    fade = 0;
    access = 0;
    type = CT_LISTNBOX;
    rowHeight = 0;
    colorText[] = {1,1,1,1};
    colorScrollbar[] = {0.95,0.95,0.95,1};
    colorSelect[] = {0,0,0,1};
    colorSelect2[] = {0,0,0,1};
    colorSelectBackground[] = {0.95,0.95,0.95,1};
    colorSelectBackground2[] = {1,1,1,0.5};
    colorBackground[] = {0,0,0,1};
    maxHistoryDelay = 1;
    soundSelect[] =
    {
        "",
        0.1,
        1
    };
    autoScrollSpeed = -1;
    autoScrollDelay = 5;
    autoScrollRewind = 0;
    arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";
    arrowFull = "#(argb,8,8,3)color(1,1,1,1)";
    drawSideArrows = 0;
    columns[] = {0.3,0.6,0.7};
    idcLeft = -1;
    idcRight = -1;
    class ListScrollBar : ScrollBar
    {
    };
    style = ST_MULTI;
    shadow = 0;
    font = "RobotoCondensed";
    sizeEx = GUI_TEXT_SIZE_MEDIUM;
    color[] = {0.95,0.95,0.95,1};
    colorDisabled[] = {1,1,1,0.25};
    colorPicture[] = {1,1,1,1};
    colorPictureSelected[] = {1,1,1,1};
    colorPictureDisabled[] = {1,1,1,1};
    period = 1.2;
    x = 0;
    y = 0;
    w = 0.3;
    h = 0.3;
    class ScrollBar : ScrollBar
    {
    };
};

Other Examples

class RscListNBox
{
  access = 0;
  type = CT_LISTNBOX;// 102;
  style =ST_MULTI;
  w = 0.4;   h = 0.4;
  font = "TahomaB";
  sizeEx = 0.04;
  colorText[] = {0.8784, 0.8471, 0.651, 1};
  colorBackground[] = {0, 0, 0, 1};
  autoScrollSpeed = -1;
  autoScrollDelay = 5;
  autoScrollRewind = 0;
  arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";
  arrowFull = "#(argb,8,8,3)color(1,1,1,1)";
  columns[] = {0.3, 0.6, 0.7};
  color[] = {1, 1, 1, 1};
  colorScrollbar[] = {0.95, 0.95, 0.95, 1};
  colorSelect[] = {0.95, 0.95, 0.95, 1};
  colorSelect2[] = {0.95, 0.95, 0.95, 1};
  colorSelectBackground[] = {0, 0, 0, 1};
  colorSelectBackground2[] = {0.8784, 0.8471, 0.651, 1};
  drawSideArrows = 0;
  idcLeft = -1;
  idcRight = -1;
  maxHistoryDelay = 1;
  rowHeight = 0;
  soundSelect[] = {"", 0.1, 1};
  period = 1;
  shadow = 2;
  class ScrollBar
  {
    arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";
    arrowFull = "#(argb,8,8,3)color(1,1,1,1)";
    border = "#(argb,8,8,3)color(1,1,1,1)";
    color[] = {1,1,1,0.6};
    colorActive[] = {1,1,1,1};
    colorDisabled[] = {1,1,1,0.3};
    thumb = "#(argb,8,8,3)color(1,1,1,1)";
  };
};

Scripting Example

As for invisible data processing, lnbAddArray, lnbAddColumn, lnbData, lnbGetColumnsPosition, lnbSetColumnsPos, lnbSetData, lnbSetText, lnbSetValue, lnbText and lnbValue store data types into exact position of the CT_LISTNBOX with different spaces. Accessing data with coordinate command at nearly the same syntax:

// Set same value to one position of a Control
_ctrl lnbSetData [[0,0],"#1"];
lnbSetColumnsPos [102,[0,1],1];
_ctrl lnbSetText [[0,1], "#1"];
_ctrl lnbSetValue [[0,0],1];
// Accessing the value disregard affecting one another
_ctrl lnbData [0,0]; // "#1"
lnbGetColumnsPosition _ctrl; // [1];
_ctrl lnbText [0,0]; // "#1"
_ctrl lnbValue [0,0]; // 1

For a direct visible control over CT_LISTNBOX:

Code Pictures
[_CT_LISTNBOX] spawn {
    disableSerialization;
    params ["_CT_LISTNBOX"];
    {
        _CT_LISTNBOX lnbAddRow [getText (_x >> "displayNameShort"), getText (_x >> "displayName")];
        _CT_LISTNBOX lnbSetPicture [[_foreachIndex, 0],getText (_x >> "texture")];
    } forEach ("true" configClasses (configFile >> "CfgRanks"));
    _CT_LISTNBOX lnbSetCurSelRow 0;
    private _current = lnbCurSelRow _CT_LISTNBOX;
    private _color = _CT_LISTNBOX lnbColor [_current, 0];
    _CT_LISTNBOX lnbSetColor [[_current, 1], [(_color select 0) / 2, 0, 0, 1]];
    _CT_LISTNBOX lnbDeleteColumn 0;
    _CT_LISTNBOX lnbDeleteRow 1;
    sleep 1;
    lnbClear _CT_LISTNBOX; // Clear all items but control still remains just invisible
};

BIS_fnc_initListNBoxSorting Example

BIS_fnc_initListNBoxSorting can be used to create a sortable CT_LISTNBOX. To that end, two separate CT_LISTNBOX controls are required: One filter control and one content control. The filter control becomes the header of the sortable CT_LISTNBOX.

This example demonstrates the basic steps and components needed to create a sortable CT_LISTNBOX. See BIS_fnc_initListNBoxSorting to learn more about additional features of that function.

import ctrlListNBox; //This base class comes with vanilla Arma 3 and is of type CT_LISTNBOX.

class ExampleDialog {
    idd = 12345;
    onLoad = "_this call TAG_fnc_initListNBoxCtrls;";
    //...

    class ControlsBackground {
        //...
    };

    class Controls {
        class Filter : ctrlListNBox {
            idc = 100;
            x = 0;
            y = 0.045;
            w = 1;
            h = 0.04;
        };

        class Content : ctrlListNBox {
            idc = 101;
            disableOverflow = 1;
            tooltipPerColumn = 1;
            x = 0;
            y = 0.085;
            w = 1;
            h = 0.87;
        };

        //...
    };
};

The TAG_fnc_initListNBoxCtrls function (called from the onLoad UI Event Handler):

disableSerialization;

params ["_parentDisplay"];

private _filterCtrl = _parentDisplay displayCtrl 100;
private _contentCtrl = _parentDisplay displayCtrl 101;

// Add columns:
{
    _x lnbAddColumn 0.5;
} forEach [_filterCtrl, _contentCtrl];

// Add column headers:
_filterCtrl lnbAddRow ["Name", "Group"];

// Add content rows:
{
    _contentCtrl lnbAddRow [name _x, groupId group _x];
} forEach allUnits;

[_filterCtrl, _contentCtrl] call BIS_fnc_initListNBoxSorting;

ctrlSetFocus _contentCtrl; // Without this line, the user has to click _contentCtrl first in order to use the sorting buttons.