//////////////////////////////////////////////////////////////////////////////// // // 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.display.Sprite; import flash.events.Event; import flash.events.IEventDispatcher; import flash.events.MouseEvent; import flash.ui.Mouse; import mx.core.FlexSprite; import mx.core.IFlexModuleFactory; import mx.events.Request; import mx.events.InterManagerRequest; import mx.events.SandboxMouseEvent; import mx.events.SWFBridgeRequest; import mx.managers.CursorManagerImpl; import mx.managers.IMarshalSystemManager; import mx.managers.ISystemManager; import mx.core.EventPriority; 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 CursorManagerMarshalMixin { include "../../core/Version.as"; //-------------------------------------------------------------------------- // // Class Method // //-------------------------------------------------------------------------- public static function init(fbs:IFlexModuleFactory):void { if (!CursorManagerImpl.mixins) CursorManagerImpl.mixins = []; if (CursorManagerImpl.mixins.indexOf(CursorManagerMarshalMixin) == -1) CursorManagerImpl.mixins.push(CursorManagerMarshalMixin); } //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Constructor. */ public function CursorManagerMarshalMixin(owner:CursorManagerImpl = null) { super(); if (!owner) return; cursorManager = owner; mp = IMarshalSystemManager(systemManager.getImplementation("mx.managers::IMarshalSystemManager")); sandboxRoot.addEventListener(InterManagerRequest.CURSOR_MANAGER_REQUEST, marshalCursorManagerHandler, false, 0, true); var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "update"; // trace("--->update request for CursorManagerImpl", sm); sandboxRoot.dispatchEvent(me); // trace("<---update request for CursorManagerImpl", sm); cursorManager.addEventListener("currentCursorID", currentCursorIDHandler); cursorManager.addEventListener("currentCursorXOffset", currentCursorXOffsetHandler); cursorManager.addEventListener("currentCursorYOffset", currentCursorYOffsetHandler); cursorManager.addEventListener("showCursor", showCursorHandler); cursorManager.addEventListener("hideCursor", hideCursorHandler); cursorManager.addEventListener("setCursor", setCursorHandler); cursorManager.addEventListener("removeCursor", removeCursorHandler); cursorManager.addEventListener("removeAllCursors", removeAllCursorsHandler); cursorManager.addEventListener("setBusyCursor", setBusyCursorHandler); cursorManager.addEventListener("removeBusyCursor", removeBusyCursorHandler); cursorManager.addEventListener("initialize", initializeHandler); cursorManager.addEventListener("addMouseMoveListener", addMouseMoveListenerHandler); cursorManager.addEventListener("addMouseOutListener", addMouseOutListenerHandler); cursorManager.addEventListener("removeMouseMoveListener", removeMouseMoveListenerHandler); cursorManager.addEventListener("removeMouseOutListener", removeMouseOutListenerHandler); cursorManager.addEventListener("registerToUseBusyCursor", registerToUseBusyCursorHandler); cursorManager.addEventListener("unRegisterToUseBusyCursor", unRegisterToUseBusyCursorHandler); cursorManager.addEventListener("showCustomCursor", showCustomCursorHandler); } //-------------------------------------------------------------------------- // // Shortcuts to save typing // //-------------------------------------------------------------------------- private var cursorManager:CursorManagerImpl; private var mp:IMarshalSystemManager; private function get initialized():Boolean { return cursorManager.initialized; } private function get sandboxRoot():DisplayObject { return cursorManager.systemManager.getSandboxRoot(); } private function get systemManager():ISystemManager { return cursorManager.systemManager; } private function get cursorHolder():Sprite { return cursorManager.cursorHolder; } private function set cursorHolder(value:Sprite):void { cursorManager.cursorHolder = value; } //-------------------------------------------------------------------------- // // Event Handlers // //-------------------------------------------------------------------------- public function initializeHandler(event:Event):void { // The first time a cursor is requested of the CursorManager, // create a Sprite to hold the cursor symbol cursorHolder = new FlexSprite(); cursorHolder.name = "cursorHolder"; cursorHolder.mouseEnabled = false; cursorHolder.mouseChildren = false; mp.addChildToSandboxRoot("cursorChildren", cursorHolder); var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "initialized"; // trace("-->dispatched removeBusyCursor for CursorManagerImpl", sm); sandboxRoot.dispatchEvent(me); // trace("<--dispatched removeBusyCursor for CursorManagerImpl", sm); event.preventDefault(); } public function currentCursorIDHandler(event:Event):void { if (!cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "currentCursorID"; me.value = cursorManager.currentCursorID; // trace("-->dispatched currentCursorID for CursorManagerImpl", sm, currentCursorID); sandboxRoot.dispatchEvent(me); // trace("<--dispatched currentCursorID for CursorManagerImpl", sm, currentCursorID); } } public function currentCursorXOffsetHandler(event:Event):void { if (!cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "currentCursorXOffset"; me.value = cursorManager.currentCursorXOffset; // trace("-->dispatched currentCursorXOffset for CursorManagerImpl", sm, currentCursorXOffset); sandboxRoot.dispatchEvent(me); // trace("<--dispatched currentCursorXOffset for CursorManagerImpl", sm, currentCursorXOffset); } } public function currentCursorYOffsetHandler(event:Event):void { if (!cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "currentCursorYOffset"; me.value = cursorManager.currentCursorYOffset; // trace("-->dispatched currentCursorYOffset for CursorManagerImpl", sm, currentCursorYOffset); sandboxRoot.dispatchEvent(me); // trace("<--dispatched currentCursorYOffset for CursorManagerImpl", sm, currentCursorYOffset); } } public function showCursorHandler(event:Event):void { if (!cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "showCursor"; // trace("-->dispatched showCursor for CursorManagerImpl", sm); sandboxRoot.dispatchEvent(me); // trace("<--dispatched showCursor for CursorManagerImpl", sm); } } public function hideCursorHandler(event:Event):void { if (!cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "hideCursor"; // trace("-->dispatched hideCursor for CursorManagerImpl", sm); sandboxRoot.dispatchEvent(me); // trace("<--dispatched hideCursor for CursorManagerImpl", sm); } } public function setCursorHandler(event:Request):void { if (initialized && !cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "setCursor"; me.value = event.value // trace("-->dispatched setCursor for CursorManagerImpl", sm, me.value); sandboxRoot.dispatchEvent(me); // trace("<--dispatched setCursor for CursorManagerImpl", sm, me.value); event.value = me.value; event.preventDefault(); } } public function removeCursorHandler(event:Request):void { if (initialized && !cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "removeCursor"; me.value = event.value; // trace("-->dispatched removeCursor for CursorManagerImpl", sm, me.value); sandboxRoot.dispatchEvent(me); // trace("<--dispatched removeCursor for CursorManagerImpl", sm, me.value); event.preventDefault(); } } public function removeAllCursorsHandler(event:Event):void { if (initialized && !cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "removeAllCursors"; // trace("-->dispatched removeAllCursors for CursorManagerImpl", sm); sandboxRoot.dispatchEvent(me); // trace("<--dispatched removeAllCursors for CursorManagerImpl", sm); event.preventDefault(); } } public function setBusyCursorHandler(event:Event):void { if (initialized && !cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "setBusyCursor"; // trace("-->dispatched setBusyCursor for CursorManagerImpl", sm); sandboxRoot.dispatchEvent(me); // trace("<--dispatched setBusyCursor for CursorManagerImpl", sm); event.preventDefault(); } } public function removeBusyCursorHandler(event:Event):void { if (initialized && !cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "removeBusyCursor"; // trace("-->dispatched removeBusyCursor for CursorManagerImpl", sm); sandboxRoot.dispatchEvent(me); // trace("<--dispatched removeBusyCursor for CursorManagerImpl", sm); event.preventDefault(); } } public function registerToUseBusyCursorHandler(event:Request):void { if (initialized && !cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "registerToUseBusyCursor"; me.value = event.value; // trace("-->dispatched registerToUseBusyCursor for CursorManagerImpl", sm, me.value); sandboxRoot.dispatchEvent(me); // trace("<--dispatched registerToUseBusyCursor for CursorManagerImpl", sm, me.value); event.preventDefault(); } } public function unRegisterToUseBusyCursorHandler(event:Request):void { if (initialized && !cursorHolder) { var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "unRegisterToUseBusyCursor"; me.value = event.value; // trace("-->dispatched unRegisterToUseBusyCursor for CursorManagerImpl", sm, me.value); sandboxRoot.dispatchEvent(me); // trace("<--dispatched unRegisterToUseBusyCursor for CursorManagerImpl", sm, me.value); event.preventDefault(); } } public function addMouseOutListenerHandler(event:Event):void { if (mp.useSWFBridge()) { sandboxRoot.addEventListener(MouseEvent.MOUSE_OUT, cursorManager.mouseOutHandler,true,EventPriority.CURSOR_MANAGEMENT); event.preventDefault(); } } public function addMouseMoveListenerHandler(event:Event):void { if (mp.useSWFBridge()) { sandboxRoot.addEventListener(MouseEvent.MOUSE_MOVE, cursorManager.mouseMoveHandler,true,EventPriority.CURSOR_MANAGEMENT); sandboxRoot.addEventListener(SandboxMouseEvent.MOUSE_MOVE_SOMEWHERE, marshalMouseMoveHandler,false,EventPriority.CURSOR_MANAGEMENT); event.preventDefault(); } } public function removeMouseMoveListenerHandler(event:Event):void { if (mp.useSWFBridge()) { sandboxRoot.removeEventListener(MouseEvent.MOUSE_MOVE, cursorManager.mouseMoveHandler,true); sandboxRoot.removeEventListener(SandboxMouseEvent.MOUSE_MOVE_SOMEWHERE, marshalMouseMoveHandler,false); event.preventDefault(); } } public function removeMouseOutListenerHandler(event:Event):void { if (mp.useSWFBridge()) { sandboxRoot.removeEventListener(MouseEvent.MOUSE_OUT, cursorManager.mouseOutHandler,true); event.preventDefault(); } } /** * @private */ private function marshalMouseMoveHandler(event:Event):void { if (cursorHolder.visible) { // mouse is outside our sandbox, restore it. cursorHolder.visible = false; var cursorRequest:SWFBridgeRequest = new SWFBridgeRequest(SWFBridgeRequest.SHOW_MOUSE_CURSOR_REQUEST); var bridge:IEventDispatcher; if (mp.useSWFBridge()) { bridge = mp.swfBridgeGroup.parentBridge;; } else bridge = systemManager; cursorRequest.requestor = bridge; bridge.dispatchEvent(cursorRequest); if (cursorRequest.data) Mouse.show(); } } private function showCustomCursorHandler(event:Event):void { var cursorRequest:SWFBridgeRequest = new SWFBridgeRequest(SWFBridgeRequest.HIDE_MOUSE_CURSOR_REQUEST); var bridge:IEventDispatcher; if (mp.useSWFBridge()) { bridge = mp.swfBridgeGroup.parentBridge;; } else bridge = systemManager; cursorRequest.requestor = bridge; bridge.dispatchEvent(cursorRequest); } /** * Marshal cursorManager * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ private function marshalCursorManagerHandler(event:Event):void { if (event is InterManagerRequest) return; var marshalEvent:Object = event; switch (marshalEvent.name) { case "initialized": // trace("--marshaled initialized for CursorManagerImpl", sm, marshalEvent.value); cursorManager.initialized = marshalEvent.value; break; case "currentCursorID": // trace("--marshaled currentCursorID for CursorManagerImpl", sm, marshalEvent.value); cursorManager._currentCursorID = marshalEvent.value; break; case "currentCursorXOffset": // trace("--marshaled currentCursorXOffset for CursorManagerImpl", sm, marshalEvent.value); cursorManager._currentCursorXOffset = marshalEvent.value; break; case "currentCursorYOffset": // trace("--marshaled currentCursorYOffset for CursorManagerImpl", sm, marshalEvent.value); cursorManager._currentCursorYOffset = marshalEvent.value; break; case "showCursor": if (cursorHolder) { // trace("--marshaled showCursor for CursorManagerImpl", sm); cursorHolder.visible = true; ; } break; case "hideCursor": if (cursorHolder) { // trace("--marshaled hideCursor for CursorManagerImpl", sm); cursorHolder.visible = false; ; } break; case "setCursor": // trace("--marshaled setCursor for CursorManagerImpl", sm, marshalEvent.value); if (cursorHolder) { marshalEvent.value = cursorManager.setCursor.apply(cursorManager, marshalEvent.value); } break; case "removeCursor": if (cursorHolder) // it is our drag { cursorManager.removeCursor.apply(cursorManager, [ marshalEvent.value ]); // trace("--marshaled removeCursor for CursorManagerImpl", sm, marshalEvent.value); } break; case "removeAllCursors": // trace("--marshaled removeAllCursors for CursorManagerImpl", sm); if (cursorHolder) cursorManager.removeAllCursors(); break; case "setBusyCursor": // trace("--marshaled setBusyCursor for CursorManagerImpl", sm); if (cursorHolder) cursorManager.setBusyCursor(); break; case "removeBusyCursor": // trace("--marshaled removeBusyCursor for CursorManagerImpl", sm); if (cursorHolder) cursorManager.removeBusyCursor(); break; case "registerToUseBusyCursor": // trace("--marshaled registerToUseBusyCursor for CursorManagerImpl", sm, marshalEvent.value); if (cursorHolder) cursorManager.registerToUseBusyCursor.apply(this, marshalEvent.value); break; case "unRegisterToUseBusyCursor": // trace("--marshaled unRegisterToUseBusyCursor for CursorManagerImpl", sm, marshalEvent.value); if (cursorHolder) cursorManager.unRegisterToUseBusyCursor.apply(this, marshalEvent.value); break; case "update": // if we own the cursorHolder, then we're first CursorManager // so update the others if (cursorHolder) { // trace("-->marshaled update for CursorManagerImpl", sm); var me:InterManagerRequest = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "initialized"; me.value = true; // trace("-->dispatched initialized for CursorManagerImpl", sm, true); sandboxRoot.dispatchEvent(me); // trace("<--dispatched initialized for CursorManagerImpl", sm, true); me = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "currentCursorID"; me.value = cursorManager.currentCursorID; // trace("-->dispatched currentCursorID for CursorManagerImpl", sm, true); sandboxRoot.dispatchEvent(me); // trace("<--dispatched currentCursorID for CursorManagerImpl", sm, true); me = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "currentCursorXOffset"; me.value = cursorManager.currentCursorXOffset; // trace("-->dispatched currentCursorXOffset for CursorManagerImpl", sm, true); sandboxRoot.dispatchEvent(me); // trace("<--dispatched currentCursorXOffset for CursorManagerImpl", sm, true); me = new InterManagerRequest(InterManagerRequest.CURSOR_MANAGER_REQUEST); me.name = "currentCursorYOffset"; me.value = cursorManager.currentCursorYOffset; // trace("-->dispatched currentCursorYOffset for CursorManagerImpl", sm, true); sandboxRoot.dispatchEvent(me); // trace("<--dispatched currentCursorYOffset for CursorManagerImpl", sm, true); // trace("<--marshaled update for CursorManagerImpl", sm); } } } } }