Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/DropShadowGraphicExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/DropShadowGraphicExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/DropShadowGraphicExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/EclipseExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/EclipseExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/EclipseExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/EclipseExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/EllipseTransformExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/EllipseTransformExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/EllipseTransformExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/EllipseTransformExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: websites/staging/flex/trunk/content/tourdeflex/spark/fxg/LineExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/LineExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: websites/staging/flex/trunk/content/tourdeflex/spark/fxg/LineExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/LineExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/LinearGradientsSpreadMethodExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/LinearGradientsSpreadMethodExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/LinearGradientsSpreadMethodExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/LinearGradientsSpreadMethodExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/OrangeCrayonStar.fxg
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/OrangeCrayonStar.fxg
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: websites/staging/flex/trunk/content/tourdeflex/spark/fxg/RectExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/RectExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: websites/staging/flex/trunk/content/tourdeflex/spark/fxg/RectExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/RectExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/RichTextExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/RichTextExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/RichTextExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/RichTextExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/StaticFXGExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/StaticFXGExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/StaticFXGExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/StaticFXGExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/assets/ApacheFlexIcon.png
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/assets/ApacheFlexIcon.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/assets/ApacheFlexLogo.png
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/assets/ApacheFlexLogo.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/skins/TDFPanelSkin.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/fxg/skins/TDFPanelSkin.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCollator2Example.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCollator2Example.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCollator2Example.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCollator2Example.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCollatorExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCollatorExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCollatorExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCollatorExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyFormatter2Example.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyFormatter2Example.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyFormatter2Example.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyFormatter2Example.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyFormatterExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyFormatterExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyFormatterExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyFormatterExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyValidator2Example.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyValidator2Example.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyValidator2Example.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyValidator2Example.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyValidatorExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyValidatorExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyValidatorExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkCurrencyValidatorExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkDateTimeFormatter2Example.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkDateTimeFormatter2Example.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkDateTimeFormatter2Example.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkDateTimeFormatter2Example.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkDateTimeFormatterExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkDateTimeFormatterExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkDateTimeFormatterExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkDateTimeFormatterExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkFormatterExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkFormatterExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkFormatterExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkFormatterExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberFormatter2Example.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberFormatter2Example.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberFormatter2Example.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberFormatter2Example.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberFormatterExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberFormatterExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberFormatterExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberFormatterExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberValidator2Example.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberValidator2Example.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberValidator2Example.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberValidator2Example.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberValidatorExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberValidatorExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberValidatorExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkNumberValidatorExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkSortandSortField2Example.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkSortandSortField2Example.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkSortandSortField2Example.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkSortandSortField2Example.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkSortandSortFieldExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkSortandSortFieldExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkSortandSortFieldExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkSortandSortFieldExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkStringToolsExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkStringToolsExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkStringToolsExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/i18n/SparkStringToolsExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/Item.as
==============================================================================
--- websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/Item.as 
(added)
+++ websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/Item.as 
Sat Aug 23 08:50:20 2014
@@ -0,0 +1,62 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+    [Bindable]
+    public class Item
+    {
+        private var _name:String;
+        private var _photo:String;
+               private var _price:String;
+        
+        public function Item()
+        {
+        }
+        
+        public function get name():String
+        {
+            return _name;
+        }
+               
+               public function set name(name:String):void
+               {
+                       _name = name;
+               }
+
+               public function get photo():String
+        {
+            return _photo;
+        }
+               
+               public function set photo(photo:String):void
+               {
+                       _photo = photo;
+               }
+        
+               public function get price():String
+               {
+                       return _price;
+               }
+               public function set price(price:String):void
+               {
+                       _price = price;
+               }
+
+    }
+}
\ No newline at end of file

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ItemRenderer1Example.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ItemRenderer1Example.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ItemRenderer1Example.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ItemRenderer1Example.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ItemRenderer2Example.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ItemRenderer2Example.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ItemRenderer2Example.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ItemRenderer2Example.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ListItemRendererExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ListItemRendererExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ListItemRendererExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/ListItemRendererExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/MyListItemRenderer.mxml
==============================================================================
--- 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/MyListItemRenderer.mxml
 (added)
+++ 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/MyListItemRenderer.mxml
 Sat Aug 23 08:50:20 2014
