summaryrefslogtreecommitdiff
path: root/toolkit
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit')
-rw-r--r--toolkit/gocui/add.go21
-rw-r--r--toolkit/gocui/checkbox.go12
-rw-r--r--toolkit/gocui/click.go6
-rw-r--r--toolkit/gocui/common.go8
-rw-r--r--toolkit/gocui/debug.go2
-rw-r--r--toolkit/gocui/keybindings.go4
-rw-r--r--toolkit/gocui/main.go13
-rw-r--r--toolkit/gocui/place.go72
-rw-r--r--toolkit/gocui/structs.go25
-rw-r--r--toolkit/gocui/tab.go16
-rw-r--r--toolkit/gocui/view.go5
-rw-r--r--toolkit/widget.go6
12 files changed, 90 insertions, 100 deletions
diff --git a/toolkit/gocui/add.go b/toolkit/gocui/add.go
index b58189e..dc81130 100644
--- a/toolkit/gocui/add.go
+++ b/toolkit/gocui/add.go
@@ -6,28 +6,27 @@ import (
)
// TODO: make these defaults in config struct definition
-var fakeStartWidth int = 40
-var fakeStartHeight int = 3
+var fakeStartWidth int = me.DevelOffsetW
+var fakeStartHeight int = me.TabH + me.FramePadH
func (w *cuiWidget) setFake() {
w.isFake = true
t := len(w.name)
// setup fake labels for non-visable things off screen
- w.gocuiSize.width = t + me.PadW
- w.gocuiSize.height = me.DefaultHeight + me.PadH
w.gocuiSize.w0 = fakeStartWidth
w.gocuiSize.h0 = fakeStartHeight
+ w.gocuiSize.w1 = w.gocuiSize.w0 + t + me.PadW
+ w.gocuiSize.h1 = w.gocuiSize.h0 + me.DefaultHeight + me.PadH
- w.realWidth = w.gocuiSize.width + me.FramePadW
- w.realHeight = w.gocuiSize.height + me.FramePadH
+ w.realWidth = w.gocuiSize.Width() + me.FramePadW
+ w.realHeight = w.gocuiSize.Height() + me.FramePadH
fakeStartHeight += w.realHeight
// TODO: use the actual max hight of the terminal window
if (fakeStartHeight > 24) {
- fakeStartHeight = 3
- fakeStartWidth += 20
+ fakeStartHeight = me.TabH + me.FramePadH
+ fakeStartWidth += me.DevelOffsetW
}
- w.setWH()
if (logInfo) {
w.drawView()
}
@@ -70,8 +69,8 @@ func (w *cuiWidget) addWidget() {
w.startH = w.parent.startH + me.DefaultHeight + me.FramePadH
t := len(w.text)
- w.gocuiSize.width = t + me.FramePadW
- w.gocuiSize.height = me.DefaultHeight + me.FramePadH
+ w.gocuiSize.w1 = w.gocuiSize.w0 + t + me.FramePadW
+ w.gocuiSize.h1 = w.gocuiSize.h0 + me.DefaultHeight + me.FramePadH
return
default:
w.startW = w.parent.startW
diff --git a/toolkit/gocui/checkbox.go b/toolkit/gocui/checkbox.go
index 8e6abf1..4a0808a 100644
--- a/toolkit/gocui/checkbox.go
+++ b/toolkit/gocui/checkbox.go
@@ -17,10 +17,16 @@ func (w *cuiWidget) setCheckbox(b bool) {
w.text = " " + w.name
}
t := len(w.text) + 1
- w.realWidth = t
- w.gocuiSize.width = t
+ w.gocuiSize.w1 = w.gocuiSize.w0 + t
+
+ w.realWidth = w.gocuiSize.Width() + me.PadW
+ w.realHeight = w.gocuiSize.Height() + me.PadH
+
+ if w.frame {
+ w.realWidth += me.FramePadW
+ w.realHeight += me.FramePadH
+ }
- w.setWH()
w.deleteView()
w.drawView()
}
diff --git a/toolkit/gocui/click.go b/toolkit/gocui/click.go
index a43dab4..ae845df 100644
--- a/toolkit/gocui/click.go
+++ b/toolkit/gocui/click.go
@@ -182,12 +182,10 @@ func ctrlDown(g *gocui.Gui, v *gocui.View) error {
found = me.rootNode
}
found.setRealSize()
- me.ctrlDown.gocuiSize.width = found.realWidth
- me.ctrlDown.gocuiSize.height = found.realHeight
me.ctrlDown.gocuiSize.w0 = found.startW
me.ctrlDown.gocuiSize.h0 = found.startH
- me.ctrlDown.setWH()
-
+ me.ctrlDown.gocuiSize.w1 = me.ctrlDown.gocuiSize.w0 + found.realWidth
+ me.ctrlDown.gocuiSize.h1 = me.ctrlDown.gocuiSize.h0 + found.realHeight
if (me.ctrlDown.v == nil) {
me.ctrlDown.text = found.text
me.ctrlDown.showWidgetPlacement(logNow, "ctrlDown:")
diff --git a/toolkit/gocui/common.go b/toolkit/gocui/common.go
index 9f10e94..93dfbb6 100644
--- a/toolkit/gocui/common.go
+++ b/toolkit/gocui/common.go
@@ -20,11 +20,11 @@ func makeWidget(a *toolkit.Action) *cuiWidget {
t := len(w.text)
- w.gocuiSize.width = t + me.PadW
- w.gocuiSize.height = me.DefaultHeight + me.PadH
+ w.gocuiSize.w1 = w.gocuiSize.w0 + t + me.PadW
+ w.gocuiSize.h1 = w.gocuiSize.h0 + me.DefaultHeight + me.PadH
- w.realWidth = w.gocuiSize.width
- w.realHeight = w.gocuiSize.height
+ w.realWidth = w.gocuiSize.Width()
+ w.realHeight = w.gocuiSize.Height()
// set the gocui view.Frame = true by default
w.frame = true
diff --git a/toolkit/gocui/debug.go b/toolkit/gocui/debug.go
index 9b57b08..e3f3586 100644
--- a/toolkit/gocui/debug.go
+++ b/toolkit/gocui/debug.go
@@ -32,7 +32,7 @@ func (w *cuiWidget) showWidgetPlacement(b bool, s string) {
s1 += fmt.Sprintf("s/n (%2d,%2d) (%2d,%2d) ", w.startW, w.startH, w.nextW, w.nextH)
s1 += fmt.Sprintf("size (%2d,%2d) ", w.realWidth, w.realHeight)
s1 += fmt.Sprintf("gocui=(%2d,%2d)(%2d,%2d,%2d,%2d)",
- w.gocuiSize.width, w.gocuiSize.height,
+ w.gocuiSize.Width(), w.gocuiSize.Height(),
w.gocuiSize.w0, w.gocuiSize.h0, w.gocuiSize.w1, w.gocuiSize.h1)
log(b, s1, s, w.widgetType, ",", w.name) // , "text=", w.text)
}
diff --git a/toolkit/gocui/keybindings.go b/toolkit/gocui/keybindings.go
index 23db0eb..c3e92d7 100644
--- a/toolkit/gocui/keybindings.go
+++ b/toolkit/gocui/keybindings.go
@@ -45,8 +45,10 @@ func addDebugKeys(g *gocui.Gui) {
g.SetKeybinding("", 'd', gocui.ModNone,
func(g *gocui.Gui, v *gocui.View) error {
log(logNow, "gocui.SetKeyBinding() dumpTree() START")
- me.rootNode.dumpTree(true)
+ // me.rootNode.dumpTree(true)
if (showDebug) {
+ fakeStartWidth = me.DevelOffsetW
+ fakeStartHeight = me.TabH + me.FramePadH
me.rootNode.showFake()
showDebug = false
} else {
diff --git a/toolkit/gocui/main.go b/toolkit/gocui/main.go
index f1a0106..492d935 100644
--- a/toolkit/gocui/main.go
+++ b/toolkit/gocui/main.go
@@ -13,18 +13,9 @@ import (
// to this toolkit from the wit/gui golang package
func init() {
log(logInfo, "Init() of awesome-gocui")
- Set(&me, "default")
-
-// me.groupPadding = 4
-// me.buttonPadding = 3
- // todo, remove all of these
-// me.defaultWidth = 10
-// me.defaultHeight = 2 // this means by default one line of text in a button
-
-// me.horizontalPadding = 20
-// me.horizontalPadding = 20
- // todo, remove all of these
+ // init the config struct default values
+ Set(&me, "default")
me.pluginChan = make(chan toolkit.Action)
diff --git a/toolkit/gocui/place.go b/toolkit/gocui/place.go
index 50e3b6f..124908f 100644
--- a/toolkit/gocui/place.go
+++ b/toolkit/gocui/place.go
@@ -48,31 +48,6 @@ func (w *cuiWidget) placeBox() {
w.showWidgetPlacement(logNow, "boxE()")
}
-/*
-func (w *cuiWidget) getGroupWH() {
- p := w.parent // the parent must be a group widget
-
- // update parent gocuiSize
- // p.realWidth =
- // p.realHeight += me.DefaultHeight + me.PadH + me.FramePadH
- for _, child := range p.children {
- p.realWidth += child.realWidth
- p.realHeight += child.realHeight
- }
-
- // compute child offset
- w.startW = p.startW
- w.startH = p.startH
- for _, child := range p.children {
- w.startH += child.realHeight
- if child == w {
- return
- }
- }
- return
-}
-*/
-
func (w *cuiWidget) placeWidgets() {
if (w == nil) {
return
@@ -120,29 +95,31 @@ func (w *cuiWidget) placeWidgets() {
w.showWidgetPlacement(logNow, "place()")
}
case toolkit.Grid:
- w.showWidgetPlacement(logNow, "place()")
+ w.showWidgetPlacement(logNow, "placeGrid() START")
w.placeGrid()
- w.showWidgetPlacement(logNow, "place()")
+ w.showWidgetPlacement(logNow, "placeGrid() END")
case toolkit.Box:
- w.showWidgetPlacement(logNow, "place()")
+ w.showWidgetPlacement(logNow, "placeBox() START")
w.placeBox()
- w.showWidgetPlacement(logNow, "place()")
+ w.showWidgetPlacement(logNow, "placeBox() END")
case toolkit.Group:
+ // move the group to the parent's next location
w.startW = p.nextW
w.startH = p.nextH
w.nextW = p.nextW
w.nextH = p.nextH
-
w.moveTo(p.nextW, p.nextH)
- // set real width at the beginning
- w.realWidth = w.gocuiSize.width
- w.realHeight = w.gocuiSize.height
+ // initialize the real width to just the group gocui view
+ w.realWidth = w.gocuiSize.Width() + me.FramePadW
+ w.realHeight = w.gocuiSize.Height() + me.FramePadH
// indent the widgets for a group
- w.nextW = p.nextW + 4
- w.nextH = p.nextH + 3
+ w.nextW = p.nextW + me.GroupPadW
+ w.nextH = p.nextH + w.realHeight
w.showWidgetPlacement(logNow, "place()")
+
+ // mow move all the children aka: run place() on them
var maxW int
for _, child := range w.children {
child.showWidgetPlacement(logNow, "place()")
@@ -167,33 +144,42 @@ func (w *cuiWidget) placeWidgets() {
w.startH = p.nextH
w.nextW = p.nextW
w.nextH = p.nextH
+ newW := w.gocuiSize.Width()
+ newH := w.gocuiSize.Height()
w.gocuiSize.w0 = w.startW
w.gocuiSize.h0 = w.startH
- w.gocuiSize.w1 = w.gocuiSize.w0 + w.gocuiSize.width
- w.gocuiSize.h1 = w.gocuiSize.h0 + w.gocuiSize.height
- if (w.realWidth < w.gocuiSize.width) {
- w.realWidth = w.gocuiSize.width
+ w.gocuiSize.w1 = w.gocuiSize.w0 + newW
+ w.gocuiSize.h1 = w.gocuiSize.h0 + newH
+
+ // the realSize should not be smaller than the gocui view (?)
+ // this might not be a needed check? Maybe there are legit exceptions?
+ if (w.realWidth < newW) {
+ w.realWidth = newW
}
- if (w.realHeight < w.gocuiSize.height) {
- w.realHeight = w.gocuiSize.height
+ if (w.realHeight < newH) {
+ w.realHeight = newH
}
w.showWidgetPlacement(logNow, "place()")
}
}
+/*
func (w *cuiWidget) setWH() {
w.gocuiSize.w1 = w.gocuiSize.w0 + w.gocuiSize.width
w.gocuiSize.h1 = w.gocuiSize.h0 + w.gocuiSize.height
}
+*/
func (w *cuiWidget) moveTo(leftW int, topH int) {
if (w.isFake) {
return
}
+ newW := w.gocuiSize.Width()
+ newH := w.gocuiSize.Height()
w.gocuiSize.w0 = leftW
w.gocuiSize.h0 = topH
- w.gocuiSize.w1 = w.gocuiSize.w0 + w.gocuiSize.width
- w.gocuiSize.h1 = w.gocuiSize.h0 + w.gocuiSize.height
+ w.gocuiSize.w1 = w.gocuiSize.w0 + newW
+ w.gocuiSize.h1 = w.gocuiSize.h0 + newH
w.showWidgetPlacement(logInfo, "moveTo()")
}
diff --git a/toolkit/gocui/structs.go b/toolkit/gocui/structs.go
index b3c780f..9cc4eb8 100644
--- a/toolkit/gocui/structs.go
+++ b/toolkit/gocui/structs.go
@@ -53,6 +53,10 @@ type config struct {
// additional amount of space to put between window & tab widgets
TabPadW int `default:"2" dense:"0"`
+ // how far down to start Window or Tab headings
+ WindowH int `default:"1" dense:"0"`
+ TabH int `default:"2" dense:"0"`
+
// additional amount of space to indent on a group
GroupPadW int `default:"6" dense:"2"`
@@ -60,16 +64,15 @@ type config struct {
RawW int `default:"7"`
RawH int `default:"3"`
+ // offset for the hidden widgets
+ DevelOffsetW int `default:"20"`
+
bookshelf bool // do you want things arranged in the box like a bookshelf or a stack?
canvas bool // if set to true, the windows are a raw canvas
menubar bool // for windows
stretchy bool // expand things like buttons to the maximum size
padded bool // add space between things like buttons
margin bool // add space around the frames of windows
-
-// horizontalPadding int
- // groupPadding int `default:"6" dense:"2"` // this is supposed to be how far to indent to the left
- // buttonPadding int `default:"4" dense:"3"` // if 3, buttons slightly overlap
}
var (
@@ -85,14 +88,22 @@ type rectType struct {
// startW int
// startH int
- // the actual size
- width int
- height int
+ // the is a shortcut to access
+// width int // this is always w1 - w0
+ height int // this is always h1 - h0
// this is the gocui way
w0, h0, w1, h1 int // left top right bottom
}
+func (r *rectType) Width() int {
+ return r.w1 - r.w0
+}
+
+func (r *rectType) Height() int {
+ return r.h1 - r.h0
+}
+
type cuiWidget struct {
id int // widget ID
// parentId int
diff --git a/toolkit/gocui/tab.go b/toolkit/gocui/tab.go
index ecaf5fd..4102702 100644
--- a/toolkit/gocui/tab.go
+++ b/toolkit/gocui/tab.go
@@ -34,6 +34,8 @@ func (w *cuiWidget) hideFake() {
func (w *cuiWidget) showFake() {
if (w.isFake) {
+ w.setFake()
+ w.showWidgetPlacement(logNow, "showFake:")
w.drawView()
}
for _, child := range w.children {
@@ -55,20 +57,22 @@ func (w *cuiWidget) showWidgets() {
func (w *cuiWidget) setTabWH() {
// set the start and size of the tab gocui button
t := len(w.text)
- w.gocuiSize.width = t + me.PadW
- w.gocuiSize.height = me.DefaultHeight + me.PadH
w.gocuiSize.w0 = me.rootNode.nextW
w.gocuiSize.h0 = me.rootNode.nextH
+ w.gocuiSize.w1 = w.gocuiSize.w1 + t + me.PadW
+ w.gocuiSize.h1 = w.gocuiSize.h1 + me.DefaultHeight + me.PadH
+
+ w.realWidth = w.gocuiSize.Width()
+ w.realHeight = w.gocuiSize.Height()
if w.frame {
- w.realWidth = w.gocuiSize.width + me.FramePadW
- w.realHeight = w.gocuiSize.height + me.FramePadH
+ w.realWidth += me.FramePadW
+ w.realHeight += me.FramePadH
}
// move the rootNode width over for the next window or tab
- me.rootNode.nextW += w.gocuiSize.width + me.TabPadW
+ me.rootNode.nextW += w.realWidth + me.TabPadW
- w.setWH()
w.showWidgetPlacement(logNow, "setTabWH:")
}
diff --git a/toolkit/gocui/view.go b/toolkit/gocui/view.go
index bc5848f..f348321 100644
--- a/toolkit/gocui/view.go
+++ b/toolkit/gocui/view.go
@@ -30,9 +30,8 @@ func (w *cuiWidget) textResize() {
}
height = i
}
- w.gocuiSize.width = width + me.FramePadW
- w.gocuiSize.height = height + me.FramePadH
- w.setWH()
+ w.gocuiSize.w1 = w.gocuiSize.w0 + width + me.FramePadW
+ w.gocuiSize.h1 = w.gocuiSize.h0 + height + me.FramePadH
w.showWidgetPlacement(logNow, "textResize()")
}
diff --git a/toolkit/widget.go b/toolkit/widget.go
index 51fe8b5..d4542bc 100644
--- a/toolkit/widget.go
+++ b/toolkit/widget.go
@@ -38,12 +38,6 @@ type Action struct {
X int
Y int
- // This GUI is intended for simple things
- // Is having an option like 640x480 really a good idea?
- // TODO: remove Width & Height measured in pixels?
-// Width int
-// Height int
-
// Put space around elements to improve look & feel
Margin bool