ui/baseview.screenhandler.go
Maarten Heremans 864255113c Initial Commit
2024-03-30 17:45:07 +01:00

178 lines
4.3 KiB
Go

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
}