http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalFlexLayout.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalFlexLayout.as index 0000000,0000000..f495acc new file mode 100644 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalFlexLayout.as @@@ -1,0 -1,0 +1,260 @@@ ++//////////////////////////////////////////////////////////////////////////////// ++// ++// 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.html.beads.layouts ++{ ++ //import org.apache.flex.html.beads.layouts.VerticalLayout; ++ ++ import org.apache.flex.core.LayoutBase; ++ import org.apache.flex.core.ILayoutChild; ++ import org.apache.flex.core.ILayoutHost; ++ import org.apache.flex.core.ILayoutView; ++ import org.apache.flex.core.ILayoutParent; ++ import org.apache.flex.core.IStrand; ++ import org.apache.flex.core.UIBase; ++ import org.apache.flex.core.IParentIUIBase; ++ ++ COMPILE::SWF { ++ import org.apache.flex.core.IUIBase; ++ import org.apache.flex.core.ValuesManager; ++ import org.apache.flex.events.Event; ++ import org.apache.flex.events.IEventDispatcher; ++ import org.apache.flex.geom.Rectangle; ++ import org.apache.flex.utils.CSSUtils; ++ import org.apache.flex.utils.CSSContainerUtils; ++ } ++ ++ public class VerticalFlexLayout extends LayoutBase ++ { ++ /** ++ * Constructor. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.8 ++ */ ++ public function VerticalFlexLayout() ++ { ++ super(); ++ } ++ ++ private var _grow:Number = -1; ++ ++ /** ++ * Sets the amount items grow in proportion to other items. ++ * The default is 0 which prevents the items from expanding to ++ * fit the space. Use a negative value to unset this property. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.8 ++ */ ++ public function get grow():Number { ++ return _grow; ++ } ++ public function set grow(value:Number):void { ++ _grow = value; ++ } ++ ++ private var _shrink:Number = -1; ++ ++ /** ++ * Sets the amount an item may shrink in proportion to other items. ++ * The default is 1 which allows items to shrink to fit into the space. ++ * Set this to 0 if you want to allow scrolling of the space. Use a negative ++ * value to unset this property. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.8 ++ */ ++ public function get shrink():Number { ++ return _shrink; ++ } ++ public function set shrink(value:Number):void { ++ _shrink = value; ++ } ++ ++ /** ++ * ++ * @flexjsignorecoercion org.apache.flex.core.ILayoutHost ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.8 ++ */ ++ override public function layout():Boolean ++ { ++ COMPILE::SWF { ++ var contentView:ILayoutView = layoutView; ++ ++ var n:Number = contentView.numElements; ++ if (n == 0) return false; ++ ++ var spacing:String = "none"; ++ ++ var maxWidth:Number = 0; ++ var maxHeight:Number = 0; ++ var growCount:Number = 0; ++ var childData:Array = []; ++ var hostWidthSizedToContent:Boolean = host.isWidthSizedToContent(); ++ var hostHeightSizedToContent:Boolean = host.isHeightSizedToContent(); ++ var hostWidth:Number = hostWidthSizedToContent ? host.width : contentView.width; ++ var hostHeight:Number = hostHeightSizedToContent ? host.height : contentView.height; ++ ++ var ilc:ILayoutChild; ++ var data:Object; ++ var canAdjust:Boolean = false; ++ ++ var paddingMetrics:Rectangle = CSSContainerUtils.getPaddingMetrics(host); ++ var borderMetrics:Rectangle = CSSContainerUtils.getBorderMetrics(host); ++ ++ // adjust the host's usable size by the metrics. If hostSizedToContent, then the ++ // resulting adjusted value may be less than zero. ++ hostWidth -= paddingMetrics.left + paddingMetrics.right + borderMetrics.left + borderMetrics.right; ++ hostHeight -= paddingMetrics.top + paddingMetrics.bottom + borderMetrics.top + borderMetrics.bottom; ++ ++ var remainingHeight:Number = hostHeight; ++ ++ //trace("VerticalFlexLayout for "+UIBase(host).id+" with remainingHeight: "+remainingHeight); ++ ++ // First pass determines the data about the child. ++ for(var i:int=0; i < n; i++) ++ { ++ var child:IUIBase = contentView.getElementAt(i) as IUIBase; ++ if (child == null || !child.visible) { ++ childData.push({width:0, height:0, mt:0, ml:0, mr:0, mb:0, grow:0, canAdjust:false}); ++ continue; ++ } ++ ++ ilc = child as ILayoutChild; ++ ++ var margins:Object = childMargins(child, hostWidth, hostHeight); ++ ++ var flexGrow:Object = ValuesManager.valuesImpl.getValue(child, "flex-grow"); ++ var growValue:Number = 0; ++ if (flexGrow != null) { ++ growValue = Number(flexGrow); ++ if (!isNaN(growValue) && growValue > 0) growCount++; ++ else growValue = 0; ++ } ++ ++ var useWidth:Number = -1; ++ if (!hostWidthSizedToContent) { ++ if (ilc) { ++ if (!isNaN(ilc.percentWidth)) useWidth = hostWidth * (ilc.percentWidth/100.0); ++ else if (!isNaN(ilc.explicitWidth)) useWidth = ilc.explicitWidth; ++ else useWidth = hostWidth; ++ } ++ } ++ ++ var useHeight:Number = -1; ++ if (ilc) { ++ if (!isNaN(ilc.explicitHeight)) useHeight = ilc.explicitHeight; ++ else if (!isNaN(ilc.percentHeight)) useHeight = hostHeight * (ilc.percentHeight/100.0); ++ else if (ilc.height > 0) useHeight = ilc.height; ++ } ++ if (growValue == 0 && useHeight > 0) remainingHeight -= useHeight + margins.top + margins.bottom; ++ else remainingHeight -= margins.top + margins.bottom; ++ ++ if (maxWidth < useWidth) maxWidth = useWidth; ++ if (maxHeight < useHeight) maxHeight = useHeight; ++ ++ childData.push({width:useWidth, height:useHeight, ++ mt:margins.top, ml:margins.left, mr:margins.right, mb:margins.bottom, ++ grow:growValue, canAdjust:canAdjust}); ++ } ++ ++ var xpos:Number = borderMetrics.left + paddingMetrics.left; ++ var ypos:Number = borderMetrics.top + paddingMetrics.top; ++ ++ // Second pass sizes and positions the children based on the data gathered. ++ for(i=0; i < n; i++) ++ { ++ child = contentView.getElementAt(i) as IUIBase; ++ data = childData[i]; ++ ++ useWidth = (data.width < 0 ? hostWidth : data.width); ++ ++ var setHeight:Boolean = true; ++ if (data.height != 0) { ++ if (data.grow > 0 && growCount > 0) { ++ useHeight = remainingHeight / growCount; ++ setHeight = false; ++ } else { ++ useHeight = data.height; ++ } ++ } else { ++ useHeight = child.height; ++ } ++ ++ ilc = child as ILayoutChild; ++ if (ilc) { ++ ilc.setX(xpos + data.ml); ++ ilc.setY(ypos + data.mt); ++ if (data.width > 0) { ++ //ilc.width = useWidth; ++ ilc.setWidth(useWidth); ++ } ++ if (useHeight > 0) { ++ if (setHeight) ilc.setHeight(useHeight); ++ else ilc.height = useHeight; ++ } ++ } else { ++ child.x = xpos + data.ml; ++ child.y = ypos + data.mt; ++ child.width = useWidth; ++ if (useHeight > 0) { ++ child.height = useHeight; ++ } ++ } ++ ++ ypos += useHeight + data.mt + data.mb; ++ ++ //trace("VerticalFlexLayout: setting child "+i+" to "+child.width+" x "+child.height+" at "+child.x+", "+child.y); ++ } ++ ++ //trace("VerticalFlexLayout: complete"); ++ ++ return true; ++ } ++ ++ COMPILE::JS { ++ var contentView:ILayoutView = layoutView; ++ ++ contentView.element.style["display"] = "flex"; ++ contentView.element.style["flex-flow"] = "column"; ++ ++ var n:int = contentView.numElements; ++ if (n == 0) return false; ++ ++ for(var i:int=0; i < n; i++) { ++ var child:UIBase = contentView.getElementAt(i) as UIBase; ++ if (grow >= 0) child.element.style["flex-grow"] = String(grow); ++ if (shrink >= 0) child.element.style["flex-shrink"] = String(shrink); ++ } ++ ++ return true; ++ } ++ } ++ } ++}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as index 857a458,dd02989..a8b9774 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as @@@ -18,41 -18,40 +18,44 @@@ //////////////////////////////////////////////////////////////////////////////// package org.apache.flex.html.beads.layouts { ++ import org.apache.flex.core.LayoutBase; ++ import org.apache.flex.core.IBeadLayout; import org.apache.flex.core.IBeadModel; import org.apache.flex.core.ILayoutChild; import org.apache.flex.core.ILayoutHost; - import org.apache.flex.core.ILayoutParent; ++ import org.apache.flex.core.ILayoutView; ++ import org.apache.flex.core.ILayoutParent; import org.apache.flex.core.IParentIUIBase; import org.apache.flex.core.IStrand; import org.apache.flex.core.IUIBase; import org.apache.flex.core.ValuesManager; COMPILE::JS { -- import org.apache.flex.core.WrappedHTMLElement; ++ import org.apache.flex.core.WrappedHTMLElement; } import org.apache.flex.events.Event; import org.apache.flex.events.IEventDispatcher; import org.apache.flex.geom.Rectangle; import org.apache.flex.utils.CSSContainerUtils; import org.apache.flex.utils.CSSUtils; -- ++ /** * The VerticalLayout class is a simple layout * bead. It takes the set of children and lays them out * vertically in one column, separating them according to * CSS layout rules for margin and horizontal-align styles. -- * ++ * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ -- public class VerticalLayout implements IBeadLayout ++ public class VerticalLayout extends LayoutBase implements IBeadLayout { /** * Constructor. -- * ++ * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@@ -60,304 -59,304 +63,123 @@@ */ public function VerticalLayout() { ++ super(); } -- -- // the strand/host container is also an ILayoutChild because -- // can have its size dictated by the host's parent which is -- // important to know for layout optimization -- private var host:ILayoutChild; -- -- /** -- * @copy org.apache.flex.core.IBead#strand -- * -- * @langversion 3.0 -- * @playerversion Flash 10.2 -- * @playerversion AIR 2.6 -- * @productversion FlexJS 0.0 -- */ -- public function set strand(value:IStrand):void -- { -- host = value as ILayoutChild; -- } -- ++ /** * Layout children vertically -- * ++ * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion FlexJS 0.0 * @flexjsignorecoercion org.apache.flex.core.ILayoutHost */ -- public function layout():Boolean ++ override public function layout():Boolean { COMPILE::SWF { - var layoutParent:ILayoutHost = (host as ILayoutParent).getLayoutHost(); - var layoutParent:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; -- var contentView:IParentIUIBase = layoutParent ? layoutParent.contentView : IParentIUIBase(host); -- var padding:Rectangle = CSSContainerUtils.getPaddingMetrics(host); -- -- var n:int = contentView.numElements; -- var hasHorizontalFlex:Boolean; -- var hostSizedToContent:Boolean = host.isWidthSizedToContent(); -- var flexibleHorizontalMargins:Array = []; -- var ilc:ILayoutChild; -- var marginLeft:Object; -- var marginRight:Object; -- var marginTop:Object; -- var marginBottom:Object; -- var margin:Object; ++ var contentView:ILayoutView = layoutView; ++ ++ var n:Number = contentView.numElements; ++ if (n == 0) return false; ++ var maxWidth:Number = 0; -- var cssValue:*; -- // asking for contentView.width can result in infinite loop if host isn't sized already -- var w:Number = hostSizedToContent ? 0 : contentView.width; -- var h:Number = contentView.height; ++ var maxHeight:Number = 0; ++ var hostWidthSizedToContent:Boolean = host.isWidthSizedToContent(); ++ var hostHeightSizedToContent:Boolean = host.isHeightSizedToContent(); ++ var hostWidth:Number = hostWidthSizedToContent ? 0 : contentView.width; ++ var hostHeight:Number = hostHeightSizedToContent ? 0 : contentView.height; ++ ++ var ilc:ILayoutChild; ++ var data:Object; ++ var canAdjust:Boolean = false; ++ ++ var paddingMetrics:Rectangle = CSSContainerUtils.getPaddingMetrics(host); ++ var borderMetrics:Rectangle = CSSContainerUtils.getBorderMetrics(host); -- for (var i:int = 0; i < n; i++) ++ // adjust the host's usable size by the metrics. If hostSizedToContent, then the ++ // resulting adjusted value may be less than zero. ++ hostWidth -= paddingMetrics.left + paddingMetrics.right + borderMetrics.left + borderMetrics.right; ++ hostHeight -= paddingMetrics.top + paddingMetrics.bottom + borderMetrics.top + borderMetrics.bottom; ++ ++ var xpos:Number = borderMetrics.left + paddingMetrics.left; ++ var ypos:Number = borderMetrics.top + paddingMetrics.left; ++ ++ // First pass determines the data about the child. ++ for(var i:int=0; i < n; i++) { var child:IUIBase = contentView.getElementAt(i) as IUIBase; if (child == null || !child.visible) continue; ++ var positions:Object = childPositions(child); ++ var margins:Object = childMargins(child, hostWidth, hostHeight); ++ ilc = child as ILayoutChild; -- var left:Number = NaN; -- cssValue = ValuesManager.valuesImpl.getValue(child, "left"); -- if (cssValue !== undefined) -- left = CSSUtils.toNumber(cssValue); -- var right:Number = NaN; -- cssValue = ValuesManager.valuesImpl.getValue(child, "right"); -- if (cssValue !== undefined) -- right = CSSUtils.toNumber(cssValue); -- margin = ValuesManager.valuesImpl.getValue(child, "margin"); -- marginLeft = ValuesManager.valuesImpl.getValue(child, "margin-left"); -- marginTop = ValuesManager.valuesImpl.getValue(child, "margin-top"); -- marginRight = ValuesManager.valuesImpl.getValue(child, "margin-right"); -- marginBottom = ValuesManager.valuesImpl.getValue(child, "margin-bottom"); -- var ml:Number = CSSUtils.getLeftValue(marginLeft, margin, w); -- var mr:Number = CSSUtils.getRightValue(marginRight, margin, w); -- var mt:Number = CSSUtils.getTopValue(marginTop, margin, h); -- var mb:Number = CSSUtils.getBottomValue(marginBottom, margin, h); -- var lastmb:Number; -- var yy:Number; -- if (i == 0) -- { -- if (ilc) -- ilc.setY(mt + padding.top); -- else -- child.y = mt + padding.top; -- } -- else -- { -- if (ilc) -- ilc.setY(yy + Math.max(mt, lastmb)); -- else -- child.y = yy + Math.max(mt, lastmb); -- } -- if (ilc) -- { -- if (!isNaN(ilc.percentHeight)) -- ilc.setHeight(contentView.height * ilc.percentHeight / 100, !isNaN(ilc.percentWidth)); -- } -- lastmb = mb; -- var marginObject:Object = {}; -- flexibleHorizontalMargins[i] = marginObject; -- if (marginLeft == "auto") -- { -- ml = 0; -- marginObject.marginLeft = marginLeft; -- hasHorizontalFlex = true; -- } -- else -- { -- ml = Number(marginLeft); -- if (isNaN(ml)) -- { -- ml = 0; -- marginObject.marginLeft = marginLeft; -- } -- else -- marginObject.marginLeft = ml; -- } -- if (marginRight == "auto") -- { -- mr = 0; -- marginObject.marginRight = marginRight; -- hasHorizontalFlex = true; -- } -- else -- { -- mr = Number(marginRight); -- if (isNaN(mr)) -- { -- mr = 0; -- marginObject.marginRight = marginRight; -- } -- else -- marginObject.marginRight = mr; -- } -- if (!hostSizedToContent) -- { -- // if host is sized by parent, -- // we can position and size children horizontally now -- setPositionAndWidth(child, left, ml, padding.left, -- right, mr, padding.right, w); -- } -- else -- { -- if (!isNaN(left)) -- { -- ml = left; -- marginObject.left = ml; -- } -- if (!isNaN(right)) -- { -- mr = right; -- marginObject.right = mr; ++ ++ ypos += margins.top; ++ ++ var childXpos:Number = xpos + margins.left; // default x position ++ ++ if (!hostWidthSizedToContent) { ++ var childWidth:Number = child.width; ++ if (ilc != null && !isNaN(ilc.percentWidth)) { ++ childWidth = hostWidth * ilc.percentWidth/100.0; ++ ilc.setWidth(childWidth); } -- maxWidth = Math.max(maxWidth, ml + child.width + mr); ++ // the following code center-aligns the child, but since HTML does not ++ // do this normally, this code is commented. (Use VerticalFlexLayout for ++ // horizontally centered elements in a vertical column). ++ // childXpos = hostWidth/2 - (childWidth + ml + mr)/2; } -- yy = child.y + child.height; -- } -- if (hostSizedToContent) -- { -- for (i = 0; i < n; i++) -- { -- child = contentView.getElementAt(i) as IUIBase; -- if (child == null || !child.visible) continue; -- var obj:Object = flexibleHorizontalMargins[i]; -- setPositionAndWidth(child, obj.left, obj.marginLeft, padding.left, -- obj.right, obj.marginRight, padding.right, maxWidth); -- } -- } -- if (hasHorizontalFlex) -- { -- for (i = 0; i < n; i++) -- { -- child = contentView.getElementAt(i) as IUIBase; -- if (child == null || !child.visible) continue; -- ilc = child as ILayoutChild; -- obj = flexibleHorizontalMargins[i]; -- if (hasHorizontalFlex) -- { -- if (ilc) -- { -- if (obj.marginLeft == "auto" && obj.marginRight == "auto") -- ilc.setX(maxWidth - child.width / 2); -- else if (obj.marginLeft == "auto") -- ilc.setX(maxWidth - child.width - obj.marginRight - padding.right); -- } -- else -- { -- if (obj.marginLeft == "auto" && obj.marginRight == "auto") -- child.x = maxWidth - child.width / 2; -- else if (obj.marginLeft == "auto") -- child.x = maxWidth - child.width - obj.marginRight - padding.right; -- } ++ ++ if (ilc) { ++ ilc.setX(childXpos); ++ ilc.setY(ypos); ++ ++ if (!hostHeightSizedToContent && !isNaN(ilc.percentHeight)) { ++ var newHeight:Number = hostHeight * ilc.percentHeight / 100; ++ ilc.setHeight(newHeight); } ++ ++ } else { ++ child.x = childXpos; ++ child.y = ypos; } ++ ++ ypos += child.height + margins.bottom; } -- -- // Only return true if the contentView needs to be larger; that new -- // size is stored in the model. -- var sizeChanged:Boolean = true; -- -- host.dispatchEvent( new Event("layoutComplete") ); -- -- return sizeChanged; -- ++ ++ return true; } COMPILE::JS { var children:Array; var i:int; var n:int; ++ var contentView:IParentIUIBase = layoutView as IParentIUIBase; - var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost() - var viewBead:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; -- var contentView:IParentIUIBase = viewBead.contentView; children = contentView.internalChildren(); -- var scv:Object = getComputedStyle(host.positioner); -- var hasWidth:Boolean = !host.isWidthSizedToContent(); -- var maxWidth:Number = 0; n = children.length; for (i = 0; i < n; i++) { var child:WrappedHTMLElement = children[i]; child.flexjs_wrapper.setDisplayStyleForLayout('block'); -- if (child.style.display === 'none') ++ if (child.style.display === 'none') { child.flexjs_wrapper.setDisplayStyleForLayout('block'); -- } -- else ++ } ++ else { // block elements don't measure width correctly so set to inline for a second child.style.display = 'inline-block'; -- maxWidth = Math.max(maxWidth, child.offsetLeft + child.offsetWidth); child.style.display = 'block'; } child.flexjs_wrapper.dispatchEvent('sizeChanged'); } -- if (!hasWidth && n > 0 && !isNaN(maxWidth)) { -- var pl:String = scv['padding-left']; -- var pr:String = scv['padding-right']; -- var npl:int = parseInt(pl.substring(0, pl.length - 2), 10); -- var npr:int = parseInt(pr.substring(0, pr.length - 2), 10); -- maxWidth += npl + npr; -- contentView.width = maxWidth; -- } ++ return true; } } -- -- COMPILE::SWF -- private function setPositionAndWidth(child:IUIBase, left:Number, ml:Number, pl:Number, -- right:Number, mr:Number, pr:Number, w:Number):void -- { -- var widthSet:Boolean = false; -- -- var ww:Number = w; -- var ilc:ILayoutChild = child as ILayoutChild; -- if (!isNaN(left)) -- { -- if (ilc) -- ilc.setX(left + ml); -- else -- child.x = left + ml; -- ww -= left + ml; -- } -- else -- { -- if (ilc) -- ilc.setX(ml + pl); -- else -- child.x = ml + pl; -- ww -= ml + pl; -- } -- if (!isNaN(right)) -- { -- if (!isNaN(left)) -- { -- if (ilc) -- ilc.setWidth(ww - right - mr, true); -- else -- { -- child.width = ww - right - mr; -- widthSet = true; -- } -- } -- else -- { -- if (ilc) -- ilc.setX(w - right - mr - child.width); -- else -- child.x = w - right - mr - child.width; -- } -- } -- if (ilc) -- { -- if (!isNaN(ilc.percentWidth)) -- ilc.setWidth(w * ilc.percentWidth / 100, true); -- } -- if (!widthSet) -- child.dispatchEvent(new Event("sizeChanged")); -- } -- ++ } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/ButtonBarModel.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/ButtonBarModel.as index 0000000,0000000..9eb6a24 new file mode 100644 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/ButtonBarModel.as @@@ -1,0 -1,0 +1,102 @@@ ++//////////////////////////////////////////////////////////////////////////////// ++// ++// 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.html.beads.models ++{ ++ import org.apache.flex.core.IRollOverModel; ++ import org.apache.flex.core.ISelectionModel; ++ import org.apache.flex.core.IStrand; ++ import org.apache.flex.events.Event; ++ import org.apache.flex.events.EventDispatcher; ++ ++ /** ++ * The ArraySelectionModel class is a selection model for ++ * a dataProvider that is an array. It assumes that items ++ * can be fetched from the dataProvider ++ * dataProvider[index]. Other selection models ++ * would support other kinds of data providers. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public class ButtonBarModel extends ArraySelectionModel ++ { ++ public static const PIXEL_WIDTHS:Number = 0; ++ public static const PROPORTIONAL_WIDTHS:Number = 1; ++ public static const PERCENT_WIDTHS:Number = 2; ++ ++ /** ++ * Constructor. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function ButtonBarModel() ++ { ++ } ++ ++ private var _buttonWidths:Array = null; ++ ++ /** ++ * The widths of each button. This property may be null (the default) in which ++ * case the buttons are equally sized. Or this array may contain values, one per ++ * button, which either indicate each button's width in pixels (set .widthType ++ * to ButtonBarModel.PIXEL_WIDTHS) or proportional to other buttons (set ++ * .widthType to ButtonBarModel.PROPORTIONAL_WIDTHS). The array can also contain ++ * specific percentages (set .widthType to ButtonBarModel.PERCENT_WIDTHS). If ++ * this array is set, the number of entries must match the number of buttons. ++ * However, any entry may be null to indicate the button's default size is to be used. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function get buttonWidths():Array ++ { ++ return _buttonWidths; ++ } ++ public function set buttonWidths(value:Array):void ++ { ++ _buttonWidths = value; ++ dispatchEvent(new Event("buttonWidthsChanged")); ++ } ++ ++ private var _widthType:Number = ButtonBarModel.PIXEL_WIDTHS; ++ ++ /** ++ * Indicates how to interpret the values of the buttonWidths array. ++ * ++ * PIXEL_WIDTHS: all of the values are exact pixel widths (unless a value is null). ++ * PROPORTIONAL_WIDTHS: all of the values are proportions. Use 1 to indicate normal, 2 to be 2x, etc. Use 0 (or null) to mean fixed default size. ++ */ ++ public function get widthType():Number ++ { ++ return _widthType; ++ } ++ public function set widthType(value:Number):void ++ { ++ _widthType = value; ++ dispatchEvent(new Event("widthTypeChanged")); ++ } ++ } ++} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/NonNullTextModel.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/NonNullTextModel.as index 0000000,0000000..aefb25f new file mode 100644 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/NonNullTextModel.as @@@ -1,0 -1,0 +1,125 @@@ ++//////////////////////////////////////////////////////////////////////////////// ++// ++// 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.html.beads.models ++{ ++ import org.apache.flex.core.IBead; ++ import org.apache.flex.core.IStrand; ++ import org.apache.flex.core.ITextModel; ++ import org.apache.flex.events.Event; ++ import org.apache.flex.events.EventDispatcher; ++ import org.apache.flex.events.IEventDispatcher; ++ ++ /** ++ * The TextModel class is most basic data model for a ++ * component that displays text. All FlexJS components ++ * that display text should also support HTML, although ++ * the Flash Player implementations may only support ++ * a subset of HTML. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public class NonNullTextModel extends EventDispatcher implements IBead, ITextModel ++ { ++ /** ++ * Constructor. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function NonNullTextModel() ++ { ++ } ++ ++ private var _strand:IStrand; ++ ++ /** ++ * @copy org.apache.flex.core.IBead#strand ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function set strand(value:IStrand):void ++ { ++ _strand = value; ++ } ++ ++ private var _text:String = ""; ++ ++ /** ++ * @copy org.apache.flex.core.ITextModel#text ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function get text():String ++ { ++ return _text; ++ } ++ ++ /** ++ * @private ++ */ ++ public function set text(value:String):void ++ { ++ if (value == null) ++ value = ""; ++ if (value != _text) ++ { ++ _text = value; ++ dispatchEvent(new Event("textChange")); ++ } ++ } ++ ++ private var _html:String; ++ ++ /** ++ * @copy org.apache.flex.core.ITextModel#html ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function get html():String ++ { ++ return _html; ++ } ++ ++ /** ++ * @private ++ */ ++ public function set html(value:String):void ++ { ++ if (value != _html) ++ { ++ _html = value; ++ dispatchEvent(new Event("htmlChange")); ++ } ++ } ++ } ++} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as index 1d320e3,1d320e3..214125e --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ButtonBarButtonItemRenderer.as @@@ -92,6 -92,6 +92,24 @@@ package org.apache.flex.html.supportCla } /** ++ * @private ++ */ ++ override public function setWidth(value:Number, noEvent:Boolean = false):void ++ { ++ super.setWidth(value, noEvent); ++ textButton.width = value; ++ } ++ ++ /** ++ * @private ++ */ ++ override public function setHeight(value:Number, noEvent:Boolean = false):void ++ { ++ super.setHeight(value, noEvent); ++ textButton.height = value; ++ } ++ ++ /** * The data to be displayed by the itemRenderer instance. For ButtonBarItemRenderer, the * data's string version is used as the label for the Button. * @@@ -107,6 -107,6 +125,7 @@@ var added:Boolean = false; if (textButton == null) { textButton = new TextButton(); ++ textButton.percentWidth = 100; // listen for clicks on the button and translate them into // an itemClicked event. http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/CheckBoxIcon.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/CheckBoxIcon.as index 92c3f53,92c3f53..c9eeefb --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/CheckBoxIcon.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/CheckBoxIcon.as @@@ -82,7 -82,7 +82,7 @@@ package org.apache.flex.html.supportCla element = input as WrappedHTMLElement; positioner = element; -- positioner.style.position = 'relative'; ++ //positioner.style.position = 'relative'; (element as WrappedHTMLElement).flexjs_wrapper = this; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ClippingViewport.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ClippingViewport.as index 9ef88cf,0000000..16d6d3e mode 100644,000000..100644 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ClippingViewport.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ClippingViewport.as @@@ -1,137 -1,0 +1,132 @@@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.supportClasses +{ + import org.apache.flex.core.IBead; + import org.apache.flex.core.IBeadLayout; + import org.apache.flex.core.IViewport; + import org.apache.flex.core.UIBase; + import org.apache.flex.geom.Size; + + COMPILE::JS + { + import org.apache.flex.core.IStrand; + } + COMPILE::SWF + { + import flash.geom.Rectangle; + } + + /** + * The ClippingViewport extends the Viewport class and makes + * sure that items extending outside the Container are hidden. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class ClippingViewport extends Viewport implements IBead, IViewport + { + /** + * Constructor + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function ClippingViewport() + { + } + + /** + * @flexjsignorecoercion HTMLElement + */ + COMPILE::JS + override public function set strand(value:IStrand):void + { + super.strand = value; + (contentView.element as HTMLElement).style.overflow = 'hidden'; + } + + private var viewportWidth:Number; + private var viewportHeight:Number; + + /** + * @copy org.apache.flex.core.IViewport + */ + override public function layoutViewportBeforeContentLayout(width:Number, height:Number):void + { + super.layoutViewportBeforeContentLayout(width, height); + viewportWidth = width; + viewportHeight = height; + } + + /** + * @copy org.apache.flex.core.IViewport + */ - override public function layoutViewportAfterContentLayout():Size ++ override public function layoutViewportAfterContentLayout(contentSize:Size):void + { + COMPILE::SWF + { - var contentSize:Size; ++ //var contentSize:Size; + do + { - contentSize = super.layoutViewportAfterContentLayout(); ++ /*contentSize = */super.layoutViewportAfterContentLayout(contentSize); + if (isNaN(viewportHeight)) + viewportHeight = contentSize.height; + if (isNaN(viewportWidth)) + viewportWidth = contentSize.width; + + var host:UIBase = UIBase(_strand); + var visibleWidth:Number; + var visibleHeight:Number; + + var needsLayout:Boolean = false; + // resize content area + if (!isNaN(visibleWidth) || !isNaN(visibleHeight)) + { + if (!isNaN(visibleWidth)) + needsLayout = visibleWidth != contentView.width; + if (!isNaN(visibleHeight)) + needsLayout = visibleHeight != contentView.height; + if (!isNaN(visibleWidth) && !isNaN(visibleHeight)) + contentArea.setWidthAndHeight(visibleWidth, visibleHeight, false); + else if (!isNaN(visibleWidth)) + contentArea.setWidth(visibleWidth, false); + else if (!isNaN(visibleHeight)) + contentArea.setHeight(visibleHeight, false); + } + if (needsLayout) + { + var layout:IBeadLayout = host.getBeadByType(IBeadLayout) as IBeadLayout; + layout.layout(); + } + } while (needsLayout); + + var rect:Rectangle = new Rectangle(0, 0, viewportWidth,viewportHeight); + contentArea.scrollRect = rect; - return contentSize; + + } - COMPILE::JS - { - return new Size(contentView.width, contentView.height); - } + + } + + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ContainerContentArea.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ContainerContentArea.as index 461c57e,6e1bb69..53d9bd5 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ContainerContentArea.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ContainerContentArea.as @@@ -18,29 -18,26 +18,28 @@@ //////////////////////////////////////////////////////////////////////////////// package org.apache.flex.html.supportClasses { -- import org.apache.flex.core.IContentView; ++ import org.apache.flex.core.IBead; ++ import org.apache.flex.core.IStrand; import org.apache.flex.core.UIBase; import org.apache.flex.events.Event; import org.apache.flex.events.IEventDispatcher; - COMPILE::SWF { - import org.apache.flex.core.IChild; - } - ++ import org.apache.flex.core.IChild; ++ import org.apache.flex.core.ILayoutView; + /** * The ContainerContentArea class implements the contentView for -- * a Container. Container's don't always parent their children directly as -- * that makes it harder to handle scrolling. -- * ++ * a Container on the SWF platform. ++ * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ -- public class ContainerContentArea extends UIBase implements IContentView ++ public class ContainerContentArea extends UIBase implements IBead, ILayoutView { /** * Constructor. -- * ++ * * @langversion 3.0 * @playerversion Flash 10.2 * @playerversion AIR 2.6 @@@ -51,39 -48,34 +50,18 @@@ super(); addEventListener("layoutNeeded", forwardEventHandler); } -- ++ ++ protected var host:IStrand; ++ ++ public function set strand(value:IStrand):void ++ { ++ host = value; ++ } ++ private function forwardEventHandler(event:Event):void { if (parent is IEventDispatcher) (parent as IEventDispatcher).dispatchEvent(event); } -- -- /** -- * @copy org.apache.flex.core.IItemRendererParent#removeAllElements() -- * -- * @langversion 3.0 -- * @playerversion Flash 10.2 -- * @playerversion AIR 2.6 -- * @productversion FlexJS 0.0 -- */ -- public function removeAllElements():void -- { -- COMPILE::SWF -- { - var n:Number = numElements; - for (var i:Number = n-1; i >= 0; i--) { - var child:IChild = getElementAt(i); - removeElement(child,false); - } -- removeChildren(0); -- } -- COMPILE::JS -- { -- while (element.hasChildNodes()) -- { -- element.removeChild(element.lastChild); -- } -- } -- } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridButtonBarButtonItemRenderer.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridButtonBarButtonItemRenderer.as index f6663a5,f6663a5..d05036f --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridButtonBarButtonItemRenderer.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridButtonBarButtonItemRenderer.as @@@ -66,6 -66,6 +66,7 @@@ package org.apache.flex.html.supportCla var added:Boolean = false; if (textButton == null) { textButton = new DataGridButtonBarTextButton(); ++ textButton.percentWidth = 100; // listen for clicks on the button and translate them into // an itemClicked event. @@@ -77,5 -77,5 +78,14 @@@ if (added) addElement(textButton); } ++ ++ /** ++ * @private ++ */ ++ COMPILE::JS ++ override public function adjustSize():void ++ { ++ // not neeed for JS platform ++ } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as index bb0fa65,bb0fa65..e612517 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as @@@ -56,6 -56,6 +56,7 @@@ package org.apache.flex.html.supportCla public function DataGridColumnList() { super(); ++ typeNames = "DataGridColumnList"; } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGroup.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGroup.as index f7ebf01,f7ebf01..b6ebb71 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGroup.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGroup.as @@@ -41,7 -41,7 +41,7 @@@ package org.apache.flex.html.supportCla * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ -- public class DataGroup extends ContainerContentArea implements IItemRendererParent, IContentView ++ public class DataGroup extends ContainerContentArea implements IItemRendererParent { /** * Constructor. @@@ -56,55 -56,55 +56,87 @@@ super(); } ++ /* ++ * IItemRendererParent ++ */ ++ /** ++ * @copy org.apache.flex.core.IItemRendererParent#addItemRenderer() * @private ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.8 */ -- override public function addElement(c:IChild, dispatchEvent:Boolean = true):void ++ public function addItemRenderer(renderer:IItemRenderer):void { -- super.addElement(c, dispatchEvent); ++ addElement(renderer, true); var newEvent:ItemAddedEvent = new ItemAddedEvent("itemAdded"); -- newEvent.item = c; ++ newEvent.item = renderer; -- var strand:IEventDispatcher = parent as IEventDispatcher; -- strand.dispatchEvent(newEvent); ++ (host as IEventDispatcher).dispatchEvent(newEvent); } /** ++ * @copy org.apache.flex.core.IItemRendererParent#removeItemRenderer() * @private ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.8 */ -- override public function removeElement(c:IChild, dispatchEvent:Boolean = true):void -- { -- super.removeElement(c, dispatchEvent); ++ public function removeItemRenderer(renderer:IItemRenderer):void ++ { ++ removeElement(renderer, true); var newEvent:ItemRemovedEvent = new ItemRemovedEvent("itemRemoved"); -- newEvent.item = c; ++ newEvent.item = renderer; -- var strand:IEventDispatcher = parent as IEventDispatcher; -- strand.dispatchEvent(newEvent); ++ (host as IEventDispatcher).dispatchEvent(newEvent); } -- -- /** -- * @copy org.apache.flex.core.IItemRendererParent#getItemRendererForIndex() -- * -- * @langversion 3.0 -- * @playerversion Flash 10.2 -- * @playerversion AIR 2.6 -- * @productversion FlexJS 0.0 -- */ -- public function getItemRendererForIndex(index:int):IItemRenderer -- { ++ ++ /** ++ * @copy org.apache.flex.core.IItemRendererParent#removeAllItemRenderers() ++ * @private ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.8 ++ */ ++ public function removeAllItemRenderers():void ++ { ++ while (numElements > 0) { ++ var child:IChild = getElementAt(0); ++ removeItemRenderer(child as IItemRenderer); ++ } ++ } ++ ++ /** ++ * @copy org.apache.flex.core.IItemRendererParent#getItemRendererForIndex() ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.8 ++ */ ++ public function getItemRendererForIndex(index:int):IItemRenderer ++ { if (index < 0 || index >= numElements) return null; -- return getElementAt(index) as IItemRenderer; -- } ++ return getElementAt(index) as IItemRenderer; ++ } /** * Refreshes the itemRenderers. Useful after a size change by the data group. -- * -- * @langversion 3.0 -- * @playerversion Flash 10.2 -- * @playerversion AIR 2.6 -- * @productversion FlexJS 0.0 ++ * ++ * @copy org.apache.flex.core.IItemRendererParent#updateAllItemRenderers() ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.8 */ public function updateAllItemRenderers():void { http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataItemRenderer.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataItemRenderer.as index 8b4ad5b,8b4ad5b..7154689 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataItemRenderer.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataItemRenderer.as @@@ -163,7 -163,7 +163,7 @@@ package org.apache.flex.html.supportCla { element = document.createElement('div') as WrappedHTMLElement; positioner = element; -- positioner.style.position = 'relative'; ++ //positioner.style.position = 'relative'; element.flexjs_wrapper = this; className = 'DataItemRenderer'; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataProviderNotifierBase.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataProviderNotifierBase.as index 0000000,0000000..6c7eb08 new file mode 100644 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataProviderNotifierBase.as @@@ -1,0 -1,0 +1,154 @@@ ++//////////////////////////////////////////////////////////////////////////////// ++// ++// 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.html.supportClasses ++{ ++ import org.apache.flex.core.IBead; ++ import org.apache.flex.core.IBeadModel; ++ import org.apache.flex.core.IDocument; ++ import org.apache.flex.core.ISelectionModel; ++ import org.apache.flex.core.IStrand; ++ import org.apache.flex.core.UIBase; ++ import org.apache.flex.events.IEventDispatcher; ++ import org.apache.flex.events.Event; ++ import org.apache.flex.collections.ArrayList; ++ ++ /** ++ * Base class for all data provider notifiers. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public class DataProviderNotifierBase implements IBead, IDocument ++ { ++ /** ++ * constructor. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function DataProviderNotifierBase() ++ { ++ } ++ ++ protected var dataProvider:ArrayList; ++ ++ protected var _strand:IStrand; ++ ++ /** ++ * @copy org.apache.flex.core.IBead#strand ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function set strand(value:IStrand):void ++ { ++ _strand = value; ++ ++ if (_strand[destinationPropertyName] == null) { ++ var model:IBeadModel = UIBase(_strand).model as IBeadModel; ++ IEventDispatcher(model).addEventListener(changeEventName, destinationChangedHandler); ++ } ++ else { ++ destinationChangedHandler(null); ++ } ++ } ++ ++ protected function destinationChangedHandler(event:Event):void ++ { ++ ++ } ++ ++ protected var document:Object; ++ ++ /** ++ * @private ++ */ ++ public function setDocument(document:Object, id:String = null):void ++ { ++ this.document = document; ++ } ++ ++ private var _destinationPropertyName:String; ++ ++ public function get destinationPropertyName():String ++ { ++ return _destinationPropertyName; ++ } ++ public function set destinationPropertyName(value:String):void ++ { ++ _destinationPropertyName = value; ++ } ++ ++ private var _changeEventName:String; ++ ++ public function get changeEventName():String ++ { ++ return _changeEventName; ++ } ++ public function set changeEventName(value:String):void ++ { ++ _changeEventName = value; ++ } ++ ++ private var _sourceID:String; ++ ++ /** ++ * The ID of the object holding the ArrayList, usually a model. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function get sourceID():String ++ { ++ return _sourceID; ++ } ++ public function set sourceID(value:String):void ++ { ++ _sourceID = value; ++ } ++ ++ private var _propertyName:String; ++ ++ /** ++ * The property in the sourceID that is the ArrayList. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function get propertyName():String ++ { ++ return _propertyName; ++ } ++ ++ public function set propertyName(value:String):void ++ { ++ _propertyName = value; ++ } ++ } ++} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DateChooserHeader.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DateChooserHeader.as index 775a140,0000000..0fde1c9 mode 100644,000000..100644 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DateChooserHeader.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DateChooserHeader.as @@@ -1,66 -1,0 +1,64 @@@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.supportClasses +{ + import org.apache.flex.html.DataContainer; - import org.apache.flex.html.beads.layouts.TileLayout; ++ import org.apache.flex.html.beads.layouts.HorizontalFlexLayout; + + /** + * The DateChooserHeader is the container for the days of the week labels + * in the DateChooser. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class DateChooserHeader extends DataContainer + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function DateChooserHeader() + { + super(); + - tileLayout = new TileLayout(); - tileLayout.numColumns = 7; - addBead(tileLayout); ++ myLayout = new HorizontalFlexLayout(); ++ addBead(myLayout); + } + + /** + * @private + */ - private var tileLayout:TileLayout; ++ private var myLayout:HorizontalFlexLayout; + + /** + * @private + */ + override public function set height(value:Number):void + { + super.height = value; - tileLayout.rowHeight = value; + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as index cacac1e,0000000..de1b304 mode 100644,000000..100644 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as @@@ -1,83 -1,0 +1,84 @@@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.supportClasses +{ + import org.apache.flex.core.ILayoutHost; + import org.apache.flex.core.ILayoutParent; ++ import org.apache.flex.core.ILayoutView; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.IBead; + import org.apache.flex.core.IBeadLayout; + import org.apache.flex.core.IParentIUIBase; + import org.apache.flex.events.Event; + + /** + * The MXMLItemRenderer class is the base class for itemRenderers that are MXML-based + * and provides support for a layout and a data object. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ - public class MXMLItemRenderer extends DataItemRenderer implements ILayoutParent, ILayoutHost, IStrand ++ public class MXMLItemRenderer extends DataItemRenderer implements ILayoutParent, ILayoutHost, IStrand, ILayoutView + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function MXMLItemRenderer() + { + super(); + } - ++ + [Bindable("dataChange")] + override public function set data(value:Object):void + { + if (value != data) + { + super.data = value; + dispatchEvent(new Event("dataChange")); + } + } - ++ + public function getLayoutHost():ILayoutHost + { - return this; ++ return this; + } - - public function get contentView():IParentIUIBase ++ ++ public function get contentView():ILayoutView + { + return this; + } - ++ + override public function adjustSize():void + { + var layout:IBeadLayout = getBeadByType(IBeadLayout) as IBeadLayout; + if (layout != null) { + layout.layout(); + } + } + + + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/PanelLayoutProxy.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/PanelLayoutProxy.as index 0000000,0000000..4ebc174 new file mode 100644 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/PanelLayoutProxy.as @@@ -1,0 -1,0 +1,132 @@@ ++//////////////////////////////////////////////////////////////////////////////// ++// ++// 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.html.supportClasses ++{ ++ import org.apache.flex.core.UIBase; ++ import org.apache.flex.core.ILayoutView; ++ import org.apache.flex.core.IChild; ++ import org.apache.flex.events.IEventDispatcher; ++ ++ import org.apache.flex.html.Panel; ++ ++ COMPILE::JS { ++ import org.apache.flex.core.WrappedHTMLElement; ++ } ++ ++ /** ++ * The PanelLayoutProxy class is used by Panel in order for layouts to operate ++ * on the Panel itself. If Panel were being used, its numElements, getElementAt, etc. ++ * functions would actually redirect to its Container content. In order for a layout ++ * to work on the Panel directly (its TitleBar, Container, and ControlBar children), ++ * this proxy is used which will invoke the Panel's $numElements, $getElementAt, etc ++ * functions. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public class PanelLayoutProxy implements ILayoutView ++ { ++ /** ++ * Constructor. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function PanelLayoutProxy(host:Object) ++ { ++ super(); ++ _host = host; ++ } ++ ++ private var _host:Object; ++ ++ public function get host():Object ++ { ++ return _host; ++ } ++ ++ /** ++ * The width of the bounding box. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function get width():Number { ++ return (host as Panel).width; ++ } ++ ++ /** ++ * The height of the bounding box. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function get height():Number { ++ return (host as Panel).height; ++ } ++ ++ /** ++ * The number of elements in the parent. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function get numElements():int ++ { ++ return (host as Panel).$numElements; ++ } ++ ++ /** ++ * Get a component from the parent. ++ * ++ * @param c The index of the subcomponent. ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function getElementAt(index:int):IChild ++ { ++ return (host as Panel).$getElementAt(index); ++ } ++ ++ COMPILE::JS ++ public function get somethingelse():WrappedHTMLElement ++ { ++ return (host as Panel).element; ++ } ++ ++ COMPILE::JS ++ public function get element():WrappedHTMLElement ++ { ++ return (host as Panel).element; ++ } ++ } ++} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/RadioButtonIcon.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/RadioButtonIcon.as index 119400f,119400f..3c29ae5 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/RadioButtonIcon.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/RadioButtonIcon.as @@@ -101,7 -101,7 +101,7 @@@ package org.apache.flex.html.supportCla element = input as WrappedHTMLElement; positioner = element; -- positioner.style.position = 'relative'; ++ //positioner.style.position = 'relative'; (element as WrappedHTMLElement).flexjs_wrapper = this; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9fd9b78b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as ---------------------------------------------------------------------- diff --cc frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as index 46ba9a6,46ba9a6..444606b --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as @@@ -18,12 -18,12 +18,9 @@@ //////////////////////////////////////////////////////////////////////////////// package org.apache.flex.html.supportClasses { -- COMPILE::SWF -- { -- import flash.geom.Rectangle; -- } import org.apache.flex.core.IBead; import org.apache.flex.core.IBeadLayout; ++ import org.apache.flex.core.IContainer; import org.apache.flex.core.IContentViewHost; import org.apache.flex.core.IParentIUIBase; import org.apache.flex.core.IStrand; @@@ -33,12 -33,12 +30,16 @@@ COMPILE::SWF { import org.apache.flex.core.IViewportScroller; ++ import org.apache.flex.utils.CSSContainerUtils; ++ import flash.geom.Rectangle; ++ import org.apache.flex.geom.Rectangle; } import org.apache.flex.core.UIBase; import org.apache.flex.events.Event; import org.apache.flex.geom.Size; import org.apache.flex.html.beads.ScrollBarView; import org.apache.flex.html.beads.models.ScrollBarModel; ++ import org.apache.flex.geom.Rectangle; /** * The ScrollingViewport extends the Viewport class by adding horizontal and @@@ -51,6 -51,6 +52,71 @@@ * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ ++ COMPILE::JS ++ public class ScrollingViewport extends Viewport implements IBead, IViewport ++ { ++ /** ++ * Constructor ++ * ++ * @langversion 3.0 ++ * @playerversion Flash 10.2 ++ * @playerversion AIR 2.6 ++ * @productversion FlexJS 0.0 ++ */ ++ public function ScrollingViewport() ++ { ++ super(); ++ } ++ ++ public function get verticalScrollPosition():Number ++ { ++ return this.contentView.positioner.scrollTop; ++ } ++ public function set verticalScrollPosition(value:Number):void ++ { ++ this.contentView.positioner.scrollTop = value; ++ } ++ ++ public function get horizontalScrollPosition():Number ++ { ++ return this.contentView.positioner.scrollLeft; ++ } ++ public function set horizontalScrollPosition(value:Number):void ++ { ++ this.contentView.positioner.scrollLeft = value; ++ } ++ ++ /** ++ * @flexjsignorecoercion HTMLElement ++ */ ++ override public function set strand(value:IStrand):void ++ { ++ super.strand = value; ++ if (contentView == null) { ++ (value as UIBase).element.style.overflow = "auto"; ++ } else { ++ (contentView as UIBase).element.style.overflow = "auto"; ++ } ++ } ++ ++ /** ++ * @copy org.apache.flex.core.IViewport ++ */ ++ override public function layoutViewportBeforeContentLayout(width:Number, height:Number):void ++ { ++ // does nothing for the JS platform ++ } ++ ++ /** ++ * @copy org.apache.flex.core.IViewport ++ */ ++ override public function layoutViewportAfterContentLayout(contentSize:Size):void ++ { ++ // does nothing for the JS platform ++ } ++ } ++ ++ COMPILE::SWF public class ScrollingViewport extends Viewport implements IBead, IViewport { /** @@@ -63,88 -63,88 +129,45 @@@ */ public function ScrollingViewport() { ++ super(); } -- COMPILE::SWF private var _verticalScroller:ScrollBar; -- COMPILE::SWF public function get verticalScroller():IViewportScroller { return _verticalScroller; } -- COMPILE::SWF private var _horizontalScroller:ScrollBar -- COMPILE::SWF public function get horizontalScroller():IViewportScroller { return _horizontalScroller; } -- COMPILE::SWF private var _verticalScrollPosition:Number = 0; public function get verticalScrollPosition():Number { -- COMPILE::SWF -- { -- return _verticalScrollPosition; -- } -- COMPILE::JS -- { -- return this.contentView.positioner.scrollTop; -- } ++ return _verticalScrollPosition; } public function set verticalScrollPosition(value:Number):void { -- COMPILE::SWF -- { -- _verticalScrollPosition = value; -- handleVerticalScrollChange(); -- } -- COMPILE::JS -- { -- this.contentView.positioner.scrollTop = value; -- } ++ _verticalScrollPosition = value; ++ handleVerticalScrollChange(); } -- COMPILE::SWF private var _horizontalScrollPosition:Number = 0; public function get horizontalScrollPosition():Number { -- COMPILE::SWF -- { -- return _horizontalScrollPosition; -- } -- COMPILE::JS -- { -- return this.contentView.positioner.scrollLeft; -- } ++ return _horizontalScrollPosition; } public function set horizontalScrollPosition(value:Number):void { -- COMPILE::SWF -- { -- _horizontalScrollPosition = value; -- handleHorizontalScrollChange(); -- } -- COMPILE::JS -- { -- this.contentView.positioner.scrollLeft = value; -- } -- } -- -- /** -- * @flexjsignorecoercion HTMLElement -- */ -- COMPILE::JS -- override public function set strand(value:IStrand):void -- { -- super.strand = value; -- (contentView.element as HTMLElement).style.overflow = 'auto'; ++ _horizontalScrollPosition = value; ++ handleHorizontalScrollChange(); } private var viewportWidth:Number; @@@ -155,127 -155,127 +178,90 @@@ */ override public function layoutViewportBeforeContentLayout(width:Number, height:Number):void { -- super.layoutViewportBeforeContentLayout(width, height); -- viewportWidth = width; -- viewportHeight = height; ++ super.layoutViewportBeforeContentLayout(width, height); ++ viewportWidth = width; ++ viewportHeight = height; } /** * @copy org.apache.flex.core.IViewport */ -- override public function layoutViewportAfterContentLayout():Size ++ override public function layoutViewportAfterContentLayout(contentSize:Size):void { -- COMPILE::SWF -- { -- var hadV:Boolean = _verticalScroller != null && _verticalScroller.visible; -- var hadH:Boolean = _horizontalScroller != null && _horizontalScroller.visible; -- var contentSize:Size; -- do -- { -- contentSize = super.layoutViewportAfterContentLayout(); -- if (isNaN(viewportHeight)) -- viewportHeight = contentSize.height; -- if (isNaN(viewportWidth)) -- viewportWidth = contentSize.width; -- -- var host:UIBase = UIBase(_strand); -- var visibleWidth:Number; -- var visibleHeight:Number; -- var needV:Boolean = contentSize.height > viewportHeight; -- var needH:Boolean = contentSize.width > viewportWidth; -- -- if (needV) -- { -- if (_verticalScroller == null) { -- _verticalScroller = createVerticalScrollBar(); -- (host as IContentViewHost).strandChildren.addElement(_verticalScroller); -- } -- } -- if (needH) -- { -- if (_horizontalScroller == null) { -- _horizontalScroller = createHorizontalScrollBar(); -- (host as IContentViewHost).strandChildren.addElement(_horizontalScroller); -- } -- } -- -- if (needV) -- { -- _verticalScroller.visible = true; -- _verticalScroller.x = contentArea.x + viewportWidth - _verticalScroller.width; -- _verticalScroller.y = contentArea.y; -- _verticalScroller.setHeight(viewportHeight - (needH ? _horizontalScroller.height : 0), true); -- visibleWidth = _verticalScroller.x; -- } -- else if (_verticalScroller) -- _verticalScroller.visible = false; -- -- if (needH) -- { -- _horizontalScroller.visible = true; -- _horizontalScroller.x = contentArea.x; -- _horizontalScroller.y = contentArea.y + viewportHeight - _horizontalScroller.height; -- _horizontalScroller.setWidth(viewportWidth - (needV ? _verticalScroller.width : 0), true); -- visibleHeight = _horizontalScroller.y; -- } -- -- var needsLayout:Boolean = false; -- // resize content area if needed to get out from under scrollbars -- if (!isNaN(visibleWidth) || !isNaN(visibleHeight)) -- { -- if (!isNaN(visibleWidth)) -- needsLayout = visibleWidth != contentView.width; -- if (!isNaN(visibleHeight)) -- needsLayout = visibleHeight != contentView.height; -- if (!isNaN(visibleWidth) && !isNaN(visibleHeight)) -- contentArea.setWidthAndHeight(visibleWidth, visibleHeight, false); -- else if (!isNaN(visibleWidth)) -- contentArea.setWidth(visibleWidth, false); -- else if (!isNaN(visibleHeight)) -- contentArea.setHeight(visibleHeight, false); -- } -- if (needsLayout) -- { -- var layout:IBeadLayout = host.getBeadByType(IBeadLayout) as IBeadLayout; -- layout.layout(); -- } -- } while (needsLayout && (needV != hadV || needH == hadH)); -- if (_verticalScroller) -- { -- ScrollBarModel(_verticalScroller.model).maximum = contentSize.height; -- ScrollBarModel(_verticalScroller.model).pageSize = contentArea.height; -- ScrollBarModel(_verticalScroller.model).pageStepSize = contentArea.height; -- if (contentSize.height > contentArea.height && -- (contentSize.height - contentArea.height) < _verticalScrollPosition) -- _verticalScrollPosition = contentSize.height - contentArea.height; -- } -- if (_horizontalScroller) -- { -- ScrollBarModel(_horizontalScroller.model).maximum = contentSize.width; -- ScrollBarModel(_horizontalScroller.model).pageSize = contentArea.width; -- ScrollBarModel(_horizontalScroller.model).pageStepSize = contentArea.width; -- if (contentSize.width > contentArea.width && -- (contentSize.width - contentArea.width) < _horizontalScrollPosition) -- _horizontalScrollPosition = contentSize.width - contentArea.width; -- } -- -- var rect:Rectangle = new Rectangle(_horizontalScrollPosition, _verticalScrollPosition, -- (_verticalScroller != null && _verticalScroller.visible) ? -- _verticalScroller.x : viewportWidth, -- (_horizontalScroller != null && _horizontalScroller.visible) ? -- _horizontalScroller.y : viewportHeight); -- contentArea.scrollRect = rect; -- return contentSize; -- -- } -- COMPILE::JS -- { -- return new Size(contentView.width, contentView.height); -- } -- ++ var hadV:Boolean = _verticalScroller != null && _verticalScroller.visible; ++ var hadH:Boolean = _horizontalScroller != null && _horizontalScroller.visible; ++ ++ var hostWidth:Number = UIBase(_strand).width; ++ var hostHeight:Number = UIBase(_strand).height; ++ ++ var borderMetrics:org.apache.flex.geom.Rectangle = CSSContainerUtils.getBorderMetrics(_strand); ++ ++ hostWidth -= borderMetrics.left + borderMetrics.right; ++ hostHeight -= borderMetrics.top + borderMetrics.bottom; ++ ++ var needV:Boolean = contentSize.height > viewportHeight; ++ var needH:Boolean = contentSize.width > viewportWidth; ++ ++ if (needV) ++ { ++ if (_verticalScroller == null) { ++ _verticalScroller = createVerticalScrollBar(); ++ (_strand as IContainer).strandChildren.addElement(_verticalScroller); ++ } ++ } ++ if (needH) ++ { ++ if (_horizontalScroller == null) { ++ _horizontalScroller = createHorizontalScrollBar(); ++ (_strand as IContainer).strandChildren.addElement(_horizontalScroller); ++ } ++ } ++ ++ if (needV) ++ { ++ _verticalScroller.visible = true; ++ _verticalScroller.x = UIBase(_strand).width - borderMetrics.right - _verticalScroller.width; ++ _verticalScroller.y = borderMetrics.top; ++ _verticalScroller.setHeight(hostHeight - (needH ? _horizontalScroller.height : 0), true); ++ ++ ScrollBarModel(_verticalScroller.model).maximum = contentSize.height; ++ ScrollBarModel(_verticalScroller.model).pageSize = contentArea.height; ++ ScrollBarModel(_verticalScroller.model).pageStepSize = contentArea.height; ++ ++ if (contentSize.height > contentArea.height && ++ (contentSize.height - contentArea.height) < _verticalScrollPosition) ++ _verticalScrollPosition = contentSize.height - contentArea.height; ++ } ++ else if (_verticalScroller) { ++ _verticalScroller.visible = false; ++ } ++ ++ if (needH) ++ { ++ _horizontalScroller.visible = true; ++ _horizontalScroller.x = 0; ++ _horizontalScroller.y = UIBase(_strand).height - borderMetrics.bottom - _horizontalScroller.height; ++ _horizontalScroller.setWidth(hostWidth - (needV ? _verticalScroller.width : 0), true); ++ ++ ScrollBarModel(_horizontalScroller.model).maximum = contentSize.width; ++ ScrollBarModel(_horizontalScroller.model).pageSize = contentArea.width; ++ ScrollBarModel(_horizontalScroller.model).pageStepSize = contentArea.width; ++ ++ if (contentSize.width > contentArea.width && ++ (contentSize.width - contentArea.width) < _horizontalScrollPosition) ++ _horizontalScrollPosition = contentSize.width - contentArea.width; ++ } ++ else if (_horizontalScroller) { ++ _horizontalScroller.visible = false; ++ } ++ ++ var rect:flash.geom.Rectangle = new flash.geom.Rectangle(_horizontalScrollPosition, _verticalScrollPosition, ++ (_verticalScroller != null && _verticalScroller.visible) ? _verticalScroller.x : hostWidth, ++ (_horizontalScroller != null && _horizontalScroller.visible) ? _horizontalScroller.y : hostHeight); ++ ++ contentArea.scrollRect = rect; } -- COMPILE::SWF private function createVerticalScrollBar():ScrollBar { var vsbm:ScrollBarModel = new ScrollBarModel(); @@@ -293,7 -293,7 +279,6 @@@ return vsb; } -- COMPILE::SWF private function createHorizontalScrollBar():ScrollBar { var hsbm:ScrollBarModel = new ScrollBarModel(); @@@ -311,31 -311,31 +296,28 @@@ return hsb; } -- COMPILE::SWF private function handleVerticalScroll(event:Event):void { var host:UIBase = UIBase(_strand); var vpos:Number = ScrollBarModel(_verticalScroller.model).value; -- var rect:Rectangle = contentArea.scrollRect; ++ var rect:flash.geom.Rectangle = contentArea.scrollRect; rect.y = vpos; contentArea.scrollRect = rect; _verticalScrollPosition = vpos; } -- COMPILE::SWF private function handleHorizontalScroll(event:Event):void { var host:UIBase = UIBase(_strand); var hpos:Number = ScrollBarModel(_horizontalScroller.model).value; -- var rect:Rectangle = contentArea.scrollRect; ++ var rect:flash.geom.Rectangle = contentArea.scrollRect; rect.x = hpos; contentArea.scrollRect = rect; _horizontalScrollPosition = hpos; } -- COMPILE::SWF private function handleVerticalScrollChange():void { if (_verticalScroller) { @@@ -343,7 -343,7 +325,6 @@@ } } -- COMPILE::SWF private function handleHorizontalScrollChange():void { if (_horizontalScroller) {
