Saturday, February 14, 2009

WindowManager

package
{
import flash.events.Event;

import mx.core.UIComponent;
import mx.core.UIComponentGlobals;
import mx.core.mx_internal;
import mx.managers.FocusManager;
import mx.managers.IFocusManagerContainer;
import mx.managers.ILayoutManagerClient;

use namespace mx_internal;

public class WindowManagerImpl
{
private var _windowContainer:UIComponent;
private var _popups:Array = [];

public function WindowManagerImpl()
{
}

public function set windowContainer(value:UIComponent):void
{
_windowContainer = value;
}

public function addWindow(window:UIComponent):void
{
window.isPopUp = true;
_windowContainer.addChild(window);


var fm:FocusManager = new FocusManager(window as IFocusManagerContainer, true);
_windowContainer.systemManager.numModalWindows++;

if (window is ILayoutManagerClient )
{
UIComponentGlobals.layoutManager.validateClient(ILayoutManagerClient (window), true);
}

window.addEventListener(Event.REMOVED, handleRemove);
window.setFocus();
_popups.push(window);
}

private function handleRemove(event:Event):void
{
var window:UIComponent = event.target as UIComponent;
_windowContainer.systemManager.numModalWindows--;
_windowContainer.systemManager.removeFocusManager(IFocusManagerContainer(window));
_popups.pop();
if (_popups.length > 0)
{
var lastWindow:UIComponent = _popups[_popups.length - 1] as UIComponent;
lastWindow.focusManager.activate();
}
_windowContainer.setFocus();
window.removeEventListener(Event.REMOVED, handleRemove);
window.isPopUp = false;
}

public function removeWindow(window:UIComponent):void
{
_windowContainer.removeChild(window);
}

}
}