clui/control_intf.go

148 lines
6.3 KiB
Go

package clui
import (
term "github.com/nsf/termbox-go"
)
// Control is an interface that every visible control should implement
type Control interface {
// Title returns the current title or text of the control
Title() string
// SetTitle changes control text or title
SetTitle(title string)
// Size returns current control width and height
Size() (widht int, height int)
// SetSize changes control size. Constant KeepValue can be
// used as placeholder to indicate that the control attrubute
// should be unchanged.
SetSize(width, height int)
// Pos returns the current absolute control position: X and Y.
Pos() (x int, y int)
// SetPos changes contols position. Manual call of the method does not
// make sense for any control except for Window because control positions
// inside of container always recalculated after its parent resizes
SetPos(x, y int)
// Constraints return minimal control widht and height
Constraints() (minw int, minh int)
SetConstraints(minw, minh int)
// Active returns if a control is active. Only active controls can
// process keyboard events. Parent looks for active controls to
// make sure that there is only one active control at a time
Active() bool
// SetActive activates and deactivates control
SetActive(active bool)
// TabStop returns if a control can be selected by traversing
// controls using TAB key
TabStop() bool
SetTabStop(tabstop bool)
// Enable return if a control can process keyboard and mouse events
Enabled() bool
SetEnabled(enabled bool)
// Parent return control's container or nil if there is no parent container
// that is true for Windows
Parent() Control
// The function should not be called manually. It is for internal use by
// library
SetParent(parent Control)
// Modal returns if a control is always on top and does not allow to
// change the current control. Used only by Windows, for other kind of
// controls it does nothing
Modal() bool
SetModal(modal bool)
// Paddings returns a number of spaces used to auto-arrange children inside
// a container: indent from left and right sides, indent from top and bottom
// sides.
Paddings() (px int, py int)
// SetPaddings changes indents for the container. Use KeepValue as a placeholder
// if you do not want to touch a parameter
SetPaddings(px, py int)
// Gaps returns number of spaces inserted between child controls. dx is used
// by horizontally-packed parents and dy by vertically-packed ones
Gaps() (dx int, dy int)
SetGaps(dx, dy int)
// Pack returns direction in which a container packs
// its children: horizontal or vertical
Pack() PackType
// SetPack changes the direction of children packing
SetPack(pack PackType)
// Scale return scale coefficient that is used to calculate
// new control size after its parent resizes.
// Fixed means the controls never changes its size.
// Any positive value is a real coefficient of scaling.
// How the scaling works: after resizing, parent control
// calculates the difference between minimal and current sizes,
// then divides the difference between controls that has
// positive scale depending on a scale value. The more scale,
// the larger control after resizing. Example: if you have
// two controls with scales 1 and 2, then after every resizing
// the latter controls expands by 100% more than the first one.
Scale() int
// SetScale sets a scale coefficient for the control.
// See Scale method for details
SetScale(scale int)
// Align returns alignment of title in control
Align() Align
SetAlign(align Align)
TextColor() term.Attribute
// SetTextColor changes text color of the control.
// Use ColorDefault to apply theme default color for the control
SetTextColor(clr term.Attribute)
BackColor() term.Attribute
// SetBackColor changes background color of the control.
// Use ColorDefault to apply theme default color for the control
SetBackColor(clr term.Attribute)
// ActiveColors return the attrubutes for the controls when it
// is active: text and background colors.
// Use ColorDefault to apply theme default color for the control
ActiveColors() (term.Attribute, term.Attribute)
// SetActiveBackColor changes background color of the active control.
// Use ColorDefault to apply theme default color for the control
SetActiveBackColor(term.Attribute)
// SetActiveTextColor changes text color of the active control.
// Use ColorDefault to apply theme default color for the control
SetActiveTextColor(term.Attribute)
// AddChild adds a new child to a container
// The method should not be called manually. It is automatically called
// if parent is not nil in Create* function
AddChild(control Control)
// Children returns the copy of the list of container child controls
Children() []Control
// ChildExists returns true if a control has argument as one of its
// children or child of one of the children
ChildExists(control Control) bool
// MinimalSize returns the minimal size required by a control to show
// it and all its children.
MinimalSize() (w int, h int)
// ChildrenScale returns the sum of all scales of all control decendants
ChildrenScale() int
// ResizeChildren recalculates new size of all control's children. Calling
// the function manually is useless because the library calls this method
// after any size change automatically(including call after adding a new
// child)
ResizeChildren()
// PlaceChildren arranges all children inside a control. Useful to be called
// after ResizeChildren, but manual call of the method is mostly useless.
// The function is used by the library internally
PlaceChildren()
// Draw repaints the control on its parent surface
Draw()
// DrawChildren repaints all control children.
// Method is added to avoid writing repetetive code for any parent control.
// Just call the method at the end of your Draw method and all children
// repaints automatically
DrawChildren()
// HitTest returns the area that corresponds to the clicked
// position X, Y (absolute position in console window): title,
// internal view area, title button, border or outside the control
HitTest(x, y int) HitResult
// ProcessEvent processes all events come from the control parent. If a control
// processes an event it should return true. If the method returns false it means
// that the control do not want or cannot process the event and the caller sends
// the event to the control parent
ProcessEvent(ev Event) bool
}