summaryrefslogtreecommitdiff
path: root/textbox.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-02-08 17:19:41 -0600
committerJeff Carr <[email protected]>2025-02-08 17:19:41 -0600
commit5a84456c7aa416ed228a809be28137802f35b6e0 (patch)
tree0cf5b698401b2e82f1a2204698624e95362638a3 /textbox.go
parentf8b7c603a12513c3865bb3166f11133a444b89c7 (diff)
more usability cleanups
Diffstat (limited to 'textbox.go')
-rw-r--r--textbox.go108
1 files changed, 108 insertions, 0 deletions
diff --git a/textbox.go b/textbox.go
new file mode 100644
index 0000000..66ba092
--- /dev/null
+++ b/textbox.go
@@ -0,0 +1,108 @@
+// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
+// Use of this source code is governed by the GPL 3.0
+
+package main
+
+// simulates a dropdown menu in gocui
+
+import (
+ "strings"
+
+ "github.com/awesome-gocui/gocui"
+ log "go.wit.com/log"
+)
+
+func (tk *guiWidget) forceSizes(r *rectType) {
+ tk.gocuiSize.w0 = r.w0
+ tk.gocuiSize.w1 = r.w1
+ tk.gocuiSize.h0 = r.h0
+ tk.gocuiSize.h1 = r.h1
+
+ tk.full.w0 = r.w0
+ tk.full.w1 = r.w1
+ tk.full.h0 = r.h0
+ tk.full.h1 = r.h1
+
+ tk.force.w0 = r.w0
+ tk.force.w1 = r.w1
+ tk.force.h0 = r.h0
+ tk.force.h1 = r.h1
+}
+
+func (callertk *guiWidget) showTextbox() {
+ if me.textbox.tk == nil {
+ // should only happen once
+ me.textbox.tk = makeNewFlagWidget(me.textbox.wId)
+ me.textbox.tk.dumpWidget("init() textbox")
+ }
+ if me.textbox.tk == nil {
+ log.Log(GOCUI, "showTextbox() Is Broken")
+ return
+ }
+
+ tk := me.textbox.tk
+ r := new(rectType)
+ // startW, startH := tk.Position()
+ r.w0 = callertk.gocuiSize.w0 + 4
+ r.h0 = callertk.gocuiSize.h0 + 3
+ r.w1 = r.w0 + 24
+ r.h1 = r.h0 + 2
+ me.textbox.tk.forceSizes(r)
+ me.textbox.tk.dumpWidget("after sizes")
+
+ me.textbox.tk.Show() // actually makes the gocui view. TODO: redo this
+
+ if me.textbox.tk.v == nil {
+ log.Info("wtf went wrong")
+ return
+ }
+
+ me.textbox.tk.setColorModal()
+
+ me.textbox.tk.v.Editable = true
+ me.textbox.tk.v.Wrap = true
+
+ me.baseGui.SetView(me.textbox.tk.cuiName, r.w0, r.h0, r.w1, r.h1, 0)
+ me.baseGui.SetCurrentView(me.textbox.tk.v.Name())
+
+ // bind the enter key to a function so we can close the textbox
+ me.baseGui.SetKeybinding(me.textbox.tk.v.Name(), gocui.KeyEnter, gocui.ModNone, theCloseTheTextbox)
+
+ me.textbox.active = true
+ me.textbox.callerTK = callertk
+
+ tk.dumpWidget("showTextbox()")
+}
+
+func theCloseTheTextbox(g *gocui.Gui, v *gocui.View) error {
+ textboxClosed()
+ return nil
+}
+
+// updates the text and sends an event back to the application
+func textboxClosed() {
+ // get the text the user entered
+ newtext := "testing"
+ if me.textbox.tk.v == nil {
+ newtext = ""
+ } else {
+ newtext = me.textbox.tk.v.ViewBuffer()
+ }
+ newtext = strings.TrimSpace(newtext)
+ me.textbox.active = false
+ me.textbox.tk.Hide()
+ log.Info("textbox closed", newtext)
+
+ if me.clock.tk.v != nil {
+ me.baseGui.SetCurrentView("help")
+ } else {
+ me.baseGui.SetCurrentView("msg")
+ }
+
+ // change the text of the caller widget
+ me.textbox.callerTK.SetText(newtext)
+ me.textbox.callerTK.node.SetCurrentS(newtext)
+
+ // send an event from the plugin with the new string
+ me.myTree.SendUserEvent(me.textbox.callerTK.node)
+}