178 lines
4.3 KiB
Go
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
|
|
}
|