<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="chrome://global/skin" ?>
<?xml-stylesheet href="calcxul.css" ?>
<!--<!DOCTYPE window SYSTEM "chrome://testxforms/locale/testxforms.dtd">-->

<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>

    <bindings id="xformsBindings"
              xmlns="http://www.mozilla.org/xbl"
              xmlns:html="http://www.w3.org/1999/xhtml"
              xmlns:svg="http://www.w3.org/2000/svg"
              xmlns:xbl="http://www.mozilla.org/xbl"
              xmlns:xforms="http://www.w3.org/2002/xforms">
      <binding id="trigger-gfx"
               extends="chrome://xforms/content/xforms.xml#xformswidget-base">
        <content>
          <svg:svg width="65px" height="22px">

            <svg:g onclick="this.parentNode.parentNode.dispatchDOMUIEvent('DOMActivate');">
              <svg:rect x="1px" y="1px" width="63px" height="20px" rx="10" ry="10" fill="green"
                        style="stroke:black;stroke-opacity:.9;stroke-width:2px"
                        fill-opacity=".2"/>
              <svg:rect x="3" y="4" width="57px" height="15px" rx="7" ry="7"
                        fill="white" fill-opacity=".3"/>
              <children/>
            </svg:g>
          </svg:svg>
        </content>
      </binding>

      <binding id="label-gfx"
               extends="chrome://xforms/content/xforms.xml#xformswidget-base"
               display="svg:generic">

        <content>
          <svg:text x="30" y="16" style="text-anchor:middle">
            <children/>
          </svg:text>
        </content>
      </binding>
      
      <binding id="label-output-gfx"
               extends="chrome://xforms/content/xforms.xml#xformswidget-base"
               display="svg:generic">
        <content>
          <svg:text x="13" y="16" style="text-anchor:middle">

            <children/>
          </svg:text>
        </content>
      </binding>
      
      <binding id="output-gfx"
               extends="chrome://xforms/content/xforms.xml#xformswidget-base">
        <content>
          <svg:svg width="105px" height="22px">
            <svg:g onclick="this.parentNode.parentNode.dispatchDOMUIEvent('DOMActivate');">
              <svg:rect x="1px" y="1px" width="103px" height="20px" rx="10" ry="10" fill="red"
                        style="stroke:black;stroke-opacity:.9;stroke-width:2px"
                        fill-opacity=".2"/>

              <svg:rect x="3" y="4" width="97px" height="15px" rx="7" ry="7"
                        fill="white" fill-opacity=".3"/>
               <children/>
               <svg:text x="25" y="16" style="text-anchor:right" anonid="content">
              </svg:text>
            </svg:g>
          </svg:svg>
        </content>
        
        <implementation implements="nsIXFormsUIWidget">
          <method name="refresh">

            <body>
              document.getAnonymousElementByAttribute(this, "anonid", "content")
                .textContent = this.stringValue;
              return true;
            </body>
          </method>
        </implementation>
      </binding>
    </bindings>
  
<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>

<script type="text/javascript">
    <![CDATA[

    function setAppearance(val) {
        document.getElementById('body').setAttribute('appearance', val);
    }

    ]]>
</script>

<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>

<description>appareance</description>
<radiogroup>
   <caption label="Appearance"/>
  <radio selected="true" label="Normal" value="normal" oncommand="setAppearance(this.value);"/>
  <radio   label="SVG" value="gfx" oncommand="setAppearance(this.value);"/>
</radiogroup>



  </vbox>
</window>
