From ce08487eff286a3c7640a6548de2f45b5094f3a8 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Thu, 12 Sep 2024 15:13:38 -0400 Subject: [PATCH] Make a distinction between notebook tabs and pages --- notebook.go | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/notebook.go b/notebook.go index 401d777..8c3a2ca 100644 --- a/notebook.go +++ b/notebook.go @@ -6,13 +6,13 @@ import "git.tebibyte.media/tomo/objects/layouts" var _ tomo.Object = new(Notebook) -// Notebook holds multiple objects, each in their own tab. The user can click +// Notebook holds multiple objects, each in their own page. The user can click // the tab bar at the top to choose which one is activated. // // Sub-components: // - TabRow sits at the top of the container and contains a row of tabs. // - TabSpacer sits at either end of the tab row, bookending the list of tabs. -// - Tab appears in the tab row for each tab in the container. The user can +// - Tab appears in the tab row for each tab in the notebook. The user can // click on the tab to switch to it. // // TabSpacer tags: @@ -20,15 +20,15 @@ var _ tomo.Object = new(Notebook) // - [right] The spacer is on the right. // // Tab tags: -// - [active] The tab is currently active and its contents are visible. +// - [active] The tab is currently active and its page is visible. type Notebook struct { box tomo.ContainerBox leftSpacer tomo.Box rightSpacer tomo.Box - tabsRow tomo.ContainerBox - active string - tabs []*tab + tabsRow tomo.ContainerBox + active string + pages []*page } // NewNotebook creates a new tabbed notebook. @@ -60,7 +60,7 @@ func (this *Notebook) GetBox () tomo.Box { return this.box } -// Activate switches to a named tab. +// Activate switches to a named page. func (this *Notebook) Activate (name string) { if _, tab := this.findTab(this.active); tab != nil { tab.setActive(false) @@ -75,82 +75,82 @@ func (this *Notebook) Activate (name string) { this.active = name } -// Add adds an object as a tab with the specified name. +// Add adds an object as a page with the specified name. func (this *Notebook) Add (name string, root tomo.Object) { - tab := &tab { + pag := &page { TextBox: tomo.NewTextBox(), name: name, root: root, } - tab.SetRole(tomo.R("objects", "Tab")) - tab.SetText(name) - tab.OnButtonDown(func (button input.Button) bool { + pag.SetRole(tomo.R("objects", "Tab")) + pag.SetText(name) + pag.OnButtonDown(func (button input.Button) bool { if button != input.ButtonLeft { return false } this.Activate(name) return true }) - tab.OnButtonUp(func (button input.Button) bool { + pag.OnButtonUp(func (button input.Button) bool { if button != input.ButtonLeft { return false } return true }) - this.tabs = append(this.tabs, tab) - this.tabsRow.Insert(tab, this.rightSpacer) + this.pages = append(this.pages, pag) + this.tabsRow.Insert(pag, this.rightSpacer) this.setTabRowLayout() // if the row was empty before, activate this tab - if len(this.tabs) == 1 { + if len(this.pages) == 1 { this.Activate(name) } } -// Remove removes the named tab. +// Remove removes the named page. func (this *Notebook) Remove (name string) { index, tab := this.findTab(name) if index < 0 { return } nextIndex := index - 1 this.tabsRow.Remove(tab) - this.tabs = append(this.tabs[:index], this.tabs[index - 1:]...) + this.pages = append(this.pages[:index], this.pages[index - 1:]...) this.setTabRowLayout() - if nextIndex < 0 { nextIndex = 0 } - if nextIndex >= len(this.tabs) { nextIndex = len(this.tabs) - 1 } + if nextIndex < 0 { nextIndex = 0 } + if nextIndex >= len(this.pages) { nextIndex = len(this.pages) - 1 } if nextIndex < 0 { this.Activate("") } else { - this.Activate(this.tabs[nextIndex].name) + this.Activate(this.pages[nextIndex].name) } } // Clear removes all tabs. func (this *Notebook) Clear () { - this.tabs = nil + this.pages = nil this.tabsRow.Clear() this.tabsRow.Add(this.leftSpacer) this.tabsRow.Add(this.rightSpacer) } func (this *Notebook) setTabRowLayout () { - row := make(layouts.Row, 1 + len(this.tabs) + 1) + row := make(layouts.Row, 1 + len(this.pages) + 1) row[len(row) - 1] = true this.tabsRow.SetAttr(tomo.ALayout(row)) } -func (this *Notebook) findTab (name string) (int, *tab) { - for index, tab := range this.tabs { - if tab.name == name { return index, tab } +func (this *Notebook) findTab (name string) (int, *page) { + for index, pag := range this.pages { + if pag.name == name { return index, pag } } return -1, nil } -type tab struct { +type page struct { tomo.TextBox name string root tomo.Object } -func (this *tab) setActive (active bool) { +func (this *page) setActive (active bool) { if active { this.SetRole(tomo.R("objects", "Tab")) this.SetTag("active", true)