<?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="Calculator"/>
    <meta name="Author" content="Constantinos Phanouriou"/>
    <meta name="Description" content="Phd Dissertation: Appendix B3"/>
  </head>

  <interface name="Calculator">
    <structure name="JavaJFC">
      <part name="Calc_Win" class="JFrame">
        <part name="Calc_Area" class="JPanel">
          <part name="Calc_Results" class="JTextField"/>
          <part name="Calc_Buttons" class="JPanel">
            <part name="Calc_7" class="JButton"/>
            <part name="Calc_8" class="JButton"/>
            <part name="Calc_9" class="JButton"/>
            <part name="Calc_div" class="JButton"/>
            <part name="Calc_4" class="JButton"/>
            <part name="Calc_5" class="JButton"/>
            <part name="Calc_6" class="JButton"/>
            <part name="Calc_mult" class="JButton"/>
            <part name="Calc_1" class="JButton"/>
            <part name="Calc_2" class="JButton"/>
            <part name="Calc_3" class="JButton"/>
            <part name="Calc_minus" class="JButton"/>
            <part name="Calc_0" class="JButton"/>
            <part name="Calc_sign" class="JButton"/>
            <part name="Calc_equal" class="JButton"/>
            <part name="Calc_plus" class="JButton"/>
          </part>
        </part>
      </part>
    </structure>

    <style name="JavaJFC">
      <property part-name="Calc_Win"  name="title">Calculator</property>
      <property part-name="Calc_Win"  name="resizable">false</property>
      <property part-name="Calc_Win"  name="layout">java.awt.BorderLayout</property>
      <property part-name="Calc_Area"  name="layout">java.awt.BorderLayout</property>
      <property part-name="Calc_Area"  name="borderAlignment">Center</property>
      <property part-name="Calc_Buttons"  name="layout">java.awt.GridLayout</property>
      <property part-name="Calc_Buttons"  name="layout_rows">4</property>
      <property part-name="Calc_Buttons"  name="borderAlignment">Center</property>
      <property part-name="Calc_Results"  name="borderAlignment">North</property> 
      <property part-name="Calc_Results"  name="text">0</property>      
      <property part-name="Calc_0" name="text">0</property>
      <property part-name="Calc_1" name="text">1</property>
      <property part-name="Calc_2" name="text">2</property>
      <property part-name="Calc_3" name="text">3</property>
      <property part-name="Calc_4" name="text">4</property>
      <property part-name="Calc_5" name="text">5</property>
      <property part-name="Calc_6" name="text">6</property>
      <property part-name="Calc_7" name="text">7</property>
      <property part-name="Calc_8" name="text">8</property>
      <property part-name="Calc_9" name="text">9</property>
      <property part-name="Calc_div" name="text">/</property>
      <property part-name="Calc_mult" name="text">*</property>
      <property part-name="Calc_minus" name="text">-</property>
      <property part-name="Calc_plus" name="text">+</property>
      <property part-name="Calc_sign" name="text">-/+</property>
      <property part-name="Calc_equal" name="text">=</property>
      <property part-class="JButton" name="foreground">blue</property>
      <property part-name="Calc_Results"  name="horizontalAlignment">RIGHT</property>
    </style>

    <behavior name="JavaJFC">
      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_0"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><call name="CalcFunc.recordNumber">
                <param name="newVal">0</param>
            </call></property>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_1"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><call name="CalcFunc.recordNumber">
                <param name="newVal">1</param>
            </call></property>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_2"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><call name="CalcFunc.recordNumber">
                <param name="newVal">2</param>
            </call></property>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_3"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><call name="CalcFunc.recordNumber">
                <param name="newVal">3</param>
            </call></property>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_4"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><call name="CalcFunc.recordNumber">
                <param name="newVal">4</param>
            </call></property>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_5"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><call name="CalcFunc.recordNumber">
                <param name="newVal">5</param>
            </call></property>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_6"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><call name="CalcFunc.recordNumber">
                <param name="newVal">6</param>
            </call></property>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_7"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><call name="CalcFunc.recordNumber">
                <param name="newVal">7</param>
            </call></property>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_8"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><call name="CalcFunc.recordNumber">
                <param name="newVal">8</param>
            </call></property>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_9"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><call name="CalcFunc.recordNumber">
                <param name="newVal">9</param>
            </call></property>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_div"/>
        </condition>
        <action>
          <call name="CalcFunc.recordOperation">
            <param name="newVal">div</param>
          </call>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_mult"/>
        </condition>
        <action>
          <call name="CalcFunc.recordOperation">
            <param name="newVal">mult</param>
          </call>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_minus"/>
        </condition>
        <action>
          <call name="CalcFunc.recordOperation">
            <param name="newVal">minus</param>
          </call>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_plus"/>
        </condition>
        <action>
          <call name="CalcFunc.recordOperation">
            <param name="newVal">plus</param>
          </call>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_sign"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><call name="CalcFunc.recordSign"/></property>
        </action>
      </rule>

      <rule>
        <condition>
          <event class="actionPerformed" part-name="Calc_equal"/>
        </condition>
        <action>
          <property part-name="Calc_Results" name="text"
            ><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>