@@ -0,0 +1,39 @@
+<!--
+
+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:ItemRenderer
+       xmlns:fx="http://ns.adobe.com/mxml/2009";
+       xmlns:s="library://ns.adobe.com/flex/spark"
+       xmlns:mx="library://ns.adobe.com/flex/mx">
+       
+       <s:states>
+               <s:State name="normal"/>
+               <s:State name="hovered"/>
+               <s:State name="selected" />
+       </s:states>
+       
+       <s:layout>
+               <s:VerticalLayout/>
+       </s:layout>
+       
+       <s:HGroup verticalAlign="middle" paddingTop="0" paddingBottom="0">
+               <mx:Image source="{data.photo}" width="50" height="40" 
alpha.hovered=".5"/>
+               <s:Label text="{data.name}" color.hovered="0x1313cd" 
color.selected="0x000000" verticalAlign="bottom"/>
+       </s:HGroup>
+       
+</s:ItemRenderer>
\ No newline at end of file

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/1.jpg
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/1.jpg
------------------------------------------------------------------------------
    svn:mime-type = image/jpeg

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/2.jpg
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/2.jpg
------------------------------------------------------------------------------
    svn:mime-type = image/jpeg

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/3.jpg
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/3.jpg
------------------------------------------------------------------------------
    svn:mime-type = image/jpeg

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/4.jpg
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/4.jpg
------------------------------------------------------------------------------
    svn:mime-type = image/jpeg

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/5.jpg
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/5.jpg
------------------------------------------------------------------------------
    svn:mime-type = image/jpeg

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/6.jpg
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/6.jpg
------------------------------------------------------------------------------
    svn:mime-type = image/jpeg

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/7.jpg
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/7.jpg
------------------------------------------------------------------------------
    svn:mime-type = image/jpeg

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/8.jpg
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/8.jpg
------------------------------------------------------------------------------
    svn:mime-type = image/jpeg

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/9.jpg
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/9.jpg
------------------------------------------------------------------------------
    svn:mime-type = image/jpeg

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/ApacheFlexIcon.png
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/assets/ApacheFlexIcon.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/data/list.xml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/data/list.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/renderers/ImageRenderer1.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/renderers/ImageRenderer1.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/renderers/ImageRenderer2.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/renderers/ImageRenderer2.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/skins/TDFPanelSkin.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/itemRenderers/skins/TDFPanelSkin.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutAnimatedExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutAnimatedExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutAnimatedExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutAnimatedExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutFlickrWheelExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutFlickrWheelExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutFlickrWheelExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutFlickrWheelExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutFlowExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutFlowExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutFlowExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutFlowExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutHBaselineExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutHBaselineExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutHBaselineExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/CustomLayoutHBaselineExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/FlickrThumbnail.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/FlickrThumbnail.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/FlowLayout1.as
==============================================================================
--- websites/staging/flex/trunk/content/tourdeflex/spark/layouts/FlowLayout1.as 
(added)
+++ websites/staging/flex/trunk/content/tourdeflex/spark/layouts/FlowLayout1.as 
Sat Aug 23 08:50:20 2014
@@ -0,0 +1,195 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+import mx.core.ILayoutElement;
+
+import spark.components.supportClasses.GroupBase;
+import spark.layouts.supportClasses.LayoutBase;
+
+public class FlowLayout1 extends LayoutBase
+{
+    
+    //---------------------------------------------------------------
+    //
+    //  Class properties
+    //
+    //---------------------------------------------------------------
+    
+    //---------------------------------------------------------------
+    //  horizontalGap
+    //---------------------------------------------------------------
+
+    private var _horizontalGap:Number = 10;
+
+    public function set horizontalGap(value:Number):void
+    {
+        _horizontalGap = value;
+        
+        // We must invalidate the layout
+        var layoutTarget:GroupBase = target;
+        if (layoutTarget)
+            layoutTarget.invalidateDisplayList();
+    }
+    
+    //---------------------------------------------------------------
+    //  verticalAlign
+    //---------------------------------------------------------------
+
+    private var _verticalAlign:String = "bottom";
+    
+    public function set verticalAlign(value:String):void
+    {
+        _verticalAlign = value;
+        
+        // We must invalidate the layout
+        var layoutTarget:GroupBase = target;
+        if (layoutTarget)
+            layoutTarget.invalidateDisplayList();
+    }
+    
+       //---------------------------------------------------------------
+       //  horizontalAlign
+       //---------------------------------------------------------------
+       
+       private var _horizontalAlign:String = "left"; // center, right
+       
+       public function set horizontalAlign(value:String):void
+       {
+               _horizontalAlign = value;
+               
+               // We must invalidate the layout
+               var layoutTarget:GroupBase = target;
+               if (layoutTarget)
+                       layoutTarget.invalidateDisplayList();
+       }
+       
+    //---------------------------------------------------------------
+    //
+    //  Class methods
+    //
+    //---------------------------------------------------------------
+    
+    override public function updateDisplayList(containerWidth:Number,
+                                               containerHeight:Number):void
+    {
+        var element:ILayoutElement;
+        var layoutTarget:GroupBase = target;
+        var count:int = layoutTarget.numElements;
+        var hGap:Number = _horizontalGap;
+
+        // The position for the current element
+        var x:Number = 0;
+        var y:Number = 0;
+        var elementWidth:Number;
+        var elementHeight:Number;
+
+        var vAlign:Number = 0;
+        switch (_verticalAlign)
+        {
+            case "middle" : vAlign = 0.5; break;
+            case "bottom" : vAlign = 1; break;
+        }
+
+        // Keep track of per-row height, maximum row width
+        var maxRowWidth:Number = 0;
+
+        // loop through the elements
+        // while we can start a new row
+        var rowStart:int = 0;
+        while (rowStart < count)
+        {
+            // The row always contains the start element
+            element = useVirtualLayout ? 
layoutTarget.getVirtualElementAt(rowStart) :
+                                                                               
 layoutTarget.getElementAt(rowStart);
+                                                                            
+            var rowWidth:Number = element.getPreferredBoundsWidth();
+            var rowHeight:Number =  element.getPreferredBoundsHeight();
+            
+            // Find the end of the current row
+            var rowEnd:int = rowStart;
+            while (rowEnd + 1 < count)
+            {
+                element = useVirtualLayout ? 
layoutTarget.getVirtualElementAt(rowEnd + 1) :
+                                                                               
     layoutTarget.getElementAt(rowEnd + 1);
+                
+                // Since we haven't resized the element just yet, get its 
preferred size
+                elementWidth = element.getPreferredBoundsWidth();
+                elementHeight = element.getPreferredBoundsHeight();
+
+                // Can we add one more element to this row?
+                if (rowWidth + hGap + elementWidth > containerWidth)
+                    break;
+
+                rowWidth += hGap + elementWidth;
+                rowHeight = Math.max(rowHeight, elementHeight);
+                rowEnd++;
+            }
+            
+                       x = 0;
+                       switch (_horizontalAlign)
+                       {
+                               case "center" : x = Math.round(containerWidth - 
rowWidth) / 2; break;
+                               case "right" : x = containerWidth - rowWidth;
+                       }
+                       
+            // Keep track of the maximum row width so that we can
+            // set the correct contentSize
+            maxRowWidth = Math.max(maxRowWidth, x + rowWidth);
+
+            // Layout all the elements within the row
+            for (var i:int = rowStart; i <= rowEnd; i++) 
+            {
+                element = useVirtualLayout ? 
layoutTarget.getVirtualElementAt(i) : 
+                                                                               
         layoutTarget.getElementAt(i);
+
+                // Resize the element to its preferred size by passing
+                // NaN for the width and height constraints
+                element.setLayoutBoundsSize(NaN, NaN);
+
+                // Find out the element's dimensions sizes.
+                // We do this after the element has been already resized
+                // to its preferred size.
+                elementWidth = element.getLayoutBoundsWidth();
+                elementHeight = element.getLayoutBoundsHeight();
+
+                // Calculate the position within the row
+                var elementY:Number = Math.round((rowHeight - elementHeight) * 
vAlign);
+
+                // Position the element
+                element.setLayoutBoundsPosition(x, y + elementY);
+
+                x += hGap + elementWidth;
+            }
+
+            // Next row will start with the first element after the current 
row's end
+            rowStart = rowEnd + 1;
+
+            // Update the position to the beginning of the row
+            x = 0;
+            y += rowHeight;
+        }
+
+        // Set the content size which determines the scrolling limits
+        // and is used by the Scroller to calculate whether to show up
+        // the scrollbars when the the scroll policy is set to "auto"
+        layoutTarget.setContentSize(maxRowWidth, y);
+    }
+}
+}
\ No newline at end of file

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/HBaselineLayout.as
==============================================================================
--- 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/HBaselineLayout.as 
(added)
+++ 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/HBaselineLayout.as 
Sat Aug 23 08:50:20 2014
@@ -0,0 +1,199 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 {
+
+import mx.core.ILayoutElement;
+import mx.events.PropertyChangeEvent;
+import mx.formatters.NumberBase;
+
+import spark.components.supportClasses.GroupBase;
+import spark.layouts.HorizontalLayout;
+
+public class HBaselineLayout extends HorizontalLayout
+{
+       public function HBaselineLayout()
+       {
+               super();
+       }
+
+       //----------------------------------
+       //  globalBaseline
+       //----------------------------------
+       
+       [Inspectable(category="General")]
+
+       private var _globalBaseline:Number = NaN;
+       public function get globalBaseline():Number
+       {
+               return _globalBaseline;
+       }
+
+       public function set globalBaseline(value:Number):void
+       {
+               _globalBaseline = value;
+               var target:GroupBase = this.target;
+               if (target)
+               {
+                       target.invalidateSize();
+                       target.invalidateDisplayList();
+               }
+       }
+
+       //----------------------------------
+       //  actualBaseline
+       //----------------------------------
+       
+       private var _actualBaseline:Number;
+       
+       [Bindable("propertyChange")]
+       [Inspectable(category="General")]
+       
+       public function get actualBaseline():Number
+       {
+               return _actualBaseline;
+       }
+       
+       private function setActualBaseline(value:Number):void
+       {
+               if (value == _actualBaseline)
+                       return;
+
+               var oldValue:Number = _actualBaseline;
+               _actualBaseline = value;
+               dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, 
"actualBaseline", oldValue, value));
+       }
+       
+       //----------------------------------
+       //  verticalAlign
+       //----------------------------------
+       
+       [Inspectable(category="General", 
enumeration="top,bottom,middle,justify,contentJustify,baseline", 
defaultValue="top")]
+       override public function get verticalAlign():String
+       {
+               return super.verticalAlign;             
+       }
+
+       /**
+        *  @private 
+        */
+       override public function measure():void
+       {
+               super.measure();
+               
+               var target:GroupBase = this.target;
+               if (!target || verticalAlign != "baseline")
+                       return;
+               
+               measureBaseline(true /*usePreferredSize*/);
+               if (!isNaN(_globalBaseline))
+                       measuredBaselineTop = _globalBaseline;
+               
+               // The measured height is the sum of the space above and below 
the baseline
+               if (isNaN(paddingTop))
+                       measuredBaselineTop += paddingTop;
+               if (isNaN(paddingBottom))
+                       measuredBaselineBottom += paddingBottom;
+               target.measuredHeight = Math.round(measuredBaselineTop + 
measuredBaselineBottom);
+       }
+       
+       /**
+        *  @private 
+        */
+       override public function updateDisplayList(unscaledWidth:Number, 
unscaledHeight:Number):void
+       {
+               super.updateDisplayList(unscaledWidth, unscaledHeight);
+               
+               var target:GroupBase = this.target;
+               if (!target || verticalAlign != "baseline")
+                       return;
+
+               measureBaseline(false /*usePreferredSize*/);
+               if (!isNaN(_globalBaseline))
+                       measuredBaselineTop = _globalBaseline;
+
+               if (isNaN(paddingTop))
+                       measuredBaselineTop += paddingTop;
+               
+               // Adjust the position of the elements
+               var contentHeight:Number = 0;
+               var count:int = target.numElements;
+               for (var i:int = 0; i < count; i++)
+               {
+                       var element:ILayoutElement = target.getElementAt(i);
+                       if (!element || !element.includeInLayout)
+                               continue;
+                       
+                       var elementBaseline:Number = element.baseline as Number;
+                       if (isNaN(elementBaseline))
+                               elementBaseline = 0;
+
+                       var baselinePosition:Number = element.baselinePosition;
+                       var y:Number = measuredBaselineTop + (elementBaseline - 
baselinePosition);
+                       
element.setLayoutBoundsPosition(element.getLayoutBoundsX(), y);
+                       contentHeight = Math.max(contentHeight, 
element.getLayoutBoundsHeight() + y);
+               }
+
+               // Adjust the content height
+               if (isNaN(paddingBottom))
+                       contentHeight += paddingBottom;
+               target.setContentSize(target.contentWidth, contentHeight);
+               
+               // Update the baseline
+               setActualBaseline(measuredBaselineTop);
+       }
+
+       private var measuredBaselineTop:Number = 0;                     // How 
much space is needed above the baseline to fit all the elements
+       private var measuredBaselineBottom:Number = 0;          // How much 
space is needed below the baseline to fit all the elements
+       
+       /**
+        *  @private 
+        */
+       private function measureBaseline(usePreferredSize:Boolean):void
+       {
+               var elementBaseline:Number = 0;                         // The 
current element's explicit baseline constraint
+               var elementBaselineTop:Number = 0;                      // The 
portiono of the current element that's above the baseline
+               var elementBaselineBottom:Number = 0;           // The portion 
of the current element that's below the baseline
+
+               measuredBaselineTop = 0;
+               measuredBaselineBottom = 0;
+
+               var count:int = target.numElements;
+               for (var i:int = 0; i < count; i++)
+               {
+                       var element:ILayoutElement = target.getElementAt(i);
+                       if (!element || !element.includeInLayout)
+                               continue;
+                       
+                       var elementHeight:Number = usePreferredSize ? 
element.getPreferredBoundsHeight() :
+                                                                               
                                  element.getLayoutBoundsHeight();
+                       elementBaseline = element.baseline as Number;
+                       if (isNaN(elementBaseline))
+                               elementBaseline = 0;
+                       
+                       var baselinePosition:Number = element.baselinePosition;
+                       
+                       elementBaselineTop = baselinePosition - elementBaseline;
+                       elementBaselineBottom = elementHeight - 
elementBaselineTop;
+                       
+                       measuredBaselineTop = Math.max(elementBaselineTop, 
measuredBaselineTop);
+                       measuredBaselineBottom = 
Math.max(elementBaselineBottom, measuredBaselineBottom);
+               }
+       }
+}
+}
\ No newline at end of file

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/NumberInterpolatorWrapping.as
==============================================================================
--- 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/NumberInterpolatorWrapping.as
 (added)
