Implemented Padded on Grid.

This commit is contained in:
Pietro Gagliardi 2014-10-17 13:16:16 -04:00
parent 48be573b22
commit 61a21b87aa
1 changed files with 38 additions and 8 deletions

View File

@ -27,6 +27,11 @@ type Grid interface {
// The effect of overlapping spanning Controls is also undefined. // The effect of overlapping spanning Controls is also undefined.
// Add panics if either xspan or yspan are zero or negative. // Add panics if either xspan or yspan are zero or negative.
Add(control Control, nextTo Control, side Side, xexpand bool, xalign Align, yexpand bool, yalign Align, xspan int, yspan int) Add(control Control, nextTo Control, side Side, xexpand bool, xalign Align, yexpand bool, yalign Align, xspan int, yspan int)
// Padded and SetPadded get and set whether the controls of the Grid have padding between them.
// The size of the padding is platform-dependent.
Padded() bool
SetPadded(padded bool)
} }
// Align represents the alignment of a Control in its cell of a Grid. // Align represents the alignment of a Control in its cell of a Grid.
@ -55,6 +60,7 @@ type grid struct {
indexof map[Control]int indexof map[Control]int
prev int prev int
container *container container *container
padded bool
xmax int xmax int
ymax int ymax int
@ -160,6 +166,14 @@ func (g *grid) Add(control Control, nextTo Control, side Side, xexpand bool, xal
g.reorigin() g.reorigin()
} }
func (g *grid) Padded() bool {
return g.padded
}
func (g *grid) SetPadded(padded bool) {
g.padded = padded
}
func (g *grid) setParent(p *controlParent) { func (g *grid) setParent(p *controlParent) {
g.container.setParent(p) g.container.setParent(p)
} }
@ -191,9 +205,17 @@ func (g *grid) resize(x int, y int, width int, height int, d *sizing) {
return return
} }
// -2) get this Grid's padding
xpadding := d.xpadding
ypadding := d.ypadding
if !g.padded {
xpadding = 0
ypadding = 0
}
// -1) discount padding from width/height // -1) discount padding from width/height
width -= (g.xmax - 1) * d.xpadding width -= (g.xmax - 1) * xpadding
height -= (g.ymax - 1) * d.ypadding height -= (g.ymax - 1) * ypadding
// 0) build necessary data structures // 0) build necessary data structures
gg, colwidths, rowheights := g.mkgrid() gg, colwidths, rowheights := g.mkgrid()
@ -315,11 +337,11 @@ func (g *grid) resize(x int, y int, width int, height int, d *sizing) {
if i != prev { if i != prev {
g.controls[i].finalx = curx g.controls[i].finalx = curx
} else { } else {
g.controls[i].finalwidth += d.xpadding g.controls[i].finalwidth += xpadding
} }
g.controls[i].finalwidth += colwidths[x] g.controls[i].finalwidth += colwidths[x]
} }
curx += colwidths[x] + d.xpadding curx += colwidths[x] + xpadding
prev = i prev = i
} }
} }
@ -332,11 +354,11 @@ func (g *grid) resize(x int, y int, width int, height int, d *sizing) {
if i != prev { if i != prev {
g.controls[i].finaly = cury g.controls[i].finaly = cury
} else { } else {
g.controls[i].finalheight += d.ypadding g.controls[i].finalheight += ypadding
} }
g.controls[i].finalheight += rowheights[y] g.controls[i].finalheight += rowheights[y]
} }
cury += rowheights[y] + d.ypadding cury += rowheights[y] + ypadding
prev = i prev = i
} }
} }
@ -384,6 +406,14 @@ func (g *grid) preferredSize(d *sizing) (width, height int) {
return 0, 0 return 0, 0
} }
// -1) get this Grid's padding
xpadding := d.xpadding
ypadding := d.ypadding
if !g.padded {
xpadding = 0
ypadding = 0
}
// 0) build necessary data structures // 0) build necessary data structures
gg, colwidths, rowheights := g.mkgrid() gg, colwidths, rowheights := g.mkgrid()
@ -420,8 +450,8 @@ func (g *grid) preferredSize(d *sizing) (width, height int) {
} }
// and that's it; just account for padding // and that's it; just account for padding
return colwidth + (g.xmax-1)*d.xpadding, return colwidth + (g.xmax-1) * xpadding,
rowheight + (g.ymax-1)*d.ypadding rowheight + (g.ymax-1) * ypadding
} }
func (g *grid) nTabStops() int { func (g *grid) nTabStops() int {