//////////////////////////////////////////////////////////////////////////////// // // 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 mx.states { import flash.events.EventDispatcher; import mx.core.mx_internal; import mx.events.FlexEvent; use namespace mx_internal; //-------------------------------------- // Events //-------------------------------------- /** * Dispatched after a view state has been entered. * * @eventType mx.events.FlexEvent.ENTER_STATE * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ [Event(name="enterState", type="mx.events.FlexEvent")] /** * Dispatched just before a view state is exited. * This event is dispatched before the changes * to the default view state have been removed. * * @eventType mx.events.FlexEvent.EXIT_STATE * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ [Event(name="exitState", type="mx.events.FlexEvent")] //-------------------------------------- // Other metadata //-------------------------------------- [DefaultProperty("overrides")] /** * The State class defines a view state, a particular view of a component. * For example, a product thumbnail could have two view states; * a base view state with minimal information, and a rich view state with * additional information. * The overrides property specifies a set of child classes * to add or remove from the base view state, and properties, styles, and event * handlers to set when the view state is in effect. * *

You use the State class in the states property * of Flex components. * You can only specify a states property at the root of an * application or a custom control, not on child controls.

* *

You enable a view state by setting a component's * currentState property.

* * @mxml *

The <mx:State> tag has the following attributes:

* *
 *  <mx:State
 *  Properties
 *  basedOn="null"
 *  name="null"
 *  overrides="null"
 *  />
 *  
* * @see mx.states.AddChild * @see mx.states.RemoveChild * @see mx.states.SetEventHandler * @see mx.states.SetProperty * @see mx.states.SetStyle * @see mx.states.Transition * * @includeExample examples/StatesExample.mxml * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public class State extends EventDispatcher { include "../core/Version.as"; //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Constructor. * * @param properties Object containing property settings for this State. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function State(properties:Object=null) { super(); // Initialize from object if provided. for (var p:String in properties) { this[p] = properties[p]; } } //-------------------------------------------------------------------------- // // Variables // //-------------------------------------------------------------------------- /** * @private * Initialized flag */ private var initialized:Boolean = false; //-------------------------------------------------------------------------- // // Properties // //-------------------------------------------------------------------------- //---------------------------------- // basedOn //---------------------------------- [Inspectable(category="General")] /** * The name of the view state upon which this view state is based, or * null if this view state is not based on a named view state. * If this value is null, the view state is based on a root * state that consists of the properties, styles, event handlers, and * children that you define for a component without using a State class. * * @default null * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public var basedOn:String; //---------------------------------- // name //---------------------------------- [Inspectable(category="General")] /** * The name of the view state. * State names must be unique for a given component. * This property must be set. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public var name:String; //---------------------------------- // overrides //---------------------------------- [ArrayElementType("mx.states.IOverride")] [Inspectable(category="General")] /** * The overrides for this view state, as an Array of objects that implement * the IOverride interface. These overrides are applied in order when the * state is entered, and removed in reverse order when the state is exited. * *

The following Flex classes implement the IOverride interface and let you * define the view state characteristics:

* * *

The overrides property is the default property of the * State class. You can omit the <mx:overrides> tag * and its child <mx:Array>tag if you use MXML tag * syntax to define the overrides.

* * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public var overrides:Array /* of IOverride */ = []; //---------------------------------- // stateGroups //---------------------------------- [ArrayElementType("String")] [Inspectable(category="General")] /** * The state groups that this view state belongs to as an array of String. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public var stateGroups:Array /* of String */ = []; //-------------------------------------------------------------------------- // // Methods // //-------------------------------------------------------------------------- /** * @private * Initialize this state and all of its overrides. */ mx_internal function initialize():void { if (!initialized) { initialized = true; for (var i:int = 0; i < overrides.length; i++) { IOverride(overrides[i]).initialize(); } } } /** * @private * Dispatches the "enterState" event. */ mx_internal function dispatchEnterState():void { if (hasEventListener(FlexEvent.ENTER_STATE)) dispatchEvent(new FlexEvent(FlexEvent.ENTER_STATE)); } /** * @private * Dispatches the "exitState" event. */ mx_internal function dispatchExitState():void { if (hasEventListener(FlexEvent.EXIT_STATE)) dispatchEvent(new FlexEvent(FlexEvent.EXIT_STATE)); } } }