You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2016/11/05 07:47:09 UTC
[25/50] [abbrv] git commit: [flex-asjs]
[refs/heads/feature-autobuild/closure-classpath-sources] - move UIBase and
UIButtonBase
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/975d3f34/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/UIBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/UIBase.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/UIBase.as
new file mode 100644
index 0000000..0e4a988
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/UIBase.as
@@ -0,0 +1,1401 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 org.apache.flex.core
+{
+ COMPILE::SWF
+ {
+ import flash.display.DisplayObject;
+ import flash.display.Sprite;
+ import flash.display.Stage;
+ }
+
+ import org.apache.flex.events.Event;
+ import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.events.MouseEvent;
+ import org.apache.flex.events.ValueChangeEvent;
+ import org.apache.flex.events.utils.MouseEventConverter;
+ COMPILE::SWF {
+ import flash.display.InteractiveObject;
+ }
+
+ /**
+ * Set a different class for click events so that
+ * there aren't dependencies on the flash classes
+ * on the JS side.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ [Event(name="click", type="org.apache.flex.events.MouseEvent")]
+
+ /**
+ * Set a different class for rollOver events so that
+ * there aren't dependencies on the flash classes
+ * on the JS side.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ [Event(name="rollOver", type="org.apache.flex.events.MouseEvent")]
+
+ /**
+ * Set a different class for rollOut events so that
+ * there aren't dependencies on the flash classes
+ * on the JS side.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ [Event(name="rollOut", type="org.apache.flex.events.MouseEvent")]
+
+ /**
+ * Set a different class for mouseDown events so that
+ * there aren't dependencies on the flash classes
+ * on the JS side.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ [Event(name="mouseDown", type="org.apache.flex.events.MouseEvent")]
+
+ /**
+ * Set a different class for mouseUp events so that
+ * there aren't dependencies on the flash classes
+ * on the JS side.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ [Event(name="mouseUp", type="org.apache.flex.events.MouseEvent")]
+
+ /**
+ * Set a different class for mouseMove events so that
+ * there aren't dependencies on the flash classes
+ * on the JS side.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ [Event(name="mouseMove", type="org.apache.flex.events.MouseEvent")]
+
+ /**
+ * Set a different class for mouseOut events so that
+ * there aren't dependencies on the flash classes
+ * on the JS side.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ [Event(name="mouseOut", type="org.apache.flex.events.MouseEvent")]
+
+ /**
+ * Set a different class for mouseOver events so that
+ * there aren't dependencies on the flash classes
+ * on the JS side.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ [Event(name="mouseOver", type="org.apache.flex.events.MouseEvent")]
+
+ /**
+ * The UIBase class is the base class for most composite user interface
+ * components. For the Flash Player, Buttons and Text controls may
+ * have a different base class and therefore may not extend UIBase.
+ * However all user interface components should implement IUIBase.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public class UIBase extends UIHTMLElementWrapper implements IStrandWithModel, IEventDispatcher, IParentIUIBase, IStyleableObject, ILayoutChild, ITransformHost
+ {
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function UIBase()
+ {
+ super();
+
+ createElement();
+
+ COMPILE::SWF
+ {
+ MouseEventConverter.setupInstanceConverters(this);
+ }
+ }
+
+ COMPILE::SWF
+ public function get $sprite():Sprite
+ {
+ return $displayObject as Sprite;
+ }
+
+ private var _explicitWidth:Number;
+
+ /**
+ * The explicitly set width (as opposed to measured width
+ * or percentage width).
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get explicitWidth():Number
+ {
+ return _explicitWidth;
+ }
+
+ /**
+ * @private
+ */
+ public function set explicitWidth(value:Number):void
+ {
+ if (_explicitWidth == value)
+ return;
+
+ // width can be pixel or percent not both
+ if (!isNaN(value))
+ _percentWidth = NaN;
+
+ _explicitWidth = value;
+
+ dispatchEvent(new Event("explicitWidthChanged"));
+ }
+
+ private var _explicitHeight:Number;
+
+ /**
+ * The explicitly set width (as opposed to measured width
+ * or percentage width).
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get explicitHeight():Number
+ {
+ return _explicitHeight;
+ }
+
+ /**
+ * @private
+ */
+ public function set explicitHeight(value:Number):void
+ {
+ if (_explicitHeight == value)
+ return;
+
+ // height can be pixel or percent not both
+ if (!isNaN(value))
+ _percentHeight = NaN;
+
+ _explicitHeight = value;
+
+ dispatchEvent(new Event("explicitHeightChanged"));
+ }
+
+ private var _percentWidth:Number;
+
+ /**
+ * The requested percentage width this component
+ * should have in the parent container. Note that
+ * the actual percentage may be different if the
+ * total is more than 100% or if there are other
+ * components with explicitly set widths.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get percentWidth():Number
+ {
+ return _percentWidth;
+ }
+
+ /**
+ * @private
+ */
+ public function set percentWidth(value:Number):void
+ {
+ COMPILE::SWF {
+ if (_percentWidth == value)
+ return;
+
+ if (!isNaN(value))
+ _explicitWidth = NaN;
+
+ _percentWidth = value;
+ }
+ COMPILE::JS {
+ this._percentWidth = value;
+ this.positioner.style.width = value + '%';
+ if (!isNaN(value))
+ this._explicitWidth = NaN;
+ }
+
+ dispatchEvent(new Event("percentWidthChanged"));
+ }
+
+ private var _percentHeight:Number;
+
+ /**
+ * The requested percentage height this component
+ * should have in the parent container. Note that
+ * the actual percentage may be different if the
+ * total is more than 100% or if there are other
+ * components with explicitly set heights.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get percentHeight():Number
+ {
+ return _percentHeight;
+ }
+
+ /**
+ * @private
+ */
+ public function set percentHeight(value:Number):void
+ {
+ COMPILE::SWF {
+ if (_percentHeight == value)
+ return;
+
+ if (!isNaN(value))
+ _explicitHeight = NaN;
+
+ _percentHeight = value;
+ }
+
+ COMPILE::JS {
+ this._percentHeight = value;
+ this.positioner.style.height = value + '%';
+ if (!isNaN(value))
+ this._explicitHeight = NaN;
+ }
+
+ dispatchEvent(new Event("percentHeightChanged"));
+ }
+
+ private var _width:Number;
+
+ [Bindable("widthChanged")]
+ [PercentProxy("percentWidth")]
+ /**
+ * The width of the component. If no width has been previously
+ * set the default width may be specified in the IValuesImpl
+ * or determined as the bounding box around all child
+ * components and graphics.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ COMPILE::SWF
+ override public function get width():Number
+ {
+ var w:Number = _width;
+ if (isNaN(w)) {
+ w = $width;
+ }
+ return w;
+ }
+
+ /**
+ * @flexjsignorecoercion String
+ */
+ COMPILE::JS
+ public function get width():Number
+ {
+ var pixels:Number;
+ var strpixels:String = positioner.style.width as String;
+ if (strpixels !== null && strpixels.indexOf('%') != -1)
+ pixels = NaN;
+ else
+ pixels = parseFloat(strpixels);
+ if (isNaN(pixels)) {
+ pixels = positioner.offsetWidth;
+ if (pixels === 0 && positioner.scrollWidth !== 0) {
+ // invisible child elements cause offsetWidth to be 0.
+ pixels = positioner.scrollWidth;
+ }
+ }
+ return pixels;
+ }
+
+ /**
+ * @private
+ */
+ COMPILE::SWF
+ override public function set width(value:Number):void
+ {
+ if (explicitWidth != value)
+ {
+ explicitWidth = value;
+ }
+
+ setWidth(value);
+ }
+
+ /**
+ * @private
+ */
+ COMPILE::JS
+ public function set width(value:Number):void
+ {
+ if (explicitWidth != value)
+ {
+ explicitWidth = value;
+ }
+
+ setWidth(value);
+ }
+
+ /**
+ * Retrieve the low-level bounding box width.
+ * Not implemented in JS.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ COMPILE::SWF
+ public function get $width():Number
+ {
+ return super.width;
+ }
+
+ private var _height:Number;
+
+ [Bindable("heightChanged")]
+ [PercentProxy("percentHeight")]
+ /**
+ * The height of the component. If no height has been previously
+ * set the default height may be specified in the IValuesImpl
+ * or determined as the bounding box around all child
+ * components and graphics.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ COMPILE::SWF
+ override public function get height():Number
+ {
+ var h:Number = _height;
+ if (isNaN(h)) {
+ h = $height;
+ }
+ return h;
+ }
+
+ /**
+ * @flexjsignorecoercion String
+ */
+ COMPILE::JS
+ public function get height():Number
+ {
+ var pixels:Number;
+ var strpixels:String = positioner.style.height as String;
+ if (strpixels !== null && strpixels.indexOf('%') != -1)
+ pixels = NaN;
+ else
+ pixels = parseFloat(strpixels);
+ if (isNaN(pixels)) {
+ pixels = positioner.offsetHeight;
+ if (pixels === 0 && positioner.scrollHeight !== 0) {
+ // invisible child elements cause offsetHeight to be 0.
+ pixels = positioner.scrollHeight;
+ }
+ }
+ return pixels;
+ }
+
+ /**
+ * @private
+ */
+ COMPILE::SWF
+ override public function set height(value:Number):void
+ {
+ if (explicitHeight != value)
+ {
+ explicitHeight = value;
+ }
+
+ setHeight(value);
+ }
+
+ /**
+ * @private
+ */
+ COMPILE::JS
+ public function set height(value:Number):void
+ {
+ if (explicitHeight != value)
+ {
+ explicitHeight = value;
+ }
+
+ setHeight(value);
+ }
+
+ /**
+ * Retrieve the low-level bounding box height.
+ * Not implemented in JS.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ COMPILE::SWF
+ public function get $height():Number
+ {
+ return super.height;
+ }
+
+ /**
+ * @copy org.apache.flex.core.ILayoutChild#setHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function setHeight(value:Number, noEvent:Boolean = false):void
+ {
+ if (_height != value)
+ {
+ _height = value;
+ COMPILE::JS
+ {
+ this.positioner.style.height = value + 'px';
+ }
+ if (!noEvent)
+ dispatchEvent(new Event("heightChanged"));
+ }
+ }
+
+ /**
+ * @copy org.apache.flex.core.ILayoutChild#setWidth
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function setWidth(value:Number, noEvent:Boolean = false):void
+ {
+ if (_width != value)
+ {
+ _width = value;
+ COMPILE::JS
+ {
+ this.positioner.style.width = value + 'px';
+ }
+ if (!noEvent)
+ dispatchEvent(new Event("widthChanged"));
+ }
+ }
+
+ /**
+ * @copy org.apache.flex.core.ILayoutChild#setWidthAndHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function setWidthAndHeight(newWidth:Number, newHeight:Number, noEvent:Boolean = false):void
+ {
+ if (_width != newWidth)
+ {
+ _width = newWidth;
+ COMPILE::JS
+ {
+ this.positioner.style.width = newWidth + 'px';
+ }
+ if (!noEvent)
+ dispatchEvent(new Event("widthChanged"));
+ }
+ if (_height != newHeight)
+ {
+ _height = newHeight;
+ COMPILE::JS
+ {
+ this.positioner.style.height = newHeight + 'px';
+ }
+ if (!noEvent)
+ dispatchEvent(new Event("heightChanged"));
+ }
+ dispatchEvent(new Event("sizeChanged"));
+ }
+
+ /**
+ * @copy org.apache.flex.core.ILayoutChild#isWidthSizedToContent
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function isWidthSizedToContent():Boolean
+ {
+ if (!isNaN(_explicitWidth))
+ return false;
+ if (!isNaN(_percentWidth))
+ return false;
+ var left:* = ValuesManager.valuesImpl.getValue(this, "left");
+ var right:* = ValuesManager.valuesImpl.getValue(this, "right");
+ return (left === undefined || right === undefined);
+
+ }
+
+ /**
+ * @copy org.apache.flex.core.ILayoutChild#isHeightSizedToContent
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function isHeightSizedToContent():Boolean
+ {
+ if (!isNaN(_explicitHeight))
+ return false;
+ if (!isNaN(_percentHeight))
+ return false;
+ var top:* = ValuesManager.valuesImpl.getValue(this, "top");
+ var bottom:* = ValuesManager.valuesImpl.getValue(this, "bottom");
+ return (top === undefined || bottom === undefined);
+ }
+
+ private var _x:Number;
+
+ /**
+ * @private
+ */
+ COMPILE::SWF
+ override public function set x(value:Number):void
+ {
+ super.x = _x = value;
+ if (!style)
+ style = { left: value };
+ else
+ style.left = value;
+ }
+
+ COMPILE::JS
+ public function set x(value:Number):void
+ {
+ positioner.style.position = 'absolute';
+ positioner.style.left = value + 'px';
+ }
+
+ /**
+ * @flexjsignorecoercion String
+ */
+ COMPILE::JS
+ public function get x():Number
+ {
+ var strpixels:String = positioner.style.left as String;
+ var pixels:Number = parseFloat(strpixels);
+ if (isNaN(pixels))
+ pixels = positioner.offsetLeft;
+ return pixels;
+ }
+
+ /**
+ * @copy org.apache.flex.core.ILayoutChild#setX
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function setX(value:Number):void
+ {
+ COMPILE::SWF
+ {
+ super.x = value;
+ }
+ COMPILE::JS
+ {
+ positioner.style.position = 'absolute';
+ positioner.style.left = value + 'px';
+ }
+ }
+
+ private var _y:Number;
+
+ /**
+ * @private
+ */
+ COMPILE::SWF
+ override public function set y(value:Number):void
+ {
+ super.y = _y = value;
+ if (!style)
+ style = { top: value };
+ else
+ style.top = value;
+ }
+
+ COMPILE::JS
+ public function set y(value:Number):void
+ {
+ positioner.style.position = 'absolute';
+ positioner.style.top = value + 'px';
+ }
+
+ /**
+ * @flexjsignorecoercion String
+ */
+ COMPILE::JS
+ public function get y():Number
+ {
+ var strpixels:String = positioner.style.top as String;
+ var pixels:Number = parseFloat(strpixels);
+ if (isNaN(pixels))
+ pixels = positioner.offsetTop;
+ return pixels;
+ }
+
+ /**
+ * @copy org.apache.flex.core.ILayoutChild#setY
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function setY(value:Number):void
+ {
+ COMPILE::SWF
+ {
+ super.y = value;
+ }
+ COMPILE::JS
+ {
+ positioner.style.position = 'absolute';
+ positioner.style.top = value + 'px';
+ }
+ }
+
+ /**
+ * @private
+ */
+ [Bindable("visibleChanged")]
+ COMPILE::SWF
+ override public function set visible(value:Boolean):void
+ {
+ super.visible = value;
+ dispatchEvent(new Event(value?"show":"hide"));
+ dispatchEvent(new Event("visibleChanged"));
+ }
+
+ COMPILE::JS
+ private var displayStyleForLayout:String;
+
+ /**
+ * The display style is used for both visible
+ * and layout so is managed as a special case.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ COMPILE::JS
+ public function setDisplayStyleForLayout(value:String):void
+ {
+ if (positioner.style.display !== 'none')
+ positioner.style.display = value;
+ else
+ displayStyleForLayout = value;
+ }
+
+ COMPILE::JS
+ public function get visible():Boolean
+ {
+ return positioner.style.display !== 'none';
+ }
+
+ COMPILE::JS
+ public function set visible(value:Boolean):void
+ {
+ var oldValue:Boolean = positioner.style.display !== 'none';
+ if (value !== oldValue)
+ {
+ if (!value)
+ {
+ displayStyleForLayout = positioner.style.display;
+ positioner.style.display = 'none';
+ dispatchEvent(new Event('hide'));
+ }
+ else
+ {
+ if (displayStyleForLayout)
+ positioner.style.display = displayStyleForLayout;
+ dispatchEvent(new Event('show'));
+ }
+ dispatchEvent(new Event('visibleChanged'));
+ }
+ }
+
+ /**
+ * @return The array of children.
+ * @flexjsignorecoercion Array
+ */
+ COMPILE::JS
+ public function internalChildren():Array
+ {
+ return element.childNodes as Array;
+ }
+
+ private var _view:IBeadView;
+
+ /**
+ * An IBeadView that serves as the view for the component.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignorecoercion Class
+ */
+ public function get view():IBeadView
+ {
+ if (_view == null)
+ {
+ var c:Class = ValuesManager.valuesImpl.getValue(this, "iBeadView") as Class;
+ if (c)
+ {
+ if (c)
+ {
+ _view = (new c()) as IBeadView;
+ addBead(_view);
+ }
+ }
+ }
+ return _view;
+ }
+
+ /**
+ * @private
+ */
+ public function set view(value:IBeadView):void
+ {
+ if (_view != value)
+ {
+ addBead(value as IBead);
+ dispatchEvent(new Event("viewChanged"));
+ }
+ }
+
+ private var _id:String;
+
+ /**
+ * An id property for MXML documents.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get id():String
+ {
+ return _id;
+ }
+
+ /**
+ * @private
+ */
+ public function set id(value:String):void
+ {
+ if (_id != value)
+ {
+ _id = value;
+ dispatchEvent(new Event("idChanged"));
+ }
+ }
+
+ private var _style:Object;
+
+ /**
+ * The object that contains
+ * "styles" and other associated
+ * name-value pairs. You can
+ * also specify a string in
+ * HTML style attribute format.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get style():Object
+ {
+ return _style;
+ }
+
+ /**
+ * @private
+ * @flexjsignorecoercion String
+ */
+ public function set style(value:Object):void
+ {
+ if (_style != value)
+ {
+ if (value is String)
+ {
+ _style = ValuesManager.valuesImpl.parseStyles(value as String);
+ }
+ else
+ _style = value;
+ if (!isNaN(_y))
+ _style.top = _y;
+ if (!isNaN(_x))
+ _style.left = _x;
+ dispatchEvent(new Event("stylesChanged"));
+ }
+ }
+
+ /**
+ * A list of type names. Often used for CSS
+ * type selector lookups.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public var typeNames:String;
+
+ private var _className:String;
+
+ /**
+ * The classname. Often used for CSS
+ * class selector lookups.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get className():String
+ {
+ return _className;
+ }
+
+ /**
+ * @private
+ */
+ public function set className(value:String):void
+ {
+ if (_className != value)
+ {
+ COMPILE::JS
+ {
+ setClassName(typeNames ? value + ' ' + typeNames : value);
+ }
+ _className = value;
+ dispatchEvent(new Event("classNameChanged"));
+ }
+ }
+
+ COMPILE::JS
+ protected function setClassName(value:String):void
+ {
+ element.className = value;
+ }
+
+
+ /**
+ * @copy org.apache.flex.core.Application#beads
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public var beads:Array;
+
+ 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
+ */
+ override public function addBead(bead:IBead):void
+ {
+ super.addBead(bead);
+ if (bead is IBeadView)
+ _view = bead as IBeadView;
+
+ if (bead is IBeadView) {
+ IEventDispatcher(this).dispatchEvent(new Event("viewChanged"));
+ }
+ }
+
+
+ // maintain this or just calculate it from the displayobject children on demand?
+ private var _elements:Array;
+
+ /**
+ * @copy org.apache.flex.core.IParent#addElement()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignorecoercion org.apache.flex.core.IUIBase
+ */
+ public function addElement(c:IChild, dispatchEvent:Boolean = true):void
+ {
+ COMPILE::SWF
+ {
+ if(_elements == null)
+ _elements = [];
+ _elements[_elements.length] = c;
+ $displayObjectContainer.addChild(c.$displayObject);
+ if (c is IUIBase)
+ {
+ IUIBase(c).addedToParent();
+ }
+
+ }
+ COMPILE::JS
+ {
+ element.appendChild(c.positioner);
+ (c as IUIBase).addedToParent();
+ }
+ }
+
+ /**
+ * @copy org.apache.flex.core.IParent#addElementAt()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignorecoercion org.apache.flex.core.IUIBase
+ */
+ public function addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
+ {
+ COMPILE::SWF
+ {
+ if(_elements == null)
+ _elements = [];
+ _elements.splice(index,0,c);
+
+ $displayObjectContainer.addChildAt(c.$displayObject,index);
+
+ if (c is IUIBase)
+ {
+ (c as IUIBase).addedToParent();
+ }
+ }
+ COMPILE::JS
+ {
+ var children:Array = internalChildren();
+ if (index >= children.length)
+ addElement(c);
+ else
+ {
+ element.insertBefore(c.positioner,
+ children[index]);
+ (c as IUIBase).addedToParent();
+ }
+ }
+ }
+
+ /**
+ * @copy org.apache.flex.core.IParent#getElementAt()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function getElementAt(index:int):IChild
+ {
+ COMPILE::SWF
+ {
+ if(_elements == null)
+ return null;
+ return _elements[index];
+ }
+ COMPILE::JS
+ {
+ var children:Array = internalChildren();
+ return children[index].flexjs_wrapper;
+ }
+ }
+
+ /**
+ * @copy org.apache.flex.core.IParent#getElementIndex()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function getElementIndex(c:IChild):int
+ {
+ COMPILE::SWF
+ {
+ if(_elements == null)
+ return -1;
+ return _elements.indexOf(c);
+ }
+ COMPILE::JS
+ {
+ var children:Array = internalChildren();
+ var n:int = children.length;
+ for (var i:int = 0; i < n; i++)
+ {
+ if (children[i] == c.element)
+ return i;
+ }
+ return -1;
+ }
+ }
+
+ /**
+ * @copy org.apache.flex.core.IParent#removeElement()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignorecoercion HTMLElement
+ */
+ public function removeElement(c:IChild, dispatchEvent:Boolean = true):void
+ {
+ COMPILE::SWF
+ {
+ if(_elements)
+ {
+ var idx:int = _elements.indexOf(c);
+ if(idx>=0)
+ _elements.splice(idx,1);
+ }
+ $displayObjectContainer.removeChild(c.$displayObject as DisplayObject);
+ }
+ COMPILE::JS
+ {
+ element.removeChild(c.element as HTMLElement);
+ }
+ }
+
+ /**
+ * @copy org.apache.flex.core.IParent#numElements
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get numElements():int
+ {
+ COMPILE::SWF
+ {
+ return _elements ? _elements.length : 0;
+ }
+ COMPILE::JS
+ {
+ var children:Array = internalChildren();
+ return children.length;
+ }
+ }
+
+ /**
+ * 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
+ */
+ public function addedToParent():void
+ {
+ var c:Class;
+
+ COMPILE::JS
+ {
+ if (style)
+ ValuesManager.valuesImpl.applyStyles(this, style);
+ }
+
+ if (isNaN(_explicitWidth) && isNaN(_percentWidth))
+ {
+ var value:* = ValuesManager.valuesImpl.getValue(this,"width");
+ if (value !== undefined)
+ {
+ if (value is String)
+ {
+ var s:String = String(value);
+ if (s.indexOf("%") != -1)
+ _percentWidth = Number(s.substring(0, s.length - 1));
+ else
+ {
+ if (s.indexOf("px") != -1)
+ s = s.substring(0, s.length - 2);
+ _width = _explicitWidth = Number(s);
+ }
+ }
+ else
+ _width = _explicitWidth = value as Number;
+ }
+ }
+
+ if (isNaN(_explicitHeight) && isNaN(_percentHeight))
+ {
+ value = ValuesManager.valuesImpl.getValue(this,"height");
+ if (value !== undefined)
+ {
+ if (value is String)
+ {
+ s = String(value);
+ if (s.indexOf("%") != -1)
+ _percentHeight = Number(s.substring(0, s.length - 1));
+ else
+ {
+ if (s.indexOf("px") != -1)
+ s = s.substring(0, s.length - 2);
+ _height = _explicitHeight = Number(s);
+ }
+ }
+ else
+ _height = _explicitHeight = value as Number;
+ }
+ }
+
+ for each (var bead:IBead in beads)
+ addBead(bead);
+
+ if (getBeadByType(IBeadModel) == null)
+ {
+ c = ValuesManager.valuesImpl.getValue(this, "iBeadModel") as Class;
+ if (c)
+ {
+ var model:IBeadModel = new c as IBeadModel;
+ if (model)
+ addBead(model);
+ }
+ }
+ if (_view == null && getBeadByType(IBeadView) == null)
+ {
+ c = ValuesManager.valuesImpl.getValue(this, "iBeadView") as Class;
+ if (c)
+ {
+ var view:IBeadView = new c as IBeadView;
+ if (view)
+ addBead(view);
+ }
+ }
+ if (getBeadByType(IBeadController) == null)
+ {
+ c = ValuesManager.valuesImpl.getValue(this, "iBeadController") as Class;
+ if (c)
+ {
+ var controller:IBeadController = new c as IBeadController;
+ if (controller)
+ addBead(controller);
+ }
+ }
+ dispatchEvent(new Event("beadsAdded"));
+ }
+
+ /**
+ * A measurement bead, if one exists.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get measurementBead() : IMeasurementBead
+ {
+ var measurementBead:IMeasurementBead = getBeadByType(IMeasurementBead) as IMeasurementBead;
+ if( measurementBead == null ) {
+ addBead(measurementBead = new (ValuesManager.valuesImpl.getValue(this, "iMeasurementBead")) as IMeasurementBead);
+ }
+
+ return measurementBead;
+ }
+
+ COMPILE::SWF
+ private var _stageProxy:StageProxy;
+
+ /**
+ * @copy org.apache.flex.core.IUIBase#topMostEventDispatcher
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
+ * @flexjsignorecoercion org.apache.flex.events.IEventDispatcher
+ */
+ public function get topMostEventDispatcher():IEventDispatcher
+ {
+ COMPILE::SWF
+ {
+ if (!_stageProxy)
+ {
+ _stageProxy = new StageProxy($displayObject.stage);
+ _stageProxy.addEventListener("removedFromStage", stageProxy_removedFromStageHandler);
+ }
+
+ return _stageProxy;
+ }
+ COMPILE::JS
+ {
+ var e:WrappedHTMLElement = document.body as WrappedHTMLElement;
+ return e.flexjs_wrapper as IEventDispatcher;
+ }
+ }
+
+ COMPILE::SWF
+ private function stageProxy_removedFromStageHandler(event:Event):void
+ {
+ _stageProxy = null;
+ }
+
+ /**
+ * Rebroadcast an event from a sub component from the component.
+ */
+ protected function repeaterListener(event:Event):void
+ {
+ dispatchEvent(event);
+ }
+
+ /**
+ * @return The actual element to be parented.
+ * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
+ */
+ protected function createElement():IFlexJSElement
+ {
+ COMPILE::SWF
+ {
+ element = new WrappedSprite();
+ element.flexjs_wrapper = this;
+ (element as InteractiveObject).doubleClickEnabled = true; // make JS and flash consistent
+ return element;
+ }
+ COMPILE::JS
+ {
+ if (element == null)
+ element = document.createElement('div') as WrappedHTMLElement;
+ if (positioner == null)
+ positioner = element;
+ positioner.style.display = 'block';
+ positioner.style.position = 'relative';
+
+ element.flexjs_wrapper = this;
+
+ return positioner;
+ }
+ }
+
+ /**
+ * The HTMLElement used to position the component.
+ * @flexjsignorecoercion String
+ */
+ COMPILE::JS
+ public function get alpha():Number
+ {
+ var stralpha:String = positioner.style.opacity as String;
+ var alpha:Number = parseFloat(stralpha);
+ return alpha;
+ }
+
+ COMPILE::JS
+ public function set alpha(value:Number):void
+ {
+ positioner.style.opacity = value;
+ }
+
+ /**
+ * @param value The event containing new style properties.
+ */
+ COMPILE::JS
+ protected function styleChangeHandler(value:ValueChangeEvent):void
+ {
+ var newStyle:Object = {};
+ newStyle[value.propertyName] = value.newValue;
+ ValuesManager.valuesImpl.applyStyles(this, newStyle);
+ };
+
+ COMPILE::SWF
+ public function get transformElement():IFlexJSElement
+ {
+ return element;
+ }
+
+ COMPILE::JS
+ public function get transformElement():WrappedHTMLElement
+ {
+ return element;
+ }
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/975d3f34/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/UIButtonBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/UIButtonBase.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/UIButtonBase.as
new file mode 100644
index 0000000..85fc0fd
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/UIButtonBase.as
@@ -0,0 +1,792 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 org.apache.flex.core
+{
+ import flash.display.DisplayObject;
+ import flash.display.SimpleButton;
+
+ import org.apache.flex.core.IBead;
+ import org.apache.flex.core.IBeadModel;
+ import org.apache.flex.core.IMeasurementBead;
+ import org.apache.flex.core.IStrand;
+ import org.apache.flex.core.IUIBase;
+ import org.apache.flex.core.ValuesManager;
+ import org.apache.flex.events.Event;
+ import org.apache.flex.events.EventDispatcher;
+ import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.events.utils.MouseEventConverter;
+
+ //--------------------------------------
+ // Events
+ //--------------------------------------
+
+ /**
+ * Set a different class for click events so that
+ * there aren't dependencies on the flash classes
+ * on the JS side.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ [Event(name="click", type="org.apache.flex.events.MouseEvent")]
+
+ /**
+ * The UIHTMLElementWrapper class is the base class for most Buttons
+ * and other UI objects in a FlexJS application that do not have children.
+ * In Flash, these buttons extend SimpleButton and therefore
+ * do not support all of the Sprite APIs.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ COMPILE::SWF
+ public class UIButtonBase extends UIHTMLElementWrapper implements IStrandWithModel, IEventDispatcher, IUIBase, IStyleableObject, ILayoutChild
+ {
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function UIButtonBase()
+ {
+ // mouseChildren = true;
+ // mouseEnabled = true;
+ createElement();
+ MouseEventConverter.setupInstanceConverters(this);
+ }
+
+ protected function createElement():IFlexJSElement
+ {
+ element = _button = new WrappedSimpleButton();
+ _button.flexjs_wrapper = this;
+ return element;
+ }
+ private var _button:WrappedSimpleButton;
+
+ public function get $button():SimpleButton
+ {
+ return _button;
+ }
+
+ private var _x:Number;
+
+ /**
+ * @private
+ */
+ override public function set x(value:Number):void
+ {
+ if (_button.x != value) {
+ _button.x = _x = value;
+ if (!style)
+ style = { left: value };
+ else
+ style.left = value;
+ dispatchEvent(new Event("xChanged"));
+ }
+ }
+
+ private var _y:Number;
+
+ /**
+ * @private
+ */
+ override public function set y(value:Number):void
+ {
+ if (_button.y != value) {
+ _button.y = _y = value;
+ if (!style)
+ style = { top: value };
+ else
+ style.top = value;
+ dispatchEvent(new Event("yChanged"));
+ }
+ }
+
+ /**
+ * Retrieve the low-level bounding box y.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ protected function get $y():Number
+ {
+ return _button.y;
+ }
+
+ private var _explicitWidth:Number;
+
+ /**
+ * The explicitly set width (as opposed to measured width
+ * or percentage width).
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get explicitWidth():Number
+ {
+ if (isNaN(_explicitWidth))
+ {
+ var value:* = ValuesManager.valuesImpl.getValue(this, "width");
+ if (value !== undefined) {
+ _explicitWidth = Number(value);
+ }
+ }
+
+ return _explicitWidth;
+ }
+
+ /**
+ * @private
+ */
+ public function set explicitWidth(value:Number):void
+ {
+ if (_explicitWidth == value)
+ return;
+
+ // width can be pixel or percent not both
+ if (!isNaN(value))
+ _percentWidth = NaN;
+
+ _explicitWidth = value;
+
+ dispatchEvent(new Event("explicitWidthChanged"));
+ }
+
+ private var _explicitHeight:Number;
+
+ /**
+ * The explicitly set width (as opposed to measured width
+ * or percentage width).
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get explicitHeight():Number
+ {
+ if (isNaN(_explicitHeight))
+ {
+ var value:* = ValuesManager.valuesImpl.getValue(this, "height");
+ if (value !== undefined) {
+ _explicitHeight = Number(value);
+ }
+ }
+
+ return _explicitHeight;
+ }
+
+ /**
+ * @private
+ */
+ public function set explicitHeight(value:Number):void
+ {
+ if (_explicitHeight == value)
+ return;
+
+ // height can be pixel or percent not both
+ if (!isNaN(value))
+ _percentHeight = NaN;
+
+ _explicitHeight = value;
+
+ dispatchEvent(new Event("explicitHeightChanged"));
+ }
+
+ private var _percentWidth:Number;
+
+ /**
+ * The requested percentage width this component
+ * should have in the parent container. Note that
+ * the actual percentage may be different if the
+ * total is more than 100% or if there are other
+ * components with explicitly set widths.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get percentWidth():Number
+ {
+ return _percentWidth;
+ }
+
+ /**
+ * @private
+ */
+ public function set percentWidth(value:Number):void
+ {
+ if (_percentWidth == value)
+ return;
+
+ if (!isNaN(value))
+ _explicitWidth = NaN;
+
+ _percentWidth = value;
+
+ dispatchEvent(new Event("percentWidthChanged"));
+ }
+
+ private var _percentHeight:Number;
+
+ /**
+ * The requested percentage height this component
+ * should have in the parent container. Note that
+ * the actual percentage may be different if the
+ * total is more than 100% or if there are other
+ * components with explicitly set heights.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get percentHeight():Number
+ {
+ return _percentHeight;
+ }
+
+ /**
+ * @private
+ */
+ public function set percentHeight(value:Number):void
+ {
+ if (_percentHeight == value)
+ return;
+
+ if (!isNaN(value))
+ _explicitHeight = NaN;
+
+ _percentHeight = value;
+
+ dispatchEvent(new Event("percentHeightChanged"));
+ }
+
+ private var _width:Number;
+
+ [Bindable("widthChanged")]
+ [PercentProxy("percentWidth")]
+ /**
+ * @copy org.apache.flex.core.UIBase#width
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ override public function get width():Number
+ {
+ if (isNaN(explicitWidth))
+ {
+ var w:Number = _width;
+ if (isNaN(w)) w = $width;
+ return w;
+ }
+ else
+ return explicitWidth;
+ }
+
+ /**
+ * @private
+ */
+ override public function set width(value:Number):void
+ {
+ if (explicitWidth != value)
+ {
+ explicitWidth = value;
+ }
+
+ setWidth(value);
+ }
+
+ /**
+ * Retrieve the low-level bounding box width.
+ * Not implemented in JS.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get $width():Number
+ {
+ return _button.width;
+ }
+
+ private var _height:Number;
+
+ [Bindable("heightChanged")]
+ [PercentProxy("percentHeight")]
+ /**
+ * @copy org.apache.flex.core.UIBase#width
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ override public function get height():Number
+ {
+ if (isNaN(explicitHeight))
+ {
+ var h:Number = _height;
+ if (isNaN(h)) h = $height;
+ return h;
+ }
+ else
+ return explicitHeight;
+ }
+
+ /**
+ * @private
+ */
+ override public function set height(value:Number):void
+ {
+ if (explicitHeight != value)
+ {
+ explicitHeight = value;
+ }
+
+ setHeight(value);
+ }
+
+ /**
+ * Retrieve the low-level bounding box height.
+ * Not implemented in JS.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get $height():Number
+ {
+ return _button.height;
+ }
+
+ /**
+ * @copy org.apache.flex.core.IUIBase#setHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function setHeight(value:Number, noEvent:Boolean = false):void
+ {
+ if (_height != value)
+ {
+ _height = value;
+ if (!noEvent)
+ dispatchEvent(new Event("heightChanged"));
+ }
+ }
+
+ /**
+ * @copy org.apache.flex.core.IUIBase#setWidth
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function setWidth(value:Number, noEvent:Boolean = false):void
+ {
+ if (_width != value)
+ {
+ _width = value;
+ if (!noEvent)
+ dispatchEvent(new Event("widthChanged"));
+ }
+ }
+
+ /**
+ * @copy org.apache.flex.core.IUIBase#setWidthAndHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function setWidthAndHeight(newWidth:Number, newHeight:Number, noEvent:Boolean = false):void
+ {
+ if (_width != newWidth)
+ {
+ _width = newWidth;
+ if (_height == newHeight)
+ if (!noEvent)
+ dispatchEvent(new Event("widthChanged"));
+ }
+ if (_height != newHeight)
+ {
+ _height = newHeight;
+ if (!noEvent)
+ dispatchEvent(new Event("heightChanged"));
+ }
+ dispatchEvent(new Event("sizeChanged"));
+ }
+
+ /**
+ * @copy org.apache.flex.core.ILayoutChild#isWidthSizedToContent
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function isWidthSizedToContent():Boolean
+ {
+ return (isNaN(_explicitWidth) && isNaN(_percentWidth));
+ }
+
+ /**
+ * @copy org.apache.flex.core.ILayoutChild#setX
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function setX(value:Number):void
+ {
+ _button.x = value;
+ }
+
+ /**
+ * @copy org.apache.flex.core.ILayoutChild#setY
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function setY(value:Number):void
+ {
+ _button.y = value;
+ }
+
+ /**
+ * @private
+ */
+ [Bindable("visibleChanged")]
+ override public function set visible(value:Boolean):void
+ {
+ _button.visible = value;
+ dispatchEvent(new Event(value?"show":"hide"));
+ dispatchEvent(new Event("visibleChanged"));
+ }
+
+ override public function get visible():Boolean
+ {
+ return _button.visible;
+ }
+
+ /**
+ * @copy org.apache.flex.core.ILayoutChild#isHeightSizedToContent
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function isHeightSizedToContent():Boolean
+ {
+ return (isNaN(_explicitHeight) && isNaN(_percentHeight));
+ }
+
+ private var _view:IBeadView;
+
+ /**
+ * An IBeadView that serves as the view for the component.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get view():IBeadView
+ {
+ if (_view == null)
+ {
+ var c:Class = ValuesManager.valuesImpl.getValue(this, "iBeadView") as Class;
+ if (c)
+ {
+ _view = (new c()) as IBeadView;
+ addBead(_view);
+ }
+ }
+ return _view;
+ }
+
+ /**
+ * @private
+ */
+ public function set view(value:IBeadView):void
+ {
+ if (_view != value)
+ {
+ addBead(value as IBead);
+ dispatchEvent(new Event("viewChanged"));
+ }
+ }
+
+ private var _id:String;
+
+ /**
+ * @copy org.apache.flex.core.UIBase#id
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get id():String
+ {
+ return _id;
+ }
+
+ /**
+ * @private
+ */
+ public function set id(value:String):void
+ {
+ if (_id != value)
+ {
+ _id = value;
+ dispatchEvent(new Event("idChanged"));
+ }
+ }
+
+ private var _styles:Object;
+
+ /**
+ * The object that contains
+ * "styles" and other associated
+ * name-value pairs. You can
+ * also specify a string in
+ * HTML style attribute format.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get style():Object
+ {
+ return _styles;
+ }
+
+ /**
+ * @private
+ */
+ public function set style(value:Object):void
+ {
+ if (value is String)
+ _styles = ValuesManager.valuesImpl.parseStyles(value as String);
+ else
+ _styles = value;
+ if (!isNaN(_y))
+ _styles.top = _y;
+ if (!isNaN(_x))
+ _styles.left = _x;
+ dispatchEvent(new Event("stylesChanged"));
+ }
+
+ /**
+ * The styles for this object formatted
+ * as an HTML style attribute. While this
+ * may be a convenient and less verbose
+ * way of specifying styles than using
+ * the style object, you run the risk of
+ * having a typo.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function set styleString(value:String):void
+ {
+ _styles = JSON.parse("{" + value + "}");
+ }
+
+ /**
+ * A list of type names. Often used for CSS
+ * type selector lookups.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public var typeNames:String;
+
+ private var _className:String;
+
+ /**
+ * @copy org.apache.flex.core.UIBase#className
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get className():String
+ {
+ return _className;
+ }
+
+ /**
+ * @private
+ */
+ public function set className(value:String):void
+ {
+ if (_className != value)
+ {
+ _className = value;
+ dispatchEvent(new Event("classNameChanged"));
+ }
+ }
+
+ /**
+ * @copy org.apache.flex.core.UIBase#beads
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public var beads:Array;
+
+ private var strand:Vector.<IBead>;
+
+ /**
+ * @copy org.apache.flex.core.UIBase#addBead()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ override public function addBead(bead:IBead):void
+ {
+ super.addBead(bead);
+ if (bead is IBeadView)
+ _view = bead as IBeadView;
+ bead.strand = this;
+ }
+
+ /**
+ * @copy org.apache.flex.core.UIBase#addToParent()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function addedToParent():void
+ {
+ var c:Class;
+
+ for each (var bead:IBead in beads)
+ addBead(bead);
+
+ if (getBeadByType(IBeadModel) == null)
+ {
+ c = ValuesManager.valuesImpl.getValue(this, "iBeadModel") as Class;
+ if (c)
+ {
+ var model:IBeadModel = new c as IBeadModel;
+ if (model)
+ addBead(model);
+ }
+ }
+ if (getBeadByType(IBeadView) == null)
+ {
+ c = ValuesManager.valuesImpl.getValue(this, "iBeadView") as Class;
+ if (c)
+ {
+ var view:IBeadView = new c as IBeadView;
+ if (view)
+ addBead(view);
+ }
+ }
+ if (getBeadByType(IBeadController) == null)
+ {
+ c = ValuesManager.valuesImpl.getValue(this, "iBeadController") as Class;
+ if (c)
+ {
+ var controller:IBeadController = new c as IBeadController;
+ if (controller)
+ addBead(controller);
+ }
+ }
+
+ dispatchEvent(new Event("beadsAdded"));
+
+ }
+
+ /**
+ * @copy org.apache.flex.core.UIBase#measurementBead
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get measurementBead() : IMeasurementBead
+ {
+ var measurementBead:IMeasurementBead = getBeadByType(IMeasurementBead) as IMeasurementBead;
+ if( measurementBead == null ) {
+ addBead(measurementBead = new (ValuesManager.valuesImpl.getValue(this, "iMeasurementBead")) as IMeasurementBead);
+ }
+
+ return measurementBead;
+ }
+
+ /**
+ * @copy org.apache.flex.core.IUIBase#topMostEventDispatcher
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function get topMostEventDispatcher():IEventDispatcher
+ {
+ if (!parent)
+ return null;
+ return IUIBase(parent).topMostEventDispatcher;
+ }
+
+
+ }
+}