diff --git a/menuitem.go b/menuitem.go index 31e736f..3768c8e 100644 --- a/menuitem.go +++ b/menuitem.go @@ -5,12 +5,14 @@ import "git.tebibyte.media/tomo/tomo/input" import "git.tebibyte.media/tomo/tomo/event" import "git.tebibyte.media/tomo/objects/layouts" +var _ tomo.Object = new(MenuItem) + // MenuItem is a selectable memu item. type MenuItem struct { - tomo.ContainerBox + box tomo.ContainerBox - label *Label - icon *Icon + label *Label + icon *Icon labelActive bool on struct { @@ -25,27 +27,39 @@ func NewMenuItem (text string) *MenuItem { // NewIconMenuItem creates a new menu item with the specified icon and text. func NewIconMenuItem (icon tomo.Icon, text string) *MenuItem { - box := &MenuItem { - ContainerBox: tomo.NewContainerBox(), - label: NewLabel(text), - icon: NewIcon(icon, tomo.IconSizeSmall), + menuItem := &MenuItem { + box: tomo.NewContainerBox(), + label: NewLabel(text), + icon: NewIcon(icon, tomo.IconSizeSmall), } - box.SetRole(tomo.R("objects", "MenuItem")) - box.label.SetAlign(tomo.AlignStart, tomo.AlignMiddle) - box.SetAttr(tomo.ALayout(layouts.Row { false, true })) + menuItem.box.SetRole(tomo.R("objects", "MenuItem")) + menuItem.label.SetAlign(tomo.AlignStart, tomo.AlignMiddle) + menuItem.box.SetAttr(tomo.ALayout(layouts.Row { false, true })) - box.Add(box.icon) - box.Add(box.label) + menuItem.box.Add(menuItem.icon) + menuItem.box.Add(menuItem.label) - box.SetInputMask(true) - box.OnMouseEnter(box.handleMouseEnter) - box.OnMouseLeave(box.handleMouseLeave) - box.OnButtonDown(box.handleButtonDown) - box.OnButtonUp(box.handleButtonUp) - box.OnKeyDown(box.handleKeyDown) - box.OnKeyUp(box.handleKeyUp) - box.SetFocusable(true) - return box + menuItem.box.SetInputMask(true) + menuItem.box.OnMouseEnter(menuItem.handleMouseEnter) + menuItem.box.OnMouseLeave(menuItem.handleMouseLeave) + menuItem.box.OnButtonDown(menuItem.handleButtonDown) + menuItem.box.OnButtonUp(menuItem.handleButtonUp) + menuItem.box.OnKeyDown(menuItem.handleKeyDown) + menuItem.box.OnKeyUp(menuItem.handleKeyUp) + menuItem.box.SetFocusable(true) + return menuItem +} + +// GetBox returns the underlying box. +func (this *MenuItem) GetBox () tomo.Box { + return this.box +} + +// SetFocused sets whether or not this menu item has keyboard focus. If set to +// true, this method will steal focus away from whichever object currently has +// focus. +func (this *MenuItem) SetFocused (focused bool) { + this.box.SetFocused(focused) } // SetText sets the text of the items's label. @@ -90,7 +104,7 @@ func (this *MenuItem) handleButtonDown (button input.Button) bool { func (this *MenuItem) handleButtonUp (button input.Button) bool { if button != input.ButtonLeft { return false } - if this.Window().MousePosition().In(this.Bounds()) { + if this.box.Window().MousePosition().In(this.box.Bounds()) { this.on.click.Broadcast() } return true