A Logo grid is a special control that lets you arrange widgets in a grid. This makes a grid a very powerful feature, because it is not necessary to re-align controls because of changes to the display size when you store them in a grid. Note that a grid cell can only take a single widget.
A grid is a
GRID widget, which you create either be dragging the grid symbol from the Toolbox' “Controls” panel to the Graphics panel, or with the help of the
DECLARE commands. Once you have created a grid, you can access its individual cells with the commands described below. Initially, each grid cell contains a
STATICTEXT widget whose text you can set via its
By default, a
GRID widget has a size of 3×3 cells. You can change the number of rows by setting the grid's
ROWS property, and you can set the value of its
COLUMNS property to set the number of columns. You can also use the
SETGRIDDIMS command to change the dimensions of the grid. Changing the grid's dimensions erases the contents of the grid, and destroys any widgets that have been stored into the grid. A grid adjusts itself to the largest items of a row or column. You can use the
FILLGRID command to quickly fill a grid with text content.
A grid cell has “coordinates” that range from 0 to the number of rows or columns minus one. Thus, the top left cell has the coordinates 0, 0, the next cell to the right has 1, 0, and so on. This has been modeled after Logo arrays, who have a similar way to access array elements; see the page about arrays for a detailed description of array coordinates.
Initially, a grid has cell borders; you can change the color of the borders by setting the grid's
BORDER property to a different color, or you can make it invisible by using a color with an alpha value of 0, like, for example,
[0 0 0 0].
You can change the properties of the entire grid, or a row or column with the
GPPROP command, which makes it easy to apply styles to, for example, a header row. Also, you can define a runlist for each grid cell that Logo executes when the cell has been clicked by setting the cell widget's
For more information, see the Grids chapter of the Logo manual.
Sets the text values of a grid.
FILLGRID grid-name wordorlist
FILLGRID initializes the grid named in its first input with the data in the list given as its second input. If the list is non-structured, the grid is filled sequentially regardless of its dimensions. If the list is structured, the grid is filled according to the structure of the list and its dimensions.
If the input is a word, FILLGRID initializes the grid with each character of the word.
Note that FILLGRID sets the
TEXT property of each grid widget. See Control Properties for an explanation of how different controls handle their
Outputs the name of a widget stored in a grid cell.
GGET grid-name row column
GGET outputs the name of a widget stored in a grid cell. The column and row numbers are between 0 and the number of grid columns and rows minus one, respectively.
Initially, each grid cell contains a
STATICTEXT widget; Logo creates the names of these widgets using the grid's name plus the column and row numbers, separated by dots. If you, for example, create a grid
GRID, the grid's top left text cell would have the name
GGET is often used together with the
PPROP commands to get or set a cell property. If you, for example, wish to change the top left cell's font of your grid
“MYGRID, you can use the command
PPROP GGET “MYGRID 0 0 “FONT [HELVETICA 14 1].
Outputs the text of a grid cell.
GGETTEXT grid-name row column
GGETTEXT outputs the text of a grid cell. The column and row numbers are between 0 and the number of grid columns and rows minus one, respectively. If the cell is empty, GGETTEXT outputs an empty word; otherwise, it outputs the value of the cell's
GGETTEXT is a shortcut for
GPROP GGET grid-name row column “TEXT.
Alters a property of a grid, a row, a column, or a cell.
GPPROP grid-name property-name property-value (GPPROP grid-name property-name property-value column) (GPPROP grid-name property-name property-value column row)
GPPROP sets a property value at multiple table cells. If used without brackets, GPPROP alters the entire table.
The optional inputs for row and column designate the row and column to set. If the row is omitted, an entire column is altered. Also, if a column value is -1, the row is altered, and if a row value is -1, the column is altered. If both values are -1, the entire grid is altered.
To set a larger header font for the first row:
(GPPROP gridname “FONT [HELVETICA 14 0] -1 0)
To set a larger header font for the first column:
(GPPROP gridname “FONT [HELVETICA 14 0] 0)
ERASE "G DECLARE "GRID "G GPPROP "G "TEXT "HELLO (GPPROP "G "FONT [HELVETICA 14 1] 0 -1) (GPPROP "G "FONT [HELVETICA 14 1] -1 0) (GPPROP "G "COLOR "RED 0 -1) (GPPROP "G "COLOR "BLUE -1 0)
Reports the size of a grid.
GRIDDIMS reports the size of a grid as a two-element list of the numbers of rows and columns. See also
Stores a widget into a grid cell.
GSET grid-name row column widget-name
GSET stores the widgets whose name is the GSET's last input into a grid's cell. The column and row numbers are between 0 and the number of grid columns and rows minus one, respectively. If the cell contains a widget, the widget is destroyed.
Once a widget has been stored into a grid cell, it cannot move anymore. Any attempts to move the widgets are ignored.
Stores a text into a grid cell.
GSETTEXT grid-name row column text
GSETTEXT stores its last input into a grid's cell as text. The column and row numbers are between 0 and the number of grid columns and rows minus one, respectively. If the text contains a control, for example, the control's text is altered.
ERASE "G DECLARE "GRID "G GSET "G 0 1 NEW "BUTTON GSETTEXT "G 0 0 "ONE GSETTEXT "G 0 1 "TWO GSETTEXT "G 0 2 "THREE
Reports the values of a grid as a list.
LISTGRID reports a list of row contents. Each sub-list contains the column values of a row. LISTGRID reads each cell's
TEXT property to collect its values.
The output of LISTGRID can be used as input to
FILLARRAY to quickly transfer the contents of a grid to an array or another grid.
ERASE "G DECLARE "GRID "G GSETTEXT "G 0 1 25 GSETTEXT "G 1 1 50 LISTGRID "G Result: [[|| 25 ||] [|| 50 ||] [|| || ||]]
Sets the size of a grid.
SETGRIDDIMS grid-name rows columns
SETGRIDDIMS sets the size of a grid. Its inputs are the number of columns and rows, which may vary between 1 and 999. SETGRIDDIMS erases the contents of the grid, and erases any widgets that have been stored into the grid.
You can also set the grid's dimensions by settings its
ERASE "G DECLARE "GRID "G SETGRIDDIMS "G 3 5