A matrix (I suppose you could also think of it as a grid) imposes on to its child:
Positioning:
- In a uniform row/column matrix
Dimensions:
- All child objects have the height of the tallest child object, and the width of the widest child object.
A Matrix definition requires two special parameters:
- Row or Column – a matrix must have 1 defined dimension, either the number of rows, or the number of columns
- Dimension – an integer
So to define a matrix as having 3 columns we might use something like:
newscriptdim myWindow = sob (0, "add","window","Hello World")function ClickMyWindow ( sobid )sob ( myWindow, "delete")quitEnd functionsob ( myWindow , "ON" , "CLICK" , "ClickMyWindow" )dim myMenuBar = sob (myWindow , "add" , "menu" , "bar" )dim myMenuFile = sob (myMenuBar , "add" , "menu" , "Horizontal" , "File" )dim myFileExit = sob ( myMenuFile , "add" , "menu" , "Vertical" , "Exit" )sob ( myFileExit , "ON" , "CLICK" , "ClickMyWindow")
dim myContainer = sob ( myWindow , "add" , "CONTAINER" , "MATRIX.C" , 3)sob ( myContainer, "add" ,"label" , "COLUMN" )sob ( myContainer, "add" , "LISTVIEW"," ", 5,0x00800008 )sob ( myContainer, "add" , "button" , "Push" , "Push button" )
sob ( myContainer, "add" ,"label" , "Label" )sob ( myContainer, "add" , "LISTVIEW"," ", 5,0x00800008 )sob ( myContainer, "add" , "button" , "Push" , "Push button" )
sob ( myContainer, "add" ,"label" , "Label" )sob ( myContainer, "add" , "LISTVIEW"," ", 5,0x00800008 )sob ( myContainer, "add" , "button" , "Push" , "Push button" )
sob ( myContainer, "add" ,"label" , "Label" )sob ( myContainer, "add" , "LISTVIEW"," ", 5,0x00800008 )sob ( myContainer, "add" , "button" , "Push" , "Push button" )
sob ( myContainer, "add" ,"label" , "Label" )sob ( myContainer, "add" , "LISTVIEW"," ", 5,0x00800008 )sob ( myContainer, "add" , "button" , "Push" , "Push button" )
sob ( myWindow, "SET" , "SHRINK" )
Which would produce a GUI as shown in the following screenshot:

Or if we changed the matrix definition line to:
dim myContainer = sob ( myWindow , "add" , "CONTAINER" , "MATRIX.R" , 3)
We would see:

Functional specifications for matrix container related SOB commands:
Add – Container
SOB ( _<Parent: number expression> ,_"ADD" , _
"CONTAINER" , _"container type" , _<FIXED: integer expression> _)
Where container type (enclosed in a pair of " ) must be replaced by one of the following (case insensitive):
- matrix.c – for a fixed number of columns
- matrix.r – for a fixed number of rows
And the <FIXED: integer expression> defines the number of columns / rows as appropriate.