ui/screen/container.go

94 lines
1.9 KiB
Go
Raw Normal View History

package screen
import (
"errors"
"fmt"
"bitbucket.org/hevanto/ui/uiwidget"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
)
type Container string
const (
HScroll Container = "HScroll"
Scroll Container = "Scroll"
VScroll Container = "VScroll"
)
func (cnt Container) Build(e *Element, s ScreenHandler) (c fyne.CanvasObject, err error) {
switch cnt {
case HScroll:
c, err = cnt.buildHScrollContainer(e, s)
case Scroll:
c, err = cnt.buildScrollContainer(e, s)
case VScroll:
c, err = cnt.buildVScrollContainer(e, s)
default:
err = errors.New("invalid container")
}
if err != nil {
return
}
if e.Decorators != nil {
for _, dec := range e.Decorators {
switch dec {
case "Border":
c = uiwidget.NewWidgetBorder(c)
}
}
}
if e.Hidden {
c.Hide()
}
return
}
func (ctn Container) buildHScrollContainer(e *Element, s ScreenHandler) (c fyne.CanvasObject, err error) {
if e.Content == nil {
err = errors.New("HScroll: no content defined")
return
}
content, err := e.Content.BuildUI(s)
if err != nil {
err = fmt.Errorf("HScroll: failed to build content: %w", err)
return
}
c = container.NewHScroll(content)
return
}
func (ctn Container) buildScrollContainer(e *Element, s ScreenHandler) (c fyne.CanvasObject, err error) {
if e.Content == nil {
err = errors.New("Scroll: no content defined")
return
}
content, err := e.Content.BuildUI(s)
if err != nil {
err = fmt.Errorf("Scroll: failed to build content: %w", err)
return
}
c = container.NewScroll(content)
return
}
func (ctn Container) buildVScrollContainer(e *Element, s ScreenHandler) (c fyne.CanvasObject, err error) {
if e.Content == nil {
err = errors.New("VScroll: no content defined")
return
}
content, err := e.Content.BuildUI(s)
if err != nil {
err = fmt.Errorf("VScroll: failed to build content: %w", err)
return
}
c = container.NewScroll(content)
return
}