//////////////////////////////////////////////////////////////////////////////// // // 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.managers { import mx.core.Singleton; import mx.core.mx_internal; import mx.managers.IHistoryManagerClient; use namespace mx_internal; /** * History management lets users navigate through a Flex application * using the web browser's Back and Forward navigation commands. * *
In general, you should use the BrowserManager class and deep linking for maintaining state * in an application and manipulating URLs and browser history, but the HistoryManager class can * be useful under some circumstances, such as if you are maintaining a legacy Flex application. * You cannot use the HistoryManager and the BrowserManager classes in the same Flex application, * even though they use the same set of supporting files.
* *History management is enabled by default for the Accordion and TabNavigator containers. * This means that if the user selects one of the panes in an Accordion control, * that user can return to the previous pane by using the browser's Back button or back * navigation command. History management is disabled by default for the ViewStack * navigator container.
* *You can disable history management by setting the navigator container's
* historyManagementEnabled
property to false
.
You can also enable history management for other objects
* in an application by registering the objects with the HistoryManager. To register a component
* with the HistoryManager class, you call the HistoryManager class's register()
* method with a reference to a component instance that implements the IHistoryManagerClient interface.
* In the following example, the Application component (this
) is registered with
* the HistoryManager class when the Application is initialized:
*
* <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" * implements="mx.managers.IHistoryManagerClient" * initialize="mx.managers.HistoryManager.register(this);"> ** You must also implement the
saveState()
and loadState()
methods of the
* IHistoryManagerClient interface to complete the registration of the component. Components that extend
* UIComponent automatically inherit the loadState()
method.
*
* All methods and properties of the HistoryManager are static, * so you do not need to create an instance of it.
* * @see mx.managers.BrowserManager * @see mx.managers.IHistoryManagerClient * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public class HistoryManager { include "../core/Version.as"; //-------------------------------------------------------------------------- // // Class variables // //-------------------------------------------------------------------------- /** * @private * Linker dependency on implementation class. */ private static var implClassDependency:HistoryManagerImpl; /** * @private * Storage for the impl getter. * This gets initialized on first access, * not at static initialization time, in order to ensure * that the Singleton registry has already been initialized. */ private static var _impl:IHistoryManager; /** * @private * The singleton instance of HistoryManagerImpl which was * registered as implementing the IHistoryManager interface. */ private static function get impl():IHistoryManager { if (!_impl) { _impl = IHistoryManager( Singleton.getInstance("mx.managers::IHistoryManager")); } return _impl; } //-------------------------------------------------------------------------- // // Class methods // //-------------------------------------------------------------------------- /** * DEPRECATED - Initializes the HistoryManager. In general, this does not need to be called * because any time you add a component withhistoryManagementEnabled
, Flex
* calls this method. However, the HistoryManager will not work correctly if it is
* not initialized from the top-level application. So, if your application does
* not have any HistoryManager enabled components in it and loads other sub-applications
* That do, you must call the HistoryManager.initialize()
method in the
* main application, usually from an initialize
event handler on the application.
*
* @param sm SystemManager for this application.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function initialize(sm:ISystemManager):void
{
// this code is handled in HistoryManagerImpl.getInstance() now
}
/**
* Registers an object with the HistoryManager.
* The object must implement the IHistoryManagerClient interface.
*
* @param obj Object to register.
*
* @see mx.managers.IHistoryManagerClient
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function register(obj:IHistoryManagerClient):void
{
impl.register(obj);
}
/**
* Unregisters an object with the HistoryManager.
*
* @param obj Object to unregister.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function unregister(obj:IHistoryManagerClient):void
{
impl.unregister(obj);
}
/**
* Saves the application's current state so it can be restored later.
* This method is automatically called by navigator containers
* whenever their navigation state changes.
* If you registered an interface with the HistoryManager,
* you are responsible for calling the save()
method
* when the application state changes.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function save():void
{
impl.save();
}
}
}