<?xml version="1.0" encoding="UTF-8"?>
<otrunk id="33754150-b594-11d9-9669-0800200c9a66">
  <imports>
    <import class="org.concord.otrunk.OTSystem" />
    <import
      class="org.concord.otrunk.ui.notebook.OTNotebookMeasurement" />
    <import class="org.concord.otrunk.ui.notebook.OTNotebook" />
    <import class="org.concord.otrunk.view.OTFolderObject" />
    <import class="org.concord.otrunk.view.document.OTCompoundDoc" />
    <import class="org.concord.otrunk.view.OTViewEntry" />
	<import class="org.concord.otrunk.view.OTViewBundle" />
    <import class="org.concord.otrunk.ui.OTImage" />
    <import class="org.concord.otrunk.ui.OTImageViewConfig" />
    <import class="org.concord.otrunk.view.OTViewService" />
    <import class="org.concord.framework.otrunk.view.OTFrame" />
    <import class="org.concord.data.state.OTUnitValue" />
    <import class="org.concord.data.state.OTUnitValueViewConfig" />
    <import class="org.concord.otrunk.ui.OTText" />
    <import class="org.concord.otrunk.ui.OTButton" />
    <import class="org.concord.calculator.state.OTProgrammableCalculator" />
    <import class="org.concord.calculator.state.OTProgrammableCalculatorNotebook" />
    <import class="org.concord.calculator.state.OTExpression" />
    <import class="org.concord.calculator.state.OTExpressionList" />
    <import class="org.concord.calculator.state.OTExpressionSymbol" />
    <import class="org.concord.calculator.state.OTExpressionVariable" />
    <import class="org.concord.calculator.state.OTExpressionConstant" />
    <import class="org.concord.calculator.state.OTExpressionConstantList" />
    <import class="org.concord.calculator.state.OTExpressionSymbolList" />
    <import class="org.concord.calculator.state.ui.OTExpressionVariableViewConfig" />
    <import class="org.concord.calculator.state.ui.OTProgrammableCalculatorViewConfig" />
	<import class="org.concord.calculator.state.OTProgrammableCalculatorResultChooser" />
    
	<import class="org.concord.otrunk.script.ui.OTScriptObject"/>   
	<import class="org.concord.otrunk.script.ui.OTScriptVariable" />
	<import class="org.concord.otrunk.script.ui.OTScriptVariableComponent" />
	<import class="org.concord.otrunk.script.js.OTJavascript" />  
	<import class="org.concord.otrunk.script.OTScriptEngineBundle"/>   
	<import class="org.concord.otrunk.script.OTScriptEngineEntry"/>  
    
  </imports>
  <objects>
    <OTSystem>
      <bundles>
		<OTScriptEngineBundle>  
		  <engines>  
		    <OTScriptEngineEntry    
		      objectClass="org.concord.otrunk.script.js.OTJavascript"  
		      engineClass="org.concord.otrunk.script.js.OTJavascriptEngine"/>   
		  </engines>  
		</OTScriptEngineBundle> 
		<OTViewBundle>
          <viewEntries>
          	<OTViewEntry
          	  objectClass="org.concord.otrunk.ui.OTButton"
          	  viewClass="org.concord.otrunk.ui.swing.OTButtonView"/>
            <OTUnitValueViewConfig
              objectClass="org.concord.data.state.OTUnitValue"
              viewClass="org.concord.data.state.OTUnitValueView">
              <precision>1</precision>
              <editable>false</editable>
            </OTUnitValueViewConfig>
            <OTViewEntry
              objectClass="org.concord.calculator.state.OTExpressionList"
              viewClass="org.concord.calculator.state.ui.OTExpressionListTableView"/>
            <OTViewEntry
              objectClass="org.concord.calculator.state.OTExpressionConstantList"
              viewClass="org.concord.calculator.state.ui.OTExpressionConstantListView"/>
            <OTViewEntry
              objectClass="org.concord.calculator.state.OTExpressionSymbolList"
              viewClass="org.concord.calculator.state.ui.OTExpressionSymbolListView"/>
            <OTViewEntry
              objectClass="org.concord.calculator.state.OTExpressionConstant"
              viewClass="org.concord.calculator.state.ui.OTExpressionConstantView"/>
            <OTUnitValueViewConfig local_id="variableValueViewEntry"
              objectClass="org.concord.data.state.OTUnitValue"
              viewClass="org.concord.data.state.OTUnitValueEditView">
              <precision>1</precision>
              <editable>false</editable>
            </OTUnitValueViewConfig>
            <OTExpressionVariableViewConfig
              objectClass="org.concord.calculator.state.OTExpressionVariable"
              viewClass="org.concord.calculator.state.ui.OTExpressionVariableView">
              <unitsConversionList>
              	<string>m</string>
              	<string>cm</string>
              	<string>m/s</string>
              	<string>cm/s</string>
              	<string>s</string>
              	<string>kg</string>
              	<string>g</string>
              </unitsConversionList>
              <variableValueViewEntry>
              	<object refid="${variableValueViewEntry}"/>
              </variableValueViewEntry>
            </OTExpressionVariableViewConfig>
            <OTProgrammableCalculatorViewConfig
              objectClass="org.concord.calculator.state.OTProgrammableCalculator"
              viewClass="org.concord.calculator.state.ui.OTProgrammableCalculatorView">
              <resultsTableViewEntry>
              	<object refid="${resultsTableViewEntry}"/>
              </resultsTableViewEntry>
            </OTProgrammableCalculatorViewConfig>
            <OTProgrammableCalculatorViewConfig local_id="resultsTableViewEntry"
              objectClass="org.concord.calculator.state.OTProgrammableCalculator"
              viewClass="org.concord.calculator.state.ui.OTExpressionResultCalculatorTableView">
              <unitsConversionList>
              	<string>m</string>
              	<string>cm</string>
              	<string>m/s</string>
              	<string>cm/s</string>
              	<string>s</string>
              	<string>kg</string>
              	<string>g</string>
              </unitsConversionList>
            </OTProgrammableCalculatorViewConfig>
            <OTViewEntry
              objectClass="org.concord.calculator.state.OTExpressionResult"
              viewClass="org.concord.calculator.state.ui.OTExpressionResultView"/>
            <OTViewEntry
              objectClass="org.concord.calculator.state.OTExpressionSymbol"
              viewClass="org.concord.calculator.state.ui.OTExpressionSymbolView"/>
            <OTViewEntry
              objectClass="org.concord.calculator.state.OTProgrammableCalculatorNotebook"
              viewClass="org.concord.calculator.state.ui.OTProgrammableCalculatorNotebookView"/>
            <OTViewEntry
              objectClass="org.concord.calculator.state.OTProgrammableCalculatorResultChooser"
              viewClass="org.concord.calculator.state.ui.OTProgrammableCalculatorResultChooserView"/>
            <OTImageViewConfig
              objectClass="org.concord.otrunk.ui.OTImage"
              viewClass="org.concord.otrunk.ui.swing.OTImageView">
              <preferredWidth>75</preferredWidth>
              <preferredHeight>75</preferredHeight>
              <zoomEnabled>true</zoomEnabled>
            </OTImageViewConfig>
            <OTViewEntry
              objectClass="org.concord.otrunk.ui.notebook.OTNotebook"
              viewClass="org.concord.otrunk.ui.notebook.OTNotebookView"/>
            <OTViewEntry objectClass="org.concord.otrunk.ui.OTText"
              viewClass="org.concord.otrunk.ui.swing.OTTextEditView"/>
            <OTViewEntry
              objectClass="org.concord.otrunk.view.document.OTCompoundDoc"
              viewClass="org.concord.otrunk.view.document.OTDocumentView"/>
