<?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:swing" 
    xmlns:log="jelly:log">

    <!-- lets create the model -->
    <j:useList var="list" items="${context.getVariableNames()}"/>

    <log:info>Created list ${list}</log:info>
        
    <!-- create the dialog -->
    <dialog var="dialog" size="400,150" location="200,200" title="Variables">
        <scrollPane>
          <table>
                <tableModel rows="${list}">
                    <tableModelColumn headerValue="ID" value="${rowIndex}"/>
                    <tableModelColumn headerValue="Name" value="${row}"/>
                    <tableModelColumn headerValue="Value" value="${context.getVariable(row)}"/>
                    <tableModelColumn headerValue="Type" value="${context.getVariable(row).getClass().getName()}"/>
                </tableModel>
        </table>
    </scrollPane>
    </dialog>

    ${dialog.setVisible(true)}

</j:jelly>



