summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dropdown.go38
-rw-r--r--eventMouse.go15
-rw-r--r--eventMouseMove.go4
-rw-r--r--treeDraw.go2
4 files changed, 40 insertions, 19 deletions
diff --git a/dropdown.go b/dropdown.go
index 4828736..aed5ead 100644
--- a/dropdown.go
+++ b/dropdown.go
@@ -3,6 +3,8 @@
package main
+// simulates a dropdown menu in gocui
+
import (
"fmt"
"strings"
@@ -12,18 +14,8 @@ import (
"go.wit.com/widget"
)
-// simulates a dropdown menu in gocui
-
-/*
-func addInternalTK(wId int) *guiWidget {
- n := addDropdownNew(wId)
- tk := n.TK.(*guiWidget)
- tk.internal = true
- return tk
-}
-*/
-
-func addInternalTK(wId int) *guiWidget {
+// create a new widget in the binary tree
+func makeNewFlagWidget(wId int) *guiWidget {
n := new(tree.Node)
n.WidgetType = widget.Flag
n.WidgetId = wId
@@ -46,20 +38,19 @@ func addInternalTK(wId int) *guiWidget {
// add this new widget on the binary tree
tk.parent = me.treeRoot.TK.(*guiWidget)
if tk.parent == nil {
- panic("addInternalNode() didn't get treeRoot guiWidget")
+ panic("makeNewFlagWidget() didn't get treeRoot guiWidget")
} else {
tk.parent.children = append(tk.parent.children, tk)
}
n.TK = tk
- tk.internal = true
return tk
}
func (tk *guiWidget) showDropdown() {
if me.dropdown.tk == nil {
// should only happen once
- me.dropdown.tk = addInternalTK(me.dropdown.wId)
+ me.dropdown.tk = makeNewFlagWidget(me.dropdown.wId)
me.dropdown.tk.dumpWidget("init() dropdown")
}
if me.dropdown.tk == nil {
@@ -135,7 +126,7 @@ func dropdownUnclicked(w, h int) {
func (tk *guiWidget) showTextbox() {
if me.textbox.tk == nil {
// should only happen once
- me.textbox.tk = addInternalTK(me.textbox.wId)
+ me.textbox.tk = makeNewFlagWidget(me.textbox.wId)
me.dropdown.tk.dumpWidget("init() textbox")
}
if me.textbox.tk == nil {
@@ -151,3 +142,18 @@ func (tk *guiWidget) showTextbox() {
me.textbox.callerTK = tk
me.textbox.tk.dumpWidget("showTextbox()")
}
+
+// updates the text and sends an event back to the application
+func (tk *guiWidget) textboxClosed() {
+ tk.Hide()
+
+ // get the text the user entered
+ newname := tk.GetText()
+
+ // change the text of the caller widget
+ me.textbox.callerTK.SetText(newname)
+ me.textbox.callerTK.node.SetCurrentS(newname)
+
+ // send an event from the plugin with the new string
+ me.myTree.SendUserEvent(me.textbox.callerTK.node)
+}
diff --git a/eventMouse.go b/eventMouse.go
index b7c209f..adfbfc1 100644
--- a/eventMouse.go
+++ b/eventMouse.go
@@ -50,7 +50,20 @@ func mouseDown(g *gocui.Gui, v *gocui.View) error {
}
}
log.Info("never found dropdown at", w, h)
- // me.dropdown.active = false
+ return nil
+ }
+
+ // if the textbox is active, never do anything else
+ if me.textbox.active {
+ log.Info("mouseDown() stopping here. textbox widget is open")
+ for _, tk := range findByXY(w, h) {
+ if (tk.node.WidgetType == widget.Flag) && (tk == me.textbox.tk) {
+ me.textbox.active = false
+ tk.textboxClosed()
+ return nil
+ }
+ }
+ log.Info("never found textbox at", w, h)
return nil
}
diff --git a/eventMouseMove.go b/eventMouseMove.go
index e27b065..54ac2f8 100644
--- a/eventMouseMove.go
+++ b/eventMouseMove.go
@@ -47,8 +47,8 @@ func mouseMove(g *gocui.Gui) {
return
}
- if me.globalMouseDown && me.dropdown.active {
- log.Info("can't drag while dropdown is active", w, h)
+ if me.globalMouseDown && (me.dropdown.active || me.textbox.active) {
+ log.Info("can't drag while dropdown or textbox are active", w, h)
return
}
diff --git a/treeDraw.go b/treeDraw.go
index 34486e6..3061f4f 100644
--- a/treeDraw.go
+++ b/treeDraw.go
@@ -102,6 +102,7 @@ func (w *guiWidget) simpleDrawAt(offsetW, offsetH int) {
w.dumpWidget("simpleDrawAt()")
}
+/*
var toggle bool = true
func (w *guiWidget) toggleTree() {
@@ -113,6 +114,7 @@ func (w *guiWidget) toggleTree() {
toggle = true
}
}
+*/
// display the widgets in the binary tree
func (w *guiWidget) drawTree(draw bool) {