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