clui/control_base.go

213 lines
3.6 KiB
Go
Raw Normal View History

2015-10-17 01:27:43 +08:00
package clui
import (
"fmt"
term "github.com/nsf/termbox-go"
"log"
)
type ControlBase struct {
2015-10-20 06:09:25 +08:00
title string
x, y int
width, height int
minW, minH int
scale int
fg, bg term.Attribute
fgActive term.Attribute
bgActive term.Attribute
tabSkip bool
disabled bool
align Align
parent Control
view View
active bool
padX, padY int
padTop, padSide int
2015-10-17 01:27:43 +08:00
}
func (c *ControlBase) Title() string {
return c.title
}
func (c *ControlBase) SetTitle(title string) {
c.title = title
}
func (c *ControlBase) Size() (int, int) {
return c.width, c.height
}
func (c *ControlBase) SetSize(width, height int) {
if width != DoNotChange && (width > 1000 || width < c.minW) {
panic(fmt.Sprintf("Invalid width: %v", width))
}
if height != DoNotChange && (height > 200 || height < c.minH) {
panic(fmt.Sprintf("Invalid height: %v", height))
}
if width != DoNotChange {
c.width = width
}
if height != DoNotChange {
c.height = height
}
}
func (c *ControlBase) Pos() (int, int) {
return c.x, c.y
}
func (c *ControlBase) SetPos(x, y int) {
c.x = x
c.y = y
}
func (c *ControlBase) ApplyConstraints() {
w, h := c.Size()
wM, hM := c.Constraints()
newW, newH := w, h
if w < wM {
newW = wM
}
if h < hM {
newH = hM
}
if newW != w || newH != h {
c.SetSize(newW, newH)
}
}
func (c *ControlBase) SetConstraints(width, height int) {
if width >= 1 {
c.minW = width
}
if height >= 1 {
c.minH = height
}
c.ApplyConstraints()
}
func (c *ControlBase) Constraints() (int, int) {
return c.minW, c.minH
}
func (c *ControlBase) Scale() int {
return c.scale
}
func (c *ControlBase) SetScale(scale int) {
c.scale = scale
}
func (c *ControlBase) Pack() PackType {
return Vertical
}
func (c *ControlBase) SetPack(pk PackType) {
}
func (c *ControlBase) AddChild(ctrl Control, scale int) {
}
func (c *ControlBase) Children() []Control {
return make([]Control, 0)
}
func (c *ControlBase) Colors() (term.Attribute, term.Attribute) {
return c.fg, c.bg
}
2015-10-20 03:05:43 +08:00
func (c *ControlBase) SetTextColor(clr term.Attribute) {
2015-10-17 01:27:43 +08:00
c.fg = clr
}
2015-10-20 03:05:43 +08:00
func (c *ControlBase) SetBackColor(clr term.Attribute) {
c.bg = clr
}
func (c *ControlBase) ActiveColors() (term.Attribute, term.Attribute) {
return c.fg, c.bg
}
func (c *ControlBase) SetActiveTextColor(clr term.Attribute) {
c.fg = clr
}
func (c *ControlBase) SetActiveBackColor(clr term.Attribute) {
2015-10-17 01:27:43 +08:00
c.bg = clr
}
func (c *ControlBase) TabStop() bool {
return !c.tabSkip
}
func (c *ControlBase) SetTabStop(skip bool) {
c.tabSkip = !skip
}
func (c *ControlBase) Enabled() bool {
return !c.disabled
}
func (c *ControlBase) SetEnabled(enable bool) {
c.disabled = !enable
}
func (c *ControlBase) SetAlign(align Align) {
c.align = align
}
func (c *ControlBase) GetAlign() Align {
return c.align
}
func (c *ControlBase) Active() bool {
return c.active
}
func (c *ControlBase) SetActive(active bool) {
c.active = active
}
func (c *ControlBase) ProcessEvent(ev Event) bool {
return false
}
func (c *ControlBase) Parent() Control {
return c.parent
}
2015-10-17 16:16:19 +08:00
func (c *ControlBase) RecalculateConstraints() {
}
2015-10-20 06:09:25 +08:00
func (c *ControlBase) Paddings() (int, int, int, int) {
return c.padSide, c.padTop, c.padX, c.padY
}
func (c *ControlBase) SetPaddings(side, top, dx, dy int) {
if side >= 0 {
c.padSide = side
}
if top >= 0 {
c.padTop = top
}
if dx >= 0 {
c.padX = dx
}
if dy >= 0 {
c.padY = dy
}
}
2015-10-17 01:27:43 +08:00
//---------- debug ----------------
func (c *ControlBase) Logger() *log.Logger {
if c.parent == nil {
return nil
} else {
return c.parent.Logger()
}
}