////////////////////////////////////////////////////////////////////////////////
//
// 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.marshalClasses
{
import flash.display.DisplayObject;
import flash.events.Event;
import mx.core.IFlexModuleFactory;
import mx.core.IToolTip;
import mx.events.DynamicEvent;
import mx.events.InterManagerRequest;
import mx.events.ToolTipEvent;
import mx.managers.IMarshalSystemManager;
import mx.managers.ISystemManager;
import mx.managers.SystemManagerGlobals;
import mx.managers.ToolTipManagerImpl;
import mx.core.mx_internal;
use namespace mx_internal;
[ExcludeClass]
[Mixin]
/**
* @private
* A SystemManager has various types of children,
* such as the Application, popups,
* tooltips, and custom cursors.
* You can access the just the custom cursors through
* the cursors
property,
* the tooltips via toolTips
, and
* the popups via popUpChildren
. Each one returns
* a SystemChildrenList which implements IChildList. The SystemManager's
* IChildList methods return the set of children that aren't popups, tooltips
* or cursors. To get the list of all children regardless of type, you
* use the rawChildrenList property which returns this SystemRawChildrenList.
*/
public class ToolTipManagerMarshalMixin
{
include "../../core/Version.as";
//--------------------------------------------------------------------------
//
// Class Method
//
//--------------------------------------------------------------------------
public static function init(fbs:IFlexModuleFactory):void
{
if (!ToolTipManagerImpl.mixins)
ToolTipManagerImpl.mixins = [];
if (ToolTipManagerImpl.mixins.indexOf(ToolTipManagerMarshalMixin) == -1)
ToolTipManagerImpl.mixins.push(ToolTipManagerMarshalMixin);
}
//--------------------------------------------------------------------------
//
// Constructor
//
//--------------------------------------------------------------------------
/**
* Constructor.
*/
public function ToolTipManagerMarshalMixin(owner:ToolTipManagerImpl = null)
{
super();
if (!owner)
return;
this.toolTipManager = owner;
toolTipManager.addEventListener("initialize", initializeHandler);
toolTipManager.addEventListener("currentToolTip", currentToolTipHandler);
toolTipManager.addEventListener(ToolTipEvent.TOOL_TIP_HIDE, toolTipHideHandler);
toolTipManager.addEventListener("createTip", createTipHandler);
toolTipManager.addEventListener("removeChild", removeChildHandler);
toolTipManager.addEventListener("addChild", addChildHandler);
}
//--------------------------------------------------------------------------
//
// Properties
//
//--------------------------------------------------------------------------
/**
* @private
*/
private var toolTipManager:ToolTipManagerImpl;
private var systemManager:ISystemManager;
private var sandboxRoot:DisplayObject;
private var mp:IMarshalSystemManager;
//--------------------------------------------------------------------------
//
// Methods
//
//--------------------------------------------------------------------------
public function initializeHandler(event:Event):void
{
this.systemManager = SystemManagerGlobals.topLevelSystemManagers[0] as ISystemManager;
mp = IMarshalSystemManager(systemManager.getImplementation("mx.managers::IMarshalSystemManager"));
sandboxRoot = this.systemManager.getSandboxRoot();
sandboxRoot.addEventListener(InterManagerRequest.TOOLTIP_MANAGER_REQUEST, marshalToolTipManagerHandler, false, 0, true);
var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.TOOLTIP_MANAGER_REQUEST);
me.name = "update";
// trace("--->update request for ToolTipManagerImpl", systemManager);
sandboxRoot.dispatchEvent(me);
// trace("<---update request for ToolTipManagerImpl", systemManager);
}
public function currentToolTipHandler(event:Event):void
{
var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.TOOLTIP_MANAGER_REQUEST);
me.name = "currentToolTip";
me.value = toolTipManager.currentToolTip;
// trace("-->dispatched currentToolTip for ToolTipManagerImpl", systemManager, value);
sandboxRoot.dispatchEvent(me);
}
public function toolTipHideHandler(event:Event):void
{
var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.TOOLTIP_MANAGER_REQUEST);
me.name = ToolTipEvent.TOOL_TIP_HIDE;
// trace("-->dispatched hide for ToolTipManagerImpl", systemManager);
sandboxRoot.dispatchEvent(me);
}
public function createTipHandler(event:Event):void
{
var sm:ISystemManager = toolTipManager.getSystemManager(toolTipManager.currentTarget) as ISystemManager;
mp = IMarshalSystemManager(sm.topLevelSystemManager.getImplementation("mx.managers::IMarshalSystemManager"));
mp.addChildToSandboxRoot("toolTipChildren", toolTipManager.currentToolTip as DisplayObject);
event.preventDefault();
}
public function removeChildHandler(event:DynamicEvent):void
{
// Remove it.
var sm:ISystemManager = event.sm;
mp = IMarshalSystemManager(sm.topLevelSystemManager.getImplementation("mx.managers::IMarshalSystemManager"));
mp.removeChildFromSandboxRoot("toolTipChildren", event.toolTip as DisplayObject);
event.preventDefault();
}
public function addChildHandler(event:DynamicEvent):void
{
var sm:ISystemManager = event.sm;
mp = IMarshalSystemManager(sm.topLevelSystemManager.getImplementation("mx.managers::IMarshalSystemManager"));
mp.addChildToSandboxRoot("toolTipChildren", event.toolTip as DisplayObject);
event.preventDefault();
}
/**
* Marshal dragManager
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
private function marshalToolTipManagerHandler(event:Event):void
{
if (event is InterManagerRequest)
return;
var me:InterManagerRequest;
var marshalEvent:Object = event;
switch (marshalEvent.name)
{
case "currentToolTip":
// trace("--marshaled currentToolTip for ToolTipManagerImpl", systemManager, marshalEvent.value);
toolTipManager._currentToolTip = marshalEvent.value;
break;
case ToolTipEvent.TOOL_TIP_HIDE:
// trace("--handled hide for ToolTipManagerImpl", systemManager);
if (toolTipManager._currentToolTip is IToolTip)
toolTipManager.hideTip()
break;
case "update":
// anyone can answer so prevent others from responding as well
event.stopImmediatePropagation();
// update the others
// trace("-->marshaled update for ToolTipManagerImpl", systemManager);
me = new InterManagerRequest(InterManagerRequest.TOOLTIP_MANAGER_REQUEST);
me.name = "currentToolTip";
me.value = toolTipManager._currentToolTip;
// trace("-->dispatched currentToolTip for ToolTipManagerImpl", systemManager, true);
sandboxRoot.dispatchEvent(me);
// trace("<--dispatched currentToolTip for ToolTipManagerImpl", systemManager, true);
// trace("<--marshaled update for ToolTipManagerImpl", systemManager);
}
}
}
}