diff options
Diffstat (limited to 'textbox.go')
| -rw-r--r-- | textbox.go | 108 |
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) +} |
