mirror of https://github.com/anoshenko/rui.git
Added Properties iterator to DataObject
This commit is contained in:
parent
90b1d44597
commit
86f3f4c731
|
@ -245,8 +245,7 @@ func parseAnimation(obj DataObject) AnimationProperty {
|
|||
animation := new(animationData)
|
||||
animation.init()
|
||||
|
||||
for i := range obj.PropertyCount() {
|
||||
if node := obj.Property(i); node != nil {
|
||||
for node := range obj.Properties() {
|
||||
tag := PropertyName(node.Tag())
|
||||
if node.Type() == TextNode {
|
||||
animation.Set(tag, node.Text())
|
||||
|
@ -254,7 +253,6 @@ func parseAnimation(obj DataObject) AnimationProperty {
|
|||
animation.Set(tag, node)
|
||||
}
|
||||
}
|
||||
}
|
||||
return animation
|
||||
}
|
||||
|
||||
|
@ -493,8 +491,8 @@ func animationSet(properties Properties, tag PropertyName, value any) []Property
|
|||
case DataNode:
|
||||
parseObject := func(obj DataObject) (AnimatedProperty, bool) {
|
||||
result := AnimatedProperty{}
|
||||
for i := range obj.PropertyCount() {
|
||||
if node := obj.Property(i); node.Type() == TextNode {
|
||||
for node := range obj.Properties() {
|
||||
if node.Type() == TextNode {
|
||||
propTag := strings.ToLower(node.Tag())
|
||||
switch propTag {
|
||||
case "from", "0", "0%":
|
||||
|
|
|
@ -66,9 +66,8 @@ func createBackground(obj DataObject) BackgroundElement {
|
|||
return nil
|
||||
}
|
||||
|
||||
count := obj.PropertyCount()
|
||||
for i := range count {
|
||||
if node := obj.Property(i); node.Type() == TextNode {
|
||||
for node := range obj.Properties() {
|
||||
if node.Type() == TextNode {
|
||||
if value := node.Text(); value != "" {
|
||||
result.Set(PropertyName(node.Tag()), value)
|
||||
}
|
||||
|
|
|
@ -436,8 +436,7 @@ func (border *borderProperty) String() string {
|
|||
|
||||
func (border *borderProperty) setBorderObject(obj DataObject) bool {
|
||||
result := true
|
||||
for i := range obj.PropertyCount() {
|
||||
if node := obj.Property(i); node != nil {
|
||||
for node := range obj.Properties() {
|
||||
tag := PropertyName(node.Tag())
|
||||
switch node.Type() {
|
||||
case TextNode:
|
||||
|
@ -453,9 +452,6 @@ func (border *borderProperty) setBorderObject(obj DataObject) bool {
|
|||
default:
|
||||
result = false
|
||||
}
|
||||
} else {
|
||||
result = false
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
|
18
data.go
18
data.go
|
@ -3,6 +3,7 @@ package rui
|
|||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"iter"
|
||||
"slices"
|
||||
"strings"
|
||||
"unicode"
|
||||
|
@ -27,6 +28,9 @@ type DataObject interface {
|
|||
// Tag returns data object tag
|
||||
Tag() string
|
||||
|
||||
// Properties() returns an iterator to access the properties
|
||||
Properties() iter.Seq[DataNode]
|
||||
|
||||
// PropertyCount returns properties count
|
||||
PropertyCount() int
|
||||
|
||||
|
@ -142,6 +146,16 @@ func (object *dataObject) Tag() string {
|
|||
return object.tag
|
||||
}
|
||||
|
||||
func (object *dataObject) Properties() iter.Seq[DataNode] {
|
||||
return func(yield func(DataNode) bool) {
|
||||
for _, node := range object.property {
|
||||
if !yield(node) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (object *dataObject) PropertyCount() int {
|
||||
if object.property != nil {
|
||||
return len(object.property)
|
||||
|
@ -231,10 +245,14 @@ func (object *dataObject) SetPropertyValue(tag, value string) {
|
|||
|
||||
// SetPropertyObject - set a property with tag by object
|
||||
func (object *dataObject) SetPropertyObject(tag string, obj DataObject) {
|
||||
if obj != nil {
|
||||
node := new(dataNode)
|
||||
node.tag = tag
|
||||
node.value = obj
|
||||
object.setNode(node)
|
||||
} else {
|
||||
object.RemovePropertyByTag(tag)
|
||||
}
|
||||
}
|
||||
|
||||
func (object *dataObject) ToParams() Params {
|
||||
|
|
|
@ -159,8 +159,7 @@ func NewFilterProperty(params Params) FilterProperty {
|
|||
func newFilterProperty(obj DataObject) FilterProperty {
|
||||
filter := new(filterData)
|
||||
filter.init()
|
||||
for i := range obj.PropertyCount() {
|
||||
if node := obj.Property(i); node != nil {
|
||||
for node := range obj.Properties() {
|
||||
tag := node.Tag()
|
||||
switch node.Type() {
|
||||
case TextNode:
|
||||
|
@ -177,7 +176,6 @@ func newFilterProperty(obj DataObject) FilterProperty {
|
|||
ErrorLog(`Invalid value of "` + tag + `"`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(filter.properties) > 0 {
|
||||
return filter
|
||||
|
|
|
@ -118,9 +118,7 @@ func (properties *propertyList) writeToBuffer(buffer *strings.Builder,
|
|||
}
|
||||
|
||||
func parseProperties(properties Properties, object DataObject) {
|
||||
count := object.PropertyCount()
|
||||
for i := range count {
|
||||
if node := object.Property(i); node != nil {
|
||||
for node := range object.Properties() {
|
||||
switch node.Type() {
|
||||
case TextNode:
|
||||
properties.Set(PropertyName(node.Tag()), node.Text())
|
||||
|
@ -133,7 +131,6 @@ func parseProperties(properties Properties, object DataObject) {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func propertiesGet(properties Properties, tag PropertyName) any {
|
||||
return properties.getRaw(tag)
|
||||
|
|
|
@ -735,8 +735,8 @@ func (session *sessionData) handleSessionInfo(params DataObject) {
|
|||
|
||||
if node := params.PropertyByTag("storage"); node != nil && node.Type() == ObjectNode {
|
||||
if obj := node.Object(); obj != nil {
|
||||
for i := range obj.PropertyCount() {
|
||||
if element := obj.Property(i); element.Type() == TextNode {
|
||||
for element := range obj.Properties() {
|
||||
if element.Type() == TextNode {
|
||||
session.clientStorage[element.Tag()] = element.Text()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,8 +62,8 @@ func loadStringResources(text string) {
|
|||
table = map[string]string{}
|
||||
}
|
||||
|
||||
for i := range obj.PropertyCount() {
|
||||
if prop := obj.Property(i); prop != nil && prop.Type() == TextNode {
|
||||
for prop := range obj.Properties() {
|
||||
if prop.Type() == TextNode {
|
||||
table[prop.Tag()] = prop.Text()
|
||||
}
|
||||
}
|
||||
|
@ -73,8 +73,8 @@ func loadStringResources(text string) {
|
|||
|
||||
tag := data.Tag()
|
||||
if tag == "strings" {
|
||||
for i := range data.PropertyCount() {
|
||||
if prop := data.Property(i); prop != nil && prop.Type() == ObjectNode {
|
||||
for prop := range data.Properties() {
|
||||
if prop.Type() == ObjectNode {
|
||||
parseStrings(prop.Object(), prop.Tag())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -731,8 +731,8 @@ func (table *tableViewData) setFunc(tag PropertyName, value any) []PropertyName
|
|||
|
||||
case DataObject:
|
||||
params := Params{}
|
||||
for k := range value.PropertyCount() {
|
||||
if prop := value.Property(k); prop != nil && prop.Type() == TextNode {
|
||||
for prop := range value.Properties() {
|
||||
if prop.Type() == TextNode {
|
||||
params[PropertyName(prop.Tag())] = prop.Text()
|
||||
}
|
||||
}
|
||||
|
|
40
theme.go
40
theme.go
|
@ -694,12 +694,9 @@ func (theme *theme) addText(themeText string) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
count := data.PropertyCount()
|
||||
|
||||
objToStyle := func(obj DataObject) ViewStyle {
|
||||
params := Params{}
|
||||
for i := range obj.PropertyCount() {
|
||||
if node := obj.Property(i); node != nil {
|
||||
for node := range obj.Properties() {
|
||||
switch node.Type() {
|
||||
case ArrayNode:
|
||||
params[PropertyName(node.Tag())] = node.ArrayElements()
|
||||
|
@ -711,19 +708,16 @@ func (theme *theme) addText(themeText string) bool {
|
|||
params[PropertyName(node.Tag())] = node.Text()
|
||||
}
|
||||
}
|
||||
}
|
||||
return NewViewStyle(params)
|
||||
}
|
||||
|
||||
for i := range count {
|
||||
if d := data.Property(i); d != nil {
|
||||
for d := range data.Properties() {
|
||||
switch tag := d.Tag(); tag {
|
||||
case "constants":
|
||||
if d.Type() == ObjectNode {
|
||||
if obj := d.Object(); obj != nil {
|
||||
objCount := obj.PropertyCount()
|
||||
for k := range objCount {
|
||||
if prop := obj.Property(k); prop != nil && prop.Type() == TextNode {
|
||||
for prop := range obj.Properties() {
|
||||
if prop.Type() == TextNode {
|
||||
theme.constants[prop.Tag()] = prop.Text()
|
||||
}
|
||||
}
|
||||
|
@ -733,9 +727,8 @@ func (theme *theme) addText(themeText string) bool {
|
|||
case "constants:touch":
|
||||
if d.Type() == ObjectNode {
|
||||
if obj := d.Object(); obj != nil {
|
||||
objCount := obj.PropertyCount()
|
||||
for k := range objCount {
|
||||
if prop := obj.Property(k); prop != nil && prop.Type() == TextNode {
|
||||
for prop := range obj.Properties() {
|
||||
if prop.Type() == TextNode {
|
||||
theme.touchConstants[prop.Tag()] = prop.Text()
|
||||
}
|
||||
}
|
||||
|
@ -745,9 +738,8 @@ func (theme *theme) addText(themeText string) bool {
|
|||
case "colors":
|
||||
if d.Type() == ObjectNode {
|
||||
if obj := d.Object(); obj != nil {
|
||||
objCount := obj.PropertyCount()
|
||||
for k := range objCount {
|
||||
if prop := obj.Property(k); prop != nil && prop.Type() == TextNode {
|
||||
for prop := range obj.Properties() {
|
||||
if prop.Type() == TextNode {
|
||||
theme.colors[prop.Tag()] = prop.Text()
|
||||
}
|
||||
}
|
||||
|
@ -757,9 +749,8 @@ func (theme *theme) addText(themeText string) bool {
|
|||
case "colors:dark":
|
||||
if d.Type() == ObjectNode {
|
||||
if obj := d.Object(); obj != nil {
|
||||
objCount := obj.PropertyCount()
|
||||
for k := range objCount {
|
||||
if prop := obj.Property(k); prop != nil && prop.Type() == TextNode {
|
||||
for prop := range obj.Properties() {
|
||||
if prop.Type() == TextNode {
|
||||
theme.darkColors[prop.Tag()] = prop.Text()
|
||||
}
|
||||
}
|
||||
|
@ -769,9 +760,8 @@ func (theme *theme) addText(themeText string) bool {
|
|||
case "images":
|
||||
if d.Type() == ObjectNode {
|
||||
if obj := d.Object(); obj != nil {
|
||||
objCount := obj.PropertyCount()
|
||||
for k := range objCount {
|
||||
if prop := obj.Property(k); prop != nil && prop.Type() == TextNode {
|
||||
for prop := range obj.Properties() {
|
||||
if prop.Type() == TextNode {
|
||||
theme.images[prop.Tag()] = prop.Text()
|
||||
}
|
||||
}
|
||||
|
@ -781,9 +771,8 @@ func (theme *theme) addText(themeText string) bool {
|
|||
case "images:dark":
|
||||
if d.Type() == ObjectNode {
|
||||
if obj := d.Object(); obj != nil {
|
||||
objCount := obj.PropertyCount()
|
||||
for k := range objCount {
|
||||
if prop := obj.Property(k); prop != nil && prop.Type() == TextNode {
|
||||
for prop := range obj.Properties() {
|
||||
if prop.Type() == TextNode {
|
||||
theme.darkImages[prop.Tag()] = prop.Text()
|
||||
}
|
||||
}
|
||||
|
@ -818,7 +807,6 @@ func (theme *theme) addText(themeText string) bool {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
theme.sortMediaStyles()
|
||||
return true
|
||||
|
|
|
@ -352,8 +352,8 @@ func valueToTransformProperty(value any) TransformProperty {
|
|||
parseObject := func(obj DataObject) TransformProperty {
|
||||
transform := NewTransformProperty(nil)
|
||||
ok := true
|
||||
for i := range obj.PropertyCount() {
|
||||
if prop := obj.Property(i); prop.Type() == TextNode {
|
||||
for prop := range obj.Properties() {
|
||||
if prop.Type() == TextNode {
|
||||
if !transform.Set(PropertyName(prop.Tag()), prop.Text()) {
|
||||
ok = false
|
||||
}
|
||||
|
|
7
view.go
7
view.go
|
@ -371,8 +371,7 @@ func (view *viewData) setFunc(tag PropertyName, value any) []PropertyName {
|
|||
case changeListeners:
|
||||
switch value := value.(type) {
|
||||
case DataObject:
|
||||
for i := range value.PropertyCount() {
|
||||
node := value.Property(i)
|
||||
for node := range value.Properties() {
|
||||
if node.Type() == TextNode {
|
||||
if text := node.Text(); text != "" {
|
||||
view.changeListener[PropertyName(node.Tag())] = newOneArgListenerBinding[View, PropertyName](text)
|
||||
|
@ -496,9 +495,7 @@ func (view *viewData) setFunc(tag PropertyName, value any) []PropertyName {
|
|||
|
||||
case DataObject:
|
||||
data := map[string]string{}
|
||||
count := value.PropertyCount()
|
||||
for i := range count {
|
||||
node := value.Property(i)
|
||||
for node := range value.Properties() {
|
||||
if node.Type() == TextNode {
|
||||
data[node.Tag()] = node.Text()
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue