4 Commits

35 changed files with 126 additions and 115 deletions

View File

@@ -1,8 +1,8 @@
package objects package objects
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
type abstractContainer struct { type abstractContainer struct {
box tomo.ContainerBox box tomo.ContainerBox

View File

@@ -1,9 +1,9 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
var _ tomo.Object = new(Button) var _ tomo.Object = new(Button)

View File

@@ -2,9 +2,9 @@ package objects
import "fmt" import "fmt"
import "time" import "time"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
var _ tomo.Object = new(Calendar) var _ tomo.Object = new(Calendar)

View File

@@ -1,8 +1,8 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
var _ tomo.Object = new(Checkbox) var _ tomo.Object = new(Checkbox)

View File

@@ -1,12 +1,12 @@
package objects package objects
import "image/color" import "image/color"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/tomo/canvas" import "git.holanet.xyz/tomo/tomo/canvas"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
import "git.tebibyte.media/sashakoshka/goutil/image/color" import "git.holanet.xyz/platform/go-util/image/color"
var _ tomo.Object = new(HSVAColorPicker) var _ tomo.Object = new(HSVAColorPicker)

View File

@@ -1,9 +1,9 @@
package objects package objects
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
// DialogKind defines the semantic role of a dialog window. // DialogKind defines the semantic role of a dialog window.
type DialogKind int; const ( type DialogKind int; const (

View File

@@ -1,10 +1,10 @@
package objects package objects
// import "image" // import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
var _ tomo.Object = new(Dropdown) var _ tomo.Object = new(Dropdown)

10
file.go
View File

@@ -2,11 +2,11 @@ package objects
import "time" import "time"
import "unicode" import "unicode"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/data" import "git.holanet.xyz/tomo/tomo/data"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
var _ tomo.Object = new(File) var _ tomo.Object = new(File)

7
go.mod
View File

@@ -1,8 +1,9 @@
module git.tebibyte.media/tomo/objects module git.holanet.xyz/tomo/objects
go 1.21.0 go 1.23.0
require ( require (
git.tebibyte.media/sashakoshka/goutil v0.3.1 git.holanet.xyz/platform/go-util v0.10.0
git.holanet.xyz/tomo/tomo v0.49.0
git.tebibyte.media/tomo/tomo v0.48.0 git.tebibyte.media/tomo/tomo v0.48.0
) )

6
go.sum
View File

@@ -1,4 +1,6 @@
git.tebibyte.media/sashakoshka/goutil v0.3.1 h1:zvAMKS+aea96q6oTttCWfNLXqOHisI3IKAwX6BWKfY0= git.holanet.xyz/platform/go-util v0.10.0 h1:FGBFv4Cj/t3uxHLcnVQSC6Sdbqzo1tlzEEo3ckveFNM=
git.tebibyte.media/sashakoshka/goutil v0.3.1/go.mod h1:Yo/M2sbi9IbzZCFsEj8/Fg7sNwHkDaJ6saTHOha+Dow= git.holanet.xyz/platform/go-util v0.10.0/go.mod h1:Fdl9GkBeLW58RGuomAglqu3hfV4XAirml/9GqaQDKKA=
git.holanet.xyz/tomo/tomo v0.49.0 h1:eQqp8nYwcb4NCMKkxRATY1YKVlYIR64wuZZIL7MUmTM=
git.holanet.xyz/tomo/tomo v0.49.0/go.mod h1:sRJE1lh8Om/1Vvtk/pFgzeZW4jrOniIqZmJo5Y92Hoc=
git.tebibyte.media/tomo/tomo v0.48.0 h1:AE21ElHwUSPsX82ZWCnoNxJFi9Oswyd3dPDPMbxTueQ= git.tebibyte.media/tomo/tomo v0.48.0 h1:AE21ElHwUSPsX82ZWCnoNxJFi9Oswyd3dPDPMbxTueQ=
git.tebibyte.media/tomo/tomo v0.48.0/go.mod h1:WrtilgKB1y8O2Yu7X4mYcRiqOlPR8NuUnoA/ynkQWrs= git.tebibyte.media/tomo/tomo v0.48.0/go.mod h1:WrtilgKB1y8O2Yu7X4mYcRiqOlPR8NuUnoA/ynkQWrs=

View File

@@ -1,9 +1,9 @@
package objects package objects
import "fmt" import "fmt"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/text" import "git.holanet.xyz/tomo/tomo/text"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
var _ tomo.Object = new(Heading) var _ tomo.Object = new(Heading)

View File

@@ -1,7 +1,7 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/canvas" import "git.holanet.xyz/tomo/tomo/canvas"
var _ tomo.Object = new(Icon) var _ tomo.Object = new(Icon)

View File

@@ -1,6 +1,6 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
func isClickingKey (key input.Key) bool { func isClickingKey (key input.Key) bool {
return key == input.KeyEnter || key == input.Key(' ') return key == input.KeyEnter || key == input.Key(' ')

View File

@@ -1,8 +1,8 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/text" import "git.holanet.xyz/tomo/tomo/text"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
var _ tomo.Object = new(Label) var _ tomo.Object = new(Label)

View File

@@ -1,9 +1,9 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
var _ tomo.Object = new(LabelCheckbox) var _ tomo.Object = new(LabelCheckbox)

View File

@@ -1,10 +1,10 @@
package objects package objects
import "image/color" import "image/color"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
var _ tomo.Object = new(LabelSwatch) var _ tomo.Object = new(LabelSwatch)

View File

@@ -1,7 +1,7 @@
package layouts package layouts
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
var _ tomo.Layout = ContractVertical var _ tomo.Layout = ContractVertical

View File

@@ -1,7 +1,7 @@
package layouts package layouts
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
var _ tomo.Layout = FlowVertical var _ tomo.Layout = FlowVertical

View File

@@ -2,7 +2,7 @@ package layouts
import "math" import "math"
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
var _ tomo.Layout = new(Grid) var _ tomo.Layout = new(Grid)

View File

@@ -1,7 +1,7 @@
package layouts package layouts
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
var _ tomo.Layout = ContractVertical var _ tomo.Layout = ContractVertical

View File

@@ -1,10 +1,10 @@
package objects package objects
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
// import "git.tebibyte.media/tomo/tomo/event" // import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
// Menu is a menu window. // Menu is a menu window.
// //

View File

@@ -1,9 +1,9 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
var _ tomo.Object = new(MenuItem) var _ tomo.Object = new(MenuItem)

View File

@@ -1,8 +1,8 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/data" import "git.holanet.xyz/tomo/tomo/data"
import "git.tebibyte.media/tomo/tomo/canvas" import "git.holanet.xyz/tomo/tomo/canvas"
var _ tomo.Object = new(MimeIcon) var _ tomo.Object = new(MimeIcon)

View File

@@ -1,8 +1,8 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
var _ tomo.Object = new(Notebook) var _ tomo.Object = new(Notebook)
@@ -14,6 +14,7 @@ var _ tomo.Object = new(Notebook)
// - TabSpacer sits at either end of the tab row, bookending the list 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 notebook. 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. // click on the tab to switch to it.
// - PageWrapper sits underneath the TabRow and contains the active page.
// //
// TabSpacer tags: // TabSpacer tags:
// - [left] The spacer is on the left. // - [left] The spacer is on the left.
@@ -27,6 +28,7 @@ type Notebook struct {
leftSpacer tomo.Box leftSpacer tomo.Box
rightSpacer tomo.Box rightSpacer tomo.Box
tabsRow tomo.ContainerBox tabsRow tomo.ContainerBox
pageWrapper tomo.ContainerBox
active string active string
pages []*page pages []*page
} }
@@ -39,10 +41,6 @@ func NewNotebook () *Notebook {
notebook.box.SetRole(tomo.R("objects", "Notebook")) notebook.box.SetRole(tomo.R("objects", "Notebook"))
notebook.box.SetAttr(tomo.ALayout(layouts.Column { false, true })) notebook.box.SetAttr(tomo.ALayout(layouts.Column { false, true }))
notebook.tabsRow = tomo.NewContainerBox()
notebook.tabsRow.SetRole(tomo.R("objects", "TabRow"))
notebook.box.Add(notebook.tabsRow)
notebook.leftSpacer = tomo.NewBox() notebook.leftSpacer = tomo.NewBox()
notebook.leftSpacer.SetRole(tomo.R("objects", "TabSpacer")) notebook.leftSpacer.SetRole(tomo.R("objects", "TabSpacer"))
notebook.leftSpacer.SetTag("left", true) notebook.leftSpacer.SetTag("left", true)
@@ -50,6 +48,15 @@ func NewNotebook () *Notebook {
notebook.rightSpacer.SetRole(tomo.R("objects", "TabSpacer")) notebook.rightSpacer.SetRole(tomo.R("objects", "TabSpacer"))
notebook.rightSpacer.SetTag("right", true) notebook.rightSpacer.SetTag("right", true)
notebook.tabsRow = tomo.NewContainerBox()
notebook.tabsRow.SetRole(tomo.R("objects", "TabRow"))
notebook.box.Add(notebook.tabsRow)
notebook.pageWrapper = tomo.NewContainerBox()
notebook.pageWrapper.SetRole(tomo.R("objects", "PageWrapper"))
notebook.pageWrapper.SetAttr(tomo.ALayout(layouts.Column { true }))
notebook.box.Add(notebook.pageWrapper)
notebook.Clear() notebook.Clear()
notebook.setTabRowLayout() notebook.setTabRowLayout()
return notebook return notebook
@@ -64,11 +71,11 @@ func (this *Notebook) GetBox () tomo.Box {
func (this *Notebook) Activate (name string) { func (this *Notebook) Activate (name string) {
if _, tab := this.findTab(this.active); tab != nil { if _, tab := this.findTab(this.active); tab != nil {
tab.setActive(false) tab.setActive(false)
this.box.Remove(tab.root) this.pageWrapper.Remove(tab.root)
} }
if _, tab := this.findTab(name); tab != nil { if _, tab := this.findTab(name); tab != nil {
tab.setActive(true) tab.setActive(true)
this.box.Add(tab.root) this.pageWrapper.Add(tab.root)
} else { } else {
name = "" name = ""
} }
@@ -129,6 +136,7 @@ func (this *Notebook) Clear () {
this.tabsRow.Clear() this.tabsRow.Clear()
this.tabsRow.Add(this.leftSpacer) this.tabsRow.Add(this.leftSpacer)
this.tabsRow.Add(this.rightSpacer) this.tabsRow.Add(this.rightSpacer)
this.pageWrapper.Clear()
} }
func (this *Notebook) setTabRowLayout () { func (this *Notebook) setTabRowLayout () {

View File

@@ -2,11 +2,11 @@ package objects
import "math" import "math"
import "strconv" import "strconv"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/text" import "git.holanet.xyz/tomo/tomo/text"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
var _ tomo.Object = new(NumberInput) var _ tomo.Object = new(NumberInput)

View File

@@ -1,7 +1,7 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
var _ tomo.ContentObject = new(Pegboard) var _ tomo.ContentObject = new(Pegboard)
@@ -12,9 +12,9 @@ type Pegboard struct {
} }
// NewPegboard creates a new pegboard. If the provided layout is nil, it will // NewPegboard creates a new pegboard. If the provided layout is nil, it will
// use a FlowHorizontal layout. // use a FlowVertical layout.
func NewPegboard (layout tomo.Layout, children ...tomo.Object) *Pegboard { func NewPegboard (layout tomo.Layout, children ...tomo.Object) *Pegboard {
if layout == nil { layout = layouts.FlowHorizontal } if layout == nil { layout = layouts.FlowVertical }
pegboard := &Pegboard { } pegboard := &Pegboard { }
pegboard.init(layout, children...) pegboard.init(layout, children...)
pegboard.box.SetRole(tomo.R("objects", "Pegboard")) pegboard.box.SetRole(tomo.R("objects", "Pegboard"))

View File

@@ -1,6 +1,6 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
var _ tomo.ContentObject = new(Root) var _ tomo.ContentObject = new(Root)
@@ -11,8 +11,8 @@ type Root struct {
} }
// NewRoot creates a new container. // NewRoot creates a new container.
func NewRoot (layout tomo.Layout, children ...tomo.Object) *Container { func NewRoot (layout tomo.Layout, children ...tomo.Object) *Root {
this := &Container { } this := &Root { }
this.init(layout, children...) this.init(layout, children...)
this.box.SetRole(tomo.R("objects", "Root")) this.box.SetRole(tomo.R("objects", "Root"))
this.box.SetTag("outer", true) this.box.SetTag("outer", true)

View File

@@ -1,9 +1,9 @@
package objects package objects
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
var _ tomo.Object = new(Scrollbar) var _ tomo.Object = new(Scrollbar)

View File

@@ -1,10 +1,10 @@
package objects package objects
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
// ScrollSide determines which Scrollbars are active in a ScrollContainer. // ScrollSide determines which Scrollbars are active in a ScrollContainer.
type ScrollSide int; const ( type ScrollSide int; const (

View File

@@ -1,7 +1,7 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
var _ tomo.ContentObject = new(Segment) var _ tomo.ContentObject = new(Segment)

View File

@@ -1,6 +1,6 @@
package objects package objects
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
var _ tomo.Object = new(Separator) var _ tomo.Object = new(Separator)

View File

@@ -2,9 +2,9 @@ package objects
import "math" import "math"
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
var _ tomo.Object = new(Slider) var _ tomo.Object = new(Slider)

View File

@@ -3,12 +3,12 @@ package objects
import "log" import "log"
import "image" import "image"
import "image/color" import "image/color"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/tomo/canvas" import "git.holanet.xyz/tomo/tomo/canvas"
import "git.tebibyte.media/tomo/objects/layouts" import "git.holanet.xyz/tomo/objects/layouts"
import "git.tebibyte.media/tomo/objects/internal" import "git.holanet.xyz/tomo/objects/internal"
var _ tomo.Object = new(Swatch) var _ tomo.Object = new(Swatch)

View File

@@ -2,11 +2,11 @@ package objects
import "time" import "time"
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/text" import "git.holanet.xyz/tomo/tomo/text"
import "git.tebibyte.media/tomo/tomo/input" import "git.holanet.xyz/tomo/tomo/input"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
import "git.tebibyte.media/tomo/objects/internal" import "git.holanet.xyz/tomo/objects/internal"
const textInputHistoryMaximum = 64 const textInputHistoryMaximum = 64
const textInputHistoryMaxAge = time.Second / 4 const textInputHistoryMaxAge = time.Second / 4

View File

@@ -1,9 +1,9 @@
package objects package objects
import "image" import "image"
import "git.tebibyte.media/tomo/tomo" import "git.holanet.xyz/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/text" import "git.holanet.xyz/tomo/tomo/text"
import "git.tebibyte.media/tomo/tomo/event" import "git.holanet.xyz/tomo/tomo/event"
var _ tomo.Object = new(TextView) var _ tomo.Object = new(TextView)