summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--color.go2
-rw-r--r--debug.go2
-rw-r--r--eventMouseClick.go11
-rw-r--r--find.go39
-rw-r--r--structs.go1
-rw-r--r--treeDraw.go140
-rw-r--r--window.go5
7 files changed, 125 insertions, 75 deletions
diff --git a/color.go b/color.go
index 01be54c..fb712ac 100644
--- a/color.go
+++ b/color.go
@@ -55,7 +55,7 @@ var colorWindow colorT = colorT{
selBg: powdererBlue,
name: "normal window",
}
-var colorActiveW colorT = colorT{none, none, powdererBlue, none, powdererBlue, "active window"}
+var colorActiveW colorT = colorT{none, none, powdererBlue, none, powdererBlue, "active window"} // sets the window to blue
var colorTab colorT = colorT{gocui.ColorBlue, gocui.ColorBlue, none, none, powdererBlue, "normal tab"}
var colorActiveT colorT = colorT{gocui.ColorBlue, none, powdererBlue, none, powdererBlue, "active tab"}
diff --git a/debug.go b/debug.go
index e97c952..d781dae 100644
--- a/debug.go
+++ b/debug.go
@@ -38,11 +38,11 @@ func (tk *guiWidget) dumpWidget(s string) {
sizeW, sizeH := tk.Size()
s1 += fmt.Sprintf("size=(%3d,%3d)", sizeW, sizeH)
if tk.Visible() {
+ r := tk.setFullSize()
s1 += fmt.Sprintf("gocui=(%3d,%3d,%3d,%3d)",
tk.gocuiSize.w0, tk.gocuiSize.h0, tk.gocuiSize.w1, tk.gocuiSize.h1)
// vx0, vy0, vx1, vy1, _ := me.baseGui.ViewPosition("msg")
// vw0, vh0, vw1, vh1, _ := me.baseGui.ViewPosition(tk.v.Name())
- r := tk.getFullSize()
s1 += fmt.Sprintf(" full=(%3d,%3d,%3d,%3d)", r.w0, r.h0, r.w1, r.h1)
} else {
s1 += fmt.Sprintf(" %3s %3s %3s %3s ", "", "", "", "")
diff --git a/eventMouseClick.go b/eventMouseClick.go
index 8d33800..1f33ee7 100644
--- a/eventMouseClick.go
+++ b/eventMouseClick.go
@@ -18,7 +18,7 @@ func (tk *guiWidget) doWidgetClick(w int, h int) {
// if there is a current window, hide it
if me.currentWindow != nil {
me.currentWindow.setColor(&colorWindow)
- me.currentWindow.hideWidgets()
+ // me.currentWindow.hideWidgets()
me.currentWindow.isCurrent = false
}
@@ -27,17 +27,18 @@ func (tk *guiWidget) doWidgetClick(w int, h int) {
me.currentWindow.isCurrent = true
tk.active = false
+ // might make the green box the right size
+ tk.setFullSize()
+
// draw the current window
w := tk.gocuiSize.w0 + 4
h := tk.gocuiSize.h0 + 4
tk.DrawAt(w, h)
- tk.setColor(&colorActiveW)
+ tk.setColor(&colorActiveW) // sets the window to Green BG
tk.showWidgets()
tk.placeWidgets(w, h) // compute the sizes & places for each widget
- full := tk.getFullSize()
- tk.gocuiSize.w1 = full.w1
- tk.gocuiSize.h1 = full.h1
+ tk.setFullSize()
me.baseGui.SetView(tk.cuiName, tk.gocuiSize.w0, tk.gocuiSize.h0, tk.gocuiSize.w1, tk.gocuiSize.h1, 0)
case widget.Group:
if tk.active {
diff --git a/find.go b/find.go
index 30344de..87ce832 100644
--- a/find.go
+++ b/find.go
@@ -5,6 +5,7 @@ package main
import (
"github.com/awesome-gocui/gocui"
+ log "go.wit.com/log"
"go.wit.com/widget"
)
@@ -57,6 +58,44 @@ func (tk *guiWidget) findByXYreal(w int, h int) []*guiWidget {
return widgets
}
+func (tk *guiWidget) setFullSize() rectType {
+ r := tk.getFullSize()
+
+ /*
+ r.w0 = tk.gocuiSize.w0
+ r.w1 = tk.gocuiSize.w1
+ r.h0 = tk.gocuiSize.h0
+ r.h1 = tk.gocuiSize.h1
+ */
+ var changed bool
+ if tk.gocuiSize.w0 != r.w0 {
+ tk.gocuiSize.w0 = r.w0
+ changed = true
+ }
+ if tk.gocuiSize.w1 != r.w1 {
+ tk.gocuiSize.w1 = r.w1
+ changed = true
+ }
+ if tk.gocuiSize.h0 != r.h0 {
+ tk.gocuiSize.h0 = r.h0
+ changed = true
+ }
+ if tk.gocuiSize.h1 != r.h1 {
+ tk.gocuiSize.h1 = r.h1
+ changed = true
+ }
+ if changed {
+ if tk.node.WidgetType == widget.Window {
+ log.Info("REDRAW WINDOW IN setFullSize()")
+ tk.gocuiSize.w1 = r.w1 + 2
+ tk.gocuiSize.h1 = r.h1 + 1
+ tk.Hide()
+ tk.drawView()
+ }
+ }
+ return r
+}
+
// this checks a widget to see if it is under (W,H), then checks the widget's children
// anything that matches is passed back as an array of widgets
func (tk *guiWidget) getFullSize() rectType {
diff --git a/structs.go b/structs.go
index b36bde9..a51b7a4 100644
--- a/structs.go
+++ b/structs.go
@@ -120,6 +120,7 @@ type guiWidget struct {
frame bool // ?
selectedTab *tree.Node // for a window, this is currently selected tab
color *colorT // what color to use
+ resize bool
}
// from the gocui devs:
diff --git a/treeDraw.go b/treeDraw.go
index 7c42693..f2cca36 100644
--- a/treeDraw.go
+++ b/treeDraw.go
@@ -10,9 +10,80 @@ import (
"github.com/awesome-gocui/gocui"
log "go.wit.com/log"
+ "go.wit.com/widget"
)
-var toggle bool = true
+// display's the text of the widget in gocui
+// deletes the old view if it exists and recreates it
+func (tk *guiWidget) drawView() {
+ var err error
+ log.Log(INFO, "drawView() START", tk.node.WidgetType, tk.String())
+ if me.baseGui == nil {
+ log.Log(ERROR, "drawView() ERROR: me.baseGui == nil", tk)
+ return
+ }
+
+ if tk.cuiName == "" {
+ log.Log(ERROR, "drawView() tk.cuiName was not set for widget", tk)
+ tk.cuiName = strconv.Itoa(tk.node.WidgetId) + " TK"
+ }
+ log.Log(INFO, "drawView() labelN =", tk.labelN)
+
+ // this deletes the button from gocui
+ me.baseGui.DeleteView(tk.cuiName)
+ tk.v = nil
+
+ if tk.node.WidgetType == widget.Window {
+ if !tk.resize {
+ tk.resize = true
+ tk.textResize() // resize window only once
+ }
+ } else {
+ tk.textResize() // resize everything except windows
+ }
+ a := tk.gocuiSize.w0
+ b := tk.gocuiSize.h0
+ c := tk.gocuiSize.w1
+ d := tk.gocuiSize.h1
+
+ tk.v, err = me.baseGui.SetView(tk.cuiName, a, b, c, d, 0)
+ if err == nil {
+ tk.dumpWidget("drawView() err")
+ log.Log(ERROR, "drawView() internal plugin error err = nil")
+ return
+ }
+ if !errors.Is(err, gocui.ErrUnknownView) {
+ tk.dumpWidget("drawView() err")
+ log.Log(ERROR, "drawView() internal plugin error error.IS()", err)
+ return
+ }
+
+ // this sets up the keybinding for the name of the window
+ // does this really need to be done? I think we probably already
+ // know everything about where all the widgets are so we could bypass
+ // the gocui package and just handle all the mouse events internally here (?)
+ // for now, the w.v.Name is a string "1", "2", "3", etc from the widgetId
+
+ // set the binding for this gocui view now that it has been created
+ // gocui handles overlaps of views so it will run on the view that is clicked on
+ // me.baseGui.SetKeybinding(w.v.Name(), gocui.MouseLeft, gocui.ModNone, click)
+
+ // this actually sends the text to display to gocui
+ tk.v.Wrap = true
+ tk.v.Frame = tk.frame
+ tk.v.Clear()
+ fmt.Fprint(tk.v, tk.labelN)
+
+ // if you don't do this here, it will be black & white only
+ if tk.color != nil {
+ tk.v.FrameColor = tk.color.frame
+ tk.v.FgColor = tk.color.fg
+ tk.v.BgColor = tk.color.bg
+ tk.v.SelFgColor = tk.color.selFg
+ tk.v.SelBgColor = tk.color.selBg
+ }
+ log.Log(INFO, "drawView() END")
+}
func (w *guiWidget) DrawAt(offsetW, offsetH int) {
w.setColor(&colorActiveW)
@@ -27,6 +98,8 @@ func (w *guiWidget) simpleDrawAt(offsetW, offsetH int) {
w.dumpWidget("simpleDrawAt()")
}
+var toggle bool = true
+
func (w *guiWidget) toggleTree() {
if toggle {
w.drawTree(toggle)
@@ -54,68 +127,3 @@ func (w *guiWidget) drawTree(draw bool) {
child.drawTree(draw)
}
}
-
-// display's the text of the widget in gocui
-// deletes the old view if it exists and recreates it
-func (w *guiWidget) drawView() {
- var err error
- log.Log(INFO, "drawView() START", w.node.WidgetType, w.String())
- if me.baseGui == nil {
- log.Log(ERROR, "drawView() ERROR: me.baseGui == nil", w)
- return
- }
-
- if w.cuiName == "" {
- log.Log(ERROR, "drawView() w.cuiName was not set for widget", w)
- w.cuiName = strconv.Itoa(w.node.WidgetId) + " TK"
- }
- log.Log(INFO, "drawView() labelN =", w.labelN)
-
- // this deletes the button from gocui
- me.baseGui.DeleteView(w.cuiName)
- w.v = nil
-
- w.textResize()
- a := w.gocuiSize.w0
- b := w.gocuiSize.h0
- c := w.gocuiSize.w1
- d := w.gocuiSize.h1
-
- w.v, err = me.baseGui.SetView(w.cuiName, a, b, c, d, 0)
- if err == nil {
- w.dumpWidget("drawView() err")
- log.Log(ERROR, "drawView() internal plugin error err = nil")
- return
- }
- if !errors.Is(err, gocui.ErrUnknownView) {
- w.dumpWidget("drawView() err")
- log.Log(ERROR, "drawView() internal plugin error error.IS()", err)
- return
- }
-
- // this sets up the keybinding for the name of the window
- // does this really need to be done? I think we probably already
- // know everything about where all the widgets are so we could bypass
- // the gocui package and just handle all the mouse events internally here (?)
- // for now, the w.v.Name is a string "1", "2", "3", etc from the widgetId
-
- // set the binding for this gocui view now that it has been created
- // gocui handles overlaps of views so it will run on the view that is clicked on
- // me.baseGui.SetKeybinding(w.v.Name(), gocui.MouseLeft, gocui.ModNone, click)
-
- // this actually sends the text to display to gocui
- w.v.Wrap = true
- w.v.Frame = w.frame
- w.v.Clear()
- fmt.Fprint(w.v, w.labelN)
-
- // if you don't do this here, it will be black & white only
- if w.color != nil {
- w.v.FrameColor = w.color.frame
- w.v.FgColor = w.color.fg
- w.v.BgColor = w.color.bg
- w.v.SelFgColor = w.color.selFg
- w.v.SelBgColor = w.color.selBg
- }
- log.Log(INFO, "drawView() END")
-}
diff --git a/window.go b/window.go
index 217f777..36e1aed 100644
--- a/window.go
+++ b/window.go
@@ -20,10 +20,11 @@ func (w *guiWidget) redoWindows(nextW int, nextH int) {
child.frame = false
child.hasTabs = false
- child.gocuiSetWH(nextW, nextH)
+ // this should make the window the full size and re-draw it
+ child.setFullSize() // child.gocuiSetWH(nextW, nextH)
child.Hide()
-
child.drawView()
+
sizeW := child.gocuiSize.Width()
nextW += sizeW + 4
child.redoWindows(startW+3, startH+2)