From e94d766394e996b95aec29652705b689fef01703 Mon Sep 17 00:00:00 2001 From: Ian Harrigan Date: Sun, 4 Aug 2024 08:37:15 +0200 Subject: [PATCH] findNode / findNodes in TreeView --- haxe/ui/containers/TreeView.hx | 24 ++++++++++++++++ haxe/ui/containers/TreeViewNode.hx | 46 ++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/haxe/ui/containers/TreeView.hx b/haxe/ui/containers/TreeView.hx index df7f81625..83dc48117 100644 --- a/haxe/ui/containers/TreeView.hx +++ b/haxe/ui/containers/TreeView.hx @@ -95,6 +95,30 @@ class TreeView extends ScrollView implements IDataComponent { return value; } + public function findNodes(fieldValue:Any, fieldName:String = null):Array { + var foundNodes = []; + for (child in getNodes()) { + var childNodesFound = child.findNodes(fieldValue, fieldName); + if (childNodesFound != null && childNodesFound.length > 0) { + foundNodes = foundNodes.concat(childNodesFound); + } + } + return foundNodes; + } + + public function findNode(fieldValue:Any, fieldName:String = null):TreeViewNode { + var foundNode = null; + + for (child in getNodes()) { + foundNode = child.findNode(fieldValue, fieldName); + if (foundNode != null) { + break; + } + } + + return foundNode; + } + public function findNodeByPath(path:String, field:String = null):TreeViewNode { var foundNode = null; diff --git a/haxe/ui/containers/TreeViewNode.hx b/haxe/ui/containers/TreeViewNode.hx index 3251d7836..dfddf1de1 100644 --- a/haxe/ui/containers/TreeViewNode.hx +++ b/haxe/ui/containers/TreeViewNode.hx @@ -52,6 +52,52 @@ class TreeViewNode extends VBox { return parts.join("/"); } + public function findNodes(fieldValue:Any, fieldName:String = null):Array { + if (fieldName == null) { // lets try to guess a field to use + fieldName = "text"; + } + + var foundNodes = []; + if (Reflect.hasField(this.data, fieldName)) { + var nodeFieldValue = Reflect.field(this.data, fieldName); + if (nodeFieldValue == fieldValue) { + foundNodes.push(this); + } + } + + for (child in getNodes()) { + var childNodesFound = child.findNodes(fieldValue, fieldName); + if (childNodesFound != null && childNodesFound.length > 0) { + foundNodes = foundNodes.concat(childNodesFound); + } + } + + return foundNodes; + } + + public function findNode(fieldValue:Any, fieldName:String = null):TreeViewNode { + if (fieldName == null) { // lets try to guess a field to use + fieldName = "text"; + } + + if (Reflect.hasField(this.data, fieldName)) { + var nodeFieldValue = Reflect.field(this.data, fieldName); + if (nodeFieldValue == fieldValue) { + return this; + } + } + + var foundNode = null; + for (child in getNodes()) { + foundNode = child.findNode(fieldValue, fieldName); + if (foundNode != null) { + break; + } + } + + return foundNode; + } + public function findNodeByPath(path:String, field:String = null):TreeViewNode { var foundNode = null;