=            <OTViewEntry
              objectClass="org.concord.otrunk.ui.notebook.OTNotebookMeasurement"
              viewClass="org.concord.otrunk.ui.notebook.OTNotebookMeasurementView"/>
            <OTViewEntry 
              objectClass="org.concord.otrunk.view.OTFolderObject" 
              viewClass="org.concord.otrunk.view.OTFolderObjectView"/>
			<OTViewEntry   
			  objectClass="org.concord.otrunk.script.ui.OTScriptObject"  
			  viewClass="org.concord.otrunk.script.ui.OTScriptObjectView"/>  
          </viewEntries>
        </OTViewBundle>
      </bundles>
      <root>
        <OTFolderObject name="Programmable Calculator">
          <children>
            <OTExpressionList name="Formulas (ExpressionList)" local_id="expressionlist1">
              <expressions>
                <OTExpression local_id="expression1">
                  <expression>f=m*a</expression>
                  <description>Newton's Law</description>
                </OTExpression>
<!--                <OTExpression local_id="expression2">
                  <expression>v=x/t</expression>
                </OTExpression>
                <OTExpression local_id="expression3">
                  <expression>V2=X/T + V1</expression>
                </OTExpression>
                <OTExpression local_id="expression4">
                  <expression>q=G*2</expression>
                </OTExpression>
                <OTExpression local_id="expression5">
                  <expression>w=k*5+1</expression>
                </OTExpression>
                <OTExpression local_id="expression_invalid1">
                  <expression>V=X/T + V1</expression>
                </OTExpression>
                <OTExpression local_id="expression_invalid2">
                  <expression>bu</expression>
                </OTExpression>
