<?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:jface" xmlns:log="jelly:log">

  <applicationWindow var="mainapp" title="Welcome to the JFace Demo">

        <menuManager text="File">
            <action text="Test">
                <log:info> Very Nice !!!</log:info>
            </action>
            <separator />
            
            <action text="Check me" checked="true">
                <log:info>I've been checked</log:info>
            </action>
        </menuManager>
        
        <menuManager text="Edit">
            <action text="Say Hi Statusbar">
                  ${mainapp.setStatus('Hello ...')} 
            </action>
        </menuManager>
    
        <fillLayout type="vertical"/>    
    
        <label text="A big red label 1" background="204, 0, 0"/>
        <label text="I can barelly read this ;-(" foreground="#f2f2f2" />
        <label text="It sure looks like the dutch flag ;-)" foreground="#ffffff" background="0, 0, 153" />        
    
  </applicationWindow>
  
  ${mainapp.MenuBarManager.updateAll(true)} 
  ${mainapp.getShell().pack()}
  ${mainapp.open()}


</j:jelly>
