summaryrefslogtreecommitdiff
path: root/lib/ui/tab.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ui/tab.go')
-rw-r--r--lib/ui/tab.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/ui/tab.go b/lib/ui/tab.go
index 61d544a..0061472 100644
--- a/lib/ui/tab.go
+++ b/lib/ui/tab.go
@@ -126,6 +126,19 @@ func (tabs *Tabs) removeHistory(index int) {
tabs.history = newHist
}
+func (tabs *Tabs) MouseEvent(event tcell.Event) {
+ switch event := event.(type) {
+ case *tcell.EventMouse:
+ if event.Buttons()&tcell.Button1 != 0 {
+ x, y := event.Position()
+ selectedTab, ok := tabs.TabStrip.Clicked(x, y)
+ if ok {
+ tabs.Select(selectedTab)
+ }
+ }
+ }
+}
+
// TODO: Color repository
func (strip *TabStrip) Draw(ctx *Context) {
x := 0
@@ -151,6 +164,21 @@ func (strip *TabStrip) OnInvalidate(onInvalidate func(d Drawable)) {
strip.onInvalidateStrip = onInvalidate
}
+func (strip *TabStrip) Clicked(mouseX int, mouseY int) (int, bool) {
+ x := 0
+ if mouseY == 0 {
+ for i, tab := range strip.Tabs {
+ trunc := runewidth.Truncate(tab.Name, 32, "…")
+ length := len(trunc) + 2
+ if x <= mouseX && mouseX < x+length {
+ return i, true
+ }
+ x += length
+ }
+ }
+ return 0, false
+}
+
func (content *TabContent) Children() []Drawable {
children := make([]Drawable, len(content.Tabs))
for i, tab := range content.Tabs {