Skip to content

Commit 2b55259

Browse files
committed
TabItem: add possibility to attach an EventHandler
fix #953
1 parent 47303d4 commit 2b55259

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

Widgets.go

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -612,10 +612,11 @@ func (d *DummyWidget) Build() {
612612

613613
// TabItemWidget is an item in TabBarWidget.
614614
type TabItemWidget struct {
615-
label string
616-
open *bool
617-
flags TabItemFlags
618-
layout Layout
615+
label string
616+
open *bool
617+
flags TabItemFlags
618+
layout Layout
619+
eventHandler *EventHandler
619620
}
620621

621622
// TabItem creates new TabItem.
@@ -648,6 +649,12 @@ func (t *TabItemWidget) Flags(flags TabItemFlags) *TabItemWidget {
648649
return t
649650
}
650651

652+
// EventHandler allows to attach a custym EventHandler to the tab item in order to detect events on it.
653+
func (t *TabItemWidget) EventHandler(handler *EventHandler) *TabItemWidget {
654+
t.eventHandler = handler
655+
return t
656+
}
657+
651658
// Layout is a layout displayed when item is opened.
652659
func (t *TabItemWidget) Layout(widgets ...Widget) *TabItemWidget {
653660
t.layout = Layout(widgets)
@@ -656,7 +663,13 @@ func (t *TabItemWidget) Layout(widgets ...Widget) *TabItemWidget {
656663

657664
// BuildTabItem executes tab item build steps.
658665
func (t *TabItemWidget) BuildTabItem() {
659-
if imgui.BeginTabItemV(t.label, t.open, imgui.TabItemFlags(t.flags)) {
666+
start := imgui.BeginTabItemV(t.label, t.open, imgui.TabItemFlags(t.flags))
667+
668+
if t.eventHandler != nil {
669+
t.eventHandler.Build()
670+
}
671+
672+
if start {
660673
t.layout.Build()
661674
imgui.EndTabItem()
662675
}

examples/widgets/widgets.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,9 @@ func loop() {
161161
g.TabItem("Multiline Input").Layout(
162162
g.Label("This is first tab with a multiline input text field"),
163163
g.InputTextMultiline(&multiline).Size(g.Auto, g.Auto),
164-
),
164+
).EventHandler(g.Event().OnClick(g.MouseButtonLeft, func() {
165+
fmt.Println("MultipleInput tab clicked!")
166+
})),
165167
g.TabItem("Tree").Layout(
166168
g.TreeNode("TreeNode1").Flags(g.TreeNodeFlagsCollapsingHeader|g.TreeNodeFlagsDefaultOpen).Layout(
167169
g.Custom(func() {

0 commit comments

Comments
 (0)