You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/08/01 07:44:08 UTC
[47/51] [partial] this folder was called TourDeFlex_content.com and
was hidden by .gitignore
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/IncrementSkin.mxml.html
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/IncrementSkin.mxml.html b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/IncrementSkin.mxml.html
new file mode 100644
index 0000000..3870ce8
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/IncrementSkin.mxml.html
@@ -0,0 +1,112 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- saved from url=(0014)about:internet -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>IncrementSkin.mxml</title>
+<link rel="stylesheet" type="text/css" href="../../../../../SourceStyles.css"/>
+</head>
+
+<body><pre><span class="MXMLProcessing_Instruction"><?xml version="1.0" encoding="utf-8"?></span>
+
+<span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> The default skin class for the up button of a Spark NumericStepper component.
+
+ @see spark.components.NumericStepper
+
+ @langversion 3.0
+ @playerversion Flash 10
+ @playerversion AIR 1.5
+ @productversion Flex 4
+</span><span class="MXMLASDoc">--></span>
+<span class="MXMLComponent_Tag"><s:SparkSkin</span><span class="MXMLDefault_Text"> xmlns:fx="</span><span class="MXMLString">http://ns.adobe.com/mxml/2009</span><span class="MXMLDefault_Text">" xmlns:s="</span><span class="MXMLString">library://ns.adobe.com/flex/spark</span><span class="MXMLDefault_Text">"
+ xmlns:fb="</span><span class="MXMLString">http://ns.adobe.com/flashbuilder/2009</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+
+ <span class="MXMLSpecial_Tag"><fx:Metadata></span>
+ <![CDATA[
+ <span class="ActionScriptASDoc">/**
+ * @copy spark.skins.spark.ApplicationSkin#hostComponent
+ */</span>
+ <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">HostComponent</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"spark.components.Button"</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">]</span>
+ <span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptOperator">></span>
+ <span class="MXMLSpecial_Tag"></fx:Metadata></span>
+
+ <span class="MXMLComponent_Tag"><s:states></span>
+ <span class="MXMLComponent_Tag"><s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">up</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"><s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">over</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"><s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">down</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"><s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">disabled</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"></s:states></span>
+
+ <span class="MXMLComponent_Tag"><s:Group</span><span class="MXMLDefault_Text"> left="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" bottom="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+
+ <span class="MXMLComment"><!--</span><span class="MXMLComment"> border/fill </span><span class="MXMLComment">--></span>
+ <span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> @private </span><span class="MXMLASDoc">--></span>
+ <span class="MXMLComponent_Tag"><s:Rect</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">fill</span><span class="MXMLDefault_Text">" left="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" bottom="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" width="</span><span class="MXMLString">18</span><span class="MXMLDefault_Text">" height="</span><span class="MXMLString">16</span><span class="MXMLDefault_Text">" topRightRadiusX="</span><span class="MXMLString">2</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+ <span class="MXMLComponent_Tag"><s:stroke></span>
+ <span class="MXMLComponent_Tag"><s:SolidColorStroke</span><span class="MXMLDefault_Text"> color="</span><span class="MXMLString">0x686868</span><span class="MXMLDefault_Text">" weight="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"></s:stroke></span>
+ <span class="MXMLComponent_Tag"><s:fill></span>
+ <span class="MXMLComponent_Tag"><s:LinearGradient</span><span class="MXMLDefault_Text"> rotation="</span><span class="MXMLString">90</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+ <span class="MXMLComponent_Tag"><s:GradientEntry</span><span class="MXMLDefault_Text"> color="</span><span class="MXMLString">0xFFFFFF</span><span class="MXMLDefault_Text">"
+ color.over="</span><span class="MXMLString">0xC2C2C2</span><span class="MXMLDefault_Text">"
+ color.down="</span><span class="MXMLString">0xAEB0B1</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"><s:GradientEntry</span><span class="MXMLDefault_Text"> color="</span><span class="MXMLString">0xF0F0F0</span><span class="MXMLDefault_Text">"
+ color.over="</span><span class="MXMLString">0xADAEAF</span><span class="MXMLDefault_Text">"
+ color.down="</span><span class="MXMLString">0xA1A3A5</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"></s:LinearGradient></span>
+ <span class="MXMLComponent_Tag"></s:fill></span>
+ <span class="MXMLComponent_Tag"></s:Rect></span>
+
+ <span class="MXMLComment"><!--</span><span class="MXMLComment"> highlight </span><span class="MXMLComment">--></span>
+ <span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> @private </span><span class="MXMLASDoc">--></span>
+ <span class="MXMLComponent_Tag"><s:Rect</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">highlight</span><span class="MXMLDefault_Text">" left="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" bottom="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" topRightRadiusX="</span><span class="MXMLString">2</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+ <span class="MXMLComponent_Tag"><s:stroke></span>
+ <span class="MXMLComponent_Tag"><s:LinearGradientStroke</span><span class="MXMLDefault_Text"> rotation="</span><span class="MXMLString">90</span><span class="MXMLDefault_Text">" weight="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+ <span class="MXMLComponent_Tag"><s:GradientEntry</span><span class="MXMLDefault_Text"> color="</span><span class="MXMLString">0xFFFFFF</span><span class="MXMLDefault_Text">"
+ color.down="</span><span class="MXMLString">0x000000</span><span class="MXMLDefault_Text">"
+ alpha.over="</span><span class="MXMLString">0.55</span><span class="MXMLDefault_Text">"
+ alpha.down="</span><span class="MXMLString">0.15</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"><s:GradientEntry</span><span class="MXMLDefault_Text"> color="</span><span class="MXMLString">0xFFFFFF</span><span class="MXMLDefault_Text">"
+ color.down="</span><span class="MXMLString">0x336699</span><span class="MXMLDefault_Text">"
+ alpha="</span><span class="MXMLString">0.45</span><span class="MXMLDefault_Text">"
+ alpha.over="</span><span class="MXMLString">0.2475</span><span class="MXMLDefault_Text">"
+ alpha.down="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"></s:LinearGradientStroke></span>
+ <span class="MXMLComponent_Tag"></s:stroke></span>
+ <span class="MXMLComponent_Tag"></s:Rect></span>
+
+ <span class="MXMLComment"><!--</span><span class="MXMLComment"> shadow </span><span class="MXMLComment">--></span>
+ <span class="MXMLComponent_Tag"><s:Rect</span><span class="MXMLDefault_Text"> left="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">2</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" height="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" includeIn="</span><span class="MXMLString">down</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+ <span class="MXMLComponent_Tag"><s:fill></span>
+ <span class="MXMLComponent_Tag"><s:SolidColor</span><span class="MXMLDefault_Text"> color="</span><span class="MXMLString">0x336699</span><span class="MXMLDefault_Text">" alpha="</span><span class="MXMLString">0.07</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"></s:fill></span>
+ <span class="MXMLComponent_Tag"></s:Rect></span>
+ <span class="MXMLComponent_Tag"></s:Group></span>
+
+ <span class="MXMLComponent_Tag"><s:Rect</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">arrow</span><span class="MXMLDefault_Text">" horizontalCenter="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" verticalCenter="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" width="</span><span class="MXMLString">38</span><span class="MXMLDefault_Text">" height="</span><span class="MXMLString">29</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+ <span class="MXMLComponent_Tag"><s:fill></span>
+ <span class="MXMLComponent_Tag"><s:BitmapFill</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">arrowFill</span><span class="MXMLDefault_Text">" source="</span><span class="MXMLString">@Embed(source='assets/arrow_up_float.png')</span><span class="MXMLDefault_Text">" fillMode="</span><span class="MXMLString">clip</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"></s:fill></span>
+ <span class="MXMLComponent_Tag"></s:Rect></span>
+
+
+
+
+<span class="MXMLComponent_Tag"></s:SparkSkin></span></pre></body>
+</html>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/MyNumericStepperSkin.mxml.html
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/MyNumericStepperSkin.mxml.html b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/MyNumericStepperSkin.mxml.html
new file mode 100644
index 0000000..b16a96e
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/MyNumericStepperSkin.mxml.html
@@ -0,0 +1,99 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- saved from url=(0014)about:internet -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>MyNumericStepperSkin.mxml</title>
+<link rel="stylesheet" type="text/css" href="../../../../../SourceStyles.css"/>
+</head>
+
+<body><pre><span class="MXMLProcessing_Instruction"><?xml version="1.0" encoding="utf-8"?></span>
+
+<span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> The default skin class for a Spark NumericStepper component. The skin for the text input field on a NumericStepper
+component is defined by the NumericStepperTextInputSkin class.
+
+ @see spark.components.NumericStepper
+ @see spark.skins.spark.NumericStepperTextInputSkin
+
+ @langversion 3.0
+ @playerversion Flash 10
+ @playerversion AIR 1.5
+ @productversion Flex 4
+</span><span class="MXMLASDoc">--></span>
+<span class="MXMLComponent_Tag"><s:SparkSkin</span><span class="MXMLDefault_Text"> xmlns:fx="</span><span class="MXMLString">http://ns.adobe.com/mxml/2009</span><span class="MXMLDefault_Text">" xmlns:s="</span><span class="MXMLString">library://ns.adobe.com/flex/spark</span><span class="MXMLDefault_Text">"
+ xmlns:fb="</span><span class="MXMLString">http://ns.adobe.com/flashbuilder/2009</span><span class="MXMLDefault_Text">" minHeight="</span><span class="MXMLString">23</span><span class="MXMLDefault_Text">" minWidth="</span><span class="MXMLString">40</span><span class="MXMLDefault_Text">"
+ alpha.disabled="</span><span class="MXMLString">0.5</span><span class="MXMLDefault_Text">" height="</span><span class="MXMLString">100</span><span class="MXMLDefault_Text">" width="</span><span class="MXMLString">120</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+
+ <span class="MXMLSpecial_Tag"><fx:Metadata></span>
+ <![CDATA[
+ <span class="ActionScriptASDoc">/**
+ * @copy spark.skins.spark.ApplicationSkin#hostComponent
+ */</span>
+ <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">HostComponent</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"spark.components.NumericStepper"</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">]</span>
+ <span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptOperator">></span>
+ <span class="MXMLSpecial_Tag"></fx:Metadata></span>
+ <span class="MXMLComment"><!--</span><span class="MXMLComment"><fx:Script>
+ <![CDATA[
+ import flash.globalization.NumberFormatter;
+
+ import mx.events.FlexEvent;
+
+ import spark.skins.spark.NumericStepperIncrementButtonSkin;
+
+ // customize display of the text to show a leading zero
+ protected function textDisplay_valueCommitHandler(event:FlexEvent):void
+ {
+ if (textDisplay.text.length == 1)
+ textDisplay.text = "0"+textDisplay.text;
+ }
+
+ ]]>
+ </fx:Script></span><span class="MXMLComment">--></span>
+
+ <span class="MXMLComment"><!--</span><span class="MXMLComment">
+ NOTE: this skin file contains sub-parts that may continue to react to
+ Style code. To remove this behavior create new copies of those skins
+ and remove the styles.
+ </span><span class="MXMLComment">--></span>
+ <span class="MXMLComponent_Tag"><s:states></span>
+ <span class="MXMLComponent_Tag"><s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">normal</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"><s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">disabled</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"></s:states></span>
+
+ <span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> The default class is NumericStepperIncrementButtonSkin.
+ @copy spark.components.Spinner#incrementButton
+ @see spark.skins.spark.NumericStepperIncrementButtonSkin </span><span class="MXMLASDoc">--></span>
+ <span class="MXMLComponent_Tag"><s:Button</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">incrementButton</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" height="</span><span class="MXMLString">50%</span><span class="MXMLDefault_Text">"
+ skinClass="</span><span class="MXMLString">com.devgirl.runtracker.skins.IncrementSkin</span><span class="MXMLDefault_Text">" width.normal="</span><span class="MXMLString">65</span><span class="MXMLDefault_Text">" top.normal="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" right.normal="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/></span>
+
+ <span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> The default class is NumericStepperDecrementButtonSkin.
+ @copy spark.components.Spinner#decrementButton
+ @see spark.skins.spark.NumericStepperDecrementButtonSkin </span><span class="MXMLASDoc">--></span>
+ <span class="MXMLComponent_Tag"><s:Button</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">decrementButton</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" bottom="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" height="</span><span class="MXMLString">50%</span><span class="MXMLDefault_Text">"
+ skinClass="</span><span class="MXMLString">com.devgirl.runtracker.skins.DecrementSkin</span><span class="MXMLDefault_Text">" width.normal="</span><span class="MXMLString">65</span><span class="MXMLDefault_Text">" bottom.normal="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" right.normal="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/></span>
+
+ <span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> The default class is NumericStepperTextInputSkin.
+ @copy spark.components.NumericStepper#textDisplay
+ @see spark.skins.spark.NumericStepperTextInputSkin </span><span class="MXMLASDoc">--></span>
+ <span class="MXMLComponent_Tag"><s:TextInput</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">textDisplay</span><span class="MXMLDefault_Text">" restrict="</span><span class="MXMLString">0-9</span><span class="MXMLDefault_Text">"
+ skinClass="</span><span class="MXMLString">com.devgirl.runtracker.skins.NumericStepperTextInputSkin</span><span class="MXMLDefault_Text">" fontSize="</span><span class="MXMLString">32</span><span class="MXMLDefault_Text">" fontFamily="</span><span class="MXMLString">Verdana</span><span class="MXMLDefault_Text">"
+ left="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" x="</span><span class="MXMLString">-13</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">60</span><span class="MXMLDefault_Text">" height="</span><span class="MXMLString">100</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" y="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" bottom="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" width="</span><span class="MXMLString">10</span><span class="MXMLDefault_Text">" color="</span><span class="MXMLString">0x000000</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/></span>
+
+<span class="MXMLComponent_Tag"></s:SparkSkin></span></pre></body>
+</html>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/NumericStepperTextInputSkin.mxml.html
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/NumericStepperTextInputSkin.mxml.html b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/NumericStepperTextInputSkin.mxml.html
new file mode 100644
index 0000000..0cf6817
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/skins/NumericStepperTextInputSkin.mxml.html
@@ -0,0 +1,101 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- saved from url=(0014)about:internet -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>NumericStepperTextInputSkin.mxml</title>
+<link rel="stylesheet" type="text/css" href="../../../../../SourceStyles.css"/>
+</head>
+
+<body><pre><span class="MXMLProcessing_Instruction"><?xml version="1.0" encoding="utf-8"?></span>
+<span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> The default skin class for Spark TextInput component.
+
+ @see spark.components.TextInput
+
+ @langversion 3.0
+ @playerversion Flash 10
+ @playerversion AIR 1.5
+ @productversion Flex 4
+</span><span class="MXMLASDoc">--></span>
+<span class="MXMLComponent_Tag"><s:SparkSkin</span><span class="MXMLDefault_Text"> xmlns:fx="</span><span class="MXMLString">http://ns.adobe.com/mxml/2009</span><span class="MXMLDefault_Text">" xmlns:s="</span><span class="MXMLString">library://ns.adobe.com/flex/spark</span><span class="MXMLDefault_Text">"
+ xmlns:fb="</span><span class="MXMLString">http://ns.adobe.com/flashbuilder/2009</span><span class="MXMLDefault_Text">" alpha.disabled="</span><span class="MXMLString">0.5</span><span class="MXMLDefault_Text">" blendMode="</span><span class="MXMLString">normal</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+
+ <span class="MXMLSpecial_Tag"><fx:Metadata></span>
+ <![CDATA[
+ <span class="ActionScriptASDoc">/**
+ * @copy spark.skins.spark.ApplicationSkin#hostComponent
+ */</span>
+ <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">HostComponent</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"spark.components.TextInput"</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">]</span>
+ <span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptOperator">></span>
+ <span class="MXMLSpecial_Tag"></fx:Metadata></span>
+
+ <span class="MXMLSpecial_Tag"><fx:Script></span>
+ <![CDATA[
+ <span class="ActionScriptASDoc">/**
+ * @private
+ */</span>
+ <span class="ActionScriptReserved">private</span> <span class="ActionScriptReserved">static</span> <span class="ActionScriptReserved">const</span> <span class="ActionScriptDefault_Text">focusExclusions</span>:<span class="ActionScriptDefault_Text">Array</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptString">"textDisplay"</span><span class="ActionScriptBracket/Brace">]</span>;
+
+ <span class="ActionScriptASDoc">/**
+ * @private
+ */</span>
+ <span class="ActionScriptReserved">override</span> <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptReserved">get</span> <span class="ActionScriptDefault_Text">focusSkinExclusions</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptDefault_Text">Array</span> <span class="ActionScriptBracket/Brace">{</span> <span class="ActionScriptReserved">return</span> <span class="ActionScriptDefault_Text">focusExclusions</span>;<span class="ActionScriptBracket/Brace">}</span>;
+ <span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptOperator">></span>
+ <span class="MXMLSpecial_Tag"></fx:Script></span>
+
+ <span class="MXMLComponent_Tag"><s:states></span>
+ <span class="MXMLComponent_Tag"><s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">normal</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"><s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">disabled</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"></s:states></span>
+
+ <span class="MXMLComment"><!--</span><span class="MXMLComment"> border </span><span class="MXMLComment">--></span>
+ <span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> @private </span><span class="MXMLASDoc">--></span>
+ <span class="MXMLComponent_Tag"><s:Rect</span><span class="MXMLDefault_Text"> left="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" bottom="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" id="</span><span class="MXMLString">border</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+ <span class="MXMLComponent_Tag"><s:stroke></span>
+ <span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> @private </span><span class="MXMLASDoc">--></span>
+ <span class="MXMLComponent_Tag"><s:SolidColorStroke</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">borderStroke</span><span class="MXMLDefault_Text">" weight="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"></s:stroke></span>
+ <span class="MXMLComponent_Tag"></s:Rect></span>
+
+ <span class="MXMLComment"><!--</span><span class="MXMLComment"> fill </span><span class="MXMLComment">--></span>
+ <span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> Defines the appearance of the TextInput component's background. </span><span class="MXMLASDoc">--></span>
+ <span class="MXMLComponent_Tag"><s:Rect</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">background</span><span class="MXMLDefault_Text">" left="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" bottom="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+ <span class="MXMLComponent_Tag"><s:fill></span>
+ <span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> @private Defines the background fill color. </span><span class="MXMLASDoc">--></span>
+ <span class="MXMLComponent_Tag"><s:SolidColor</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">bgFill</span><span class="MXMLDefault_Text">" color="</span><span class="MXMLString">0xC0C0C0</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"></s:fill></span>
+ <span class="MXMLComponent_Tag"></s:Rect></span>
+
+ <span class="MXMLComment"><!--</span><span class="MXMLComment"> shadow </span><span class="MXMLComment">--></span>
+ <span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> @private </span><span class="MXMLASDoc">--></span>
+ <span class="MXMLComponent_Tag"><s:Rect</span><span class="MXMLDefault_Text"> left="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" height="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" id="</span><span class="MXMLString">shadow</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">></span>
+ <span class="MXMLComponent_Tag"><s:fill></span>
+ <span class="MXMLComponent_Tag"><s:SolidColor</span><span class="MXMLDefault_Text"> color="</span><span class="MXMLString">0x000000</span><span class="MXMLDefault_Text">" alpha="</span><span class="MXMLString">0.12</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+ <span class="MXMLComponent_Tag"></s:fill></span>
+ <span class="MXMLComponent_Tag"></s:Rect></span>
+
+ <span class="MXMLComment"><!--</span><span class="MXMLComment"> text </span><span class="MXMLComment">--></span>
+ <span class="MXMLASDoc"><!---</span><span class="MXMLASDoc"> @copy spark.components.supportClasses.SkinnableTextBase#textDisplay </span><span class="MXMLASDoc">--></span>
+ <span class="MXMLComponent_Tag"><s:RichEditableText</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">textDisplay</span><span class="MXMLDefault_Text">"
+ verticalAlign="</span><span class="MXMLString">middle</span><span class="MXMLDefault_Text">"
+ widthInChars="</span><span class="MXMLString">10</span><span class="MXMLDefault_Text">"
+ left="</span><span class="MXMLString">7</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" bottom="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/></span>
+
+<span class="MXMLComponent_Tag"></s:SparkSkin></span></pre></body>
+</html>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/vo/RunVO.as.html
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/vo/RunVO.as.html b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/vo/RunVO.as.html
new file mode 100644
index 0000000..7ac7bc4
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/source/com/devgirl/runtracker/vo/RunVO.as.html
@@ -0,0 +1,44 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- saved from url=(0014)about:internet -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>RunVO.as</title>
+<link rel="stylesheet" type="text/css" href="../../../../../SourceStyles.css"/>
+</head>
+
+<body><pre><span class="ActionScriptpackage">package</span> <span class="ActionScriptDefault_Text">com</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">devgirl</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">runtracker</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">vo</span>
+<span class="ActionScriptBracket/Brace">{</span>
+ <span class="ActionScriptBracket/Brace">[</span><span class="ActionScriptMetadata">Bindable</span><span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptReserved">public</span> <span class="ActionScriptclass">class</span> <span class="ActionScriptDefault_Text">RunVO</span>
+ <span class="ActionScriptBracket/Brace">{</span>
+ <span class="ActionScriptReserved">public</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">run_id</span>:<span class="ActionScriptDefault_Text">int</span>;
+ <span class="ActionScriptReserved">public</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">runDate</span>:<span class="ActionScriptDefault_Text">String</span>;
+ <span class="ActionScriptComment">//public var hours:String;
+</span> <span class="ActionScriptComment">//public var mins:String;
+</span> <span class="ActionScriptComment">//public var seconds:String;
+</span> <span class="ActionScriptReserved">public</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">pace</span>:<span class="ActionScriptDefault_Text">String</span>;
+ <span class="ActionScriptReserved">public</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">miles</span>:<span class="ActionScriptDefault_Text">Number</span>;
+ <span class="ActionScriptReserved">public</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">notes</span>:<span class="ActionScriptDefault_Text">String</span>;
+
+ <span class="ActionScriptReserved">public</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">RunVO</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>
+ <span class="ActionScriptBracket/Brace">{</span>
+ <span class="ActionScriptBracket/Brace">}</span>
+ <span class="ActionScriptBracket/Brace">}</span>
+<span class="ActionScriptBracket/Brace">}</span></pre></body>
+</html>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/RunTracker-app.xml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/RunTracker-app.xml b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/RunTracker-app.xml
new file mode 100644
index 0000000..9fe29ba
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/RunTracker-app.xml
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<application xmlns="http://ns.adobe.com/air/application/2.5">
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+ Specifies parameters for identifying, installing, and launching AIR applications.
+
+ xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/2.5
+ The last segment of the namespace specifies the version
+ of the AIR runtime required for this application to run.
+
+ minimumPatchLevel - The minimum patch level of the AIR runtime required to run
+ the application. Optional.
+-->
+
+ <!-- A universally unique application identifier. Must be unique across all AIR applications.
+ Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->
+ <id>RunTracker</id>
+
+ <!-- Used as the filename for the application. Required. -->
+ <filename>RunTracker</filename>
+
+ <!-- The name that is displayed in the AIR application installer.
+ May have multiple values for each language. See samples or xsd schema file. Optional. -->
+ <name>RunTracker</name>
+
+ <!-- An application version designator (such as "v1", "2.5", or "Alpha 1"). Required. -->
+ <version>v1</version>
+
+ <!-- Description, displayed in the AIR application installer.
+ May have multiple values for each language. See samples or xsd schema file. Optional. -->
+ <!-- <description></description> -->
+
+ <!-- Copyright information. Optional -->
+ <!-- <copyright></copyright> -->
+
+ <!-- Publisher ID. Used if you're updating an application created prior to 1.5.3 -->
+ <!-- <publisherID></publisherID> -->
+
+ <!-- Settings for the application's initial window. Required. -->
+ <initialWindow>
+ <!-- The main SWF or HTML file of the application. Required. -->
+ <!-- Note: In Flash Builder, the SWF reference is set automatically. -->
+ <content>[This value will be overwritten by Flash Builder in the output app.xml]</content>
+
+ <!-- The title of the main window. Optional. -->
+ <!-- <title></title> -->
+
+ <!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
+ <!-- <systemChrome></systemChrome> -->
+
+ <!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
+ <!-- <transparent></transparent> -->
+
+ <!-- Whether the window is initially visible. Optional. Default false. -->
+ <visible>true</visible>
+
+ <!-- Whether the user can minimize the window. Optional. Default true. -->
+ <!-- <minimizable></minimizable> -->
+
+ <!-- Whether the user can maximize the window. Optional. Default true. -->
+ <!-- <maximizable></maximizable> -->
+
+ <!-- Whether the user can resize the window. Optional. Default true. -->
+ <!-- <resizable></resizable> -->
+
+ <!-- The window's initial width in pixels. Optional. -->
+ <width>600</width>
+
+ <!-- The window's initial height in pixels. Optional. -->
+ <height>700</height>
+
+ <!-- The window's initial x position. Optional. -->
+ <x>300</x>
+
+ <!-- The window's initial y position. Optional. -->
+ <y>200</y>
+
+ <!-- The window's minimum size, specified as a width/height pair in pixels, such as "400 200". Optional. -->
+ <!-- <minSize></minSize> -->
+
+ <!-- The window's initial maximum size, specified as a width/height pair in pixels, such as "1600 1200". Optional. -->
+ <!-- <maxSize></maxSize> -->
+ </initialWindow>
+
+ <!-- We recommend omitting the supportedProfiles element, -->
+ <!-- which in turn permits your application to be deployed to all -->
+ <!-- devices supported by AIR. If you wish to restrict deployment -->
+ <!-- (i.e., to only mobile devices) then add this element and list -->
+ <!-- only the profiles which your application does support. -->
+ <!-- <supportedProfiles>desktop extendedDesktop mobileDevice extendedMobileDevice</supportedProfiles> -->
+
+ <!-- The subpath of the standard default installation location to use. Optional. -->
+ <!-- <installFolder></installFolder> -->
+
+ <!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
+ <!-- <programMenuFolder></programMenuFolder> -->
+
+ <!-- The icon the system uses for the application. For at least one resolution,
+ specify the path to a PNG file included in the AIR package. Optional. -->
+ <icon>
+ <image72x72>assets/runner72.png</image72x72>
+ </icon>
+
+ <!-- Whether the application handles the update when a user double-clicks an update version
+ of the AIR file (true), or the default AIR application installer handles the update (false).
+ Optional. Default false. -->
+ <!-- <customUpdateUI></customUpdateUI> -->
+
+ <!-- Whether the application can be launched when the user clicks a link in a web browser.
+ Optional. Default false. -->
+ <!-- <allowBrowserInvocation></allowBrowserInvocation> -->
+
+ <!-- Listing of file types for which the application can register. Optional. -->
+ <!-- <fileTypes> -->
+
+ <!-- Defines one file type. Optional. -->
+ <!-- <fileType> -->
+
+ <!-- The name that the system displays for the registered file type. Required. -->
+ <!-- <name></name> -->
+
+ <!-- The extension to register. Required. -->
+ <!-- <extension></extension> -->
+
+ <!-- The description of the file type. Optional. -->
+ <!-- <description></description> -->
+
+ <!-- The MIME content type. -->
+ <!-- <contentType></contentType> -->
+
+ <!-- The icon to display for the file type. Optional. -->
+ <!-- <icon>
+ <image16x16></image16x16>
+ <image32x32></image32x32>
+ <image48x48></image48x48>
+ <image128x128></image128x128>
+ </icon> -->
+
+ <!-- </fileType> -->
+ <!-- </fileTypes> -->
+
+ <!-- iPhone/iPad -specific capabilities -->
+ <!-- <iPhone> -->
+
+ <!-- A list of plist key/value pairs to be added to the application Info.plist -->
+ <!-- <InfoAdditions>
+ <![CDATA[
+ <key>UIDeviceFamily</key>
+ <array>
+ <string>1</string>
+ <string>2</string>
+ </array>
+ <key>UIStatusBarStyle</key>
+ <string>UIStatusBarStyleBlackOpaque</string>
+ <key>UIRequiresPersistentWiFi</key>
+ <string>YES</string>
+ ]]>
+ </InfoAdditions> -->
+
+ <!-- </iPhone> -->
+
+</application>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/RunTracker.mxml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/RunTracker.mxml b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/RunTracker.mxml
new file mode 100644
index 0000000..8cd1106
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/RunTracker.mxml
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:s="library://ns.adobe.com/flex/spark"
+ xmlns:mx="library://ns.adobe.com/flex/mx" backgroundColor="0x000000"
+ width="100%" height="100%" frameRate="60" applicationComplete="appCompleteHandler(event)" viewSourceURL="srcview/index.html">
+
+
+ <fx:Script>
+ <![CDATA[
+ import com.devgirl.runtracker.events.RunListResultEvent;
+ import com.devgirl.runtracker.service.DBService;
+ import com.devgirl.runtracker.vo.RunVO;
+
+ import mx.charts.HitData;
+ import mx.charts.chartClasses.IAxis;
+ import mx.charts.chartClasses.Series;
+ import mx.controls.Alert;
+ import mx.events.CalendarLayoutChangeEvent;
+ import mx.events.DataGridEvent;
+ import mx.events.FlexEvent;
+ import mx.events.IndexChangedEvent;
+
+ private var dbService:DBService;
+ private var userPace:String;
+
+ private function btnCalc_clickHandler():void
+ {
+ if (numMiles.text == null || (hrsVal.value==0 && minsVal.value==0 && secsVal.value==0))
+ {
+ Alert.show("Please enter both miles and time for pace calculation.","Required Values Error");
+ return;
+ }
+
+ var totalSeconds:Number = ((hrsVal.value*3600)+(minsVal.value*60)+secsVal.value)/parseFloat(numMiles.text);
+ userPace = this.convertTime(totalSeconds);
+ lblPace.text = userPace + " mins/mile";
+ grpPace.visible=true;
+ }
+
+ private function convertTime(timeInSecs:int):String
+ {
+ var hours:int = timeInSecs / 3600;
+ var mins:int = timeInSecs / 60 - (hours * 60);
+ var secs:int = timeInSecs - (hours * 3600) - (mins * 60);
+ trace(hours + ":" + mins + ":" + secs);
+ var d:Date = new Date(null,null,null,hours,mins,secs,null);
+ timeFormatter.format(d);
+ return timeFormatter.format(d);
+ }
+
+ private function appCompleteHandler(event:FlexEvent):void
+ {
+ dbService = new DBService();
+ dbService.addEventListener(RunListResultEvent.RUN_LIST_EVENT,handleRunList);
+ }
+
+ private function handleRunList(event:RunListResultEvent):void
+ {
+ runsAC = event.runEntries;
+ }
+
+ private function saveBtn_clickHandler(event:MouseEvent):void
+ {
+ var run:RunVO = new RunVO();
+ run.runDate = dateFormatter.format(this.date.text);
+ run.miles = parseFloat(numMiles.text);
+ run.pace = userPace;
+ run.notes = notes.text;
+ dbService.addRun(run);
+ lbl.text = "Run data saved successfully";
+ resetFields();
+ }
+
+ private function resetFields():void
+ {
+ // clear fields for more input
+ this.date.text = '';
+ this.numMiles.text = '';
+ this.hrsVal.value = 0;
+ this.minsVal.value = 0;
+ this.secsVal.value = 0;
+ this.notes.text = '';
+ this.lblPace.text = '';
+ }
+
+ private function tabChangeHandler(event:IndexChangedEvent):void
+ {
+ dbService.getRuns();
+ if (event.newIndex==1)
+ {
+ dg.dispatchEvent(new DataGridEvent(DataGridEvent.HEADER_RELEASE,false,true,0,null,0,null,null,0));
+ }
+ }
+
+
+ private function dateFunction(s:String):Date
+ {
+ var newDate:Date = DateField.stringToDate(s,"YYYY-MM-DD");
+ return newDate;
+ }
+
+ private function paceFunction(s:String):Date
+ {
+ if (s!=null)
+ {
+ var idx:int = s.indexOf(':');
+ // Create a new date object with just the time values parsed from the String
+ var newDate:Date = new Date(null,null,null,"00",s.substring(0,idx),s.substring(idx+1,s.length),null);
+ return newDate;
+ }
+ else return null;
+ }
+
+ private function dataTipFunction(hitData:HitData):String
+ {
+ var tip:String;
+ var run:RunVO = hitData.item as RunVO;
+ tip = run.miles + " miles on " + run.runDate+"\n";
+ tip += " at " + run.pace;
+ return tip;
+ }
+
+ private function paceLblFunc(labelValue:Date, previousValue:Object, axis:IAxis):String
+ {
+ return timeFormatter.format(labelValue);
+ }
+
+ private function dateLblFunc(labelValue:Date, previousValue:Object, axis:IAxis):String
+ {
+ return dateFormatter.format(labelValue.toDateString());
+ }
+
+ private function date_changeHandler(event:CalendarLayoutChangeEvent):void
+ {
+ // A new date is being entered, clear saved label
+ lbl.text = '';
+ }
+
+ ]]>
+ </fx:Script>
+
+ <fx:Declarations>
+ <s:ArrayCollection id="runsAC"/>
+ <mx:DateFormatter id="timeFormatter" formatString="NN:SS" />
+ <mx:DateFormatter id="dateFormatter" formatString="YYYY-MM-DD"/>
+ </fx:Declarations>
+
+ <s:layout>
+ <s:VerticalLayout gap="8" paddingLeft="50" paddingTop="10" paddingRight="20" paddingBottom="20" horizontalAlign="left"
+ verticalAlign="middle"/>
+ </s:layout>
+
+ <mx:TabNavigator width="100%" height="100%" fontSize="26" backgroundColor="0x000000" color="0x323232" change="tabChangeHandler(event)">
+ <s:NavigatorContent label="Miles" width="100%" height="100%" backgroundColor="0x000000" color="0xFFFFFF">
+ <s:layout>
+ <s:VerticalLayout gap="8" paddingTop="8" paddingLeft="8" paddingRight="8" paddingBottom="8"/>
+ </s:layout>
+
+ <s:HGroup horizontalAlign="center" verticalAlign="middle">
+ <s:Label text="Date:" fontSize="26"/>
+ <mx:DateField id="date" color="0x000000" showToday="true" selectedDate="{new Date()}" change="date_changeHandler(event)"/>
+ </s:HGroup>
+
+ <s:HGroup horizontalAlign="center" verticalAlign="middle">
+ <s:Label text="Miles:" fontSize="26"/>
+ <s:TextInput id="numMiles" fontSize="26" color="0x000000" widthInChars="3" restrict="0-9." text="0"/>
+ <mx:Spacer width="25"/>
+ <mx:Image source="@Embed(source='assets/runner3.jpg')" width="100" height="100"/>
+ </s:HGroup>
+
+ <s:VGroup horizontalAlign="center" verticalAlign="middle" gap="15">
+ <s:HGroup horizontalAlign="center" verticalAlign="middle" paddingTop="8">
+ <s:VGroup >
+ <s:Label text="Hours" fontSize="18"/>
+ <s:NumericStepper id="hrsVal" maximum="99" maxChars="2" fontSize="26"
+ skinClass="com.devgirl.runtracker.skins.MyNumericStepperSkin"/>
+ </s:VGroup>
+ <s:VGroup>
+ <s:Label text="Mins" fontSize="18"/>
+ <s:NumericStepper id="minsVal" maxChars="2" maximum="59" fontSize="26"
+ skinClass="com.devgirl.runtracker.skins.MyNumericStepperSkin"/>
+ </s:VGroup>
+ <s:VGroup>
+ <s:Label text="Secs" fontSize="18"/>
+ <s:NumericStepper id="secsVal" maxChars="2" maximum="59" fontSize="26"
+ skinClass="com.devgirl.runtracker.skins.MyNumericStepperSkin"/>
+ </s:VGroup>
+ </s:HGroup>
+ <s:Button id="btnCalc" label="Calculate Pace" fontSize="24" left="200" height="40" click="btnCalc_clickHandler()"
+ color="0x000000"/>
+ </s:VGroup>
+
+ <s:HGroup horizontalAlign="center" verticalAlign="middle" visible="false" id="grpPace" >
+ <s:Label text="Pace:" fontSize="28"/>
+ <s:Label id="lblPace" color="0x336699" fontSize="26"/>
+ </s:HGroup>
+
+ <s:Label text="Notes:" fontSize="26" color="0xFFFFFF"/>
+ <s:TextArea id="notes" width="90%" height="100" fontSize="26" color="0x000000"/>
+ <s:Button id="saveBtn" label="Save Run" click="saveBtn_clickHandler(event)" color="0x000000"/>
+ <s:Label id="lbl"/>
+ </s:NavigatorContent>
+
+ <s:NavigatorContent label="History" height="100%" width="100%" backgroundColor="0x000000">
+ <s:layout>
+ <s:VerticalLayout gap="8" paddingTop="8" paddingLeft="8" paddingRight="8" paddingBottom="8" horizontalAlign="center"
+ verticalAlign="middle"/>
+ </s:layout>
+ <mx:DataGrid id="dg" width="90%" height="90%" dataProvider="{runsAC}" color="0x000000" fontSize="18">
+ <mx:columns>
+ <mx:DataGridColumn dataField="runDate" headerText="Date" width="120"/>
+ <mx:DataGridColumn dataField="miles" headerText="Miles" width="50"/>
+ <mx:DataGridColumn dataField="pace" headerText="Pace" width="60"/>
+ <mx:DataGridColumn dataField="notes" headerText="Notes" width="140"/>
+ </mx:columns>
+ </mx:DataGrid>
+ </s:NavigatorContent>
+
+ <s:NavigatorContent label="Trends" color="0xFFFFFF" width="100%" height="100%">
+ <s:VGroup>
+ <mx:Legend dataProvider="{mychart}"/>
+ <mx:LineChart id="mychart" height="100%" width="100%"
+ paddingRight="5" paddingLeft="5"
+ showDataTips="true" dataTipFunction="dataTipFunction" dataProvider="{runsAC}">
+
+ <mx:horizontalAxis>
+ <mx:DateTimeAxis parseFunction="dateFunction" labelFunction="dateLblFunc" dataUnits="days"/>
+ </mx:horizontalAxis>
+
+ <mx:verticalAxis>
+ <mx:DateTimeAxis baseAtZero="true" parseFunction="paceFunction" labelFunction="paceLblFunc" dataUnits="seconds" />
+ </mx:verticalAxis>
+
+ <mx:series>
+ <mx:LineSeries xField="runDate" yField="pace" displayName="Pace Trend" sortOnXField="true"/>
+ </mx:series>
+ </mx:LineChart>
+ </s:VGroup>
+ </s:NavigatorContent>
+ </mx:TabNavigator>
+
+</s:Application>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_bluelink_down.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_bluelink_down.png b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_bluelink_down.png
new file mode 100644
index 0000000..58c248a
Binary files /dev/null and b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_bluelink_down.png differ
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_bluelink_up.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_bluelink_up.png b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_bluelink_up.png
new file mode 100644
index 0000000..7d0f38e
Binary files /dev/null and b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_bluelink_up.png differ
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_down_float.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_down_float.png b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_down_float.png
new file mode 100644
index 0000000..923d330
Binary files /dev/null and b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_down_float.png differ
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_up_float.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_up_float.png b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_up_float.png
new file mode 100644
index 0000000..eda5faf
Binary files /dev/null and b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/assets/arrow_up_float.png differ
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/DeleteLocalEvent.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/DeleteLocalEvent.as b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/DeleteLocalEvent.as
new file mode 100644
index 0000000..b41d43d
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/DeleteLocalEvent.as
@@ -0,0 +1,35 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package com.devgirl.runtracker.events
+{
+ import flash.events.Event;
+ import com.devgirl.runtracker.vo.RunVO;
+
+ public class DeleteLocalEvent extends Event
+ {
+ public static const DELETE_LOCAL_SUCCESS:String = "deleteLocal";
+ public var deletedEntry:RunVO;
+
+ public function DeleteLocalEvent(runVO:RunVO)
+ {
+ super(DELETE_LOCAL_SUCCESS, true);
+ this.deletedEntry = runVO;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/RemoteSaveFailEvent.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/RemoteSaveFailEvent.as b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/RemoteSaveFailEvent.as
new file mode 100644
index 0000000..2ece4a4
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/RemoteSaveFailEvent.as
@@ -0,0 +1,34 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package com.devgirl.runtracker.events
+{
+ import flash.events.Event;
+
+ public class RemoteSaveFailEvent extends Event
+ {
+ public static const REMOTE_SAVE_FAIL:String = "remoteSaveFail";
+ public var errorMsg:String;
+
+ public function RemoteSaveFailEvent(errorString:String)
+ {
+ super(REMOTE_SAVE_FAIL, true);
+ this.errorMsg = errorString;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/RunListResultEvent.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/RunListResultEvent.as b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/RunListResultEvent.as
new file mode 100644
index 0000000..c1ef951
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/RunListResultEvent.as
@@ -0,0 +1,35 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package com.devgirl.runtracker.events
+{
+ import flash.events.Event;
+ import mx.collections.ArrayCollection;
+
+ public class RunListResultEvent extends Event
+ {
+ public static const RUN_LIST_EVENT:String = "runListEvent";
+ public var runEntries:ArrayCollection;
+
+ public function RunListResultEvent(runEntries:ArrayCollection)
+ {
+ super(RUN_LIST_EVENT, true);
+ this.runEntries = runEntries;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/SaveLocalEvent.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/SaveLocalEvent.as b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/SaveLocalEvent.as
new file mode 100644
index 0000000..5ba28fd
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/events/SaveLocalEvent.as
@@ -0,0 +1,36 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package com.devgirl.runtracker.events
+{
+ import flash.events.Event;
+ import com.devgirl.runtracker.vo.RunVO;
+
+ public class SaveLocalEvent extends Event
+ {
+ public static const SAVE_LOCAL_SUCCESS:String = "saveLocal";
+ public var savedRunID:int;
+
+ public function SaveLocalEvent(runId:int)
+ {
+ super(SAVE_LOCAL_SUCCESS, true);
+ this.savedRunID = runId;
+
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/service/DBService.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/service/DBService.as b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/service/DBService.as
new file mode 100644
index 0000000..6f2d423
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/service/DBService.as
@@ -0,0 +1,222 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package com.devgirl.runtracker.service
+{
+ import com.devgirl.runtracker.events.DeleteLocalEvent;
+ import com.devgirl.runtracker.events.RunListResultEvent;
+ import com.devgirl.runtracker.events.SaveLocalEvent;
+ import com.devgirl.runtracker.vo.RunVO;
+
+ import flash.data.SQLColumnSchema;
+ import flash.data.SQLConnection;
+ import flash.data.SQLResult;
+ import flash.data.SQLSchemaResult;
+ import flash.data.SQLStatement;
+ import flash.data.SQLTableSchema;
+ import flash.errors.SQLError;
+ import flash.events.Event;
+ import flash.events.EventDispatcher;
+ import flash.events.SQLErrorEvent;
+ import flash.events.SQLEvent;
+ import flash.filesystem.File;
+
+ import mx.collections.ArrayCollection;
+ import mx.controls.Alert;
+
+ [Event(name=LOCAL_SAVE_FAIL,type="flash.events.Event")]
+ [Event(name=LOCAL_DELETE_ALL_SUCCESS,type="flash.events.Event")]
+ [Event(name="runListEvent",type="com.devgirl.runtracker.events.RunListResultEvent")]
+
+
+ public class DBService extends EventDispatcher
+ {
+ private var runDB:SQLConnection;
+ private var dbStatement:SQLStatement;
+ private var currentRun:RunVO;
+ private var lastUpdateRowId:int;
+
+ [Bindable]
+ private var runCollection:Array = new Array();
+
+ public static const LOCAL_SAVE_FAIL:String = "localSaveFailed";
+ public static const LOCAL_DELETE_ALL_SUCCESS:String = "deleteAllSuccess";
+
+
+ public function DBService()
+ {
+ trace("DB Service init");
+ var dbFile:File = File.applicationStorageDirectory.resolvePath("runtracker5.db");
+ dbStatement = new SQLStatement();
+ dbStatement.itemClass = RunVO;
+ runDB = new SQLConnection();
+ dbStatement.sqlConnection = runDB;
+ runDB.addEventListener(SQLEvent.OPEN, onDatabaseOpen);
+ runDB.addEventListener(SQLErrorEvent.ERROR, errorHandler);
+ runDB.open(dbFile);
+ }
+
+
+ private function onDatabaseOpen(event:SQLEvent):void
+ {
+ dbStatement.text = "CREATE TABLE IF NOT EXISTS runtracker (run_id INTEGER PRIMARY KEY AUTOINCREMENT, runDate TEXT, " +
+ "pace TEXT, miles REAL, notes TEXT)";
+ dbStatement.addEventListener(SQLEvent.RESULT, handleOpenResult);
+ dbStatement.addEventListener(SQLErrorEvent.ERROR, createError);
+ dbStatement.execute();
+ }
+
+ private function handleOpenResult(event:SQLEvent):void
+ {
+ var result:SQLResult = dbStatement.getResult();
+ dbStatement.removeEventListener(SQLEvent.RESULT, handleOpenResult);
+ dbStatement.removeEventListener(SQLErrorEvent.ERROR, createError);
+
+ }
+
+ private function handleAlterResult(event:SQLEvent):void
+ {
+ // nothing to do here
+ dbStatement.removeEventListener(SQLEvent.RESULT, handleAlterResult);
+ trace("New column added");
+ }
+
+
+
+ private function handleListResult(event:SQLEvent):void
+ {
+ var result:SQLResult = dbStatement.getResult();
+ trace("Handling list result... " + result.data);
+ if (result.data != null) {
+ this.runCollection = result.data;
+ dispatchEvent(new RunListResultEvent(new ArrayCollection(this.runCollection)));
+ }
+ }
+
+ private function handleSaveResult(event:SQLEvent):void
+ {
+ dbStatement.removeEventListener(SQLEvent.RESULT, handleSaveResult);
+ dispatchEvent(new SaveLocalEvent(runDB.lastInsertRowID));
+ }
+
+ private function handleUpdateResult(event:SQLEvent):void
+ {
+ dispatchEvent(new SaveLocalEvent(lastUpdateRowId));
+ }
+
+ private function handleDeleteResult(event:SQLEvent):void
+ {
+ if (event.target.sqlConnection.totalChanges > 0)
+ dispatchEvent(new DeleteLocalEvent(currentRun));
+ }
+
+ private function handleDeleteAllResult(event:SQLEvent):void
+ {
+ dispatchEvent(new Event(DBService.LOCAL_DELETE_ALL_SUCCESS));
+ }
+
+ public function getRuns():void
+ {
+ dbStatement = new SQLStatement();
+ dbStatement.itemClass = RunVO;
+ dbStatement.sqlConnection = runDB;
+ trace("SQL " + dbStatement.itemClass);
+ dbStatement.text = "SELECT * FROM runtracker";
+ dbStatement.addEventListener(SQLEvent.RESULT, handleListResult);
+ dbStatement.addEventListener(SQLErrorEvent.ERROR, createError);
+ dbStatement.execute();
+ }
+
+ public function saveLocal(runs:ArrayCollection):void
+ {
+ for each (var item:RunVO in runs)
+ {
+ addRun(item);
+ }
+ }
+
+ public function updateRun(run:RunVO):void
+ {
+ var sql:String = "UPDATE runtracker SET date=:run_date, pace=:run_pace, miles=:run_miles, " +
+ "notes=:run_notes WHERE run_id=:run_runid";
+
+ dbStatement = new SQLStatement();
+ dbStatement.sqlConnection = runDB;
+ dbStatement.text = sql;
+
+ dbStatement.parameters[":run_date"] = run.runDate;
+ dbStatement.parameters[":run_pace"] = run.pace;
+ dbStatement.parameters[":run_miles"] = run.miles;
+ dbStatement.parameters[":run_notes"] = run.notes;
+ dbStatement.parameters[":run_runid"] = run.run_id;
+
+ // Use the same save result listener as when we insert, same behavior needed in controller...
+ dbStatement.addEventListener(SQLEvent.RESULT, handleUpdateResult);
+ lastUpdateRowId = run.run_id;
+ dbStatement.execute();
+ }
+
+ public function addRun(run:RunVO):void
+ {
+ var sql:String = "INSERT into runtracker(runDate,pace,miles,notes) VALUES " +
+ "(?, ?, ?, ?)";
+ dbStatement = new SQLStatement();
+ dbStatement.sqlConnection = runDB;
+ dbStatement.text = sql;
+
+ dbStatement.parameters[0] = run.runDate;
+ dbStatement.parameters[1] = run.pace;
+ dbStatement.parameters[2] = run.miles;
+ dbStatement.parameters[3] = run.notes;
+
+ dbStatement.addEventListener(SQLEvent.RESULT, handleSaveResult);
+ dbStatement.execute();
+ }
+
+ public function deleteRun(run:RunVO):void
+ {
+ var sqlDelete:String = "delete from runtracker where run_id='"+run.run_id+"';";
+ dbStatement = new SQLStatement();
+ dbStatement.sqlConnection = runDB;
+ dbStatement.text = sqlDelete;
+ dbStatement.addEventListener(SQLEvent.RESULT, handleDeleteResult);
+ currentRun = run;
+ dbStatement.execute();
+ }
+
+ public function deleteRuns(runList:ArrayCollection):void
+ {
+ var sqlDelete:String = "delete from runtracker";
+ dbStatement = new SQLStatement();
+ dbStatement.sqlConnection = runDB;
+ dbStatement.text = sqlDelete;
+ dbStatement.addEventListener(SQLEvent.RESULT, handleDeleteAllResult);
+ dbStatement.execute();
+ }
+
+ private function errorHandler(error:SQLError):void
+ {
+ Alert.show("SQL Error occurred on operation: " + error.operation + " message " + error.message);
+ }
+
+ private function createError(event:SQLErrorEvent):void
+ {
+ dispatchEvent(new Event(DBService.LOCAL_SAVE_FAIL));
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/skins/DecrementSkin.mxml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/skins/DecrementSkin.mxml b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/skins/DecrementSkin.mxml
new file mode 100644
index 0000000..ae842c6
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/skins/DecrementSkin.mxml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+
+
+<!--- The default skin class for the down button of a Spark NumericStepper component.
+
+ @see spark.components.NumericStepper
+
+ @langversion 3.0
+ @playerversion Flash 10
+ @playerversion AIR 1.5
+ @productversion Flex 4
+-->
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
+ xmlns:fb="http://ns.adobe.com/flashbuilder/2009">
+
+ <fx:Metadata>
+ <![CDATA[
+ /**
+ * @copy spark.skins.spark.ApplicationSkin#hostComponent
+ */
+ [HostComponent("spark.components.Button")]
+ ]]>
+ </fx:Metadata>
+
+ <s:states>
+ <s:State name="up" />
+ <s:State name="over"/>
+ <s:State name="down" />
+ <s:State name="disabled" />
+ </s:states>
+
+ <s:Group left="0" top="0" right="0" bottom="0">
+
+ <!-- border/fill -->
+ <!--- @private -->
+ <s:Rect id="fill" left="0" top="0" right="0" bottom="0" width="18" height="16" bottomRightRadiusX="2">
+ <s:stroke>
+ <s:SolidColorStroke color="0x686868" weight="1"/>
+ </s:stroke>
+ <s:fill>
+ <s:LinearGradient rotation="90">
+ <s:GradientEntry color="0xE8E8E8"
+ color.over="0xC2C2C2"
+ color.down="0xAEB0B1" />
+ <s:GradientEntry color="0xDFDFDF"
+ color.over="0xADAEAF"
+ color.down="0xA1A3A5" />
+ </s:LinearGradient>
+ </s:fill>
+ </s:Rect>
+
+ <!-- highlight -->
+ <!--- @private -->
+ <s:Rect id="highlight" left="1" top="1" right="1" bottom="1" bottomRightRadiusX="2">
+ <s:stroke>
+ <s:LinearGradientStroke rotation="90" weight="1">
+ <s:GradientEntry color="0xFFFFFF"
+ color.down="0x000000"
+ alpha="0.55"
+ alpha.over="0.55"
+ alpha.down="0.15" />
+ <s:GradientEntry color="0xFFFFFF"
+ color.down="0x336699"
+ alpha="0.2475"
+ alpha.over="0.2475"
+ alpha.down="0" />
+ </s:LinearGradientStroke>
+ </s:stroke>
+ </s:Rect>
+
+ <!-- shadow -->
+ <s:Rect left="1" top="2" right="1" height="1" includeIn="down">
+ <s:fill>
+ <s:SolidColor color="0x336699" alpha="0.07" />
+ </s:fill>
+ </s:Rect>
+ </s:Group>
+
+ <s:Rect id="arrow" horizontalCenter="0" verticalCenter="0" width="38" height="29">
+ <s:fill>
+ <s:BitmapFill id="arrowFill" source="@Embed(source='assets/arrow_down_float.png')" fillMode="clip"/>
+ </s:fill>
+ </s:Rect>
+
+
+</s:SparkSkin>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/d43c133c/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/skins/IncrementSkin.mxml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/skins/IncrementSkin.mxml b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/skins/IncrementSkin.mxml
new file mode 100644
index 0000000..969f0d1
--- /dev/null
+++ b/TourDeFlex/TourDeFlex_content/AIR-for-Android/srcview/src/com/devgirl/runtracker/skins/IncrementSkin.mxml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+
+
+<!--- The default skin class for the up button of a Spark NumericStepper component.
+
+ @see spark.components.NumericStepper
+
+ @langversion 3.0
+ @playerversion Flash 10
+ @playerversion AIR 1.5
+ @productversion Flex 4
+-->
+<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
+ xmlns:fb="http://ns.adobe.com/flashbuilder/2009">
+
+ <fx:Metadata>
+ <![CDATA[
+ /**
+ * @copy spark.skins.spark.ApplicationSkin#hostComponent
+ */
+ [HostComponent("spark.components.Button")]
+ ]]>
+ </fx:Metadata>
+
+ <s:states>
+ <s:State name="up" />
+ <s:State name="over"/>
+ <s:State name="down" />
+ <s:State name="disabled" />
+ </s:states>
+
+ <s:Group left="0" top="0" right="0" bottom="0">
+
+ <!-- border/fill -->
+ <!--- @private -->
+ <s:Rect id="fill" left="0" top="0" right="0" bottom="0" width="18" height="16" topRightRadiusX="2">
+ <s:stroke>
+ <s:SolidColorStroke color="0x686868" weight="1"/>
+ </s:stroke>
+ <s:fill>
+ <s:LinearGradient rotation="90">
+ <s:GradientEntry color="0xFFFFFF"
+ color.over="0xC2C2C2"
+ color.down="0xAEB0B1" />
+ <s:GradientEntry color="0xF0F0F0"
+ color.over="0xADAEAF"
+ color.down="0xA1A3A5" />
+ </s:LinearGradient>
+ </s:fill>
+ </s:Rect>
+
+ <!-- highlight -->
+ <!--- @private -->
+ <s:Rect id="highlight" left="1" top="1" right="1" bottom="1" topRightRadiusX="2">
+ <s:stroke>
+ <s:LinearGradientStroke rotation="90" weight="1">
+ <s:GradientEntry color="0xFFFFFF"
+ color.down="0x000000"
+ alpha.over="0.55"
+ alpha.down="0.15" />
+ <s:GradientEntry color="0xFFFFFF"
+ color.down="0x336699"
+ alpha="0.45"
+ alpha.over="0.2475"
+ alpha.down="0" />
+ </s:LinearGradientStroke>
+ </s:stroke>
+ </s:Rect>
+
+ <!-- shadow -->
+ <s:Rect left="1" top="2" right="1" height="1" includeIn="down">
+ <s:fill>
+ <s:SolidColor color="0x336699" alpha="0.07" />
+ </s:fill>
+ </s:Rect>
+ </s:Group>
+
+ <s:Rect id="arrow" horizontalCenter="0" verticalCenter="0" width="38" height="29">
+ <s:fill>
+ <s:BitmapFill id="arrowFill" source="@Embed(source='assets/arrow_up_float.png')" fillMode="clip"/>
+ </s:fill>
+ </s:Rect>
+
+
+
+
+</s:SparkSkin>