diff --git a/control.go b/control.go index 34e5c84..52202b7 100644 --- a/control.go +++ b/control.go @@ -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 diff --git a/grid.go b/grid.go index 9e68e66..06951a8 100644 --- a/grid.go +++ b/grid.go @@ -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 { diff --git a/stack.go b/stack.go index f210ec8..6b028a6 100644 --- a/stack.go +++ b/stack.go @@ -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