package screen import ( "fmt" "bitbucket.org/hevanto/i18n" "fyne.io/fyne/v2" ) type Size struct { Width float32 `yaml:"width"` Height float32 `yaml:"height"` } type Element struct { ID string `yaml:"id"` Container Container `yaml:"container"` Layout Layout `yaml:"layout"` Widget Widget `yaml:"widget"` // Border Layout Elements Top *Element `yaml:"top"` Bottom *Element `yaml:"bottom"` Left *Element `yaml:"left"` Right *Element `yaml:"right"` Center []*Element `yaml:"center"` // Other Layout Elements Children []*Element `yaml:"children"` Content *Element `yaml:"content"` // Form Element Label *Element `yaml:"label"` Field *Element `yaml:"field"` // Grid configuration Columns *int `yaml:"columns"` Rows *int `yaml:"rows"` RowColumns *int `yaml:"rowColumns"` ElementSize *Size `yaml:"elementSize"` // MinSize configuration MinSize *Size `yaml:"minSize"` // Widget Properties Text string `yaml:"text"` Localized bool `yaml:"localized"` Icon string `yaml:"icon"` Binding string `yaml:"binding"` Decorators []string `yaml:"decorators"` Options map[string]any `yaml:"options"` Disabled bool `yaml:"disabled"` Hidden bool `yaml:"hidden"` // Calendar Properties Time *string `yaml:"time"` TimeFormat *string `yaml:"timeFormat"` // List Properties ItemTemplate string `yaml:"itemTemplate"` ItemRenderer string `yaml:"itemRenderer"` ListLength string `yaml:"listLength"` // Check Properties Checked bool `yaml:"checked"` // Spacer Properties FixHorizontal bool `yaml:"fixHorizontal"` FixVertical bool `yaml:"fixVertical"` // Handlers OnClicked string `yaml:"onClicked"` OnUpClicked string `yaml:"onUpClicked"` OnDownClicked string `yaml:"onDownClicked"` OnChanged string `yaml:"onChanged"` OnSelected string `yaml:"onSelected"` OnUnselected string `yaml:"onUnselected"` OnDateSelected string `yaml:"onDateSelected"` } func (e *Element) BuildUI(s ScreenHandler) (obj fyne.CanvasObject, err error) { defer func() { if e.ID != "" && obj != nil { s.RegisterElement(e.ID, obj) } }() if e.Container != "" { if obj, err = e.Container.Build(e, s); err != nil { err = fmt.Errorf("failed to build container element: %w", err) return } return } if e.Layout != "" { if obj, err = e.Layout.Build(e, s); err != nil { err = fmt.Errorf("failed to build layout element: %w", err) return } return } if e.Widget != "" { if obj, err = e.Widget.Build(e, s); err != nil { err = fmt.Errorf("failed to build widget element: %w", err) return } return } return } func (e *Element) localize(s ScreenHandler) { if e.Localized { e.Text = i18n.T(s.GetLocalizer(), e.Text) } }