Lists are a thing now

Looks like child bounds arent clipped properly though, ugh
This commit is contained in:
2023-04-18 02:59:44 -04:00
parent 6b13e772a9
commit 0bf5c3b86c
7 changed files with 420 additions and 95 deletions

View File

@@ -2,10 +2,8 @@ package main
import "git.tebibyte.media/sashakoshka/tomo"
import "git.tebibyte.media/sashakoshka/tomo/popups"
import "git.tebibyte.media/sashakoshka/tomo/layouts"
import "git.tebibyte.media/sashakoshka/tomo/elements"
import "git.tebibyte.media/sashakoshka/tomo/elements/testing"
import "git.tebibyte.media/sashakoshka/tomo/elements/containers"
import _ "git.tebibyte.media/sashakoshka/tomo/backends/all"
func main () {
@@ -16,18 +14,16 @@ func run () {
window, _ := tomo.NewWindow(tomo.Bounds(0, 0, 300, 0))
window.SetTitle("List Sidebar")
container := containers.NewContainer(layouts.Horizontal { true, true })
container := elements.NewHBox(true, true)
window.Adopt(container)
var currentPage tomo.Element
turnPage := func (newPage tomo.Element) {
container.Warp (func () {
if currentPage != nil {
container.Disown(currentPage)
}
container.Adopt(newPage, true)
currentPage = newPage
})
if currentPage != nil {
container.Disown(currentPage)
}
container.Adopt(newPage, true)
currentPage = newPage
}
intro := elements.NewLabel (
@@ -39,7 +35,7 @@ func run () {
})
mouse := testing.NewMouse()
input := elements.NewTextBox("Write some text", "")
form := containers.NewContainer(layouts.Vertical { true, false})
form := elements.NewVBox(false, true)
form.Adopt(elements.NewLabel("I have:", false), false)
form.Adopt(elements.NewSpacer(true), false)
form.Adopt(elements.NewCheckbox("Skin", true), false)
@@ -47,13 +43,21 @@ func run () {
form.Adopt(elements.NewCheckbox("Bone", false), false)
art := testing.NewArtist()
makePage := func (name string, callback func ()) tomo.Selectable {
cell := elements.NewCell(elements.NewLabel(name, false))
cell.OnSelectionChange (func () {
if cell.Selected() { callback() }
})
return cell
}
list := elements.NewList (
elements.NewListEntry("button", func () { turnPage(button) }),
elements.NewListEntry("mouse", func () { turnPage(mouse) }),
elements.NewListEntry("input", func () { turnPage(input) }),
elements.NewListEntry("form", func () { turnPage(form) }),
elements.NewListEntry("art", func () { turnPage(art) }))
list.OnNoEntrySelected(func () { turnPage (intro) })
1,
makePage("button", func () { turnPage(button) }),
makePage("mouse", func () { turnPage(mouse) }),
makePage("input", func () { turnPage(input) }),
makePage("form", func () { turnPage(form) }),
makePage("art", func () { turnPage(art) }))
list.Collapse(96, 0)
container.Adopt(list, false)

View File

@@ -1,6 +1,6 @@
package main
// import "image"
import "image"
import "git.tebibyte.media/sashakoshka/tomo"
import "git.tebibyte.media/sashakoshka/tomo/elements"
import _ "git.tebibyte.media/sashakoshka/tomo/backends/all"
@@ -18,48 +18,49 @@ func run () {
textBox := elements.NewTextBox("", copypasta)
disconnectedContainer := elements.NewHBox(false, true)
// list := elements.NewList (
// elements.NewListEntry("This is list item 0", nil),
// elements.NewListEntry("This is list item 1", nil),
// elements.NewListEntry("This is list item 2", nil),
// elements.NewListEntry("This is list item 3", nil),
// elements.NewListEntry("This is list item 4", nil),
// elements.NewListEntry("This is list item 5", nil),
// elements.NewListEntry("This is list item 6", nil),
// elements.NewListEntry("This is list item 7", nil),
// elements.NewListEntry("This is list item 8", nil),
// elements.NewListEntry("This is list item 9", nil),
// elements.NewListEntry("This is list item 10", nil),
// elements.NewListEntry("This is list item 11", nil),
// elements.NewListEntry("This is list item 12", nil),
// elements.NewListEntry("This is list item 13", nil),
// elements.NewListEntry("This is list item 14", nil),
// elements.NewListEntry("This is list item 15", nil),
// elements.NewListEntry("This is list item 16", nil),
// elements.NewListEntry("This is list item 17", nil),
// elements.NewListEntry("This is list item 18", nil),
// elements.NewListEntry("This is list item 19", nil),
// elements.NewListEntry("This is list item 20", nil))
// list.Collapse(0, 32)
// scrollBar := elements.NewScrollBar(true)
// list.OnScrollBoundsChange (func () {
// scrollBar.SetBounds (
// list.ScrollContentBounds(),
// list.ScrollViewportBounds())
// })
// scrollBar.OnScroll (func (viewport image.Point) {
// list.ScrollTo(viewport)
// })
list := elements.NewList (
1,
elements.NewCell(elements.NewLabel("This is list item 0", false)),
elements.NewCell(elements.NewLabel("This is list item 1", false)),
elements.NewCell(elements.NewLabel("This is list item 2", false)),
elements.NewCell(elements.NewLabel("This is list item 3", false)),
elements.NewCell(elements.NewLabel("This is list item 4", false)),
elements.NewCell(elements.NewLabel("This is list item 5", false)),
elements.NewCell(elements.NewLabel("This is list item 6", false)),
elements.NewCell(elements.NewLabel("This is list item 7", false)),
elements.NewCell(elements.NewLabel("This is list item 8", false)),
elements.NewCell(elements.NewLabel("This is list item 9", false)),
elements.NewCell(elements.NewLabel("This is list item 10", false)),
elements.NewCell(elements.NewLabel("This is list item 11", false)),
elements.NewCell(elements.NewLabel("This is list item 12", false)),
elements.NewCell(elements.NewLabel("This is list item 13", false)),
elements.NewCell(elements.NewLabel("This is list item 14", false)),
elements.NewCell(elements.NewLabel("This is list item 15", false)),
elements.NewCell(elements.NewLabel("This is list item 16", false)),
elements.NewCell(elements.NewLabel("This is list item 17", false)),
elements.NewCell(elements.NewLabel("This is list item 18", false)),
elements.NewCell(elements.NewLabel("This is list item 19", false)),
elements.NewCell(elements.NewLabel("This is list item 20", false)))
list.Collapse(0, 32)
scrollBar := elements.NewScrollBar(true)
list.OnScrollBoundsChange (func () {
scrollBar.SetBounds (
list.ScrollContentBounds(),
list.ScrollViewportBounds())
})
scrollBar.OnScroll (func (viewport image.Point) {
list.ScrollTo(viewport)
})
container.Adopt(elements.NewLabel("A ScrollContainer:", false), false)
container.Adopt(elements.NewScroll(textBox, true, false), false)
// disconnectedContainer.Adopt(list, false)
disconnectedContainer.Adopt(list, false)
disconnectedContainer.Adopt (elements.NewLabel (
"Notice how the scroll bar to the right can be used to " +
"control the list, despite not even touching it. It is " +
"indeed a thing you can do. It is also terrible UI design so " +
"don't do it.", true), true)
// disconnectedContainer.Adopt(scrollBar, false)
disconnectedContainer.Adopt(scrollBar, false)
container.Adopt(disconnectedContainer, true)
window.OnClose(tomo.Stop)