summaryrefslogtreecommitdiff
path: root/toolkit/gocui/click.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-01-01 15:43:50 -0600
committerJeff Carr <[email protected]>2024-01-01 15:43:50 -0600
commit4e7bbd89900a733593f0848778103c1cf1a7145d (patch)
tree22cd22124dd3ecba7c2a866b882d39aaf790d670 /toolkit/gocui/click.go
parent53ce3a8252090d5fb75d7fc1e3cd75a72c1415c6 (diff)
reorg to final resting place at go.wit.com/gui/guiv0.9.5
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'toolkit/gocui/click.go')
-rw-r--r--toolkit/gocui/click.go356
1 files changed, 0 insertions, 356 deletions
diff --git a/toolkit/gocui/click.go b/toolkit/gocui/click.go
deleted file mode 100644
index 27f6b53..0000000
--- a/toolkit/gocui/click.go
+++ /dev/null
@@ -1,356 +0,0 @@
-package main
-
-import (
- "fmt"
- "github.com/awesome-gocui/gocui"
- "go.wit.com/gui/toolkit"
-)
-
-// set isCurrent = false everywhere
-func unsetCurrent(n *node) {
- w := n.tk
- w.isCurrent = false
-
- if n.WidgetType == toolkit.Tab {
- // n.tk.color = &colorTab
- // n.setColor()
- }
-
- for _, child := range n.children {
- unsetCurrent(child)
- }
-}
-
-// when adding a new widget, this will update the display
-// of the current widgets if that widget is supposed
-// to be in current display
-func (n *node) updateCurrent() {
- log("updateCurrent()", n.Name)
- if n.WidgetType == toolkit.Tab {
- if n.IsCurrent() {
- // n.tk.color = &colorActiveT
- n.setColor(&colorActiveT)
- n.hideView()
- n.showView()
- setCurrentTab(n)
- } else {
- // n.tk.color = &colorTab
- // n.setColor()
- }
- return
- }
- if n.WidgetType == toolkit.Window {
- if n.IsCurrent() {
- // setCurrentWindow(n)
- }
- return
- }
- if n.WidgetType == toolkit.Root {
- return
- }
- n.parent.updateCurrent()
-}
-
-// shows the widgets in a window
-func setCurrentWindow(n *node) {
- if n.IsCurrent() {
- return
- }
- w := n.tk
- if n.WidgetType != toolkit.Window {
- return
- }
- unsetCurrent(me.rootNode)
-
- if n.hasTabs {
- // set isCurrent = true on the first tab
- for _, child := range n.children {
- child.tk.isCurrent = true
- break
- }
- } else {
- w.isCurrent = true
- }
-}
-
-// shows the widgets in a tab
-func setCurrentTab(n *node) {
- w := n.tk
- if n.WidgetType != toolkit.Tab {
- return
- }
- unsetCurrent(me.rootNode)
- w.isCurrent = true
- p := n.parent.tk
- p.isCurrent = true
- log("setCurrent()", n.Name)
-}
-
-func (n *node) doWidgetClick() {
- switch n.WidgetType {
- case toolkit.Root:
- // THIS IS THE BEGINING OF THE LAYOUT
- log("doWidgetClick()", n.Name)
- redoWindows(0,0)
- case toolkit.Flag:
- log("doWidgetClick() FLAG widget name =", n.Name)
- log("doWidgetClick() if this is the dropdown menu, handle it here?")
- case toolkit.Window:
- if (me.currentWindow == n) {
- return
- }
- if (me.currentWindow != nil) {
- unsetCurrent(me.currentWindow)
- me.currentWindow.setColor(&colorWindow)
- me.currentWindow.hideWidgets()
- }
- n.hideWidgets()
- me.currentWindow = n
- // setCurrentWindow(n) // probably delete this
- n.setColor(&colorActiveW)
- n.redoTabs(me.TabW, me.TabH)
- for _, child := range n.children {
- if (child.currentTab == true) {
- log(true, "FOUND CURRENT TAB", child.Name)
- setCurrentTab(child)
- child.placeWidgets(me.RawW, me.RawH)
- child.showWidgets()
- return
- }
- }
- /* FIXME: redo this
- if ! n.hasTabs {
- }
- */
- case toolkit.Tab:
- if (n.IsCurrent()) {
- return // do nothing if you reclick on the already selected tab
- }
- // find the window and disable the active tab
- p := n.parent
- if (p != nil) {
- p.hideWidgets()
- p.redoTabs(me.TabW, me.TabH)
- unsetCurrent(p)
- for _, child := range p.children {
- if child.WidgetType == toolkit.Tab {
- child.setColor(&colorTab)
- n.currentTab = false
- }
- }
- }
- n.currentTab = true
- n.setColor(&colorActiveT)
- setCurrentTab(n)
- n.placeWidgets(me.RawW, me.RawH)
- n.showWidgets()
- case toolkit.Group:
- // n.placeWidgets(p.tk.startH, newH)
- n.toggleTree()
- case toolkit.Checkbox:
- if (n.B) {
- n.setCheckbox(false)
- } else {
- n.setCheckbox(true)
- }
- n.doUserEvent()
- case toolkit.Grid:
- newR := n.realGocuiSize()
-
- // w,h := n.logicalSize()
- // w := newR.w1 - newR.w0
- // h := newR.h1 - newR.h0
-
- n.placeGrid(newR.w0, newR.h0)
- n.showWidgets()
- case toolkit.Box:
- // w.showWidgetPlacement(logNow, "drawTree()")
- if (n.horizontal) {
- log("BOX IS HORIZONTAL", n.Name)
- } else {
- log("BOX IS VERTICAL", n.Name)
- }
- // n.placeWidgets()
- n.toggleTree()
- case toolkit.Button:
- n.doUserEvent()
- case toolkit.Dropdown:
- log(true, "do the dropdown here")
- if (me.ddview == nil) {
- me.ddview = addDropdown()
- tk := me.ddview.tk
- tk.gocuiSize.w0 = 20
- tk.gocuiSize.w1 = 40
- tk.gocuiSize.h0 = 10
- tk.gocuiSize.h1 = 25
- tk.v, _ = me.baseGui.SetView("ddview",
- tk.gocuiSize.w0,
- tk.gocuiSize.h0,
- tk.gocuiSize.w1,
- tk.gocuiSize.h1, 0)
- if (tk.v == nil) {
- return
- }
- tk.v.Wrap = true
- tk.v.Frame = true
- tk.v.Clear()
- fmt.Fprint(tk.v, "example.com\nwit.com")
- me.ddview.SetVisible(true)
- return
- }
- log(true, "doWidgetClick() visible =", me.ddview.Visible())
- if (me.ddview.Visible()) {
- me.ddview.SetVisible(false)
- me.baseGui.DeleteView("ddview")
- me.ddview.tk.v = nil
- } else {
- var dnsList string
- for i, s := range n.vals {
- log(logNow, "AddText()", n.Name, i, s)
- dnsList += s + "\n"
- }
- me.ddNode = n
- log(logNow, "new dns list should be set to:", dnsList)
- me.ddview.Text = dnsList
- me.ddview.SetText(dnsList)
- me.ddview.SetVisible(true)
- }
- for i, s := range n.vals {
- log(logNow, "AddText()", n.Name, i, s)
- }
- default:
- }
-}
-
-var toggle bool = true
-func (n *node) toggleTree() {
- if (toggle) {
- n.drawTree(toggle)
- toggle = false
- } else {
- n.hideWidgets()
- toggle = true
- }
-}
-
-
-// display the widgets in the binary tree
-func (n *node) drawTree(draw bool) {
- w := n.tk
- if (w == nil) {
- return
- }
- n.showWidgetPlacement(logNow, "drawTree()")
- if (draw) {
- // w.textResize()
- n.showView()
- } else {
- n.deleteView()
- }
-
- for _, child := range n.children {
- child.drawTree(draw)
- }
-}
-
-func click(g *gocui.Gui, v *gocui.View) error {
- // var l string
- // var err error
-
- log(logVerbose, "click() START", v.Name())
- // n := me.rootNode.findWidgetName(v.Name())
- n := findUnderMouse()
- if (n != nil) {
- log(logNow, "click() Found widget =", n.WidgetId, n.Name, ",", n.Text)
- if (n.Name == "DropBox") {
- log(logNow, "click() this is the dropdown menu. set a flag here what did I click? where is the mouse?")
- log(logNow, "click() set a global dropdown clicked flag=true here")
- me.ddClicked = true
- }
- n.doWidgetClick()
- } else {
- log(logNow, "click() could not find node name =", v.Name())
- }
-
- if _, err := g.SetCurrentView(v.Name()); err != nil {
- log(logNow, "click() END err =", err)
- return err
- }
-
- log(logVerbose, "click() END")
- return nil
-}
-
-func findUnderMouse() *node {
- var found *node
- var widgets []*node
- var f func (n *node)
- w, h := me.baseGui.MousePosition()
-
- // find buttons that are below where the mouse button click
- f = func(n *node) {
- widget := n.tk
- // ignore widgets that are not visible
- if n.Visible() {
- if ((widget.gocuiSize.w0 <= w) && (w <= widget.gocuiSize.w1) &&
- (widget.gocuiSize.h0 <= h) && (h <= widget.gocuiSize.h1)) {
- widgets = append(widgets, n)
- found = n
- }
- }
- if (n == me.ddview) {
- log(true, "findUnderMouse() found ddview")
- if n.Visible() {
- log(true, "findUnderMouse() and ddview is visable. hide it here. TODO: find highlighted row")
- found = n
- // find the actual value here and set the dropdown widget
- me.baseGui.DeleteView("ddview")
- } else {
- log(true, "findUnderMouse() I was lying, actually it's not found")
- }
- }
-
- for _, child := range n.children {
- f(child)
- }
- }
- f(me.rootNode)
- // widgets has everything that matches
- // TODO: pop up menu with a list of them
- for _, n := range widgets {
- //log(logNow, "ctrlDown() FOUND widget", widget.id, widget.name)
- n.showWidgetPlacement(logNow, "findUnderMouse() FOUND")
- }
- return found
-}
-
-// find the widget under the mouse click
-func ctrlDown(g *gocui.Gui, v *gocui.View) error {
- var found *node
- // var widgets []*node
- // var f func (n *node)
- found = findUnderMouse()
- if (me.ctrlDown == nil) {
- setupCtrlDownWidget()
- me.ctrlDown.Text = found.Name
- me.ctrlDown.tk.cuiName = "ctrlDown"
- // me.ctrlDown.parent = me.rootNode
- }
- cd := me.ctrlDown.tk
- if (found == nil) {
- found = me.rootNode
- }
- me.ctrlDown.Text = found.Name
- newR := found.realGocuiSize()
- cd.gocuiSize.w0 = newR.w0
- cd.gocuiSize.h0 = newR.h0
- cd.gocuiSize.w1 = newR.w1
- cd.gocuiSize.h1 = newR.h1
- if me.ctrlDown.Visible() {
- me.ctrlDown.hideView()
- } else {
- me.ctrlDown.showView()
- }
- me.ctrlDown.showWidgetPlacement(logNow, "ctrlDown:")
- return nil
-}