109 lines
2.5 KiB
Go
109 lines
2.5 KiB
Go
// 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)
|
|
}
|