MCPcopy
hub / github.com/g3n/engine / buildTree

Function buildTree

gui/builder_panel.go:528–593  ·  view source on GitHub ↗

buildTree builds a gui object of type: Tree

(b *Builder, am map[string]interface{})

Source from the content-addressed store, hash-verified

526
527// buildTree builds a gui object of type: Tree
528func buildTree(b *Builder, am map[string]interface{}) (IPanel, error) {
529
530 // Builds tree and sets its common attributes
531 tree := NewTree(0, 0)
532 err := b.SetAttribs(am, tree)
533 if err != nil {
534 return nil, err
535 }
536
537 // Internal function to build tree nodes recursively
538 var buildItems func(am map[string]interface{}, pnode *TreeNode) error
539 buildItems = func(am map[string]interface{}, pnode *TreeNode) error {
540
541 v := am[AttribItems]
542 if v == nil {
543 return nil
544 }
545 items := v.([]map[string]interface{})
546
547 for i := 0; i < len(items); i++ {
548 // Get the item type
549 item := items[i]
550 itype := ""
551 if v := item[AttribType]; v != nil {
552 itype = v.(string)
553 }
554 itext := ""
555 if v := item[AttribText]; v != nil {
556 itext = v.(string)
557 }
558
559 // Item is a tree node
560 if itype == "" || itype == TypeTreeNode {
561 var node *TreeNode
562 if pnode == nil {
563 node = tree.AddNode(itext)
564 } else {
565 node = pnode.AddNode(itext)
566 }
567 err := buildItems(item, node)
568 if err != nil {
569 return err
570 }
571 continue
572 }
573 // Other controls
574 ipan, err := b.build(item, nil)
575 if err != nil {
576 return err
577 }
578 if pnode == nil {
579 tree.Add(ipan)
580 } else {
581 pnode.Add(ipan)
582 }
583 }
584 return nil
585 }

Callers

nothing calls this directly

Calls 5

AddNodeMethod · 0.95
AddMethod · 0.95
NewTreeFunction · 0.85
SetAttribsMethod · 0.80
buildMethod · 0.80

Tested by

no test coverage detected