GridLayout grid layout calculator
GridLayout is useful for laying out the larger sections of an interface.
Grid systems are a commonly used method that graphic designers use layout the overall form of a page. Look at any magazine, newspaper or finer website. They give a vertical and horizontal rhythm to the design and simplify decisions about where to place things. It quantizes the visual space.
A GridLayout is not a decorator like FlowLayout. You create one and use it directly to calculate bounds, then Composite views or flow views can be placed at those Rects and you put your controls and stuff inside those.
// a fairly large bounds
b = GUI.window.screenBounds.resizeBy(-100,-100);
// create a large grid layout with 12 cols and 5 rows
g = GridLayout.new(b,12,5);
// 12 cols and as many rows as will fit within the bounds
g = GridLayout.new(b,12);
// use the grid's gui to plan where you want things
g.gui
Several ways to specify and obtain bounds.
To get a 2 x 3 box (occupying 6 total grid spaces) in the upper right corner I find it easiest to specify two sets of quadrants that encompass the area.
// top left and bottom right corner
g.calc( 0@0, 2@1 )
// you can specify any two quadrants in any order
// the same specified with points
// or specify using a rect with the left,top, width, height in integers
g.mapRect( Rect(0,0,2,3) )
(
b = GUI.window.screenBounds.resizeBy(-100,-100);
g = GridLayout.new(b,12,7);
w = GUI.window.new(b).front;
// 12 cols and as many rows as will fit within the bounds
g = GridLayout.new(b,12);
// g.gui
a = g.calc( 0@),
w.view
Could be done as a decorator and specify bounds as integers
decorator = GridLayout
text(g,Rect(0,0,1,1))
text(g,Rect(2,0,6,1))
text(g,GridBlock([2,0],[3,4])
[2,0][3,4]
text(c,g.calc([2,0],[3,4]))
g.calc(2@0,3@4)
g.project(2@0,3@4)