SOB – Container – Matrix

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:

newscript
dim myWindow = sob (0, "add","window","Hello World")
function ClickMyWindow ( sobid )
sob ( myWindow, "delete")
quit
End function
sob ( 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.