-->              </expressions>
            </OTExpressionList>
            <OTExpressionConstantList name="Constants (ExpressionConstantList)" local_id="constantList1">
              <symbols>
                <OTExpressionConstant local_id="constant1">
			        <symbol>G</symbol>
			        <value>
			          <OTUnitValue local_id="value_constant1" value="9.8"
			            unit="m/s" />
			        </value>
	                <note>
	                  <OTText local_id="textbox1">
	                    <text>Gravity</text>
	                  </OTText>
	                </note>
                </OTExpressionConstant>
<!--                 <OTExpressionConstant local_id="constant2">
			        <symbol>PI</symbol>
			        <value>
			          <OTUnitValue local_id="value_constant2" value="3.1415"/>
			        </value>
	                <note>
	                  <OTText local_id="textbox2">
	                    <text>PI</text>
	                  </OTText>
	                </note>
                </OTExpressionConstant>
                <OTExpressionConstant local_id="constant3">
			        <symbol>k</symbol>
			        <value>
			          <OTUnitValue local_id="value_constant3" value="10"
			          		unit="kg"/>
			        </value>
	                <note>
	                  <OTText local_id="textbox3">
	                    <text>konstant</text>
	                  </OTText>
	                </note>
                </OTExpressionConstant>
-->              </symbols>
            </OTExpressionConstantList>
            <OTProgrammableCalculator name="Programmable Calculator" local_id="calculator1" showResultsSeparate="true">
              <formulas>
                <object refid="${expressionlist1}" />
              </formulas>
              <constants>
              	<object refid="${constantList1}"/>
              </constants>
            </OTProgrammableCalculator>
            <OTNotebook name="Measurements (Notebook)" local_id="notebook">
              <entries>
                <OTNotebookMeasurement>
                  <notes>
                    <OTText>
                      <text>Flower distance</text>
                    </OTText>
                  </notes>
                  <unitValue>
                    <OTUnitValue value="25" unit="m" />
                  </unitValue>
                  <image>
                    <OTImage
                      imageBytes="http://www.concord.org/images/logos/cc/cc-logo.gif" />
                  </image>
                </OTNotebookMeasurement>
                <OTNotebookMeasurement>
                  <notes>
                    <OTText>
                      <text>Flower mass</text>
                    </OTText>
                  </notes>
                  <unitValue>
                    <OTUnitValue value="1.5" unit="kg" />
                  </unitValue>
                  <image>
                    <OTImage
                      imageBytes="http://www.concord.org/images/logos/cc/cc-logo.gif"/>
                  </image>
                </OTNotebookMeasurement>
                <OTNotebookMeasurement>
                  <notes>
                    <OTText>
                      <text>Flower time</text>
                    </OTText>
                  </notes>
                  <unitValue>
                    <OTUnitValue value="2" unit="s" />
                  </unitValue>
                  <image>
                    <OTImage
                      imageBytes="http://www.concord.org/images/logos/projects/capa.gif" />
                  </image>
                </OTNotebookMeasurement>
              </entries>
            </OTNotebook>
            <OTProgrammableCalculatorNotebook name="Calculator and Notebook" local_id="calc_note">
              <notebook>
              	<object refid="${notebook}" />
              </notebook>
              <calculator>
                <object refid="${calculator1}" />
              </calculator>
            </OTProgrammableCalculatorNotebook>
            <OTProgrammableCalculatorNotebook name="Other Calculator and Notebook" local_id="calc2">
              <notebook>
              	<OTNotebook local_id="note2"/>
              </notebook>
              <calculator>
				<OTProgrammableCalculator showResultsSeparate="true">
					<formulas>
						<OTExpressionList>
							<expressions>
								<OTExpression>
									<expression>r = e / i</expression>
									<description>Ohm's Law - to calculate resistance</description>
								</OTExpression>
							</expressions>
						</OTExpressionList>
					</formulas>
				</OTProgrammableCalculator>
              </calculator>
            </OTProgrammableCalculatorNotebook>
			<OTProgrammableCalculator name="Programmable Calculator - empty" local_id="calculator2"/>
            <OTCompoundDoc name="Other Calculator Notebook and Script">
            	<bodyText>
            		<object refid="${calc2}"/>
            		<object refid="${script}"/>	
            	</bodyText>
            </OTCompoundDoc>
            <OTCompoundDoc name="Select Answer">
            	<bodyText>
            		<object refid="${answerText}"/><br/>
            		<object refid="${answerButton}"/>
            		<object refid="${answerValue}"/><br/>
            		<object refid="${answer_script}"/><br/>
            		<object refid="${calc_answer_chooser}"/>
            	</bodyText>	
            </OTCompoundDoc>
          </children>
        </OTFolderObject>
      </root>
      <library>
      	<OTUnitValue local_id="answerValue"/>
        <OTProgrammableCalculatorResultChooser name="Answer chooser" local_id="calc_answer_chooser">
        	<calculator>
        		<object refid="${calc_note}"/>
        	</calculator>
        </OTProgrammableCalculatorResultChooser>
   		<OTText local_id="answerText"/>
   		<OTButton text="Select Answer" local_id="answerButton"/>
		<OTScriptObject local_id="answer_script">
		  <variables>
			<OTScriptVariable name="otCalculatorObject" reference="${calculator1}"/>
			<OTScriptVariableComponent name="answerButton" reference="${answerButton}"/>
			<OTScriptVariableComponent name="answerText" reference="${answerText}"/>
			<OTScriptVariable name="chooser" reference="${calc_answer_chooser}"/>
		  </variables>
		  <script>  
			<OTJavascript>  
			  <script>  
