buildTree builds a gui object of type: Tree
(b *Builder, am map[string]interface{})
| 526 | |
| 527 | // buildTree builds a gui object of type: Tree |
| 528 | func 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 | } |
nothing calls this directly
no test coverage detected