forked from mbk-lab/rui_orig
2
0
Fork 0
rui/listAdapter.go

84 lines
1.8 KiB
Go
Raw Normal View History

2021-09-07 17:36:50 +03:00
package rui
// ListAdapter - the list data source
type ListAdapter interface {
ListSize() int
ListItem(index int, session Session) View
IsListItemEnabled(index int) bool
}
type textListAdapter struct {
items []string
views []View
params Params
}
type viewListAdapter struct {
items []View
}
// NewTextListAdapter create the new ListAdapter for a string list displaying. The second argument is parameters of a TextView item
func NewTextListAdapter(items []string, params Params) ListAdapter {
if items == nil {
return nil
}
adapter := new(textListAdapter)
adapter.items = items
if params != nil {
adapter.params = params
} else {
adapter.params = Params{}
}
adapter.views = make([]View, len(items))
return adapter
}
// NewTextListAdapter create the new ListAdapter for a view list displaying
func NewViewListAdapter(items []View) ListAdapter {
if items != nil {
adapter := new(viewListAdapter)
adapter.items = items
return adapter
}
return nil
}
func (adapter *textListAdapter) ListSize() int {
return len(adapter.items)
}
func (adapter *textListAdapter) ListItem(index int, session Session) View {
if index < 0 || index >= len(adapter.items) {
return nil
}
if adapter.views[index] == nil {
adapter.params[Text] = adapter.items[index]
adapter.views[index] = NewTextView(session, adapter.params)
}
return adapter.views[index]
}
func (adapter *textListAdapter) IsListItemEnabled(index int) bool {
return true
}
func (adapter *viewListAdapter) ListSize() int {
return len(adapter.items)
}
func (adapter *viewListAdapter) ListItem(index int, session Session) View {
if index >= 0 && index < len(adapter.items) {
return adapter.items[index]
}
return nil
}
func (adapter *viewListAdapter) IsListItemEnabled(index int) bool {
if index >= 0 && index < len(adapter.items) {
return !IsDisabled(adapter.items[index])
}
return true
}