You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/06/16 22:59:56 UTC
[39/50] [abbrv] git commit: [flex-asjs] [refs/heads/spark] - Merge
branch 'develop' into spark
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/77148f4a/frameworks/projects/MX/src/main/flex/mx/core/UITextField.as
----------------------------------------------------------------------
diff --cc frameworks/projects/MX/src/main/flex/mx/core/UITextField.as
index 07c0fa9,0000000..0e7cf88
mode 100644,000000..100644
--- a/frameworks/projects/MX/src/main/flex/mx/core/UITextField.as
+++ b/frameworks/projects/MX/src/main/flex/mx/core/UITextField.as
@@@ -1,2870 -1,0 +1,2870 @@@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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
+{
+
- COMPILE::AS3
++COMPILE::SWF
+{
+ import flash.display.DisplayObject;
+ import flash.display.DisplayObjectContainer;
+ import flash.geom.Matrix;
+ import flash.text.TextFieldType;
+ import flash.text.TextFormat;
+ import flash.text.TextFormatAlign;
+ import flex.display.TopOfDisplayList;
+ import org.apache.flex.core.IFlexJSElement;
+ import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.core.IBeadView;
+ import org.apache.flex.core.IBead;
+ import org.apache.flex.core.IBeadModel
+}
+COMPILE::JS
+{
+ import flex.display.DisplayObject;
+ import flex.display.DisplayObjectContainer;
+ import flex.text.TextFieldType;
+ import flex.text.TextFormat;
+ import flex.text.TextFormatAlign;
+}
+import flex.text.TextLineMetrics;
+import flex.display.Sprite;
+
+import mx.automation.IAutomationObject;
+import mx.core.LayoutDirection;
+import mx.managers.ISystemManager;
+import mx.managers.IToolTipManagerClient;
+import mx.managers.SystemManager;
+import mx.managers.ToolTipManager;
+import mx.resources.IResourceManager;
+import mx.resources.ResourceManager;
+import mx.styles.ISimpleStyleClient;
+import mx.styles.IStyleClient;
+import mx.styles.IStyleManager2;
+import mx.styles.StyleManager;
+import mx.styles.StyleProtoChain;
+import mx.utils.NameUtil;
+import mx.utils.StringUtil;
+
+import flex.events.Event;
+import flex.text.TextField;
+import org.apache.flex.events.IEventDispatcher;
+
+use namespace mx_internal;
+
+include "../styles/metadata/LeadingStyle.as"
+include "../styles/metadata/PaddingStyles.as"
+include "../styles/metadata/TextStyles.as"
+
+//--------------------------------------
+// Excluded APIs
+//--------------------------------------
+
+[Exclude(name="direction", kind="style")]
+
+//--------------------------------------
+// Other metadata
+//--------------------------------------
+
+[ResourceBundle("core")]
+
+/**
+ * The UITextField class defines the component used by many Flex
+ * components to display text.
+ * For example, the mx.controls.Button control uses a
+ * UITextField component to define the label area of the Button control.
+ *
+ * <p>The UITextField class extends the flash.text.TextField class to
+ * support additional functionality required by Flex, such as CSS styles,
+ * invalidation/measurement/layout, enabling/disabling, tooltips, and IME
+ * (Input Method Editor) support for entering Chinese, Japanese, and
+ * Korean text.</p>
+ *
+ * <p>Warning: if UITextField inherits <code>layoutDirection="rtl"</code>, it
+ * will modify its own <code>transform.matrix</code> to restore the default
+ * coordinate system locally.</p>
+ *
+ * @see flash.text.TextField
+ * @see mx.core.UITextFormat
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+public class UITextField extends TextField
+ implements IAutomationObject, IIMESupport,
+ IFlexModule,
+ IInvalidating, ISimpleStyleClient,
+ IToolTipManagerClient, IUITextField
+
+{
+ include "../core/Version.as";
+
+ //--------------------------------------------------------------------------
+ //
+ // Implementation notes
+ //
+ //--------------------------------------------------------------------------
+
+ /*
+
+ UITextField extends the Player's TextField class,
+ so here are some notes about TextField.
+
+ The property values of a new TextField are as follows:
+
+ alwaysShowSelection = false
+ autoSize = TextFieldAutoSize.NONE
+ background = false
+ backgroundColor = 0xFFFFFF
+ border = false
+ borderColor = 0x000000
+ caretIndex = 0
+ condenseWhite = false
+ displayAsPassword = false
+ embedFonts = false
+ height = 100
+ htmlText = ""
+ length = 0
+ maxChars = 0
+ mouseWheelEnabled = true
+ multiline = false
+ numLines = 1
+ restrict = null
+ selectable = true
+ selectionBeginIndex = 0
+ selectionEndIndex = 0
+ text = ""
+ textColor = 0x000000
+ textHeight = 0
+ textWidth = 0
+ type = TextFieldType.DYNAMIC
+ width = 100
+ wordWrap = false
+
+ Many of these properties are coupled.
+ For example, setting 'text' affects 'htmlText', 'length',
+ 'textWidth', and 'textHeight'.
+ If 'autoSize' isn't "none", it also affects 'width' and 'height'.
+
+ The 'htmlText' getter and setter aren't symmetrical;
+ if you set it and then get it, you don't get what you just set;
+ you'll get additional HTML markup corresponding to the
+ defaultTextFormat.
+
+ If you set both the 'text' and the 'htmlText' properties
+ of a TextField, the last one set wins.
+
+ These setters do a lot of work; for example, suppose you set the 'text'.
+ If it is an autosizing TextField, it computes the new width and height.
+ If it is a wordwrapping TextField, it computes the appropriate line
+ breaks.
+
+ If you then get the 'text' property, it is what you just set.
+ If you get the 'length', it is the length of the 'text' string.
+ If you get the 'htmlText', it will contain a lot of autogenerated
+ HTML markup corresponding to the defaultTextFormat, which was applied
+ as a run across the entire new text.
+
+ Now suppose you set the 'htmlText' property.
+ The Player parses the string, separating the text characters
+ from the markup.
+ It first applies the defaultTextFormat as a run across the entire new
+ text; it then uses the markup to modify this TextFormat or create
+ additional TextFormat runs.
+ When it's done it discards the 'htmlText' string that you set.
+
+ If you then get the 'htmlText', it will not be what you just set; it
+ will contain additional HTML markup corresponding to defaultTextFormat
+ If you get the 'text', it will be text characters in the 'htmlText',
+ without any of the HTML markup.
+ If you get the 'length', it is the length of the 'text' string.
+
+ If you set a TextFormat run with setTextFormat(), it will change the
+ runs created from the HTML markup in the 'htmlText' that was last set.
+ This is why, in the validateNow() method in UITextField, the original
+ 'htmlText' is reapplied after the TextFormat is changed.
+
+ The 'condenseWhite' property only applies when setting 'htmlText',
+ not 'text'.
+ Changing 'condenseWhite' after setting 'htmlText' doesn't affect
+ anything except future settings of 'htmlText'.
+
+ The width and height of the TextField are 4 pixels greater than
+ the textWidth and textHeight.
+
+ */
+
+ //--------------------------------------------------------------------------
+ //
+ // Class constants
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * The padding to be added to textWidth to get the width
+ * of a TextField that can display the text without clipping.
+ */
+ mx_internal static const TEXT_WIDTH_PADDING:int = 5;
+
+ /**
+ * @private
+ * The padding to be added to textHeight to get the height
+ * of a TextField that can display the text without clipping.
+ */
+ mx_internal static const TEXT_HEIGHT_PADDING:int = 4;
+
+ //--------------------------------------------------------------------------
+ //
+ // Class variables
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * Most resources are fetched on the fly from the ResourceManager,
+ * so they automatically get the right resource when the locale changes.
+ * But since truncateToFit() can be called frequently,
+ * this class caches this resource value in this variable
+ * and updates it when the locale changes.
+ */
+ private static var truncationIndicatorResource:String;
+
+ /**
+ * @private
+ */
+ mx_internal static var debuggingBorders:Boolean = false;
+
+ //--------------------------------------------------------------------------
+ //
+ // Class properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // embeddedFontRegistry
+ //----------------------------------
+
+ private static var noEmbeddedFonts:Boolean;
+
+ /**
+ * @private
+ * Storage for the _embeddedFontRegistry property.
+ * Note: This gets initialized on first access,
+ * not when this class is initialized, in order to ensure
+ * that the Singleton registry has already been initialized.
+ */
+ private static var _embeddedFontRegistry:IEmbeddedFontRegistry;
+
+ /**
+ * @private
+ * A reference to the embedded font registry.
+ * Single registry in the system.
+ * Used to look up the moduleFactory of a font.
+ */
+ private static function get embeddedFontRegistry():IEmbeddedFontRegistry
+ {
+ if (!_embeddedFontRegistry && !noEmbeddedFonts)
+ {
+ try
+ {
+ _embeddedFontRegistry = IEmbeddedFontRegistry(
+ Singleton.getInstance("mx.core::IEmbeddedFontRegistry"));
+ }
+ catch (e:Error)
+ {
+ noEmbeddedFonts = true;
+ }
+ }
+
+ return _embeddedFontRegistry;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function UITextField()
+ {
+ super();
+
+ // Although a TextField's 'text' is initially "",
+ // getLineMetrics() will return bad values until some text is set.
+ super.text = "";
+
+ focusRect = false;
+ selectable = false;
+ tabEnabled = false;
+
+ if (debuggingBorders)
+ border = true;
+
+ if (!truncationIndicatorResource)
+ {
+ truncationIndicatorResource = resourceManager.getString(
+ "core", "truncationIndicator");
+ }
+
+ addEventListener(Event.CHANGE, changeHandler);
+ addEventListener("textFieldStyleChange", textFieldStyleChangeHandler);
+
+ // Register as a weak listener for "change" events from ResourceManager.
+ // If UITextFields registered as a strong listener,
+ // they wouldn't get garbage collected
+ COMPILE::LATER
+ {
+ resourceManager.addEventListener(
+ Event.CHANGE, resourceManager_changeHandler, false, 0, true);
+ }
+ resourceManager.addEventListener(
+ Event.CHANGE, resourceManager_changeHandler);
+
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Variables
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * Cached value of the TextFormat read from the Styles.
+ */
+ private var cachedTextFormat:TextFormat;
+
+ /**
+ * @private
+ */
+ private var invalidateDisplayListFlag:Boolean = true;
+
+ /**
+ * @private
+ */
+ mx_internal var styleChangedFlag:Boolean = true;
+
+ /**
+ * @private
+ * This var is either the last value of 'htmlText' that was set
+ * or null (if 'text' was set instead of 'htmlText').
+ *
+ * This var is different from getting the 'htmlText',
+ * because when you set 'htmlText' into a TextField and then get it,
+ * you don't get what you set; what you get includes additional
+ * HTML markup generated from the defaultTextFormat
+ * (which for a Flex component is based on the CSS styles).
+ *
+ * When you set 'htmlText', a TextField parses through it
+ * and creates TextFormat runs based on the HTML markup.
+ * It applies these on top of the defaultTextFormat.
+ * A TextField saves the non-markup characters as the 'text',
+ * but it doesn't save the original 'htmlText',
+ * so we have to do this ourselves.
+ *
+ * If the CSS styles change, validateNow() will get called
+ * and a new TextFormat based on the new CSS styles
+ * will get applied to the entire TextField, wiping
+ * out any TextFormats that came from the HTML markup.
+ * So we use this var to re-apply the original markup
+ * after a CSS change.
+ */
+ private var explicitHTMLText:String = null;
+
+ /**
+ * @private
+ * Color set explicitly by setColor(); overrides style lookup.
+ */
+ mx_internal var explicitColor:uint = StyleManager.NOT_A_COLOR;
+
+ /**
+ * @private
+ */
+ private var resourceManager:IResourceManager =
+ ResourceManager.getInstance();
+
+ /**
+ * @private
+ */
+ private var untruncatedText:String;
+
+ /**
+ * @private
+ * True if we've inherited layoutDirection="rtl".
+ */
+ private var mirror:Boolean = false;
+
+ //--------------------------------------------------------------------------
+ //
+ // Overridden properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // x
+ //----------------------------------
+
+ private var _x:Number = 0;
+
+ /**
+ * @private
+ */
+ override public function set x(value:Number):void
+ {
+ _x = value;
+ super.x = value;
+ COMPILE::LATER
+ {
+ if (mirror)
+ validateTransformMatrix();
+ }
+ }
+
+ /**
+ * @private
+ */
+ override public function get x():Number
+ {
+ // TODO(hmuller): by default get x returns transform.matrix.tx rounded to the nearest 20th.
+ // should do the same here, if we're returning _x.
+ return (mirror) ? _x : super.x;
+ }
+
+ //----------------------------------
+ // width
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ override public function set width(value:Number):void
+ {
+ var changed:Boolean = super.width != value;
+
+ super.width = value;
+ COMPILE::LATER
+ {
+ if (mirror)
+ validateTransformMatrix();
+ }
+
+ // Since changing the width may reflow the text which can
+ // change the textWidth and/or textHeight dispatch an event so
+ // that listeners can react to this.
+ if (changed)
+ dispatchEvent(new Event("textFieldWidthChange"));
+ }
+
+ //----------------------------------
+ // htmlText
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ override public function set htmlText(value:String):void
+ {
+ // TextField's htmlText property can't be set to null.
+ if (!value)
+ value = "";
+
+ // Performance optimization: if the htmlText hasn't changed,
+ // don't let the player think that we're dirty.
+ if (isHTML && super.htmlText == value)
+ return;
+
+ // Reapply the format because TextField would otherwise reset to
+ // black, Times New Roman, 12
+ if (cachedTextFormat && styleSheet == null)
+ defaultTextFormat = cachedTextFormat;
+
+ super.htmlText = value;
+
+ // Remember the htmlText that we've set,
+ // because the TextField doesn't remember it for us.
+ // We need it so that we can re-apply the HTML markup
+ // in validateNow() after the CSS styles change
+ explicitHTMLText = value;
+
+ if (invalidateDisplayListFlag)
+ validateNow();
+ }
+
+ //----------------------------------
+ // parent
+ //----------------------------------
+
+ /**
+ * @private
+ * Reference to this component's virtual parent container.
+ * "Virtual" means that this parent may not be the same
+ * as the one that the Player returns as the 'parent'
+ * property of a DisplayObject.
+ * For example, if a Container has created a contentPane
+ * to improve scrolling performance,
+ * then its "children" are really its grandchildren
+ * and their "parent" is actually their grandparent,
+ * because we don't want developers to be concerned with
+ * whether a contentPane exists or not.
+ */
+ mx_internal var _parent:DisplayObjectContainer;
+
+ /**
+ * The parent container or component for this component.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ override public function get parent():DisplayObjectContainer
+ {
+ // Flash PlaceObject tags can have super.parent set
+ // before we get to setting the _parent property.
+ return _parent ? _parent : super.parent;
+ }
+
+ //----------------------------------
+ // text
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ override public function set text(value:String):void
+ {
+ // TextField's text property can't be set to null.
+ if (!value)
+ value = "";
+
+ // Performance optimization: if the text hasn't changed,
+ // don't let the player think that we're dirty.
+ if (!isHTML && super.text == value)
+ return;
+
+ super.text = value;
+
+ explicitHTMLText = null;
+
+ if (invalidateDisplayListFlag)
+ validateNow();
+ }
+
+ //----------------------------------
+ // textColor
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ override public function set textColor(value:uint):void
+ {
+ setColor(value);
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // automationDelegate
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _automationDelegate:IAutomationObject;
+
+ /**
+ * The delegate object which is handling the automation related functionality.
+ *
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get automationDelegate():Object
+ {
+ return _automationDelegate;
+ }
+
+ /**
+ * @private
+ */
+ public function set automationDelegate(value:Object):void
+ {
+ _automationDelegate = value as IAutomationObject;
+ }
+
+ //----------------------------------
+ // automationName
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the automationName property.
+ */
+ private var _automationName:String;
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get automationName():String
+ {
+ if (_automationName)
+ return _automationName;
+ if (automationDelegate)
+ return automationDelegate.automationName;
+
+ return "";
+ }
+
+ /**
+ * @private
+ */
+ public function set automationName(value:String):void
+ {
+ _automationName = value;
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get automationValue():Array
+ {
+ if (automationDelegate)
+ return automationDelegate.automationValue;
+
+ return [""];
+ }
+
+ //----------------------------------
+ // automationOwner
+ //----------------------------------
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 4
+ */
+ public function get automationOwner():DisplayObjectContainer
+ {
+ return owner;
+ }
+
+ //----------------------------------
+ // automationParent
+ //----------------------------------
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 4
+ */
+ public function get automationParent():DisplayObjectContainer
+ {
+ return parent;
+ }
+
+ //----------------------------------
+ // automationEnabled
+ //----------------------------------
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 4
+ */
+ public function get automationEnabled():Boolean
+ {
+ return enabled;
+ }
+
+ //----------------------------------
+ // automationVisible
+ //----------------------------------
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 4
+ */
+ public function get automationVisible():Boolean
+ {
+ return visible;
+ }
+
+ //----------------------------------
+ // baselinePosition
+ //----------------------------------
+
+ /**
+ * The y-coordinate of the baseline of the first line of text.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get baselinePosition():Number
+ {
+ var tlm:TextLineMetrics;
+
+ // The text styles aren't known until there is a parent.
+ if (!parent)
+ return NaN;
+
+ // getLineMetrics() returns strange numbers for an empty string,
+ // so instead we get the metrics for a non-empty string.
+ var isEmpty:Boolean = text == "";
+ if (isEmpty)
+ super.text = "Wj";
+
- COMPILE::AS3
++ COMPILE::SWF
+ {
+ tlm = TextLineMetrics.convert(getLineMetrics(0));
+ }
+ COMPILE::JS
+ {
+ tlm = getLineMetrics(0);
+ }
+
+ if (isEmpty)
+ super.text = "";
+
+ // TextFields have 2 pixels of padding all around.
+ return 2 + tlm.ascent;
+ }
+
+ //----------------------------------
+ // className
+ //----------------------------------
+
+ /**
+ * The name of this instance's class, such as
+ * <code>"DataGridItemRenderer"</code>.
+ *
+ * <p>This string does not include the package name.
+ * If you need the package name as well, call the
+ * <code>getQualifiedClassName()</code> method in the flash.utils package.
+ * It will return a string such as
+ * <code>"mx.controls.dataGridClasses::DataGridItemRenderer"</code>.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ COMPILE::LATER
+ public function get className():String
+ {
+ return NameUtil.getUnqualifiedClassName(this);
+ }
+
+ //----------------------------------
+ // document
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the enabled property.
+ */
+ private var _document:Object;
+
+ /**
+ * A reference to the document object associated with this UITextField object.
+ * A document object is an Object at the top of the hierarchy of a Flex application,
+ * MXML component, or AS component.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get document():Object
+ {
+ return _document;
+ }
+
+ /**
+ * @private
+ */
+ public function set document(value:Object):void
+ {
+ _document = value;
+ }
+
+ //----------------------------------
+ // enableIME
+ //----------------------------------
+
+ /**
+ * A flag that indicates whether the IME should
+ * be enabled when the component receives focus.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ public function get enableIME():Boolean
+ {
+ return type == TextFieldType.INPUT;
+ }
+
+ //----------------------------------
+ // enabled
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the enabled property.
+ */
+ private var _enabled:Boolean = true;
+
+ /**
+ * A Boolean value that indicates whether the component is enabled.
+ * This property only affects
+ * the color of the text and not whether the UITextField is editable.
+ * To control editability, use the
+ * <code>flash.text.TextField.type</code> property.
+ *
+ * @default true
+ * @see flash.text.TextField
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get enabled():Boolean
+ {
+ return _enabled;
+ }
+
+ /**
+ * @private
+ */
+ public function set enabled(value:Boolean):void
+ {
+ mouseEnabled = value;
+ _enabled = value;
+
+ styleChanged("color");
+ }
+
+ //----------------------------------
+ // explicitHeight
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the explicitHeight property.
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ private var _explicitHeight:Number;
+
+ /**
+ * @copy mx.core.UIComponent#explicitHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function get explicitHeight():Number
+ {
+ return _explicitHeight;
+ }
+
+ /**
+ * @private
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function set explicitHeight(value:Number):void
+ {
+ _explicitHeight = value;
+ }
+
+ //----------------------------------
+ // explicitMaxHeight
+ //----------------------------------
+
+ /**
+ * Number that specifies the maximum height of the component,
+ * in pixels, in the component's coordinates, if the maxHeight property
+ * is set. Because maxHeight is read-only, this method returns NaN.
+ * You must override this method and add a setter to use this
+ * property.
+ *
+ * @see mx.core.UIComponent#explicitMaxHeight
+ *
+ * @default NaN
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get explicitMaxHeight():Number
+ {
+ return NaN;
+ }
+
+ //----------------------------------
+ // explicitMaxWidth
+ //----------------------------------
+
+ /**
+ * Number that specifies the maximum width of the component,
+ * in pixels, in the component's coordinates, if the maxWidth property
+ * is set. Because maxWidth is read-only, this method returns NaN.
+ * You must override this method and add a setter to use this
+ * property.
+ *
+ * @see mx.core.UIComponent#explicitMaxWidth
+ *
+ * @default NaN
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get explicitMaxWidth():Number
+ {
+ return NaN;
+ }
+
+ //----------------------------------
+ // explicitMinHeight
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#explicitMinHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get explicitMinHeight():Number
+ {
+ return NaN;
+ }
+
+ //----------------------------------
+ // explicitMinWidth
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#explicitMinWidth
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get explicitMinWidth():Number
+ {
+ return NaN;
+ }
+
+ //----------------------------------
+ // explicitWidth
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the explicitWidth property.
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ private var _explicitWidth:Number;
+
+ /**
+ * @copy mx.core.UIComponent#explicitWidth
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function get explicitWidth():Number
+ {
+ return _explicitWidth;
+ }
+
+ /**
+ * @private
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function set explicitWidth(value:Number):void
+ {
+ _explicitWidth = value;
+ }
+
+ //----------------------------------
+ // focusPane
+ //----------------------------------
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get focusPane():Sprite
+ {
+ return null;
+ }
+
+ /**
+ * @private
+ */
+ public function set focusPane(value:Sprite):void
+ {
+ }
+
+ //----------------------------------
+ // ignorePadding
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the ignorePadding property.
+ */
+ private var _ignorePadding:Boolean = true;
+
+ /**
+ * If <code>true</code>, the <code>paddingLeft</code> and
+ * <code>paddingRight</code> styles will not add space
+ * around the text of the component.
+ *
+ * @default true
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get ignorePadding():Boolean
+ {
+ return _ignorePadding;
+ }
+
+ /**
+ * @private
+ */
+ public function set ignorePadding(value:Boolean):void
+ {
+ _ignorePadding = value;
+
+ styleChanged(null);
+ }
+
+ //----------------------------------
+ // imeMode
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the imeMode property.
+ */
+ private var _imeMode:String = null;
+
+ /**
+ * Specifies the IME (input method editor) mode.
+ * The IME enables users to enter text in Chinese, Japanese, and Korean.
+ * Flex sets the specified IME mode when the control gets the focus,
+ * and sets it back to the previous value when the control loses the focus.
+ *
+ * <p>The flash.system.IMEConversionMode class defines constants for the
+ * valid values for this property.
+ * You can also specify <code>null</code> to specify no IME.</p>
+ *
+ * @see flash.system.IMEConversionMode
+ *
+ * @default null
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get imeMode():String
+ {
+ return _imeMode;
+ }
+
+ /**
+ * @private
+ */
+ public function set imeMode(value:String):void
+ {
+ _imeMode = value;
+ }
+
+ //----------------------------------
+ // includeInLayout
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the includeInLayout property.
+ */
+ private var _includeInLayout:Boolean = true;
+
+ /**
+ * @copy mx.core.UIComponent#includeInLayout
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get includeInLayout():Boolean
+ {
+ return _includeInLayout;
+ }
+
+ /**
+ * @private
+ */
+ public function set includeInLayout(value:Boolean):void
+ {
+ if (_includeInLayout != value)
+ {
+ _includeInLayout = value;
+
+ var p:IInvalidating = parent as IInvalidating;
+ if (p)
+ {
+ p.invalidateSize();
+ p.invalidateDisplayList();
+ }
+ }
+ }
+
+ //----------------------------------
+ // inheritingStyles
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the inheritingStyles property.
+ */
+ private var _inheritingStyles:Object = StyleProtoChain.STYLE_UNINITIALIZED;
+
+ /**
+ * The beginning of this UITextField's chain of inheriting styles.
+ * The <code>getStyle()</code> method accesses
+ * <code>inheritingStyles[styleName]</code> to search the entire
+ * prototype-linked chain.
+ * This object is set up by the <code>initProtoChain()</code> method.
+ * You typically never need to access this property directly.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get inheritingStyles():Object
+ {
+ return _inheritingStyles;
+ }
+
+ /**
+ * @private
+ */
+ public function set inheritingStyles(value:Object):void
+ {
+ _inheritingStyles = value;
+ }
+
+ //----------------------------------
+ // initialized
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the initialize property.
+ */
+ private var _initialized:Boolean = false;
+
+ /**
+ * A flag that determines if an object has been through all three phases
+ * of layout validation (provided that any were required)
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get initialized():Boolean
+ {
+ return _initialized;
+ }
+
+ /**
+ * @private
+ */
+ public function set initialized(value:Boolean):void
+ {
+ _initialized = value;
+ }
+
+ //----------------------------------
+ // isHTML
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private function get isHTML():Boolean
+ {
+ return explicitHTMLText != null;
+ }
+
+ //----------------------------------
+ // isPopUp
+ //----------------------------------
+ /**
+ * @copy mx.core.UIComponent#isPopUp
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get isPopUp():Boolean
+ {
+ return false;
+ }
+
+ /**
+ * @private
+ */
+ public function set isPopUp(value:Boolean):void
+ {
+ }
+
+ //----------------------------------
+ // maxHeight
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#maxHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get maxHeight():Number
+ {
+ return UIComponent.DEFAULT_MAX_HEIGHT;
+ }
+
+ //----------------------------------
+ // maxWidth
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#maxWidth
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get maxWidth():Number
+ {
+ return UIComponent.DEFAULT_MAX_WIDTH;
+ }
+
+ //----------------------------------
+ // measuredHeight
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#measuredHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get measuredHeight():Number
+ {
+ validateNow();
+
- COMPILE::AS3
++ COMPILE::SWF
+ {
+ // If we use device fonts, then the unscaled height is
+ // textHeight * scaleX / scaleY
+
+ if (!stage || embedFonts)
+ return textHeight + TEXT_HEIGHT_PADDING;
+
+ const m:Matrix = transform.concatenatedMatrix;
+
+ return Math.abs((textHeight * m.a / m.d)) + TEXT_HEIGHT_PADDING;
+ }
+ COMPILE::JS
+ {
+ return element.offsetHeight;
+ }
+ }
+
+ //----------------------------------
+ // measuredMinHeight
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#measuredMinHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get measuredMinHeight():Number
+ {
+ return 0;
+ }
+
+ /**
+ * @private
+ */
+ public function set measuredMinHeight(value:Number):void
+ {
+ }
+
+ //----------------------------------
+ // measuredMinWidth
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#measuredMinWidth
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get measuredMinWidth():Number
+ {
+ return 0;
+ }
+
+ /**
+ * @private
+ */
+ public function set measuredMinWidth(value:Number):void
+ {
+ }
+
+ //----------------------------------
+ // measuredWidth
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#measuredWidth
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get measuredWidth():Number
+ {
+ validateNow();
+
- COMPILE::AS3
++ COMPILE::SWF
+ {
+ // If we use device fonts, then the unscaled width is
+ // textWidth * scaleX / scaleY
+
+ if (!stage || embedFonts)
+ return textWidth + TEXT_WIDTH_PADDING;
+
+ const m:Matrix = transform.concatenatedMatrix;
+
+ return Math.abs((textWidth * m.a / m.d)) + TEXT_WIDTH_PADDING;
+ }
+ COMPILE::JS
+ {
+ return element.offsetWidth;
+ }
+ }
+
+ //----------------------------------
+ // minHeight
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#minHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get minHeight():Number
+ {
+ return 0;
+ }
+
+ //----------------------------------
+ // minWidth
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#minWidth
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get minWidth():Number
+ {
+ return 0;
+ }
+
+ //----------------------------------
+ // moduleFactory
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the moduleFactory property.
+ */
+ private var _moduleFactory:IFlexModuleFactory;
+
+ [Inspectable(environment="none")]
+
+ /**
+ * The moduleFactory that is used to create TextFields in the correct SWF context. This is necessary so that
+ * embedded fonts will work.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get moduleFactory():IFlexModuleFactory
+ {
+ return _moduleFactory;
+ }
+
+ /**
+ * @private
+ */
+ public function set moduleFactory(factory:IFlexModuleFactory):void
+ {
+ _moduleFactory = factory;
+ _styleManager = null;
+ }
+
+ //----------------------------------
+ // nestLevel
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the nestLevel property.
+ */
+ private var _nestLevel:int = 0;
+
+ /**
+ * @copy mx.core.UIComponent#nestLevel
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get nestLevel():int
+ {
+ return _nestLevel;
+ }
+
+ /**
+ * @private
+ */
+ public function set nestLevel(value:int):void
+ {
+ // If my parent hasn't been attached to the display list, then its nestLevel
+ // will be zero. If it tries to set my nestLevel to 1, ignore it. We'll
+ // update nest levels again after the parent is added to the display list.
+ //
+ // Also punt if the new value for nestLevel is the same as my current value.
+ if (value > 1 && _nestLevel != value)
+ {
+ _nestLevel = value;
+
+ StyleProtoChain.initTextField(this);
+ styleChangedFlag = true;
+ validateNow();
+ }
+ }
+
+ //----------------------------------
+ // nonInheritingStyles
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the nonInheritingStyles property.
+ */
+ private var _nonInheritingStyles:Object = StyleProtoChain.STYLE_UNINITIALIZED;
+
+ /**
+ * The beginning of this UITextField's chain of non-inheriting styles.
+ * The <code>getStyle()</code> method accesses
+ * <code>nonInheritingStyles[styleName]</code> method to search the entire
+ * prototype-linked chain.
+ * This object is set up by the <code>initProtoChain()</code> method.
+ * You typically never need to access this property directly.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get nonInheritingStyles():Object
+ {
+ return _nonInheritingStyles;
+ }
+
+ /**
+ * @private
+ */
+ public function set nonInheritingStyles(value:Object):void
+ {
+ _nonInheritingStyles = value;
+ }
+
+ //----------------------------------
+ // percentHeight
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#percentHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function get percentHeight():Number
+ {
+ return NaN;
+ }
+
+ /**
+ * @private
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function set percentHeight(value:Number):void
+ {
+ }
+
+ //----------------------------------
+ // percentWidth
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#percentWidth
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function get percentWidth():Number
+ {
+ return NaN;
+ }
+
+ /**
+ * @private
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function set percentWidth(value:Number):void
+ {
+ }
+
+ //----------------------------------
+ // processedDescriptors
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _processedDescriptors:Boolean = true;
+
+ /**
+ * Set to <code>true</code> after the <code>createChildren()</code>
+ * method creates any internal component children.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get processedDescriptors():Boolean
+ {
+ return _processedDescriptors;
+ }
+
+ /**
+ * @private
+ */
+ public function set processedDescriptors(value:Boolean):void
+ {
+ _processedDescriptors = value;
+ }
+
+ //----------------------------------
+ // styleManager
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _styleManager:IStyleManager2;
+
+ /**
+ * @private
+ *
+ * Returns the style manager used by this component.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ public function get styleManager():IStyleManager2
+ {
+ if (!_styleManager)
+ {
+ _styleManager = StyleManager.getStyleManager(moduleFactory);
+ }
+ return _styleManager;
+ }
+
+ //----------------------------------
+ // styleName
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the styleName property.
+ */
+ private var _styleName:Object /* String, CSSStyleDeclaration, or UIComponent */;
+
+ /**
+ * @copy mx.core.UIComponent#styleName
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get styleName():Object /* String, CSSStyleDeclaration, or UIComponent */
+ {
+ return _styleName;
+ }
+
+ /**
+ * @private
+ */
+ public function set styleName(value:Object /* String, CSSStyleDeclaration, or UIComponent */):void
+ {
+ if (_styleName === value)
+ return;
+
+ _styleName = value;
+
+ if (parent)
+ {
+ StyleProtoChain.initTextField(this);
+ styleChanged("styleName");
+ }
+
+ COMPILE::JS
+ {
+ element.className = styleName.toString();
+ }
+ // If we don't have a parent pointer yet, then we'll wait
+ // and initialize the proto chain when the parentChanged()
+ // method is called.
+ }
+
+ //----------------------------------
+ // systemManager
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#systemManager
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get systemManager():ISystemManager
+ {
+ var o:DisplayObject = parent;
+ while (o)
+ {
+ var ui:IUIComponent = o as IUIComponent;
+ if (ui)
+ return ui.systemManager;
+
+ o = o.parent;
+ }
+
+ return null;
+ }
+
+ /**
+ * @private
+ */
+ public function set systemManager(value:ISystemManager):void
+ {
+ // Not supported
+ }
+
+ //----------------------------------
+ // nonZeroTextHeight
+ //----------------------------------
+
+ /**
+ * Unlike textHeight, this returns a non-zero value
+ * even when the text is empty.
+ * In this case, it returns what the textHeight would be
+ * if the text weren't empty.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get nonZeroTextHeight():Number
+ {
+ if (super.text == "")
+ {
+ super.text = "Wj";
+ var result:Number = textHeight;
+ super.text = "";
+ return result;
+ }
+
+ return textHeight;
+ }
+
+ //----------------------------------
+ // textHeight
+ //----------------------------------
+
+ /**
+ * @private
+ * TextField does not take into account the leading on the final
+ * line of text when measuring itself, yet will scroll if it is
+ * not given this extra height. This is a player bug bug that
+ * has been retired.
+ */
+ override public function get textHeight():Number
+ {
+ var result:Number = super.textHeight;
+ if (numLines > 1)
+ result += getLineMetrics(1).leading;
+
+ return result;
+ }
+
+ //----------------------------------
+ // toolTip
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the toolTip property.
+ */
+ mx_internal var _toolTip:String;
+
+ /**
+ * @copy mx.core.UIComponent#toolTip
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get toolTip():String
+ {
+ return _toolTip;
+ }
+
+ /**
+ * @private
+ */
+ public function set toolTip(value:String):void
+ {
+ var oldValue:String = _toolTip;
+ _toolTip = value;
+
+ ToolTipManager.registerToolTip(this, oldValue, value);
+ }
+
+ //----------------------------------
+ // tweeningProperties
+ //----------------------------------
+
+ /**
+ * @copy mx.core.UIComponent#tweeningProperties
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get tweeningProperties():Array
+ {
+ return null;
+ }
+
+ /**
+ * @private
+ */
+ public function set tweeningProperties(value:Array):void
+ {
+ }
+
+ //----------------------------------
+ // updateCompletePendingFlag
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the updateCompletePendingFlag property.
+ */
+ private var _updateCompletePendingFlag:Boolean = false;
+
+ /**
+ * A flag that determines if an object has been through all three phases
+ * of layout validation (provided that any were required)
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get updateCompletePendingFlag():Boolean
+ {
+ return _updateCompletePendingFlag;
+ }
+
+ /**
+ * @private
+ */
+ public function set updateCompletePendingFlag(value:Boolean):void
+ {
+ _updateCompletePendingFlag = value;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Overridden methods: TextField
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ override public function setTextFormat(format:TextFormat,
+ beginIndex:int = -1,
+ endIndex:int = -1):void
+ {
+ // It is an exception to call setTextFormat()
+ // when styleSheet is applied.
+ if (styleSheet)
+ return;
+
+ super.setTextFormat(format, beginIndex, endIndex);
+
+ // Since changing the TextFormat will change the htmlText,
+ // dispatch an event so that listeners can react to this.
+ dispatchEvent(new Event("textFormatChange"));
+ }
+
+ /**
+ * @private
+ * TODO (aharui): I'm not seeing this in the doc
+ */
+ COMPILE::LATER
+ override public function insertXMLText(beginIndex:int, endIndex:int,
+ richText:String,
+ pasting:Boolean = false):void
+ {
+ super.insertXMLText(beginIndex, endIndex, richText, pasting);
+
+ dispatchEvent(new Event("textInsert"));
+ }
+
+ /**
+ * @private
+ */
+ override public function replaceText(beginIndex:int, endIndex:int,
+ newText:String):void
+ {
+ super.replaceText(beginIndex, endIndex, newText);
+
+ dispatchEvent(new Event("textReplace"));
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Initializes this component.
+ *
+ * <p>This method is required by the IUIComponent interface,
+ * but it actually does nothing for a UITextField.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function initialize():void
+ {
+ }
+
+ /**
+ * @copy mx.core.UIComponent#getExplicitOrMeasuredWidth()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function getExplicitOrMeasuredWidth():Number
+ {
+ return !isNaN(explicitWidth) ? explicitWidth : measuredWidth;
+ }
+
+ /**
+ * @copy mx.core.UIComponent#getExplicitOrMeasuredHeight()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function getExplicitOrMeasuredHeight():Number
+ {
+ return !isNaN(explicitHeight) ? explicitHeight : measuredHeight;
+ }
+
+ /**
+ * Sets the <code>visible</code> property of this UITextField object.
+ *
+ * @param visible <code>true</code> to make this UITextField visible,
+ * and <code>false</code> to make it invisible.
+ *
+ * @param noEvent <code>true</code> to suppress generating an event when you change visibility.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function setVisible(visible:Boolean, noEvent:Boolean = false):void
+ {
+ this.visible = visible
+ }
+
+ /**
+ * @copy mx.core.UIComponent#setFocus()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function setFocus():void
+ {
+ systemManager.topOfDisplayList.focus = this;
+ }
+
+ /**
+ * Returns a UITextFormat object that contains formatting information for this component.
+ * This method is similar to the <code>getTextFormat()</code> method of the
+ * flash.text.TextField class, but it returns a UITextFormat object instead
+ * of a TextFormat object.
+ *
+ * <p>The UITextFormat class extends the TextFormat class to add the text measurement methods
+ * <code>measureText()</code> and <code>measureHTMLText()</code>.</p>
+ *
+ * @return An object that contains formatting information for this component.
+ *
+ * @see mx.core.UITextFormat
+ * @see flash.text.TextField
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function getUITextFormat():UITextFormat
+ {
+ validateNow();
+
+ var textFormat:UITextFormat = new UITextFormat(creatingSystemManager());
+ textFormat.moduleFactory = moduleFactory;
+
+ textFormat.copyFrom(getTextFormat());
+
+ textFormat.antiAliasType = antiAliasType;
+ textFormat.gridFitType = gridFitType;
+ textFormat.sharpness = sharpness;
+ textFormat.thickness = thickness;
+
+ return textFormat;
+ }
+
+ /**
+ * @copy mx.core.UIComponent#move()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function move(x:Number, y:Number):void
+ {
+ // Performance optimization: if the position hasn't changed, don't let
+ // the player think that we're dirty
+ if (this.x != x)
+ this.x = x;
+ if (this.y != y)
+ this.y = y;
+ }
+
+ /**
+ * @copy mx.core.UIComponent#setActualSize()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function setActualSize(w:Number, h:Number):void
+ {
+ // Performance optimization: if the size hasn't changed, don't let
+ // the player think that we're dirty
+ if (width != w)
+ width = w;
+ if (height != h)
+ height = h;
+ }
+
+ /**
+ * @copy mx.core.UIComponent#getStyle()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function getStyle(styleProp:String):*
+ {
+ if (styleManager.inheritingStyles[styleProp])
+ {
+ return inheritingStyles ?
+ inheritingStyles[styleProp] :
+ IStyleClient(parent).getStyle(styleProp);
+ }
+ else
+ {
+ return nonInheritingStyles ?
+ nonInheritingStyles[styleProp] :
+ IStyleClient(parent).getStyle(styleProp);
+ }
+ }
+
+ /**
+ * Does nothing.
+ * A UITextField cannot have inline styles.
+ *
+ * @param styleProp Name of the style property.
+ *
+ * @param newValue New value for the style.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function setStyle(styleProp:String, value:*):void
+ {
+ }
+
+ /**
+ * This function is called when a UITextField object is assigned
+ * a parent.
+ * You typically never need to call this method.
+ *
+ * @param p The parent of this UITextField object.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function parentChanged(p:DisplayObjectContainer):void
+ {
+ if (!p)
+ {
+ _parent = null;
+ _nestLevel = 0;
+ }
+ else if (p is IStyleClient)
+ {
+ _parent = p;
+ }
+ else if (p is SystemManager)
+ {
+ _parent = p;
+ }
+ else
+ {
+ _parent = p.parent;
+ }
+ }
+
+ /**
+ * @copy mx.core.UIComponent#styleChanged()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function styleChanged(styleProp:String):void
+ {
+ styleChangedFlag = true;
+
+ if (!invalidateDisplayListFlag)
+ {
+ invalidateDisplayListFlag = true;
+ if ("callLater" in parent)
+ Object(parent).callLater(validateNow);
+ }
+ }
+
+ /**
+ * @copy mx.core.UIComponent#validateNow()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function validateNow():void
+ {
+ // If we don't have a parent pointer yet, then any attempts to get
+ // style information will fail. Do nothing now - this function will
+ // be called again when parentChanged is called.
+ if (!parent)
+ return;
+
+ // If mirroring, setting width can change the transform matrix.
+ if (!isNaN(explicitWidth) && super.width != explicitWidth)
+ width = (explicitWidth > 4) ? explicitWidth : 4;
+
+ if (!isNaN(explicitHeight) && super.height != explicitHeight)
+ super.height = explicitHeight;
+
+ // Update transform.matrix to compensate for layout mirroring
+ if (styleChangedFlag)
+ {
+ const oldMirror:Boolean = mirror;
+ mirror = getStyle("layoutDirection") == LayoutDirection.RTL;
+ COMPILE::LATER
+ {
+ if (mirror || oldMirror)
+ validateTransformMatrix();
+ }
+ }
+
+ // Set the text format.
+ if (styleChangedFlag)
+ {
+ var textFormat:TextFormat = getTextStyles();
+ if (textFormat.font)
+ {
+ var fontModuleFactory:IFlexModuleFactory = (noEmbeddedFonts || !embeddedFontRegistry) ?
+ null :
+ embeddedFontRegistry.getAssociatedModuleFactory(
+ textFormat.font, textFormat.bold, textFormat.italic,
+ this, moduleFactory, creatingSystemManager(), false);
+
+ embedFonts = (fontModuleFactory != null);
+ }
+ else
+ {
+ embedFonts = getStyle("embedFonts");
+ }
+
+ if (embedFonts && getStyle("fontAntiAliasType") != undefined)
+ {
+ antiAliasType = getStyle("fontAntiAliasType");
+ gridFitType = getStyle("fontGridFitType");
+ sharpness = getStyle("fontSharpness");
+ thickness = getStyle("fontThickness");
+ }
+
+ if (!styleSheet)
+ {
+ super.setTextFormat(textFormat);
+ defaultTextFormat = textFormat;
+ }
+
+ // Since changing the TextFormat will change the htmlText,
+ // dispatch an event so that listeners can react to this.
+ dispatchEvent(new Event("textFieldStyleChange"));
+ }
+
+ styleChangedFlag = false;
+ invalidateDisplayListFlag = false;
+ }
+ /**
+ * @private
+ * Update the transform.matrix based on the mirror flag. This method must be
+ * called when x, width, or layoutDirection changes.
+ */
+ COMPILE::LATER
+ private function validateTransformMatrix():void
+ {
+ if (mirror)
+ {
+ const mirrorMatrix:Matrix = this.transform.matrix;
+ mirrorMatrix.a = -1;
+ mirrorMatrix.tx = _x + width;
+ transform.matrix = mirrorMatrix;
+ }
+ else // layoutDirection changed, mirror=false, reset transform.matrix to its default
+ {
+ const defaultMatrix:Matrix = new Matrix();
+ defaultMatrix.tx = _x;
+ defaultMatrix.ty = y;
+ transform.matrix = defaultMatrix;
+ }
+ }
+
+ /**
+ * Returns the TextFormat object that represents
+ * character formatting information for this UITextField object.
+ *
+ * @return A TextFormat object.
+ *
+ * @see flash.text.TextFormat
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function getTextStyles():TextFormat
+ {
+ var textFormat:TextFormat = new TextFormat();
+
+ var textAlign:String = getStyle("textAlign");
+ // Map new Spark values that might be set in a selector
+ // affecting both Halo and Spark components.
+ var direction:String = getStyle("direction");
+ if (textAlign == "start")
+ textAlign = direction == "ltr" ? TextFormatAlign.LEFT : TextFormatAlign.RIGHT;
+ else if (textAlign == "end")
+ textAlign = direction == "ltr" ? TextFormatAlign.RIGHT : TextFormatAlign.LEFT;
+ else if (textAlign == "justify" && direction == "rtl")
+ textAlign = TextFormatAlign.RIGHT;
+ textFormat.align = textAlign;
+ textFormat.bold = getStyle("fontWeight") == "bold";
+ if (enabled)
+ {
+ if (explicitColor == StyleManager.NOT_A_COLOR)
+ textFormat.color = getStyle("color");
+ else
+ textFormat.color = explicitColor;
+ }
+ else
+ {
+ textFormat.color = getStyle("disabledColor");
+ }
+ textFormat.font = StringUtil.trimArrayElements(getStyle("fontFamily"),",");
+ textFormat.indent = getStyle("textIndent");
+ textFormat.italic = getStyle("fontStyle") == "italic";
+ var kerning:* = getStyle("kerning");
+ // In Halo components based on TextField,
+ // kerning is supposed to be true or false.
+ // The default in TextField and Flex 3 is false
+ // because kerning doesn't work for device fonts
+ // and is slow for embedded fonts.
+ // In Spark components based on TLF and FTE,
+ // kerning is "auto", "on", or, "off".
+ // The default in TLF and FTE is "auto"
+ // (which means kern non-Asian characters)
+ // because kerning works even on device fonts
+ // and has miminal performance impact.
+ // Since a CSS selector or parent container
+ // can affect both Halo and Spark components,
+ // we need to map "auto" and "on" to true
+ // and "off" to false for Halo components
+ // here and in UIFTETextField.
+ // For Spark components, Label and CSSTextLayoutFormat,
+ // do the opposite mapping of true to "on" and false to "off".
+ // We also support a value of "default"
+ // (which we set in the global selector)
+ // to mean false for Halo and "auto" for Spark,
+ // to get the recommended behavior in both sets of components.
+ if (kerning == "auto" || kerning == "on")
+ kerning = true;
+ else if (kerning == "default" || kerning == "off")
+ kerning = false;
+ textFormat.kerning = kerning;
+ textFormat.leading = getStyle("leading");
+ textFormat.leftMargin = ignorePadding ? 0 : getStyle("paddingLeft");
+ textFormat.letterSpacing = getStyle("letterSpacing");
+ textFormat.rightMargin = ignorePadding ? 0 : getStyle("paddingRight");
+ textFormat.size = getStyle("fontSize");
+ textFormat.underline = getStyle("textDecoration") == "underline";
+
+ cachedTextFormat = textFormat;
+ return textFormat;
+ }
+
+ /**
+ * Sets the font color of the text.
+ *
+ * @param color The new font color.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function setColor(color:uint):void
+ {
+ explicitColor = color;
+ styleChangedFlag = true;
+ invalidateDisplayListFlag = true;
+
+ validateNow();
+ }
+
+ /**
+ * @copy mx.core.UIComponent#invalidateSize()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function invalidateSize():void
+ {
+ invalidateDisplayListFlag = true;
+ }
+
+ /**
+ * @copy mx.core.UIComponent#invalidateDisplayList()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function invalidateDisplayList():void
+ {
+ invalidateDisplayListFlag = true;
+ }
+
+ /**
+ * @copy mx.core.UIComponent#invalidateProperties()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function invalidateProperties():void
+ {
+ }
+
+ /**
+ * Truncate text to make it fit horizontally in the area defined for the control,
+ * and append an ellipsis, three periods (...), to the text.
+ *
+ * @param truncationIndicator The text to be appended after truncation.
+ * If you pass <code>null</code>, a localizable string
+ * such as <code>"..."</code> will be used.
+ *
+ * @return <code>true</code> if the text needed truncation.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function truncateToFit(truncationIndicator:String = null):Boolean
+ {
+ if (!truncationIndicator)
+ truncationIndicator = truncationIndicatorResource;
+
+ // Ensure that the proper CSS styles get applied to the textField
+ // before measuring text.
+ // Otherwise the callLater(validateNow) in styleChanged()
+ // can apply the CSS styles too late.
+ validateNow();
+
+ var originalText:String = super.text;
+
+ untruncatedText = originalText;
+
+ var w:Number = width;
+
+ // Need to check if we should truncate, but it
+ // could be due to rounding error. Let's check that it's not.
+ // Examples of rounding errors happen with "South Africa" and "Game"
+ // with verdana.ttf.
+ if (originalText != "" && textWidth + TEXT_WIDTH_PADDING > w + 0.00000000000001)
+ {
+ // This should get us into the ballpark.
+ var s:String =
+ originalText.slice(0,
+ Math.floor((w / (textWidth + TEXT_WIDTH_PADDING)) * originalText.length));
+
+ // This doesn't seem correct but it preserves previous behavior.
+ // If one character doesn't fit the text is one character plus the
+ // truncation indicator rather than just the truncation indicator as you would expect.
+ if (s.length <= 1 && textWidth + TEXT_WIDTH_PADDING > w)
+ super.text = originalText.charAt(0) + truncationIndicator;
+
+ while (s.length > 1 && textWidth + TEXT_WIDTH_PADDING > w)
+ {
+ s = s.slice(0, -1);
+ super.text = s + truncationIndicator;
+ }
+
+ var otl:int = originalText.length;
+ var t:String = s;
+ while (t.length < otl)
+ {
+ t = originalText.slice(0, t.length + 1);
+ super.text = t + truncationIndicator;
+ if (textWidth + TEXT_WIDTH_PADDING <= w)
+ s = t;
+ else
+ break;
+ }
+ if (s.length > 0)
+ super.text = s + truncationIndicator;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Event handlers
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ private function changeHandler(event:Event):void
+ {
+ // If the user changes the text displayed by the TextField,
+ // whatever htmlText might have been set is now irrelevant.
+ // This means that we can no longer re-apply any HTML markup
+ // after a CSS style change.
+ explicitHTMLText = null;
+ }
+
+ /**
+ * @private
+ */
+ private function textFieldStyleChangeHandler(event:Event):void
+ {
+ // Some TextFormat in the TextField just changed.
+ // If the TextField is displaying htmlText we need
+ // to reset the htmlText that was last set
+ // so that its markup is applied on top of the new TextFormat.
+ if (explicitHTMLText != null)
+ super.htmlText = explicitHTMLText;
+ }
+
+ /**
+ * @private
+ */
+ private function resourceManager_changeHandler(event:Event):void
+ {
+ truncationIndicatorResource = resourceManager.getString(
+ "core", "truncationIndicator");
+
+ if (untruncatedText != null)
+ {
+ super.text = untruncatedText;
+ truncateToFit();
+ }
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // IUIComponent
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Returns <code>true</code> if the child is parented or owned by this object.
+ *
+ * @param child The child DisplayObject.
+ *
+ * @return <code>true</code> if the child is parented or owned by this UITextField object.
+ *
+ * @see #owner
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function owns(child:DisplayObject):Boolean
+ {
+ return child == this;
+ }
+
+ //----------------------------------
+ // owner
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _owner:DisplayObjectContainer;
+
+ /**
+ * By default, set to the parent container of this object.
+ * However, if this object is a child component that is
+ * popped up by its parent, such as the dropdown list of a ComboBox control,
+ * the owner is the component that popped up this object.
+ *
+ * <p>This property is not managed by Flex, but by each component.
+ * Therefore, if you use the <code>PopUpManger.createPopUp()</code> or
+ * <code>PopUpManger.addPopUp()</code> method to pop up a child component,
+ * you should set the <code>owner</code> property of the child component
+ * to the component that popped it up.</p>
+ *
+ * <p>The default value is the value of the <code>parent</code> property.</p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get owner():DisplayObjectContainer
+ {
+ return _owner ? _owner : parent;
+ }
+
+ public function set owner(value:DisplayObjectContainer):void
+ {
+ _owner = value;
+ }
+
+ private function creatingSystemManager():ISystemManager
+ {
+ return ((moduleFactory != null) && (moduleFactory is ISystemManager))
+ ? ISystemManager(moduleFactory)
+ : systemManager;
+ }
+
+ //----------------------------------
+ // IAutomationObject interface
+ //----------------------------------
+
+ /**
+ * @inheritDoc
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function replayAutomatableEvent(event:Event):Boolean
+ {
+ if (automationDelegate)
+ return automationDelegate.replayAutomatableEvent(event);
+ return false;
+ }
+
+ /**
+ * @private
+ */
+ public function createAutomationIDPart(child:IAutomationObject):Object
+ {
+ return null;
+ }
+
+ /**
+ * @private
+ */
+ public function createAutomationIDPartWithRequiredProperties(child:IAutomationObject,
+ properties:Array):Object
+ {
+ return null;
+ }
+
+ /**
+ * @private
+ */
+ public function resolveAutomationIDPart(criteria:Object):Array
+ {
+ return [];
+ }
+
+ /**
+ * @private
+ */
+ public function getAutomationChildAt(index:int):IAutomationObject
+ {
+ return null;
+ }
+
+ /**
+ * @private
+ */
+ public function getAutomationChildren():Array
+ {
+ return null;
+ }
+
+ /**
+ * @private
+ */
+ public function get numAutomationChildren():int
+ {
+ return 0;
+ }
+
+ /**
+ * @private
+ */
+ public function get showInAutomationHierarchy():Boolean
+ {
+ return true;
+ }
+
+ /**
+ * @private
+ */
+ public function set showInAutomationHierarchy(value:Boolean):void
+ {
+ }
+
+ /**
+ * @private
+ */
+ public function get automationTabularData():Object
+ {
+ return null;
+ }
+
- COMPILE::AS3
++ COMPILE::SWF
+ private var _beads:Vector.<IBead>;
+
+ /**
+ * @copy org.apache.flex.core.IStrand#addBead()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function addBead(bead:IBead):void
+ {
+ if (!_beads)
+ _beads = new Vector.<IBead>;
+ bead.strand = this;
+ }
+
+ /**
+ * @copy org.apache.flex.core.IStrand#getBeadByType()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function getBeadByType(classOrInterface:Class):IBead
+ {
+ for each (var bead:IBead in _beads)
+ {
+ if (bead is classOrInterface)
+ return bead;
+ }
+ return null;
+ }
+
+ /**
+ * @copy org.apache.flex.core.IStrand#removeBead()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function removeBead(value:IBead):IBead
+ {
+ var n:int = _beads.length;
+ for (var i:int = 0; i < n; i++)
+ {
+ var bead:IBead = _beads[i];
+ if (bead == value)
+ {
+ _beads.splice(i, 1);
+ return bead;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @copy org.apache.flex.core.IUIBase#element
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function get element():IFlexJSElement
+ {
+ return null;
+ }
+
+ /**
+ * The method called when added to a parent. This is a good
+ * time to set up beads.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignorecoercion Class
+ * @flexjsignorecoercion Number
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function addedToParent():void
+ {
+ // do nothing for now
+ }
+
- COMPILE::AS3
++ COMPILE::SWF
+ public function get topMostEventDispatcher():IEventDispatcher
+ {
+ return root as IEventDispatcher;
+ }
+
- COMPILE::AS3
++ COMPILE::SWF
+ private var _topOfDisplayList:TopOfDisplayList;
+
+ /**
+ * @flexjsignorecoercion flex.display.TopOfDisplayList
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ public function get topOfDisplayList():TopOfDisplayList
+ {
+ if (!_topOfDisplayList)
+ _topOfDisplayList = new TopOfDisplayList(stage);
+ return _topOfDisplayList;
+ }
+
+
+}
+
+}