blob: 1bda5fd2b761be553bfa89836e51b426444032f0 [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 flashx.textLayout.events
{
import flash.events.Event;
import flash.events.MouseEvent;
import flashx.textLayout.elements.FlowElement;
/** A link element dispatches this event when it detects mouse activity.
* The Text Layout Framework includes this special version of mouse events
* because mouse events are generally unwanted when a flow element is
* embedded in an editable text flow, and because link elements are not in
* the display list (they are not DisplayObjects).
* <p>You can add an event listener to a link element to listen for this
* type of event. If you choose to cancel the event by calling
* <code>Event.preventDefault()</code>, the default behavior associated
* with the event will not occur.
* </p>
* <p>If you choose not to add an event listener to the link element, or
* your event listener function does not cancel the behavior, the
* event is again dispatched, but this time by the link element's
* associated TextFlow instance rather than by the link element itself.
* This provides a second opportunity to listen for this event with
* an event listener attached to the TextFlow.
* </p>
* <p>FlowElementMouseEvents are
* dispatched only when the text cannot be edited or when the control key
* is pressed concurrently with the mouse activity.</p>
* <p>
* The following six event types are dispatched only when the text
* cannot be edited or when the control key is pressed:
* <ul>
* <li><code>FlowElementMouseEvent.CLICK</code></li>
* <li><code>FlowElementMouseEvent.MOUSE_DOWN</code></li>
* <li><code>FlowElementMouseEvent.MOUSE_UP</code></li>
* <li><code>FlowElementMouseEvent.MOUSE_MOVE</code></li>
* <li><code>FlowElementMouseEvent.ROLL_OVER</code></li>
* <li><code>FlowElementMouseEvent.ROLL_OUT</code></li>
* </ul>
* </p>
*
* @includeExample examples\FlowElementMouseEvent_example.as -noswf
*
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
* @see flashx.textLayout.elements.LinkElement
* @see flash.events.MouseEvent
*/
public class FlowElementMouseEvent extends Event
{
/**
* Defines the value of the <code>type</code> property of a <code>mouseDown</code> event object.
*
* @see flash.events.MouseEvent#MOUSE_DOWN
*
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
*/
public static const MOUSE_DOWN:String = "mouseDown";
/**
* Defines the value of the <code>type</code> property of a <code>mouseUp</code> event object.
*
* @see flash.events.MouseEvent#MOUSE_UP
*
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
*/
public static const MOUSE_UP:String = "mouseUp";
/**
* Defines the value of the <code>type</code> property of a <code>mouseMove</code> event object.
*
* @see flash.events.MouseEvent#MOUSE_MOVE
*
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
*/
public static const MOUSE_MOVE:String = "mouseMove";
/**
* Defines the value of the <code>type</code> property of a <code>rollOver</code> event object.
*
* @see flash.events.MouseEvent#ROLL_OVER
*
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
*/
public static const ROLL_OVER:String = "rollOver";
/**
* Defines the value of the <code>type</code> property of a <code>rollOut</code> event object.
*
* @see flash.events.MouseEvent#ROLL_OUT
*
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
*/
public static const ROLL_OUT:String = "rollOut";
/**
* Defines the value of the <code>type</code> property of a <code>click</code> event object.
*
* @see flash.events.MouseEvent#CLICK
*
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
*/
public static const CLICK:String = "click";
private var _flowElement:FlowElement;
private var _originalEvent:MouseEvent;
/**
* The FlowElement that dispatched the event.
*
* @see flashx.textLayout.elements.FlowElement
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
*/
public function get flowElement():FlowElement
{ return _flowElement; }
public function set flowElement(value:FlowElement):void
{ _flowElement = value; }
/**
* The original mouse event generated by the mouse activity.
* This property can contain any of the following values:
* <ul>
* <li><code>MouseEvent.CLICK</code></li>
* <li><code>MouseEvent.MOUSE_DOWN</code></li>
* <li><code>MouseEvent.MOUSE_UP</code></li>
* <li><code>MouseEvent.MOUSE_MOVE</code></li>
* <li><code>MouseEvent.MOUSE_OVER</code></li>
* <li><code>MouseEvent.MOUSE_OUT</code></li>
* </ul>
* <p>
* In most cases the original event matches the event that the
* link element dispatches. The events match for the <code>click</code>,
* <code>mouseDown</code>, <code>mouseOut</code>, and <code>mouseOver</code>
* events. There are two cases, however, in which the original event
* is converted by the link element to a related event.
* If a link element detects a <code>mouseOver</code> event, it dispatches
* a <code>rollOver</code> event. Likewise, if a link element detects
* a <code>mouseOut</code> event, it dispatches a <code>rollOut</code> event.
* Usually, the event target and the mouse coordinates are related to
* the TextLine instance containing the link element.
* </p>
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
* @see flash.events.MouseEvent
*/
public function get originalEvent():MouseEvent
{ return _originalEvent; }
public function set originalEvent(value:MouseEvent):void
{ _originalEvent = value; }
/**
* Creates an event object that contains information about mouse activity.
* Event objects are passed as parameters to event listeners. Use the
* constructor if you plan to manually dispatch an event. You do not need
* to use the constructor to listen for FlowElementMouseEvent objects
* generated by a FlowElement.
* @param type The type of the event. Event listeners can access this information through the
* inherited <code>type</code> property. There are six types:
* <code>FlowElementMouseEvent.CLICK</code>; <code>FlowElementMouseEvent.MOUSE_DOWN</code>; <code>FlowElementMouseEvent.MOUSE_MOVE</code>;
* <code>FlowElementMouseEvent.MOUSE_UP</code>; <code>FlowElementMouseEvent.ROLL_OVER</code>; and <code>FlowElementMouseEvent.ROLL_OUT</code>.
* @param bubbles Determines whether the Event object participates in the bubbling phase of the
* event flow. FlowElementMouseEvent objects do not bubble.
* @param cancelable Determines whether the Event object can be canceled. Event listeners can
* access this information through the inherited <code>cancelable</code> property. FlowElementMouseEvent
* objects can be cancelled. You can cancel the default behavior associated with this event
* by calling the <code>preventDefault()</code> method in your event listener.
* @param flowElement The instance of FlowElement, currently a LinkElement, associated with this
* event. Event listeners can access this information through the <code>flowElement</code> property.
* @param originalEvent The original mouse event that occurred on the flowElement. Event listeners can
* access this information through the <code>originalEvent</code> property.
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
*/
public function FlowElementMouseEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = true, flowElement:FlowElement = null, originalEvent:MouseEvent = null)
{
super(type, bubbles, cancelable);
_flowElement = flowElement;
_originalEvent = originalEvent;
}
/** @private */
override public function clone():Event
{
return new FlowElementMouseEvent(type, bubbles, cancelable, flowElement, originalEvent);
}
}
}