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 }