//////////////////////////////////////////////////////////////////////////////// // // 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.core { import flash.display.DisplayObject; import flash.utils.Dictionary; import flash.events.EventDispatcher; import flash.events.IEventDispatcher; import mx.events.DynamicEvent; import mx.managers.ISystemManager; /** * A SWFBridgeGroup represents all of the sandbox bridges that an * application needs to communicate with its parent and children. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public class SWFBridgeGroup extends EventDispatcher implements ISWFBridgeGroup { include "../core/Version.as"; //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Constructor. * * @param owner The DisplayObject that owns this group. * This should be the SystemManager of an application. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function SWFBridgeGroup(owner:ISystemManager) { super(); _groupOwner = owner; } //-------------------------------------------------------------------------- // // Variables // //-------------------------------------------------------------------------- //---------------------------------- // groupOwner //---------------------------------- /** * @private * The DisplayObject that owns this group. */ private var _groupOwner:ISystemManager; /** * @private * Allows communication with children that are in different sandboxes. * The sandbox bridge is used as a hash to find the display object. */ private var _childBridges:Dictionary; //-------------------------------------------------------------------------- // // Properties: ISWFBridgeGroup // //-------------------------------------------------------------------------- //---------------------------------- // parentBridge //---------------------------------- /** * @private */ private var _parentBridge:IEventDispatcher; /** * Allows communication with the parent * if the parent is in a different sandbox. * May be null if the parent is in the same sandbox * or this is the top-level root application. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get parentBridge():IEventDispatcher { return _parentBridge; } /** * @private */ public function set parentBridge(bridge:IEventDispatcher):void { _parentBridge = bridge; } //-------------------------------------------------------------------------- // // Methods: ISWFBridgeGroup // //-------------------------------------------------------------------------- /** * @inheritDoc * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function addChildBridge(bridge:IEventDispatcher, bridgeProvider:ISWFBridgeProvider):void { if (!_childBridges) _childBridges = new Dictionary(); _childBridges[bridge] = bridgeProvider; var event:DynamicEvent = new DynamicEvent("addChildBridge"); event.bridge = bridge; event.bridgeProvider = bridgeProvider; dispatchEvent(event); } /** * @inheritDoc * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function removeChildBridge(bridge:IEventDispatcher):void { if (!_childBridges || !bridge) return; for (var iter:Object in _childBridges) { if (iter == bridge) delete _childBridges[iter]; } var event:DynamicEvent = new DynamicEvent("removeChildBridge"); event.bridge = bridge; dispatchEvent(event); } /** * @inheritDoc * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function getChildBridgeProvider(bridge:IEventDispatcher):ISWFBridgeProvider { if (!_childBridges) return null; return ISWFBridgeProvider(_childBridges[bridge]); } /** * @inheritDoc * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function getChildBridges():Array { var bridges:Array = []; for (var iter:Object in _childBridges) { bridges.push(iter); } return bridges; } /** * @inheritDoc * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function containsBridge(bridge:IEventDispatcher):Boolean { if (parentBridge && parentBridge == bridge) return true; for (var iter:Object in _childBridges) { if (bridge == iter) return true; } return false; } } }