[stringtemplate-interest] Tree of objects

Terence Parr parrt at cs.usfca.edu
Mon Jan 17 19:17:50 PST 2011


I will add to Collin's excellent note that you should probably traverse in the model not the view. :)
Ter
On Jan 17, 2011, at 6:35 PM, Collin Fagan wrote:

> Ahh that's because trees are notorious for requiring recursive algorithms for traversal. 
> 
> Luckily StringTemplate supports recursion. 
> 
> Here I have a simple template that takes a node object.
> 
> main(node) ::= <<
> 
> I am node: $node.index$
> I have children: 
>     $node.children:main()$
> >>
> 
> Here the template main actually contains a call to main. Crazy huh? So say I have a node class that has a list of other node classes as children. 
> 
> Node root = new Node();
> root.getChildren().add(new Node());
> root.getChildren().add(new Node());
>         
> Node child = new Node();
> child.getChildren().add(new Node());
> child.getChildren().add(new Node());
>         
> root.getChildren().add(child);
>         
> root.getChildren().add(new Node());
> root.getChildren().add(new Node());
> 
> You can add as many nodes in whatever configurations you want (as long as you don't make a loop) and the recursion should do all the magic. 
> Here it the output from the above template. 
> 
> I am node: 0
> I have children: 
>     I am node: 1
>     I have children: 
>     I am node: 2
>     I have children: 
>     I am node: 3
>     I have children: 
>         I am node: 4
>         I have children: 
>         I am node: 5
>         I have children: 
> 
>     I am node: 6
>     I have children: 
>     I am node: 7
>     I have children: 
> 
> 
> I hope this was enough information to help. 
> 
> Collin
> 
> 
> On Mon, Jan 17, 2011 at 9:16 AM, Peter Knego <peter at knego.net> wrote:
> Hi,
> 
> I'm a newbie, so please bare with me. I read the docs and searched the
> mailinglist but could not find an appropriate answer.
> 
> I have a tree of objects that represent a GUI hierarchy. Classes used
> are children of either ViewGroup or View. ViewGroup is a parent of
> View. ViewGroup is a container that holds a list other ViewGroups (and
> Views, since they are children of ViewGroup). Views are edge nodes
> that represent visual elements (buttons, etc..).
> 
> This object tree is built dynamically at run-time. The depth of the
> tree can vary, usually it's 3-4 levels deep.
> 
> I'd like to use ST to create HTML based on the object tree. What
> baffles me is how to support non-fixed depth of this tree, which
> happens because ViewGroup can contain other ViewGroups.
> 
> Simplified example:
> 
> class Div{
>    public List<Div> subDivs;
> }
> 
> Please suggest how this can be solved? Is there any example you can
> point me to? I read that ST templates can be called recursively (for
> handling ViewGroups containg itself), but how do I pass the right
> object reference to it?
> 
> Thanks for your help,
> 
> Peter Knego
> _______________________________________________
> stringtemplate-interest mailing list
> stringtemplate-interest at antlr.org
> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
> 
> _______________________________________________
> stringtemplate-interest mailing list
> stringtemplate-interest at antlr.org
> http://www.antlr.org/mailman/listinfo/stringtemplate-interest

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/stringtemplate-interest/attachments/20110117/a120a8e5/attachment-0001.html 


More information about the stringtemplate-interest mailing list