discordo/ui/inputfields.go
2021-08-10 22:34:37 +04:00

53 lines
1.3 KiB
Go

package ui
import (
"strings"
"github.com/atotto/clipboard"
"github.com/diamondburned/arikawa/v3/discord"
"github.com/diamondburned/arikawa/v3/session"
"github.com/gdamore/tcell/v2"
"github.com/rigormorrtiss/discordo/util"
"github.com/rivo/tview"
)
func NewMessageInputField(s *session.Session, c discord.Channel, theme *util.Theme) *tview.InputField {
i := tview.NewInputField()
i.
SetPlaceholder("Message...").
SetFieldWidth(0).
SetDoneFunc(onMessageInputFieldDone(i, s, c)).
SetFieldBackgroundColor(tcell.GetColor(theme.InputFieldBackground)).
SetBackgroundColor(tcell.GetColor(theme.InputFieldBackground)).
SetBorder(true).
SetBorderPadding(0, 0, 1, 1).
SetInputCapture(onMessageInputFieldInputCapture(i))
return i
}
func onMessageInputFieldDone(i *tview.InputField, s *session.Session, c discord.Channel) func(k tcell.Key) {
return func(k tcell.Key) {
if k == tcell.KeyEnter {
t := strings.TrimSpace(i.GetText())
if t == "" {
return
}
i.SetText("")
s.SendMessage(c.ID, t)
}
}
}
func onMessageInputFieldInputCapture(i *tview.InputField) func(event *tcell.EventKey) *tcell.EventKey {
return func(event *tcell.EventKey) *tcell.EventKey {
if event.Key() == tcell.KeyCtrlV {
text, _ := clipboard.ReadAll()
text = i.GetText() + text
i.SetText(text)
}
return event
}
}