<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="chrome://global/skin" ?>

<window title="calc"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        xmlns:html="http://www.w3.org/1999/xhtml"
        xmlns:xf="http://www.w3.org/2002/xforms"
        xmlns:ev="http://www.w3.org/2001/xml-events"
        orient="vertical"
        width="500"
        height="600"
>
<description>Calculator Sample</description>

<xf:model id="xf_model">
    <xf:instance>
        <equation xmlns="">
            <screen>0</screen>
            <screenbuffer>0</screenbuffer>
            <first>0</first>
            <second>0</second>
            <memory>0</memory>
            <result/>
        </equation>
    </xf:instance>
</xf:model>

<vbox id="body" flex="1">

<grid flex="1">
  <columns>
    <column flex="1"/>
    <column flex="1"/>
    <column flex="1"/>
    <column flex="1"/>
    <column flex="1"/>
    <column flex="1"/>
  </columns>

  <rows>
    <hbox><xf:output ref="/equation/screen"/></hbox>
    <row>
      <hbox><xf:output ref="/equation/memory"><xf:label>M:</xf:label></xf:output></hbox>
      <spacer />
      <spacer />
      <spacer />
      <spacer />
      <hbox><xf:trigger>
        <xf:label>Clear</xf:label>

        <xf:action ev:event="DOMActivate">
            <xf:setvalue ref="/equation/first" value="0"/>
            <xf:setvalue ref="/equation/second" value="0"/>
            <xf:setvalue ref="/equation/result" value="0"/>
            <xf:setvalue ref="/equation/screen" value="0"/>
            <xf:setvalue ref="/equation/screenbuffer" value="0"/>
            <xf:toggle ev:event="DOMActivate" case="add"/>
        </xf:action>
      </xf:trigger></hbox>
    </row>
    <row>
          <hbox><xf:trigger>
            <xf:label>MC</xf:label>
            <xf:action ev:event="DOMActivate">
                <xf:setvalue ref="/equation/memory" value="0"/>
            </xf:action>
          </xf:trigger></hbox>
        <hbox><xf:trigger>
            <xf:label>7</xf:label>
            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/screenbuffer" value="/equation/screenbuffer * 10 + 7"/>
              <xf:setvalue ref="/equation/screen" value="/equation/screenbuffer"/>
            </xf:action>
          </xf:trigger></hbox>
          <hbox><xf:trigger>
            <xf:label>8</xf:label>
            <xf:action ev:event="DOMActivate">

              <xf:setvalue ref="/equation/screenbuffer" value="/equation/screenbuffer * 10 + 8"/>
              <xf:setvalue ref="/equation/screen" value="/equation/screenbuffer"/>
            </xf:action>
          </xf:trigger></hbox>
          <hbox><xf:trigger>
            <xf:label>9</xf:label>

            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/screenbuffer" value="/equation/screenbuffer * 10 + 9"/>
              <xf:setvalue ref="/equation/screen" value="/equation/screenbuffer"/>
            </xf:action>
          </xf:trigger></hbox>
          <hbox><xf:trigger>
            <xf:label>/</xf:label>

            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/first" value="/equation/screen"/>
              <xf:setvalue ref="/equation/screenbuffer" value="0"/>
              <xf:toggle ev:event="DOMActivate" case="divide"/>
            </xf:action>
          </xf:trigger></hbox>
          <spacer />

    </row>
    <row>
         <hbox> <xf:trigger>
            <xf:label>MR</xf:label>
            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/screenbuffer" value="/equation/memory"/>
              <xf:setvalue ref="/equation/screen" value="/equation/memory"/>

              <xf:setvalue ref="/equation/screenbuffer" value="0"/>
            </xf:action>
          </xf:trigger></hbox>

          <hbox><xf:trigger>
            <xf:label>4</xf:label>
            <xf:action ev:event="DOMActivate">

              <xf:setvalue ref="/equation/screenbuffer" value="/equation/screenbuffer * 10 + 4"/>
              <xf:setvalue ref="/equation/screen" value="/equation/screenbuffer"/>
            </xf:action>
          </xf:trigger></hbox>

          <hbox><xf:trigger>
            <xf:label>5</xf:label>

            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/screenbuffer" value="/equation/screenbuffer * 10 + 5"/>
              <xf:setvalue ref="/equation/screen" value="/equation/screenbuffer"/>
            </xf:action>
          </xf:trigger></hbox>

          <hbox><xf:trigger>
            <xf:label>6</xf:label>

            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/screenbuffer" value="/equation/screenbuffer * 10 + 6"/>
              <xf:setvalue ref="/equation/screen" value="/equation/screenbuffer"/>
            </xf:action>
          </xf:trigger></hbox>

          <hbox><xf:trigger>
            <xf:label>*</xf:label>

            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/first" value="/equation/screen"/>
              <xf:setvalue ref="/equation/screenbuffer" value="0"/>
              <xf:toggle ev:event="DOMActivate" case="multiply"/>
            </xf:action>
          </xf:trigger></hbox>
            <spacer />
    </row>
    <row>
        <hbox><xf:trigger>
            <xf:label>MS</xf:label>
            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/memory" value="/equation/screen"/>
              <xf:setvalue ref="/equation/screenbuffer" value="0"/>

            </xf:action>
          </xf:trigger></hbox>

          <hbox><xf:trigger>
            <xf:label>1</xf:label>
            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/screenbuffer" value="/equation/screenbuffer * 10 + 1"/>

              <xf:setvalue ref="/equation/screen" value="/equation/screenbuffer"/>
            </xf:action>
          </xf:trigger></hbox>

          <hbox><xf:trigger>
            <xf:label>2</xf:label>
            <xf:action ev:event="DOMActivate">

              <xf:setvalue ref="/equation/screenbuffer" value="/equation/screenbuffer * 10 + 2"/>
              <xf:setvalue ref="/equation/screen" value="/equation/screenbuffer"/>
            </xf:action>
          </xf:trigger></hbox>

          <hbox><xf:trigger>
            <xf:label>3</xf:label>

            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/screenbuffer" value="/equation/screenbuffer * 10 + 3"/>
              <xf:setvalue ref="/equation/screen" value="/equation/screenbuffer"/>
            </xf:action>
          </xf:trigger></hbox>

          <hbox><xf:trigger>
            <xf:label>-</xf:label>

            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/first" value="/equation/screen"/>
              <xf:setvalue ref="/equation/screenbuffer" value="0"/>
              <xf:toggle ev:event="DOMActivate" case="subtract"/>
            </xf:action>
          </xf:trigger></hbox>

          <hbox><xf:trigger>

            <xf:label>1/x</xf:label>
            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/screen" value="1 div /equation/screen"/>
            </xf:action>
          </xf:trigger></hbox>
    </row>
    <row>
       <hbox><xf:trigger>
             <xf:label>M+</xf:label>
             <xf:action ev:event="DOMActivate">
                    <xf:setvalue ref="/equation/memory" value="/equation/memory + /equation/screen"/>
                    <xf:setvalue ref="/equation/screenbuffer" value="0"/>
                </xf:action>
        </xf:trigger></hbox>


      <hbox><xf:trigger>
        <xf:label>0</xf:label>
        <xf:action ev:event="DOMActivate">
          <xf:setvalue ref="/equation/screenbuffer" value="/equation/screenbuffer * 10"/>
          <xf:setvalue ref="/equation/screen" value="/equation/screenbuffer"/>
        </xf:action>

      </xf:trigger></hbox>

      <hbox><xf:trigger>
        <xf:label>+/-</xf:label>
        <xf:action ev:event="DOMActivate">
          <xf:setvalue ref="/equation/screen" value="/equation/screen * -1"/>
        </xf:action>

      </xf:trigger></hbox>
    <spacer />
      <hbox><xf:trigger>
        <xf:label>+</xf:label>
        <xf:action ev:event="DOMActivate">

          <xf:setvalue ref="/equation/first" value="/equation/screen"/>
          <xf:setvalue ref="/equation/screenbuffer" value="0"/>
          <xf:toggle ev:event="DOMActivate" case="add"/>
        </xf:action>
      </xf:trigger>
    </hbox>
    <hbox>
      <xf:switch>
        <xf:case id="add" selected="true">

          <xf:trigger>
            <xf:label>=+</xf:label>
            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/second" value="/equation/screenbuffer"/>
              <xf:setvalue ref="/equation/result" value="/equation/first + /equation/second"/>
            <xf:setvalue ref="/equation/screen" value="/equation/result"/>
            <xf:setvalue ref="/equation/screenbuffer" value="0"/>
            </xf:action>

          </xf:trigger>
        </xf:case>
        <xf:case id="subtract">
          <xf:trigger>
            <xf:label>=-</xf:label>
            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/second" value="/equation/screenbuffer"/>
              <xf:setvalue ref="/equation/result" value="/equation/first - /equation/second"/>

            <xf:setvalue ref="/equation/screen" value="/equation/result"/>
            <xf:setvalue ref="/equation/screenbuffer" value="0"/>
            </xf:action>
          </xf:trigger>
        </xf:case>
        <xf:case id="multiply">
          <xf:trigger>
            <xf:label>=*</xf:label>

            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/second" value="/equation/screenbuffer"/>
              <xf:setvalue ref="/equation/result" value="/equation/first * /equation/second"/>
            <xf:setvalue ref="/equation/screen" value="/equation/result"/>
            <xf:setvalue ref="/equation/screenbuffer" value="0"/>
            </xf:action>
          </xf:trigger>
        </xf:case>
        <xf:case id="divide">

          <xf:trigger>
            <xf:label>=/</xf:label>
            <xf:action ev:event="DOMActivate">
              <xf:setvalue ref="/equation/second" value="/equation/screenbuffer"/>
              <xf:setvalue ref="/equation/result" value="/equation/first div /equation/second"/>
            <xf:setvalue ref="/equation/screen" value="/equation/result"/>
            <xf:setvalue ref="/equation/screenbuffer" value="0"/>
            </xf:action>

          </xf:trigger>
        </xf:case>
      </xf:switch>
      </hbox>
    </row>
  </rows>
</grid>

</vbox>
</window>