+++ 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/NumberInterpolatorWrapping.as
 Sat Aug 23 08:50:20 2014
@@ -0,0 +1,110 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+import spark.effects.interpolation.IInterpolator;
+    
+public class NumberInterpolatorWrapping implements IInterpolator
+{
+    private var _rangeBegin:Number;
+    private var _rangeEnd:Number;
+    public function NumberInterpolatorWrapping(rangeBegin:Number, 
rangeEnd:Number)
+    {
+        _rangeBegin = rangeBegin;
+        _rangeEnd = rangeEnd;
+    }
+        
+    /**
+     * Returns the type that an implementor can handle
+     */
+    public function get interpolatedType():Class
+    {
+        return Number;
+    }
+    
+    /**
+     * Given an elapsed fraction of an animation between 0 and 1,
+     * and start and end values, this function returns some value
+     * based on whatever interpolation the implementor chooses to
+     * provide.
+     */
+    public function interpolate(fraction:Number, startValue:Object, 
endValue:Object):Object
+    {
+        if (fraction == 0)
+            return startValue;
+        else if (fraction == 1)
+            return endValue;
+        var start:Number = Number(startValue);
+        var end:Number = Number(endValue);
+
+        if (Math.abs(end - start) < Math.abs(_rangeEnd - _rangeBegin) - 
Math.abs(end - start))
+        {
+            return start + fraction * (end - start);
+        }
+        else
+        {
+            var result:Number;
+            if (start < end)
+            {
+                result = start - fraction * (_rangeEnd - _rangeBegin - 
Math.abs(start - end));
+                if (result < _rangeBegin)
+                    result += _rangeEnd - _rangeBegin;
+                return result;
+            }
+            else
+            {
+                result = start + fraction * (_rangeEnd - _rangeBegin - 
Math.abs(start - end));
+                if (result > _rangeEnd)
+                    result -= _rangeEnd - _rangeBegin;
+                return result;
+            }
+        }        
+    }
+    
+    public function increment(baseValue:Object, incrementValue:Object):Object
+    {
+        var result:Number = Number(baseValue) + Number(incrementValue);
+        // This won't handle situations where we're adding more than
+        // the range itself, but since this will only be called when
+        // the user submits a 'byValue' that large, it seems unlikely
+        // at the very least
+        if (result > _rangeEnd)
+            result = _rangeBegin + (result - _rangeEnd);
+        return result;
+    }
+    
+    public function decrement(baseValue:Object, decrementValue:Object):Object
+    {
+        var result:Number = Number(baseValue) - Number(decrementValue);
+        // This won't handle situations where we're subtracting more than
+        // the range itself, but since this will only be called when
+        // the user submits a 'byValue' that large, it seems unlikely
+        // at the very least
+        if (result < _rangeBegin)
+            result = _rangeEnd + (_rangeBegin - result);
+        return result;
+    }
+    
+    public function getLength(startValue:Number, endValue:Number):Number
+    {
+        return Math.min( Math.abs(startValue - endValue), Math.abs(_rangeEnd - 
_rangeBegin - Math.abs(startValue - endValue)));
+    }   
+
+}
+}
\ No newline at end of file

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/WheelLayout.as
==============================================================================
--- websites/staging/flex/trunk/content/tourdeflex/spark/layouts/WheelLayout.as 
(added)
+++ websites/staging/flex/trunk/content/tourdeflex/spark/layouts/WheelLayout.as 
Sat Aug 23 08:50:20 2014
@@ -0,0 +1,516 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+
+import flash.geom.Matrix;
+import flash.geom.Matrix3D;
+import flash.geom.Point;
+import flash.geom.Rectangle;
+import flash.geom.Vector3D;
+
+import mx.core.ILayoutElement;
+import mx.core.IVisualElement;
+
+import spark.components.supportClasses.GroupBase;
+import spark.core.NavigationUnit;
+import spark.layouts.supportClasses.LayoutBase;
+
+public class WheelLayout extends LayoutBase
+{
+    
//--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    
//--------------------------------------------------------------------------
+
+    public function WheelLayout()
+    {
+        super();
+    }
+    
+    
//--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    
//--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  gap
+    //----------------------------------
+
+    private var _gap:Number = 0;
+
+    /**
+     *  The gap between the items
+     */
+    public function get gap():Number
+    {
+        return _gap;
+    }
+    
+    public function set gap(value:Number):void
+    {
+        _gap = value;
+        var layoutTarget:GroupBase = target;
+        if (layoutTarget)
+        {
+            layoutTarget.invalidateSize();
+            layoutTarget.invalidateDisplayList();
+        }
+    }
+    
+    //----------------------------------
+    //  axisAngle
+    //----------------------------------
+
+    /**
+     *  @private  
+     *  The total width of all items, including gap space.
+     */
+    private var _totalWidth:Number;
+
+    /**
+     *  @private  
+     *  Cache which item is currently in view, to facilitate scrollposition 
delta calculations
+     */
+    private var _centeredItemIndex:int = 0;
+    private var _centeredItemCircumferenceBegin:Number = 0;
+    private var _centeredItemCircumferenceEnd:Number = 0;
+    private var _centeredItemDegrees:Number = 0;
+
+    /**
+     *  The axis to tilt the 3D wheel 
+     */
+    private var _axis:Vector3D = new Vector3D(0, 1, 0.1);
+    
+    /**
+     *  The angle to tilt the axis of the wheel
+     */
+    public function set axisAngle(value:Number):void
+    {
+        _axis = new Vector3D(0, Math.cos(Math.PI * value /180), 
Math.sin(Math.PI * value /180));
+        var layoutTarget:GroupBase = target;
+        if (layoutTarget)
+        {
+            layoutTarget.invalidateSize();
+            layoutTarget.invalidateDisplayList();
+        }
+    }
+    
+    /**
+     *  @private 
+     *  Given the radius of the sphere, return the radius of the
+     *  projected sphere. Uses the projection matrix of the
+     *  layout target to calculate.
+     */    
+    private function projectSphere(radius:Number, radius1:Number):Number
+    {
+        var fl:Number = target.transform.perspectiveProjection.focalLength;
+        var alpha:Number = Math.asin( radius1 / (radius + fl) );
+        return fl * Math.tan(alpha) * 2;
+    }
+    
+    /**
+     *  @private
+     *  Given the totalWidth, maxHeight and maxHalfWidthDiagonal, calculate 
the bounds of the items
+     *  on screen.  Uses the projection matrix of the layout target to 
calculate. 
+     */
+    private function projectBounds(totalWidth:Number, maxWidth:Number, 
maxHeight:Number, maxHalfWidthDiagonal:Number):Point
+    {
+        // Use the the total width as a circumference of an imaginary circle 
which we will use to
+        // align the items in 3D:
+        var radius:Number = _totalWidth * 0.5 / Math.PI;
+        
+        // Now since we are going to arrange all the items along circle, 
middle of the item being the tangent point,
+        // we need to calculate the minimum bounding circle. It is easily 
calculated from the maximum width item:
+        var boundingRadius:Number = Math.sqrt(radius * radius + 0.25 * 
maxWidth * maxWidth);
+                                      
+        var projectedBoundsW:Number = _axis.z * _axis.z * 
(maxHalfWidthDiagonal + 2 * radius) + 
+                                      projectSphere(radius, boundingRadius ) * 
_axis.y * _axis.y;
+                                      
+        var projectedBoundsH:Number = Math.abs(_axis.z) * 
(maxHalfWidthDiagonal + 2 * radius) +
+                                      maxHeight * _axis.y * _axis.y;
+                                      
+        return new Point(projectedBoundsW + 10, projectedBoundsH + 10);
+    }
+
+    /**
+     *  @private 
+     *  Iterates through all the items, calculates the projected bounds on 
screen, updates _totalWidth member variable.
+     */    
+    private function calculateBounds():Point
+    {
+        // Calculate total width:
+        _totalWidth = 0;
+     
+        var maxHeight:Number = 0;
+        var maxWidth:Number = 0;
+        var maxD:Number = 0;
+   
+        // Add up all the widths
+        var iter:LayoutIterator = new LayoutIterator(target);
+        var el:ILayoutElement;
+        while (el = iter.nextElement())
+        {
+            var preferredWidth:Number = el.getPreferredBoundsWidth(false 
/*postTransform*/);
+            var preferredHeight:Number = el.getPreferredBoundsHeight(false 
/*postTransform*/);
+
+            // Add up item width
+            _totalWidth += preferredWidth;
+            
+            // Max up item size
+            maxWidth = Math.max(maxWidth, preferredWidth);
+            maxHeight = Math.max(maxHeight, preferredHeight);
+            
+            maxD = Math.max(maxD, Math.sqrt(preferredWidth * preferredWidth / 
4 + 
+                                            preferredHeight * 
preferredHeight));    
+        }
+        
+        // Add up the gap
+        _totalWidth += gap * iter.numVisited;
+
+        // Project        
+        return projectBounds(_totalWidth, maxWidth, maxHeight, maxD);
+    }
+    
+    
//--------------------------------------------------------------------------
+    //
+    //  Overridden methods: LayoutBase
+    //
+    
//--------------------------------------------------------------------------
+    
+    /**
+     * @private
+     */
+    override public function set target(value:GroupBase):void
+    {
+        // Make sure that if layout is swapped out, we clean up
+        if (!value && target)
+        {
+            target.maintainProjectionCenter = false;
+
+            var iter:LayoutIterator = new LayoutIterator(target);
+            var el:ILayoutElement;
+            while (el = iter.nextElement())
+            {
+                el.setLayoutMatrix(new Matrix(), false /*triggerLayout*/);
+            }
+        }
+        
+        super.target = value;
+
+        // Make sure we turn on projection the first time the layout
+        // gets assigned to the group
+        if (target)
+            target.maintainProjectionCenter = true;
+    }
+    
+    override public function measure():void
+    {
+        var bounds:Point = calculateBounds();
+        
+        target.measuredWidth = bounds.x;
+        target.measuredHeight = bounds.y;
+    }
+    
+    override public function updateDisplayList(unscaledWidth:Number, 
unscaledHeight:Number):void
+    {
+        // Get the bounds, this will also update _totalWidth
+        var bounds:Point = calculateBounds();
+
+        // Update the content size
+        target.setContentSize(_totalWidth + unscaledWidth, bounds.y); 
+        var radius:Number = _totalWidth * 0.5 / Math.PI;
+        var gap:Number = this.gap;
+        _centeredItemDegrees = Number.MAX_VALUE;
+        
+        var scrollPosition:Number = target.horizontalScrollPosition;
+        var totalWidthSoFar:Number = 0;
+        // Subtract the half width of the first element from totalWidthSoFar: 
+        var iter:LayoutIterator = new LayoutIterator(target);
+        var el:ILayoutElement = iter.nextElement();
+        if (!el)
+            return;
+        totalWidthSoFar -= el.getPreferredBoundsWidth(false /*postTransform*/) 
/ 2;
+        
+        // Set the 3D Matrix for all the elements:
+        iter.reset();
+        while (el = iter.nextElement())
+        { 
+            // Size the item, no need to position it, since we'd set the 
computed matrix
+            // which defines the position.
+            el.setLayoutBoundsSize(NaN, NaN, false /*postTransform*/);
+            var elementWidth:Number = el.getLayoutBoundsWidth(false 
/*postTransform*/);
+            var elementHeight:Number = el.getLayoutBoundsHeight(false 
/*postTransform*/); 
+            var degrees:Number = 360 * (totalWidthSoFar + elementWidth/2 - 
scrollPosition) / _totalWidth; 
+
+            // Remember which item is centered, this is used during scrolling
+            var curDegrees:Number = degrees % 360;
+            if (Math.abs(curDegrees) < Math.abs(_centeredItemDegrees))
+            {
+                _centeredItemDegrees = curDegrees;
+                _centeredItemIndex = iter.curIndex;
+                _centeredItemCircumferenceBegin = totalWidthSoFar - gap;
+                _centeredItemCircumferenceEnd = totalWidthSoFar + elementWidth 
+ gap;
+            }
+
+            // Calculate and set the 3D Matrix 
+            var m:Matrix3D = new Matrix3D();
+            m.appendTranslation(-elementWidth/2, -elementHeight/2 + radius * 
_axis.z, -radius * _axis.y );
+            m.appendRotation(-degrees, _axis);
+            m.appendTranslation(unscaledWidth/2, unscaledHeight/2, radius * 
_axis.y);
+            el.setLayoutMatrix3D(m, false /*triggerLayout*/);
+            
+            // Update the layer for a correct z-order
+            if (el is IVisualElement)
+                IVisualElement(el).depth = Math.abs( Math.floor(180 - 
Math.abs(degrees % 360)) );
+
+            // Move on to next item
+            totalWidthSoFar += elementWidth + gap;
+        }
+    }
+    
+    private function scrollPositionFromCenterToNext(next:Boolean):Number
+    {
+        var iter:LayoutIterator = new LayoutIterator(target, 
_centeredItemIndex);
+        var el:ILayoutElement = next ? iter.nextElementWrapped() : 
iter.prevElementWrapped();
+        if (!el)
+            return 0;
+        
+        var elementWidth:Number = el.getLayoutBoundsWidth(false 
/*postTransform*/);
+        
+        var value:Number; 
+        if (next)
+        {
+            if (_centeredItemDegrees > 0.1)
+                return (_centeredItemCircumferenceEnd + 
_centeredItemCircumferenceBegin) / 2;
+            
+            value = _centeredItemCircumferenceEnd + elementWidth/2;
+            if (value > _totalWidth)
+                value -= _totalWidth;
+        }
+        else
+        {
+            if (_centeredItemDegrees < -0.1)
+                return (_centeredItemCircumferenceEnd + 
_centeredItemCircumferenceBegin) / 2;
+
+            value = _centeredItemCircumferenceBegin - elementWidth/2;
+            if (value < 0)
+                value += _totalWidth;
+        }
+        return value;     
+    }
+    
+    override protected function scrollPositionChanged():void
+    {
+        if (target)
+            target.invalidateDisplayList();
+    }
+
+    override public function 
getHorizontalScrollPositionDelta(navigationUnit:uint):Number
+    {
+        var g:GroupBase = target;
+        if (!g || g.numElements == 0)
+            return 0;
+            
+        var value:Number;     
+
+        switch (navigationUnit)
+        {
+            case NavigationUnit.LEFT:
+            {
+                value = target.horizontalScrollPosition - 30;
+                if (value < 0)
+                    value += _totalWidth;
+                return value - target.horizontalScrollPosition;
+            }
+                
+            case NavigationUnit.RIGHT:
+            {
+                value = target.horizontalScrollPosition + 30;
+                if (value > _totalWidth)
+                    value -= _totalWidth;
+                return value - target.horizontalScrollPosition;
+            }
+                
+            case NavigationUnit.PAGE_LEFT:
+                return scrollPositionFromCenterToNext(false) - 
target.horizontalScrollPosition;
+                
+            case NavigationUnit.PAGE_RIGHT:
+                return scrollPositionFromCenterToNext(true) - 
target.horizontalScrollPosition;
+                
+            case NavigationUnit.HOME: 
+                return 0;
+                
+            case NavigationUnit.END: 
+                return _totalWidth;
+                
+            default:
+                return 0;
+        }       
+    }
+    
+    /**
+     *  @private
+     */ 
+    override public function getScrollPositionDeltaToElement(index:int):Point
+    {
+        var layoutTarget:GroupBase = target;
+        if (!layoutTarget)
+            return null;
+       
+        var gap:Number = this.gap;     
+        var totalWidthSoFar:Number = 0;
+        var iter:LayoutIterator = new LayoutIterator(layoutTarget);
+
+        var el:ILayoutElement = iter.nextElement();
+        if (!el)
+            return null;
+        totalWidthSoFar -= el.getLayoutBoundsWidth(false /*postTransform*/) / 
2;
+
+        iter.reset();
+        while (null != (el = iter.nextElement()) && iter.curIndex <= index)
+        {    
+            var elementWidth:Number = el.getLayoutBoundsWidth(false 
/*postTransform*/);
+            totalWidthSoFar += gap + elementWidth;
+        }
+        return new Point(totalWidthSoFar - elementWidth / 2 -gap - 
layoutTarget.horizontalScrollPosition, 0);
+    }
+
+    /**
+     *  @private
+     */ 
+    override public function updateScrollRect(w:Number, h:Number):void
+    {
+        var g:GroupBase = target;
+        if (!g)
+            return;
+            
+        if (clipAndEnableScrolling)
+        {
+            // Since scroll position is reflected in our 3D calculations,
+            // always set the top-left of the srcollRect to (0,0).
+            g.scrollRect = new Rectangle(0, verticalScrollPosition, w, h);
+        }
+        else
+            g.scrollRect = null;
+    } 
+}
+}
+
+import mx.core.ILayoutElement;
+
+import spark.components.supportClasses.GroupBase;
+    
+class LayoutIterator 
+{
+    private var _curIndex:int;
+    private var _numVisited:int = 0;
+    private var totalElements:int;
+    private var _target:GroupBase;
+    private var _loopIndex:int = -1;
+       private var _useVirtual:Boolean;
+
+    public function get curIndex():int
+    {
+        return _curIndex;
+    }
+
+    public function LayoutIterator(target:GroupBase, index:int=-1):void
+    {
+        totalElements = target.numElements;
+        _target = target;
+        _curIndex = index;
+               _useVirtual = _target.layout.useVirtualLayout;
+    }
+
+    public function nextElement():ILayoutElement
+    {
+        while (_curIndex < totalElements - 1)
+        {
+            var el:ILayoutElement = _useVirtual ? 
_target.getVirtualElementAt(++_curIndex) :
+                                                                               
                  _target.getElementAt(++_curIndex);
+            if (el && el.includeInLayout)
+            {
+                ++_numVisited;
+                return el;
+            }
+        }
+        return null;
+    }
+    
+    public function prevElement():ILayoutElement
+    {
+        while (_curIndex > 0)
+        {
+            var el:ILayoutElement = _useVirtual ? 
_target.getVirtualElementAt(--_curIndex) :
+                                                                               
                  _target.getElementAt(--_curIndex);
+            if (el && el.includeInLayout)
+            {
+                ++_numVisited;
+                return el;
+            }
+        }
+        return null;
+    }
+
+    public function nextElementWrapped():ILayoutElement
+    {
+        if (_loopIndex == -1)
+            _loopIndex = _curIndex;
+        else if (_loopIndex == _curIndex)
+            return null;
+
+        var el:ILayoutElement = nextElement();
+        if (el)
+            return el;
+        else if (_curIndex == totalElements - 1)
+            _curIndex = -1;
+        return nextElement();
+    }
+    
+    public function prevElementWrapped():ILayoutElement
+    {
+        if (_loopIndex == -1)
+            _loopIndex = _curIndex;
+        else if (_loopIndex == _curIndex)
+            return null;
+
+        var el:ILayoutElement = prevElement();
+        if (el)
+            return el;
+        else if (_curIndex == 0)
+            _curIndex = totalElements;
+        return prevElement();
+    }
+
+    public function reset():void
+    {
+        _curIndex = -1;
+        _numVisited = 0;
+        _loopIndex = -1;
+    }
+
+    public function get numVisited():int
+    {
+        return _numVisited;
+    }
+}
+    

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/assets/ApacheFlexIcon.png
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/assets/ApacheFlexIcon.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/assets/xdslider.png
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/assets/xdslider.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/data/catalog.xml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/data/catalog.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/layouts/FilteredTileLayout.as
==============================================================================
--- 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/layouts/FilteredTileLayout.as
 (added)
