package objects import "git.tebibyte.media/tomo/tomo" import "git.tebibyte.media/tomo/tomo/input" import "git.tebibyte.media/tomo/tomo/event" import "git.tebibyte.media/tomo/objects/layouts" // LabelCheckbox is a checkbox with a label. type LabelCheckbox struct { tomo.ContainerBox checkbox *Checkbox label *Label } // NewLabelCheckbox creates a new labeled checkbox with the specified value and // label text. func NewLabelCheckbox (value bool, text string) *LabelCheckbox { box := &LabelCheckbox { ContainerBox: tomo.NewContainerBox(), checkbox: NewCheckbox(value), label: NewLabel(text), } theme.Apply(box, theme.R("objects", "LabelCheckbox", "")) box.label.SetAlign(tomo.AlignStart, tomo.AlignMiddle) box.Add(box.checkbox) box.Add(box.label) box.SetLayout(layouts.NewGrid([]bool { false, true }, []bool { false })) box.OnMouseUp(box.handleMouseUp) box.label.OnMouseUp(box.handleMouseUp) return box } // SetValue sets the value of the checkbox. func (this *LabelCheckbox) SetValue (value bool) { this.checkbox.SetValue(value) } // Toggle toggles the value of the checkbox between true and false. func (this *LabelCheckbox) Toggle () { this.checkbox.Toggle() } // Value returns the value of the checkbox. func (this *LabelCheckbox) Value () bool { return this.checkbox.Value() } // OnValueChange specifies a function to be called when the checkbox's value // changes. func (this *LabelCheckbox) OnValueChange (callback func ()) event.Cookie { return this.checkbox.OnValueChange(callback) } func (this *LabelCheckbox) handleMouseUp (button input.Button) { if button != input.ButtonLeft { return } if this.MousePosition().In(this.Bounds()) { this.checkbox.SetFocused(true) this.checkbox.Toggle() } }