00001 import mx.utils.Delegate;
00002
00003 import gugga.browser.BrowserHistory;
00004 import gugga.commands.CommandManager;
00005 import gugga.common.DeepLinksSerializer;
00009 class gugga.browser.BrowserHistoryManager
00010 {
00011 private static var COMMAND_INDEX_KEY : String = "commandIndex";
00012
00013 private static var mInstance : BrowserHistoryManager = null;
00014
00015 private function BrowserHistoryManager()
00016 {
00017 super();
00018
00019 BrowserHistory.Instance.addEventListener("changed",
00020 Delegate.create(this, onBrowserHistoryChanged));
00021 CommandManager.Instance.addEventListener("commandBufferContentChanged",
00022 Delegate.create(this, onCommandBufferContentChanged));
00023 }
00024
00025 public static function initialize() : Void
00026 {
00027 if(available)
00028 {
00029 if(mInstance == null)
00030 {
00031 mInstance = new BrowserHistoryManager();
00032 }
00033 }
00034 }
00035
00036 public static function get available() : Boolean
00037 {
00038 return BrowserHistory.available;
00039 }
00040
00041 private function onBrowserHistoryChanged(ev) : Void
00042 {
00043 var commandIndex : Number = parseInt(String(ev.record[COMMAND_INDEX_KEY]), 10);
00044 if(isNaN(commandIndex))
00045 {
00046 commandIndex = -1;
00047 }
00048 CommandManager.Instance.navigate(commandIndex);
00049 }
00050
00057 private function onCommandBufferContentChanged(ev) : Void
00058 {
00059 var recordObject : Object = new Object();
00060
00061 recordObject[COMMAND_INDEX_KEY] = ev.currentCommandIndex;
00062 DeepLinksSerializer.serializeCurrentNavigationPath(recordObject);
00063
00064 BrowserHistory.Instance.addHistory(recordObject);
00065 }
00066 }