<?xml version="1.0"?>
<!--
  Copyright 2002-2004 The Apache Software Foundation

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<j:jelly xmlns:j="jelly:core" xmlns="jelly:swt" xmlns:log="jelly:log">

  <shell text="TableTree Demo" var="subShell" style="border, close, min, max, resize, title">
      
      <gridLayout/>

        <tableTree toolTipText="This is a table tree!" style="multi, full_selection">
            
            <gridData style="fill_both"/>
            
            <!-- we'd normally use some Java bean model to implement the next bit -->
            <tableTreeItem var="row">
                    ${row.setText('A')}
                    ${row.setText(0, 'James')}
                    ${row.setText(1, '33')}
                <tableTreeItem>
                    ${row.setText('B')}
                    ${row.setText(0, 'Child')}
                    ${row.setText(1, '2')}
                </tableTreeItem>
                
                <tableTreeItem>
                    ${row.setText(0, 'Child-nosettext')}
                    ${row.setText(1, '2')}
                </tableTreeItem>
                
                <tableTreeItem var="row">
                    ${row.setText('C')}
                    ${row.setText(0, 'Bob')}
                    ${row.setText(1, '30')}

                    <tableTreeItem var="row">
                        ${row.setText('C')}
                    </tableTreeItem>

                </tableTreeItem>
            </tableTreeItem>
                            
        </tableTree>
  </shell>

    ${subShell.open()}
</j:jelly>
