package ui import ( "embed" "strings" "time" "bitbucket.org/hevanto/ui/screen" "fyne.io/fyne/v2" "fyne.io/fyne/v2/data/binding" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" "github.com/nicksnyder/go-i18n/v2/i18n" ) func NewBaseViewWithScreen( concreteView View, filesystem embed.FS, screenName string, localizer *i18n.Localizer, controller Controller, ) *BaseView { v := NewBaseView(concreteView, controller) def, err := screen.New(filesystem, screenName, v) if err != nil { LogWindowError(v, LoadScreen, err) return nil } v.screenDefinition = def v.localizer = localizer v.screenElementMap = make(map[string]fyne.CanvasObject) v.listItemTemplates = make(map[string]func() fyne.CanvasObject) v.listDataItemRenderers = make(map[string]func(binding.DataItem, fyne.CanvasObject)) v.listItemRenderers = make(map[string]func(int, fyne.CanvasObject)) v.listLenghts = make(map[string]func() int) v.onSelectedHandlers = make(map[string]func(widget.ListItemID)) v.onUnselectedHandlers = make(map[string]func(widget.ListItemID)) v.onClickedHandlers = make(map[string]func()) v.onCheckChangedHandlers = make(map[string]func(bool)) v.onDateSelectedHandlers = make(map[string]func(time.Time)) return v } func (v *BaseView) RegisterElement(id string, elem fyne.CanvasObject) { v.screenElementMap[id] = elem } func (v *BaseView) RegisterListItemTemplate(name string, fn func() fyne.CanvasObject) { v.listItemTemplates[name] = fn } func (v *BaseView) RegisterListDataItemRenderer(name string, fn func(binding.DataItem, fyne.CanvasObject)) { v.listDataItemRenderers[name] = fn } func (v *BaseView) RegisterListItemRenderer(name string, fn func(int, fyne.CanvasObject)) { v.listItemRenderers[name] = fn } func (v *BaseView) RegisterListLength(name string, fn func() int) { v.listLenghts[name] = fn } func (v *BaseView) RegisterOnSelectedHandler(name string, fn func(widget.ListItemID)) { v.onSelectedHandlers[name] = fn } func (v *BaseView) RegisterOnUnselectedHandler(name string, fn func(widget.ListItemID)) { v.onUnselectedHandlers[name] = fn } func (v *BaseView) RegisterOnClickHandler(name string, fn func()) { v.onClickedHandlers[name] = fn } func (v *BaseView) RegisterOnCheckChangedHandler(name string, fn func(bool)) { v.onCheckChangedHandlers[name] = fn } func (v *BaseView) RegisterOnDateSelectedHandler(name string, fn func(time.Time)) { v.onDateSelectedHandlers[name] = fn } func (v *BaseView) GetElement(id string) fyne.CanvasObject { if elem, ok := v.screenElementMap[id]; ok { return elem } return nil } func (v *BaseView) GetLocalizer() *i18n.Localizer { return v.localizer } func (v *BaseView) GetIcon(iconName string) fyne.Resource { if strings.HasPrefix(iconName, "theme.") { iconName := strings.SplitN(iconName, ".", 2)[1] return theme.DefaultTheme().Icon(fyne.ThemeIconName(iconName)) } return nil } func (v *BaseView) GetBinding(bindingName string) binding.DataItem { return v.Ctrl.GetBinding(bindingName) } func (v *BaseView) GetListItemTemplate(name string) func() fyne.CanvasObject { fn, ok := v.listItemTemplates[name] if !ok { return nil } return fn } func (v *BaseView) GetListDataItemRenderer(name string) func(binding.DataItem, fyne.CanvasObject) { fn, ok := v.listDataItemRenderers[name] if !ok { return nil } return fn } func (v *BaseView) GetListItemRenderer(name string) func(int, fyne.CanvasObject) { fn, ok := v.listItemRenderers[name] if !ok { return nil } return fn } func (v *BaseView) GetListLength(name string) func() int { fn, ok := v.listLenghts[name] if !ok { return nil } return fn } func (v *BaseView) GetOnSelectedHandler(name string) func(widget.ListItemID) { fn, ok := v.onSelectedHandlers[name] if !ok { return nil } return fn } func (v *BaseView) GetOnUnselectedHandler(name string) func(widget.ListItemID) { fn, ok := v.onUnselectedHandlers[name] if !ok { return nil } return fn } func (v *BaseView) GetClickedHandler(name string) func() { fn, ok := v.onClickedHandlers[name] if !ok { return nil } return fn } func (v *BaseView) GetCheckChangedHandler(name string) func(bool) { fn, ok := v.onCheckChangedHandlers[name] if !ok { return nil } return fn } func (v *BaseView) GetDateSelectedHandler(name string) func(time.Time) { fn, ok := v.onDateSelectedHandlers[name] if !ok { return nil } return fn }