blob: 26065df6dad6e52311537ca3bab29cd822b7bc69 [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// 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
{
import mx.core.IUIComponent;
import mx.core.Singleton;
import mx.core.mx_internal;
//--------------------------------------
// Styles
//--------------------------------------
/**
* The skin for the busy cursor.
*
* @default mx.skins.halo.BusyCursor
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
[Style(name="busyCursor", type="Class", inherit="no")]
/**
* The class to use as the skin for the busy cursor background.
* The default value is the "cursorStretch" symbol from the Assets.swf file.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
[Style(name="busyCursorBackground", type="Class", inherit="no")]
/**
* The CursorManager class controls a prioritized list of cursors,
* where the cursor with the highest priority is currently visible.
* If the cursor list contains more than one cursor with the same priority,
* the Cursor Manager displays the most recently created cursor.
*
* <p>For example, if your application performs processing
* that requires the user to wait until the processing completes,
* you can change the cursor so that it reflects the waiting period.
* In this case, you can change the cursor to an hourglass
* or other image.</p>
*
* <p>You also might want to change the cursor to provide feedback
* to the user to indicate the actions that the user can perform.
* For example, you can use one cursor image to indicate that user input
* is enabled, and another to indicate that input is disabled.
* You can use a JPEG, GIF, PNG, or SVG image, a Sprite object, or a SWF file
* as the cursor image.</p>
*
* <p>All methods and properties of the CursorManager are static,
* so you do not need to create an instance of it.</p>
*
* <p>In AIR, each mx.core.Window instance uses its own instance of the CursorManager class.
* Instead of directly referencing the static methods and properties of the CursorManager class,
* use the <code>Window.cursorManager</code> property to reference the CursorManager instance
* for the Window instance. </p>
*
* @see mx.managers.CursorManagerPriority
* @see mx.core.Window
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public class CursorManager
{
include "../core/Version.as";
//--------------------------------------------------------------------------
//
// Class constants
//
//--------------------------------------------------------------------------
/**
* Constant that is the value of <code>currentCursorID</code> property
* when there is no cursor managed by the CursorManager and therefore
* the system cursor is being displayed.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static const NO_CURSOR:int = 0;
//--------------------------------------------------------------------------
//
// Class variables
//
//--------------------------------------------------------------------------
/**
* @private
* Linker dependency on implementation class.
*/
private static var implClassDependency:CursorManagerImpl;
/**
* @private
* Storage for the impl getter.
* This gets initialized on first access,
* not at static initialization time, in order to ensure
* that the Singleton registry has already been initialized.
*/
private static var _impl:ICursorManager;
/**
* @private
* The singleton instance of CursorManagerImpl which was
* registered as implementing the ICursorManager interface.
*/
private static function get impl():ICursorManager
{
if (!_impl)
{
_impl = ICursorManager(
Singleton.getInstance("mx.managers::ICursorManager"));
}
return _impl;
}
/**
* Each mx.core.Window instance in an AIR application has its own CursorManager instance.
* This method returns the CursorManager instance for the main Window instance.
*
* @return The CursorManager instance for the main Window instance in an AIR application.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function getInstance():ICursorManager
{
return impl;
}
//--------------------------------------------------------------------------
//
// Class properties
//
//--------------------------------------------------------------------------
//----------------------------------
// currentCursorID
//----------------------------------
/**
* ID of the current custom cursor,
* or NO_CURSOR if the system cursor is showing.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function get currentCursorID():int
{
return impl.currentCursorID;
}
/**
* @private
*/
public static function set currentCursorID(value:int):void
{
impl.currentCursorID = value;
}
//----------------------------------
// currentCursorXOffset
//----------------------------------
/**
* The x offset of the custom cursor, in pixels,
* relative to the mouse pointer.
*
* @default 0
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function get currentCursorXOffset():Number
{
return impl.currentCursorXOffset;
}
/**
* @private
*/
public static function set currentCursorXOffset(value:Number):void
{
impl.currentCursorXOffset = value;
}
//----------------------------------
// currentCursorYOffset
//----------------------------------
/**
* The y offset of the custom cursor, in pixels,
* relative to the mouse pointer.
*
* @default 0
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function get currentCursorYOffset():Number
{
return impl.currentCursorYOffset;
}
/**
* @private
*/
public static function set currentCursorYOffset(value:Number):void
{
impl.currentCursorYOffset = value;
}
//--------------------------------------------------------------------------
//
// Class methods
//
//--------------------------------------------------------------------------
/**
* Makes the cursor visible.
* Cursor visibility is not reference-counted.
* A single call to the <code>showCursor()</code> method
* always shows the cursor regardless of how many calls
* to the <code>hideCursor()</code> method were made.
*
* <p>Calling this method does not affect the system cursor.
* Use the <code>Mouse.show()</code> and
* <code>Mouse.hide()</code> methods to directly
* control the system cursor. </p>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function showCursor():void
{
impl.showCursor();
}
/**
* Makes the cursor invisible.
* Cursor visibility is not reference-counted.
* A single call to the <code>hideCursor()</code> method
* always hides the cursor regardless of how many calls
* to the <code>showCursor()</code> method were made.
*
* <p>Calling this method does not affect the system cursor.
* Use the <code>Mouse.show()</code> and
* <code>Mouse.hide()</code> methods to directly
* control the system cursor. </p>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function hideCursor():void
{
impl.hideCursor();
}
/**
* Creates a new cursor and sets an optional priority for the cursor.
* Adds the new cursor to the cursor list.
*
* @param cursorClass Class of the cursor to display.
*
* @param priority Integer that specifies
* the priority level of the cursor.
* Possible values are <code>CursorManagerPriority.HIGH</code>,
* <code>CursorManagerPriority.MEDIUM</code>, and <code>CursorManagerPriority.LOW</code>.
*
* @param xOffset Number that specifies the x offset
* of the cursor, in pixels, relative to the mouse pointer.
*
* @param yOffset Number that specifies the y offset
* of the cursor, in pixels, relative to the mouse pointer.
*
* @param setter The IUIComponent that set the cursor. Necessary (in multi-window environments)
* to know which window needs to display the cursor.
*
* @return The ID of the cursor.
*
* @see mx.managers.CursorManagerPriority
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function setCursor(cursorClass:Class, priority:int = 2,
xOffset:Number = 0,
yOffset:Number = 0):int
{
return impl.setCursor(cursorClass, priority, xOffset, yOffset);
}
/**
* Removes a cursor from the cursor list.
* If the cursor being removed is the currently displayed cursor,
* the CursorManager displays the next cursor in the list, if one exists.
* If the list becomes empty, the CursorManager displays
* the default system cursor.
*
* @param cursorID ID of cursor to remove.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function removeCursor(cursorID:int):void
{
impl.removeCursor(cursorID);
}
/**
* Removes all of the cursors from the cursor list
* and restores the system cursor.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function removeAllCursors():void
{
impl.removeAllCursors();
}
/**
* Displays the busy cursor.
* The busy cursor has a priority of CursorManagerPriority.LOW.
* Therefore, if the cursor list contains a cursor
* with a higher priority, the busy cursor is not displayed
* until you remove the higher priority cursor.
* To create a busy cursor at a higher priority level,
* use the <code>setCursor()</code> method.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function setBusyCursor():void
{
impl.setBusyCursor();
}
/**
* Removes the busy cursor from the cursor list.
* If other busy cursor requests are still active in the cursor list,
* which means you called the <code>setBusyCursor()</code> method more than once,
* a busy cursor does not disappear until you remove
* all busy cursors from the list.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function removeBusyCursor():void
{
impl.removeBusyCursor();
}
/**
* @private
* Called by other components if they want to display
* the busy cursor during progress events.
*/
mx_internal static function registerToUseBusyCursor(source:Object):void
{
impl.registerToUseBusyCursor(source);
}
/**
* @private
* Called by other components to unregister
* a busy cursor from the progress events.
*/
mx_internal static function unRegisterToUseBusyCursor(source:Object):void
{
impl.unRegisterToUseBusyCursor(source);
}
}
}