| <?xml version="1.0" encoding="utf-8"?> | |
| <!-- | |
| Licensed to the Apache Software Foundation (ASF) under one or more | |
| contributor license agreements. See the NOTICE file distributed with | |
| this work for additional information regarding copyright ownership. | |
| The ASF licenses this file to You under the Apache License, Version 2.0 | |
| (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| --> | |
| <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" | |
| xmlns:s="library://ns.adobe.com/flex/spark" | |
| xmlns="*" | |
| minWidth="990" minHeight="550" | |
| preinitialize="loadStyle()" | |
| creationComplete="startService()" | |
| stateChangeComplete="chainStatesIfNeeded()" | |
| pageTitle="FlexStore"> | |
| <fx:Script> | |
| <![CDATA[ | |
| import mx.collections.IViewCursor; | |
| import mx.collections.ArrayCollection; | |
| import samples.flexstore.Product; | |
| import mx.rpc.events.ResultEvent; | |
| import mx.events.StyleEvent; | |
| import mx.styles.StyleManager; | |
| import mx.managers.LayoutManager; | |
| [Bindable] | |
| private var catalog:ArrayCollection; | |
| private var currentTheme:String = "beige"; | |
| private function toggleTheme():void | |
| { | |
| if (currentTheme == "beige") | |
| { | |
| currentTheme = "blue"; | |
| } | |
| else | |
| { | |
| currentTheme = "beige"; | |
| } | |
| loadStyle(); | |
| } | |
| private function startService():void | |
| { | |
| productService.send(); | |
| } | |
| private function loadStyle():void | |
| { | |
| var eventDispatcher:IEventDispatcher = | |
| styleManager.loadStyleDeclarations(currentTheme + ".swf"); | |
| eventDispatcher.addEventListener(StyleEvent.COMPLETE, completeHandler); | |
| } | |
| private function completeHandler(event:StyleEvent):void | |
| { | |
| image.source = acb.getStyle("storeLogo"); | |
| homeView.updateMapImage(); | |
| super.initialized = true; | |
| callLater(prebake); | |
| } | |
| private function productServiceResultHandler(event:ResultEvent):void | |
| { | |
| //HTTPService returns an ArrayCollection for nested arrays | |
| var products:ArrayCollection = event.result.catalog.product; | |
| var temp:ArrayCollection = new ArrayCollection(); | |
| var cursor:IViewCursor = products.createCursor(); | |
| while (!cursor.afterLast) | |
| { | |
| var product:Product = new Product(); | |
| product.fill(cursor.current); | |
| temp.addItem(product); | |
| cursor.moveNext(); | |
| } | |
| catalog = temp; | |
| } | |
| override public function set initialized(value:Boolean):void | |
| { | |
| // Hold off until the Runtime CSS SWF is done loading. | |
| } | |
| private var stateChain:Array; | |
| private function headHome():void | |
| { | |
| homeButton.selected = true; | |
| if (currentState == "ProductsState") | |
| { | |
| productsButton.selected = false; | |
| stateChain = ["ProductsWipeUp", "HomeWipeDown", "HomeState"]; | |
| currentState = "ProductsWipeUp"; | |
| } | |
| else if (currentState == "SupportState") | |
| { | |
| supportButton.selected = false; | |
| stateChain = ["SupportWipeUp", "HomeWipeDown", "HomeState"]; | |
| currentState = "SupportWipeUp"; | |
| } | |
| } | |
| private function headToProducts():void | |
| { | |
| productsButton.selected = true; | |
| if (currentState == "SupportState") | |
| { | |
| supportButton.selected = false; | |
| stateChain = ["SupportWipeUp", "ProductsWipeDown", "ProductsState"]; | |
| currentState = "SupportWipeUp"; | |
| } | |
| if (currentState == "HomeState") | |
| { | |
| homeButton.selected = false; | |
| stateChain = ["HomeWipeUp", "ProductsWipeDown", "ProductsState"]; | |
| currentState = "HomeWipeUp"; | |
| } | |
| } | |
| private function headToSupport():void | |
| { | |
| supportButton.selected = true; | |
| if (currentState == "ProductsState") | |
| { | |
| productsButton.selected = false; | |
| stateChain = ["ProductsWipeUp", "SupportWipeDown", "SupportState"]; | |
| currentState = "ProductsWipeUp"; | |
| } | |
| if (currentState == "HomeState") | |
| { | |
| homeButton.selected = false; | |
| stateChain = ["HomeWipeUp", "SupportWipeDown", "SupportState"]; | |
| currentState = "HomeWipeUp"; | |
| } | |
| } | |
| private function prebake():void | |
| { | |
| if (LayoutManager.getInstance().isInvalid()) | |
| { | |
| callLater(prebake); | |
| return; | |
| } | |
| addEventListener("enterFrame", prebake2); | |
| } | |
| private function prebake2(event:Event):void | |
| { | |
| removeEventListener("enterFrame", prebake2); | |
| trace("prebake2"); | |
| stateChain = ["ProductsPreBake", "HomeState"]; | |
| currentState = "ProductsPreBake"; | |
| } | |
| private function chainStatesIfNeeded():void | |
| { | |
| if (LayoutManager.getInstance().isInvalid()) | |
| { | |
| callLater(chainStatesIfNeeded); | |
| return; | |
| } | |
| if (stateChain != null) | |
| { | |
| if (currentState == stateChain[0]) | |
| { | |
| addEventListener("enterFrame", nextState); | |
| } | |
| } | |
| } | |
| private function nextState(event:Event):void | |
| { | |
| removeEventListener("enterFrame", nextState); | |
| stateChain.shift(); | |
| if (stateChain.length) | |
| currentState = stateChain[0]; | |
| else | |
| stateChain == null; | |
| } | |
| ]]> | |
| </fx:Script> | |
| <fx:Style source="main.css"/> | |
| <fx:Declarations> | |
| <s:HTTPService id="productService" url="data/catalog.xml" | |
| result="productServiceResultHandler(event)"/> | |
| </fx:Declarations> | |
| <s:controlBarContent> | |
| <s:HGroup id="acb" width="100%" styleName="storeControlBar"> | |
| <s:Image id="image" | |
| click="toggleTheme()" | |
| toolTip="Change Theme"/> | |
| <s:ToggleButton id="homeButton" | |
| label="Home" | |
| height="100%" | |
| selected="true" | |
| styleName="storeButtonBar" | |
| click="headHome()" /> | |
| <s:ToggleButton id="productsButton" | |
| label="Products" | |
| height="100%" | |
| styleName="storeButtonBar" | |
| click="headToProducts()"/> | |
| <s:ToggleButton id="supportButton" | |
| label="Support" | |
| height="100%" | |
| styleName="storeButtonBar" | |
| click="headToSupport()"/> | |
| </s:HGroup> | |
| </s:controlBarContent> | |
| <s:states> | |
| <s:State name="HomeState" stateGroups="['Home']" /> | |
| <s:State name="HomeWipeUp" stateGroups="['Home']" /> | |
| <s:State name="HomeWipeDown" stateGroups="['Home']" /> | |
| <s:State name="ProductsPreBake" stateGroups="['Home', 'Products']" /> | |
| <s:State name="ProductsState" stateGroups="['Products']" /> | |
| <s:State name="ProductsWipeUp" stateGroups="['Products']" /> | |
| <s:State name="ProductsWipeDown" stateGroups="['Products']" /> | |
| <s:State name="SupportState" stateGroups="['Support']" /> | |
| <s:State name="SupportWipeUp" stateGroups="['Support']" /> | |
| <s:State name="SupportWipeDown" stateGroups="['Support']" /> | |
| </s:states> | |
| <s:transitions> | |
| <s:Transition fromState="HomeState" toState="HomeWipeUp"> | |
| <s:Wipe direction="up" target="{homeView}" /> | |
| </s:Transition> | |
| <s:Transition fromState="HomeWipeDown" toState="HomeState"> | |
| <s:Wipe direction="down" target="{homeView}" /> | |
| </s:Transition> | |
| <s:Transition fromState="ProductsState" toState="ProductsWipeUp"> | |
| <s:Wipe direction="up" target="{pView}" /> | |
| </s:Transition> | |
| <s:Transition fromState="ProductsWipeDown" toState="ProductsState"> | |
| <s:Wipe direction="down" target="{pView}" /> | |
| </s:Transition> | |
| <s:Transition fromState="SupportState" toState="SupportWipeUp"> | |
| <s:Wipe direction="up" target="{supportView}" /> | |
| </s:Transition> | |
| <s:Transition fromState="SupportWipeDown" toState="SupportState"> | |
| <s:Wipe direction="down" target="{supportView}" /> | |
| </s:Transition> | |
| </s:transitions> | |
| <s:VGroup width="990" paddingLeft="0" paddingRight="0" horizontalCenter="0" top="12"> | |
| <HomeView id="homeView" width="100%" height="550" includeIn="Home" | |
| visible.HomeWipeUp="false" | |
| visible.HomeWipeDown="false" | |
| /> | |
| <ProductsView id="pView" includeIn="Products" visible.ProductsPreBake="false" | |
| visible.ProductsWipeUp="false" | |
| visible.ProductsWipeDown="false" | |
| width="100%" height="550" creationComplete="pView.catalog = catalog" | |
| /> | |
| <SupportView id="supportView" includeIn="Support" | |
| visible.SupportWipeUp="false" | |
| visible.SupportWipeDown="false" | |
| width="100%" height="550" | |
| /> | |
| </s:VGroup> | |
| </s:Application> |