diff options
| author | Pietro Gagliardi <[email protected]> | 2014-10-26 15:15:13 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-10-26 15:15:13 -0400 |
| commit | 335480db7cd6ed97778ef8fef0710e4d68606457 (patch) | |
| tree | e42e175a54ad1e2cde7c99705270987170e387e9 | |
| parent | ca39a32a90913ce76c21d91fa7773ac3f893e009 (diff) | |
Reimplemented Control.containerShow()/Control.containerHide(). Will be needed to fully move Tab on Windows away from container.
| -rw-r--r-- | control.go | 15 | ||||
| -rw-r--r-- | control_windows.go | 12 | ||||
| -rw-r--r-- | grid.go | 12 | ||||
| -rw-r--r-- | simplegrid.go | 16 | ||||
| -rw-r--r-- | stack.go | 12 |
5 files changed, 64 insertions, 3 deletions
@@ -8,6 +8,11 @@ type Control interface { preferredSize(d *sizing) (width, height int) resize(x int, y int, width int, height int, d *sizing) nTabStops() int // used by the Windows backend + + // these are provided for Tab on Windows, where we have to show and hide the individual tab pages manually + // if we ever get something like a SidebarStack of some sort, we'll need to implement this everywhere + containerShow() // show if and only if programmer said to show + containerHide() // hide regardless of whether programmer said to hide } type controlbase struct { @@ -15,6 +20,8 @@ type controlbase struct { fpreferredSize func(d *sizing) (width, height int) fresize func(x int, y int, width int, height int, d *sizing) fnTabStops func() int + fcontainerShow func() + fcontainerHide func() } // children should not use the same name as these, otherwise weird things will happen @@ -34,3 +41,11 @@ func (c *controlbase) resize(x int, y int, width int, height int, d *sizing) { func (c *controlbase) nTabStops() int { return c.fnTabStops() } + +func (c *controlbase) containerShow() { + c.fcontainerShow() +} + +func (c *controlbase) containerHide() { + c.fcontainerHide() +} diff --git a/control_windows.go b/control_windows.go index ffe0222..8661e50 100644 --- a/control_windows.go +++ b/control_windows.go @@ -19,12 +19,18 @@ type controlSingleHWND struct { func newControlSingleHWND(hwnd C.HWND) *controlSingleHWND { c := new(controlSingleHWND) c.controlbase = &controlbase{ - fsetParent: c.xsetParent, - fresize: c.xresize, - fnTabStops: func() int { + fsetParent: c.xsetParent, + fresize: c.xresize, + fnTabStops: func() int { // most controls count as one tab stop return 1 }, + fcontainerShow: func() { + C.ShowWindow(c.hwnd, C.SW_SHOW) + }, + fcontainerHide: func() { + C.ShowWindow(c.hwnd, C.SW_HIDE) + }, } c.hwnd = hwnd return c @@ -178,6 +178,18 @@ func (g *grid) setParent(p *controlParent) { g.container.setParent(p) } +func (g *grid) containerShow() { + for _, c := range g.controls { + c.control.containerShow() + } +} + +func (g *grid) containerHide() { + for _, c := range g.controls { + c.control.containerHide() + } +} + // builds the topological cell grid; also makes colwidths and rowheights func (g *grid) mkgrid() (gg [][]int, colwidths []int, rowheights []int) { gg = make([][]int, g.ymax) diff --git a/simplegrid.go b/simplegrid.go index aac2586..e5aa5eb 100644 --- a/simplegrid.go +++ b/simplegrid.go @@ -124,6 +124,22 @@ func (g *simpleGrid) setParent(parent *controlParent) { g.container.setParent(parent) } +func (g *simpleGrid) containerShow() { + for _, cc := range g.controls { + for _, c := range cc { + c.containerShow() + } + } +} + +func (g *simpleGrid) containerHide() { + for _, cc := range g.controls { + for _, c := range cc { + c.containerHide() + } + } +} + func (g *simpleGrid) resize(x int, y int, width int, height int, d *sizing) { max := func(a int, b int) int { if a > b { @@ -85,6 +85,18 @@ func (s *stack) setParent(parent *controlParent) { s.container.setParent(parent) } +func (s *stack) containerShow() { + for _, c := range s.controls { + c.containerShow() + } +} + +func (s *stack) containerHide() { + for _, c := range s.controls { + c.containerHide() + } +} + func (s *stack) resize(x int, y int, width int, height int, d *sizing) { var stretchywid, stretchyht int |
