mirror of
https://github.com/br0xen/termbox-util.git
synced 2024-11-25 23:03:13 +00:00
Added Checkbox Control
This commit is contained in:
parent
f403b69188
commit
159d078f44
144
termbox_checkbox.go
Normal file
144
termbox_checkbox.go
Normal file
@ -0,0 +1,144 @@
|
||||
package termboxUtil
|
||||
|
||||
import termbox "github.com/nsf/termbox-go"
|
||||
|
||||
type Checkbox struct {
|
||||
id string
|
||||
title string
|
||||
isChecked bool
|
||||
x, y, width, height int
|
||||
fg, bg termbox.Attribute
|
||||
activeFg, activeBg termbox.Attribute
|
||||
bordered bool
|
||||
tabSkip bool
|
||||
active bool
|
||||
}
|
||||
|
||||
func CreateCheckbox(lbl string, x, y, w, h int, fg, bg termbox.Attribute) *Checkbox {
|
||||
c := Checkbox{
|
||||
x: x, y: y, width: w, height: h,
|
||||
fg: fg, bg: bg, activeFg: fg, activeBg: bg,
|
||||
}
|
||||
return &c
|
||||
}
|
||||
|
||||
func (c *Checkbox) SetTitle(title string) { c.title = title }
|
||||
func (c *Checkbox) SetActiveFgColor(fg termbox.Attribute) { c.activeFg = fg }
|
||||
func (c *Checkbox) SetActiveBgColor(bg termbox.Attribute) { c.activeBg = bg }
|
||||
func (c *Checkbox) SetActive(a bool) { c.active = a }
|
||||
func (c *Checkbox) IsActive() bool { return c.active }
|
||||
|
||||
// GetID returns this control's ID
|
||||
func (c *Checkbox) GetID() string { return c.id }
|
||||
|
||||
// SetID sets this control's ID
|
||||
func (c *Checkbox) SetID(newID string) {
|
||||
c.id = newID
|
||||
}
|
||||
|
||||
// GetX returns the x position of the input field
|
||||
func (c *Checkbox) GetX() int { return c.x }
|
||||
|
||||
// SetX sets the x position of the input field
|
||||
func (c *Checkbox) SetX(x int) {
|
||||
c.x = x
|
||||
}
|
||||
|
||||
// GetY returns the y position of the input field
|
||||
func (c *Checkbox) GetY() int { return c.y }
|
||||
|
||||
// SetY sets the y position of the input field
|
||||
func (c *Checkbox) SetY(y int) {
|
||||
c.y = y
|
||||
}
|
||||
|
||||
// GetWidth returns the current width of the input field
|
||||
func (c *Checkbox) GetWidth() int { return c.width }
|
||||
|
||||
// SetWidth sets the current width of the input field
|
||||
func (c *Checkbox) SetWidth(w int) {
|
||||
c.width = w
|
||||
}
|
||||
|
||||
// GetHeight returns the current height of the input field
|
||||
func (c *Checkbox) GetHeight() int { return c.height }
|
||||
|
||||
// SetHeight sets the current height of the input field
|
||||
func (c *Checkbox) SetHeight(h int) {
|
||||
c.height = h
|
||||
}
|
||||
|
||||
// GetFgColor returns the foreground color
|
||||
func (c *Checkbox) GetFgColor() termbox.Attribute { return c.fg }
|
||||
|
||||
// SetFgColor sets the foreground color
|
||||
func (c *Checkbox) SetFgColor(fg termbox.Attribute) {
|
||||
c.fg = fg
|
||||
}
|
||||
|
||||
// GetBgColor returns the background color
|
||||
func (c *Checkbox) GetBgColor() termbox.Attribute { return c.bg }
|
||||
|
||||
// SetBgColor sets the current background color
|
||||
func (c *Checkbox) SetBgColor(bg termbox.Attribute) {
|
||||
c.bg = bg
|
||||
}
|
||||
|
||||
// IsBordered returns true or false if this input field has a border
|
||||
func (c *Checkbox) IsBordered() bool { return c.bordered }
|
||||
|
||||
// SetBordered sets whether we render a border around the input field
|
||||
func (c *Checkbox) SetBordered(b bool) {
|
||||
c.bordered = b
|
||||
}
|
||||
|
||||
// IsTabSkipped returns whether this modal has it's tabskip flag set
|
||||
func (c *Checkbox) IsTabSkipped() bool {
|
||||
return c.tabSkip
|
||||
}
|
||||
|
||||
// SetTabSkip sets the tabskip flag for this control
|
||||
func (c *Checkbox) SetTabSkip(b bool) {
|
||||
c.tabSkip = b
|
||||
}
|
||||
|
||||
// HandleEvent accepts the termbox event and returns whether it was consumed
|
||||
func (c *Checkbox) HandleEvent(event termbox.Event) bool {
|
||||
if event.Ch == 0 {
|
||||
switch event.Key {
|
||||
case termbox.KeySpace, termbox.KeyEnter:
|
||||
c.isChecked = !c.isChecked
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (c *Checkbox) Draw() {
|
||||
x, y, _, w := c.x, c.y, c.height, c.width
|
||||
useFg, useBg := c.fg, c.bg
|
||||
if c.active {
|
||||
useFg, useBg = c.activeFg, c.activeBg
|
||||
}
|
||||
if c.bordered {
|
||||
DrawBorder(c.x, c.y, c.x+c.width, c.y+c.height, useFg, useBg)
|
||||
x++
|
||||
w = w - 2
|
||||
}
|
||||
|
||||
if c.isChecked {
|
||||
DrawStringAtPoint("[X]", x, y, useFg, useBg)
|
||||
} else {
|
||||
DrawStringAtPoint("[ ]", x, y, useFg, useBg)
|
||||
}
|
||||
x = x + 3
|
||||
w = w - 3
|
||||
|
||||
if c.title != "" {
|
||||
wrk := c.title
|
||||
if len(wrk) > w {
|
||||
wrk = wrk[:w]
|
||||
}
|
||||
DrawStringAtPoint(wrk, x, y, useFg, useBg)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user