importClass(Packages.java.lang.System);
importClass(Packages.java.awt.event.ActionListener);
importClass(Packages.org.concord.framework.otrunk.OTChangeListener);

function init()
{
	var buttonHandler = 
	{
		actionPerformed:function(evt)
		{
			var res = otCalculatorObject.getResultValues().getCurrentSymbol();
			if (res != null){
				var val = res.getValue();
				var txtValue = val.getValue() + " " + val.getUnit();
				answerText.setText("1. "+txtValue);
			}
		}
	};
	var buttonListener = new ActionListener(buttonHandler);
	answerButton.addActionListener(buttonListener);
	
	var otHandler =
	{
		stateChanged:function(evt)
		{
			System.out.println("ot change: "+evt.getDescription());
			if (evt.getProperty().equals("selectedAnswer")){
				var val = evt.getValue();
				var txtValue = val.getValue() + " " + val.getUnit();
				answerBox.setText("2. "+txtValue);
			}
		}
	}
	var otListener = new OTChangeListener(otHandler);
	chooser.addOTChangeListener(otListener);
}

function save()
{
}
		      </script>  
		    </OTJavascript>  
		  </script>  		 
      	</OTScriptObject>
      	<OTScriptObject local_id="script">
      	  <variables>
      	  	<OTScriptVariable name="otCalculatorObject" reference="${calc2}"/>
      	  	<OTScriptVariable name="otNotebookObject" reference="${note2}"/>
      	  </variables>
		  <script>  
		    <OTJavascript>  
		      <script>  
importClass(Packages.org.concord.calculator.state.OTProgrammableCalculatorEventHandler);
importClass(Packages.org.concord.calculator.state.OTProgrammableCalculatorEvent);
importClass(Packages.org.concord.calculator.state.OTProgrammableCalculatorListener);
importClass(Packages.java.lang.System);

importPackage(Packages.org.concord.otrunk.ui.notebook);
importClass(Packages.org.concord.data.state.OTUnitValue);
importClass(Packages.org.concord.otrunk.ui.OTText);

function init()
{
	System.out.println("------------------------------- init ------------------------------");
//	var calculatorEventHandler = new OTProgrammableCalculatorEventHandler(otCalculatorObject, controllerService);
//	calculatorEventHandler.setCalculator(otCalculatorObject.getCalculator());
	
	//Add measurement
//	addMeasurement(100, "m");
}

/** Adds a measurement to the notebook */
function addMeasurement(value, unit) 
{
	var list = otNotebookObject.getEntries(); 	//OTObjectList

	var measurement = otNotebookObject.getOTObjectService().createObject(OTNotebookMeasurement);
	//var image = otNotebookObject.getOTObjectService().createObject(OTImage);
	var uv = otNotebookObject.getOTObjectService().createObject(OTUnitValue);
	var notes = otNotebookObject.getOTObjectService().createObject(OTText);

	notes.setText("New measurement");
			
	uv.setValue(value);
	uv.setUnit(unit);
			
	//measurement.setImage(image);
	measurement.setNotes(notes);
	measurement.setUnitValue(uv);
			
	list.add(measurement);
}



function save()
{
	System.out.println("------------------------------- save ------------------------------");
}
		      </script>  
		    </OTJavascript>  
		  </script>  		 
      	</OTScriptObject>
      </library>
    </OTSystem>
  </objects>
</otrunk>