summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-10-26 15:15:13 -0400
committerPietro Gagliardi <[email protected]>2014-10-26 15:15:13 -0400
commit335480db7cd6ed97778ef8fef0710e4d68606457 (patch)
treee42e175a54ad1e2cde7c99705270987170e387e9
parentca39a32a90913ce76c21d91fa7773ac3f893e009 (diff)
Reimplemented Control.containerShow()/Control.containerHide(). Will be needed to fully move Tab on Windows away from container.
-rw-r--r--control.go15
-rw-r--r--control_windows.go12
-rw-r--r--grid.go12
-rw-r--r--simplegrid.go16
-rw-r--r--stack.go12
5 files changed, 64 insertions, 3 deletions
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