94 lines
1.9 KiB
Go
94 lines
1.9 KiB
Go
|
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
|
||
|
}
|