86 lines
1.6 KiB
Go
86 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/br0xen/termbox-util"
|
|
termbox "github.com/nsf/termbox-go"
|
|
)
|
|
|
|
const MessageNoTimeout = -1
|
|
|
|
type Message struct {
|
|
value string
|
|
timeout time.Duration
|
|
setTime time.Time
|
|
fg, bg termbox.Attribute
|
|
|
|
defaultValue string
|
|
defaultTimeout time.Duration
|
|
defaultFg termbox.Attribute
|
|
defaultBg termbox.Attribute
|
|
}
|
|
|
|
func NewMessage(defaultVal string, defaultFg, defaultBg termbox.Attribute, defaultTO time.Duration) *Message {
|
|
return &Message{
|
|
defaultValue: defaultVal,
|
|
defaultTimeout: defaultTO,
|
|
defaultFg: defaultFg,
|
|
defaultBg: defaultBg,
|
|
}
|
|
}
|
|
|
|
func (m *Message) Get() string {
|
|
m.checkExpiration()
|
|
return m.value
|
|
}
|
|
|
|
func (m *Message) Set(v string) {
|
|
m.value = v
|
|
m.setTime = time.Now()
|
|
}
|
|
|
|
func (m *Message) Clear() {
|
|
m.value = m.defaultValue
|
|
m.setTime = time.Time{}
|
|
m.setFromDefaults()
|
|
}
|
|
|
|
func (m *Message) SetWithNoTimeout(v string) {
|
|
m.Set(v)
|
|
m.timeout = MessageNoTimeout
|
|
}
|
|
|
|
func (m *Message) SetWithTimeout(v string, t time.Duration) {
|
|
m.Set(v)
|
|
m.timeout = t
|
|
}
|
|
|
|
func (m *Message) SetError(v string) {
|
|
m.value = v
|
|
m.setTime = time.Now()
|
|
m.timeout = time.Second * 2
|
|
m.bg = termbox.ColorRed
|
|
m.fg = termbox.ColorWhite | termbox.AttrBold
|
|
}
|
|
|
|
func (m *Message) DrawAt(x, y int) {
|
|
termboxUtil.DrawStringAtPoint(m.value, x, y, m.fg, m.bg)
|
|
}
|
|
|
|
func (m *Message) checkExpiration() {
|
|
if m.expired() {
|
|
m.Clear()
|
|
}
|
|
}
|
|
|
|
func (m *Message) expired() bool {
|
|
return m.timeout > 0 && time.Since(m.setTime) > m.timeout
|
|
}
|
|
|
|
func (m *Message) setFromDefaults() {
|
|
m.value = m.defaultValue
|
|
m.timeout = m.defaultTimeout
|
|
m.fg, m.bg = m.defaultFg, m.defaultBg
|
|
}
|