+++ 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/layouts/FilteredTileLayout.as
 Sat Aug 23 08:50:20 2014
@@ -0,0 +1,260 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 layouts
+{
+       import mx.collections.ICollectionView;
+       import mx.effects.Parallel;
+       import mx.events.EffectEvent;
+       
+       import spark.components.supportClasses.GroupBase;
+       import spark.components.supportClasses.ItemRenderer;
+       import spark.effects.Fade;
+       import spark.effects.Move;
+       import spark.layouts.supportClasses.LayoutBase;
+
+       public class FilteredTileLayout extends LayoutBase
+       {
+               public var filteredItems:ICollectionView;
+               
+               public var fadeOutDuration:Number = 400;
+               
+               public var moveDuration:Number = 400;
+               
+               public var fadeInDuration:Number = 400;
+
+               private var _target:GroupBase;
+
+               private var _containerWidth:Number;
+               
+               private var fadeOutEffects:Parallel;
+               private var fadeInEffects:Parallel;
+               private var moveEffects:Parallel;
+               
+               private var _horizontalGap:Number = 10;
+
+               private var _verticalGap:Number = 10;
+
+               private var _tileWidth:Number = 100;
+
+               private var _tileHeight:Number = 100;
+
+               public function set     horizontalGap(value:Number):void
+               {
+                       _horizontalGap = value;
+                       if (target)     target.invalidateDisplayList();
+               }
+
+               public function set     verticalGap(value:Number):void
+               {
+                       _verticalGap = value;
+                       if (target)     target.invalidateDisplayList();
+               }
+               
+               public function set     tileWidth(value:Number):void
+               {
+                       _tileWidth = value;
+                       if (target)     target.invalidateDisplayList();
+               }
+               
+               public function set     tileHeight(value:Number):void
+               {
+                       _tileHeight = value;
+                       if (target)     target.invalidateDisplayList();
+               }
+               
+               public function filter():void
+               {
+                       // Prevent updateDisplayList() from being executed 
while we are animating tiles
+                       _target.autoLayout = false;
+
+                       // No filter has been applied. Keep showing all the 
items in the dataProvider
+                       if (filteredItems == null) return;
+                       
+                       var count:int = _target.numElements;
+                       
+                       // No items in the dataProvider: Nothing to show.
+                       if (count == 0) return;
+                       
+                       var x:int = 0;
+                       var y:int = 0;
+                       
+                       fadeOutEffects = new Parallel();
+                       fadeInEffects = new Parallel();
+                       moveEffects = new Parallel();
+
+                       for (var i:int = 0; i < count; i++)
+                       {
+                               var itemRenderer:ItemRenderer = 
_target.getElementAt(i) as ItemRenderer;
+                               
+                               if (filteredItems.contains(itemRenderer.data))
+                               {
+                                       // The element is part of the 
selection: calculate its x and y values
+                                       if (x + _tileWidth > _containerWidth)
+                                       {
+                                               x = 0;
+                                               y += _tileHeight + _verticalGap;
+                                       } 
+
+                                       if (itemRenderer.visible == false)
+                                       {
+                                               trace("FadeIn: " + 
itemRenderer.data.name);
+                                               // if the element was hidden, 
set its new x and y values (without Move animation) and register it for FadeIn 
animation
+                                               itemRenderer.visible = true;
+                                               
itemRenderer.setLayoutBoundsPosition(x, y);
+                                               var fadeIn:Fade = new 
Fade(itemRenderer);
+                                               fadeIn.alphaTo = 1;
+                                               fadeInEffects.addChild(fadeIn);
+                                       }  
+                                       else
+                                       {
+                                               trace("Move: " + 
itemRenderer.data.name);
+                                               // the element was already 
visible: register it for Move animation
+                                               if (itemRenderer.x != x || 
itemRenderer.y != y)
+                                               {
+                                                       var move:Move = new 
Move(itemRenderer);
+                                                       move.xTo = x;
+                                                       move.yTo = y;
+                                                       
moveEffects.addChild(move);
+                                               }
+                                       }
+                                       x += _tileWidth + _horizontalGap;
+                               }                                       
+                               else
+                               {
+                                       if (itemRenderer.alpha == 1)
+                                       {
+                                               trace("FadeOut: " + 
itemRenderer.data.name);
+                                               // the element is filtered out: 
register it for FadeOut animation
+                                               var fadeOut:Fade = new 
Fade(itemRenderer);
+                                               fadeOut.alphaTo = 0;
+                                               
fadeOutEffects.addChild(fadeOut);
+                                       }
+                               }
+                       }
+                       fadeOutTiles();                 
+               }
+
+               private function fadeOutTiles(event:EffectEvent = null):void
+               {
+                       trace("fadeOutTiles");
+                       if (fadeOutEffects.children.length > 0) {
+                               fadeOutEffects.duration = fadeOutDuration;
+                               
fadeOutEffects.addEventListener(EffectEvent.EFFECT_END, moveTiles)
+                               fadeOutEffects.play();
+                       }
+                       else
+                       {
+                               moveTiles();    
+                       }
+               }
+               
+               private function moveTiles(event:EffectEvent = null):void
+               {
+                       // Undesired behaviors may happen if we leave tiles 
with alpha=0 in the display list while performing other animations 
+                       setInvisibleTiles();
+                       
+                       trace("moveTiles");
+                       if (moveEffects.children.length > 0) {
+                               moveEffects.duration = moveDuration;
+                               
moveEffects.addEventListener(EffectEvent.EFFECT_END, fadeInTiles)
+                               moveEffects.play();
+                       }
+                       else
+                       {
+                               fadeInTiles();  
+                       }
+               }
+
+               private function fadeInTiles(event:EffectEvent = null):void
+               {
+                       trace("fadeInTiles");
+                       if (fadeInEffects.children.length > 0) {
+                               fadeInEffects.duration = fadeInDuration;
+                               
moveEffects.addEventListener(EffectEvent.EFFECT_END, fadeInTilesEnd)
+                               fadeInEffects.play();
+                       }
+                       else
+                       {
+                               fadeInTilesEnd();       
+                       }
+               }
+               
+               private function fadeInTilesEnd(event:EffectEvent = null):void
+               {
+                       _target.autoLayout = true; 
+               }
+               
+               private function setInvisibleTiles():void
+               {
+                       var count:int = _target.numElements;
+                       
+                       if (count == 0) return;
+                       
+                       for (var i:int = 0; i < count; i++)
+                       {
+                               var itemRenderer:ItemRenderer = 
_target.getElementAt(i) as ItemRenderer;
+                               if (!filteredItems.contains(itemRenderer.data))
+                               {       
+                                       trace("Removing from layout: " + 
itemRenderer.data.name);                                       
+                                       itemRenderer.visible = false;
+                               }               
+                       }
+               }
+       
+               override public function 
updateDisplayList(containerWidth:Number, containerHeight:Number):void
+               {
+                       trace("updateDisplaylist");
+
+                       _target = target;
+                       _containerWidth = containerWidth;
+
+                       var count:int = target.numElements;
+                       if (count == 0) return;
+                       
+                       var x:int=0;
+                       var y:int=0;
+                       
+                       for (var i:int = 0; i < count; i++)
+                       {
+                               var itemRenderer:ItemRenderer = 
_target.getElementAt(i) as ItemRenderer;
+
+                               itemRenderer.setLayoutBoundsSize(_tileWidth, 
_tileHeight);
+                               
+                               if (filteredItems && 
filteredItems.contains(itemRenderer.data))
+                               {
+                                       // The element is part of the 
selection: calculate its x and y values
+                                       if (x + _tileWidth > containerWidth)
+                                       {
+                                               x = 0;
+                                               y += _tileHeight + _verticalGap;
+                                       } 
+                                       itemRenderer.setLayoutBoundsPosition(x, 
y);     
+                                       itemRenderer.alpha = 1;
+                                       x += _tileWidth + _horizontalGap;
+                               }                                       
+                               else
+                               {
+                                       itemRenderer.alpha = 0;
+                               }
+                               
+                       }
+               }
+
+       }
+}
\ No newline at end of file

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/renderers/PhoneRenderer.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/renderers/PhoneRenderer.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/skins/TDFPanelSkin.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/layouts/skins/TDFPanelSkin.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: websites/staging/flex/trunk/content/tourdeflex/spark/modules/Module1.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/modules/Module1.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: websites/staging/flex/trunk/content/tourdeflex/spark/modules/Module1.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/modules/Module1.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: websites/staging/flex/trunk/content/tourdeflex/spark/modules/Module2.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/modules/Module2.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: websites/staging/flex/trunk/content/tourdeflex/spark/modules/Module2.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/modules/Module2.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/modules/ModuleExample.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/modules/ModuleExample.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/modules/ModuleExample.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/modules/ModuleExample.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/modules/TDFGradientBackgroundSkin.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/modules/TDFGradientBackgroundSkin.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/other/BidirectionalBinding1Example.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/other/BidirectionalBinding1Example.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/other/BidirectionalBinding1Example.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/other/BidirectionalBinding1Example.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/other/BidirectionalBinding2Example.mxml
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/other/BidirectionalBinding2Example.mxml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
websites/staging/flex/trunk/content/tourdeflex/spark/other/BidirectionalBinding2Example.swf
==============================================================================
Binary file - no diff available.

Propchange: 
websites/staging/flex/trunk/content/tourdeflex/spark/other/BidirectionalBinding2Example.swf
------------------------------------------------------------------------------
    svn:mime-type = application/x-shockwave-flash


Reply via email to