//////////////////////////////////////////////////////////////////////////////// // // 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 spark.components.supportClasses { import flash.utils.IDataInput; import flash.utils.IDataOutput; import flash.utils.IExternalizable; import mx.core.mx_internal; import spark.components.supportClasses.ViewDescriptor; use namespace mx_internal; [ExcludeClass] /** * The NavigationStack class is a data structure that is internally used by * ViewNavigator to track the current set of views that are being managed * by the navigator. * * @see spark.components.ViewNavigator * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ public class NavigationStack implements IExternalizable { //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Constructor. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ public function NavigationStack() { super(); _source = new Vector.(); } //-------------------------------------------------------------------------- // // Variables // //-------------------------------------------------------------------------- /** * @private */ private var _source:Vector.; /** * @private * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ mx_internal function get source():Vector. { return _source; } //-------------------------------------------------------------------------- // // Properties // //-------------------------------------------------------------------------- //---------------------------------- // length //---------------------------------- /** * The length of the stack. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ public function get length():int { return _source.length; } //---------------------------------- // top //---------------------------------- /** * Returns the object at the top of the stack. * If the stack is empty, this property is null. * * @default null * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ mx_internal function get topView():ViewDescriptor { return _source.length == 0 ? null : _source[_source.length - 1]; } //-------------------------------------------------------------------------- // // Methods // //-------------------------------------------------------------------------- /** * Clears the entire stack. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ public function clear():void { _source.length = 0; } /** * Adds a view to the top of the navigation stack. * Pushing a view changes the display of the application to * the new view on the stack. * * @param viewClass The class of the View to create. * * @param data The data object to pass to the view when it is created. * The new view accesses this Object by using * the View.data property. * * @param context The context identifier to pass to the view when * it is created. * * @return The data structure that represents the current view. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ public function pushView(viewClass:Class, data:Object, context:Object = null):ViewDescriptor { var viewData:ViewDescriptor = new ViewDescriptor(viewClass, data, context); _source.push(viewData); return viewData; } /** * Removes the top view off the stack. * Returns control from the current view back to * the previous view on the stack. * * @return The data structure that represented the View that was removed. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ public function popView():ViewDescriptor { return _source.pop(); } /** * Removes all but the root object from the navigation stack. * The root object becomes the current view. * * @return The data structure that represented the View that was at * the top of the stack when this method was called, or null if * nothing was removed. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ public function popToFirstView():ViewDescriptor { if (_source.length > 1) { var viewData:ViewDescriptor = topView; _source.length = 1; return viewData; } return null; } //-------------------------------------------------------------------------- // // Methods: IExternalizable // //-------------------------------------------------------------------------- /** * Serializes the navigation stack in an IDataOutput object so that it * can be written to a shared object. * * @param output The data output object used to write the data. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ public function writeExternal(output:IDataOutput):void { output.writeObject(_source); } /** * Deserializes the navigation stack when it is being loaded * from a shared object. * * @param input The external object to read from. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 2.5 * @productversion Flex 4.5 */ public function readExternal(input:IDataInput):void { _source = input.readObject() as Vector.; } } }