summaryrefslogtreecommitdiff
path: root/tab.go
diff options
context:
space:
mode:
Diffstat (limited to 'tab.go')
-rw-r--r--tab.go111
1 files changed, 111 insertions, 0 deletions
diff --git a/tab.go b/tab.go
new file mode 100644
index 0000000..f0fc563
--- /dev/null
+++ b/tab.go
@@ -0,0 +1,111 @@
+package main
+
+// implements widgets 'Window' and 'Tab'
+
+import (
+ "strings"
+
+ "go.wit.com/lib/widget"
+ "go.wit.com/log"
+)
+
+func (w *guiWidget) Width() int {
+ if w.frame {
+ return w.gocuiSize.w1 - w.gocuiSize.w0
+ }
+ return w.gocuiSize.w1 - w.gocuiSize.w0 - 1
+}
+
+func (w *guiWidget) Height() int {
+ if w.frame {
+ return w.gocuiSize.h1 - w.gocuiSize.h0
+ }
+ return w.gocuiSize.h1 - w.gocuiSize.h0 - 1
+}
+
+func (n *node) gocuiSetWH(sizeW, sizeH int) {
+ w := len(widget.GetString(n.value))
+ lines := strings.Split(widget.GetString(n.value), "\n")
+ h := len(lines)
+
+ tk := n.tk
+ if tk.isFake {
+ tk.gocuiSize.w0 = sizeW
+ tk.gocuiSize.h0 = sizeH
+ tk.gocuiSize.w1 = tk.gocuiSize.w0 + w + me.FramePadW
+ tk.gocuiSize.h1 = tk.gocuiSize.h0 + h + me.FramePadH
+ return
+ }
+
+ if tk.frame {
+ tk.gocuiSize.w0 = sizeW
+ tk.gocuiSize.h0 = sizeH
+ tk.gocuiSize.w1 = tk.gocuiSize.w0 + w + me.FramePadW
+ tk.gocuiSize.h1 = tk.gocuiSize.h0 + h + me.FramePadH
+ } else {
+ tk.gocuiSize.w0 = sizeW - 1
+ tk.gocuiSize.h0 = sizeH - 1
+ tk.gocuiSize.w1 = tk.gocuiSize.w0 + w + 1
+ tk.gocuiSize.h1 = tk.gocuiSize.h0 + h + 1
+ }
+}
+
+func redoWindows(nextW int, nextH int) {
+ for _, n := range me.rootNode.children {
+ if n.WidgetType != widget.Window {
+ continue
+ }
+ w := n.tk
+ var tabs bool
+ for _, child := range n.children {
+ if child.WidgetType == widget.Tab {
+ tabs = true
+ }
+ }
+ if tabs {
+ // window is tabs. Don't show it as a standard button
+ w.frame = false
+ n.hasTabs = true
+ } else {
+ w.frame = false
+ n.hasTabs = false
+ }
+
+ n.gocuiSetWH(nextW, nextH)
+ n.deleteView()
+ n.showView()
+
+ sizeW := w.Width() + me.WindowPadW
+ sizeH := w.Height()
+ nextW += sizeW
+ log.Log(NOW, "redoWindows() start nextW,H =", nextW, nextH, "gocuiSize.W,H =", sizeW, sizeH, n.progname)
+
+ if n.hasTabs {
+ n.redoTabs(me.TabW, me.TabH)
+ }
+ }
+}
+
+func (p *node) redoTabs(nextW int, nextH int) {
+ for _, n := range p.children {
+ if n.WidgetType != widget.Tab {
+ continue
+ }
+ w := n.tk
+ w.frame = true
+
+ n.gocuiSetWH(nextW, nextH)
+ n.deleteView()
+ // setCurrentTab(n)
+ // if (len(w.cuiName) < 4) {
+ // w.cuiName = "abcd"
+ // }
+
+ n.showView()
+
+ sizeW := w.Width() + me.TabPadW
+ sizeH := w.Height()
+ log.Log(NOW, "redoTabs() start nextW,H =", nextW, nextH, "gocuiSize.W,H =", sizeW, sizeH, n.progname)
+ nextW += sizeW
+ }
+}