From a54f4adb8f28855e7a8e5f24072f4d969b3b674d Mon Sep 17 00:00:00 2001 From: Kevin Kuehler Date: Mon, 10 Jun 2019 22:05:56 -0700 Subject: [PATCH] lib/ui/tab: Add Replace method Also expose a light wrapper method in aerc.go for tab replacement Signed-off-by: Kevin Kuehler --- lib/ui/tab.go | 16 ++++++++++++++++ widgets/aerc.go | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/lib/ui/tab.go b/lib/ui/tab.go index ed96ec4..61d544a 100644 --- a/lib/ui/tab.go +++ b/lib/ui/tab.go @@ -68,6 +68,22 @@ func (tabs *Tabs) Remove(content Drawable) { tabs.TabStrip.Invalidate() } +func (tabs *Tabs) Replace(contentSrc Drawable, contentTarget Drawable, name string) { + replaceTab := &Tab{ + Content: contentTarget, + Name: name, + } + for i, tab := range tabs.Tabs { + if tab.Content == contentSrc { + tabs.Tabs[i] = replaceTab + tabs.Select(i) + break + } + } + tabs.TabStrip.Invalidate() + contentTarget.OnInvalidate(tabs.invalidateChild) +} + func (tabs *Tabs) Select(index int) { if index >= len(tabs.Tabs) { panic("Tried to set tab index to a non-existing element") diff --git a/widgets/aerc.go b/widgets/aerc.go index 5b1b151..ae8319b 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -218,6 +218,10 @@ func (aerc *Aerc) RemoveTab(tab ui.Drawable) { aerc.tabs.Remove(tab) } +func (aerc *Aerc) ReplaceTab(tabSrc ui.Drawable, tabTarget ui.Drawable, name string) { + aerc.tabs.Replace(tabSrc, tabTarget, name) +} + func (aerc *Aerc) NextTab() { next := aerc.tabs.Selected + 1 if next >= len(aerc.tabs.Tabs) {