Skip to content

Commit

Permalink
allow for TObject in item renderer data
Browse files Browse the repository at this point in the history
ianharrigan committed Mar 27, 2024
1 parent 8231e44 commit 2eb342d
Showing 1 changed file with 30 additions and 18 deletions.
48 changes: 30 additions & 18 deletions haxe/ui/core/ItemRenderer.hx
Original file line number Diff line number Diff line change
@@ -229,25 +229,14 @@ class ItemRenderer extends Box {
}
var c:Component = findComponent(componentId, null, true);
if (c != null && v != null) {
var typeInfo = TypeMap.getTypeInfo(c.className, property);
var propValue = TypeConverter.convertTo(v, typeInfo);
if (property == "value") {
c.value = propValue;
} else if (typeInfo == "variant") {
Reflect.setProperty(c, property, Variant.fromDynamic(v));
} else {
Reflect.setProperty(c, property, v);
}

if (autoRegisterInteractiveEvents) {
if ((c is InteractiveComponent) || (c is ItemRenderer)) {
if (c.hasEvent(UIEvent.CHANGE, onItemChange) == false) {
c.registerEvent(UIEvent.CHANGE, onItemChange);
switch (Type.typeof(v)) {
case TObject:
for (valueField in Reflect.fields(v)) {
var valueFieldValue = Reflect.field(v, valueField);
setComponentProperty(c, valueFieldValue, valueField);
}
if (c.hasEvent(MouseEvent.CLICK, onItemClick) == false) {
c.registerEvent(MouseEvent.CLICK, onItemClick);
}
}
case _:
setComponentProperty(c, v, property);
}

c.show();
@@ -262,4 +251,27 @@ class ItemRenderer extends Box {
}
}
}

private function setComponentProperty(c:Component, v:Any, property:String) {
var typeInfo = TypeMap.getTypeInfo(c.className, property);
var propValue = TypeConverter.convertTo(v, typeInfo);
if (property == "value") {
c.value = propValue;
} else if (typeInfo == "variant") {
Reflect.setProperty(c, property, Variant.fromDynamic(v));
} else {
Reflect.setProperty(c, property, v);
}

if (autoRegisterInteractiveEvents) {
if ((c is InteractiveComponent) || (c is ItemRenderer)) {
if (c.hasEvent(UIEvent.CHANGE, onItemChange) == false) {
c.registerEvent(UIEvent.CHANGE, onItemChange);
}
if (c.hasEvent(MouseEvent.CLICK, onItemClick) == false) {
c.registerEvent(MouseEvent.CLICK, onItemClick);
}
}
}
}
}

0 comments on commit 2eb342d

Please sign in to comment.