<?xml version="1.0"?>
<!DOCTYPE uiml PUBLIC "-//Harmonia//DTD UIML 2.0 Draft//EN" "http://uiml.org/dtds/UIML2_0e.dtd">

<uiml>
  <head>
    <meta name="Purpose" content="Simple Calculator"/>
    <meta name="Author" content="Constantinos Phanouriou"/>
    <meta name="Description" content="Phd Dissertation: Appendix B4"/>
  </head>

  <interface name="Simple_Calculator">
    <structure name="JavaJFC">
      <part name="TopWin" class="Frame">
        <part name="FirstNumber"  class="TextField"/>
        <part name="Operation"    class="TextField"/>
        <part name="SecondNumber" class="TextField"/>
        <part name="Equal"        class="Button"/>
        <part name="Result"       class="Label"/>
      </part>
    </structure>

    <style name="JavaJFC">
      <property name="title" part-name="TopWin">Simple Calculator</property>
      <property name="layout" part-name="TopWin">java.awt.FlowLayout</property>
      <property name="label" part-name="Equal">=</property>
      <property name="text" part-name="Result">0.</property>
      <property name="columns" part-class="TextField">5</property>
    </style>

    <behavior name="JavaJFC">
      <rule>
        <condition>
          <event class="actionPerformed" part-name="Equal"/>
        </condition>
        <action>
          <!-- Record First number -->
          <call name="CalcFunc.recordNumber">
            <param name="newVal"><property name="text" 
               part-name="FirstNumber"/></param>
          </call>

          <!-- Record Operation  -->
          <call name="CalcFunc.recordOperation">
            <param name="newVal"><property name="text" 
               part-name="Operation"/></param>
          </call>

          <!-- Record Second number -->
          <call name="CalcFunc.recordNumber">
            <param name="newVal"><property name="text" 
               part-name="SecondNumber"/></param>
          </call>

          <!-- Do the calculations -->
          <property name="text" part-name="Result"
              ><call name="CalcFunc.calculateResult"
          /></property>
        </action>
      </rule>
    </behavior>
  </interface>

  <peers>
    <logic>
      <d-component name="CalcFunc" maps-to="CalcFunc">
        <d-method name="recordNumber" return-type="string" 
            maps-to="recordNumber">
          <d-param name="newVal"/>
        </d-method>
        <d-method name="recordOperation" maps-to="recordOperation">
          <d-param name="newVal"/>
        </d-method>
        <d-method name="recordSign" return-type="string" 
            maps-to="recordSign"/>
        <d-method name="calculateResult" return-type="string" 
            maps-to="calculateResult"/>
      </d-component>
    </logic>
  </peers>

</uiml>
