Created MXMLItemRenderer, a new base class for MXML-based item renderers. Created new protocol, ILayoutParent, to support using layouts in components other than Container.
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/5f8b1654 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/5f8b1654 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/5f8b1654 Branch: refs/heads/feature-autobuild/closure-classpath-sources Commit: 5f8b1654fe44fdc6821c3666a5d112648b1e9be0 Parents: 4c78873 Author: Peter Ent <p...@apache.org> Authored: Tue Nov 1 15:26:28 2016 -0400 Committer: Peter Ent <p...@apache.org> Committed: Tue Nov 1 15:26:28 2016 -0400 ---------------------------------------------------------------------- .../projects/Core/src/main/flex/CoreClasses.as | 1 + .../flex/org/apache/flex/core/ILayoutParent.as | 34 +++++++++ .../main/flex/org/apache/flex/core/ListBase.as | 11 ++- .../main/flex/org/apache/flex/core/ViewBase.as | 16 ++++- .../main/flex/org/apache/flex/html/Container.as | 9 ++- .../DataItemRendererFactoryForArrayData.as | 3 +- .../DataItemRendererFactoryForArrayList.as | 2 +- .../DataItemRendererFactoryForColumnData.as | 2 +- .../flex/html/beads/layouts/BasicLayout.as | 7 +- .../FlexibleFirstChildHorizontalLayout.as | 5 +- .../flex/html/beads/layouts/HorizontalLayout.as | 6 +- .../layouts/OneFlexibleChildHorizontalLayout.as | 6 +- .../layouts/OneFlexibleChildVerticalLayout.as | 5 +- .../flex/html/beads/layouts/TileLayout.as | 9 +-- .../html/beads/layouts/VerticalColumnLayout.as | 5 +- .../flex/html/beads/layouts/VerticalLayout.as | 5 +- .../html/supportClasses/MXMLItemRenderer.as | 72 ++++++++++++++++++++ .../html/supportClasses/UIItemRendererBase.as | 7 +- .../HTML/src/main/resources/basic-manifest.xml | 1 + 19 files changed, 182 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/Core/src/main/flex/CoreClasses.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/CoreClasses.as b/frameworks/projects/Core/src/main/flex/CoreClasses.as index 3e86f1c..232c9b3 100644 --- a/frameworks/projects/Core/src/main/flex/CoreClasses.as +++ b/frameworks/projects/Core/src/main/flex/CoreClasses.as @@ -62,6 +62,7 @@ internal class CoreClasses import org.apache.flex.core.IItemRendererProvider; IItemRendererProvider; import org.apache.flex.core.ILayoutChild; ILayoutChild; import org.apache.flex.core.ILayoutHost; ILayoutHost; + import org.apache.flex.core.ILayoutParent; ILayoutParent; import org.apache.flex.core.IListPresentationModel; IListPresentationModel; import org.apache.flex.core.IPanelModel; IPanelModel; import org.apache.flex.core.IParent; IParent; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ILayoutParent.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ILayoutParent.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ILayoutParent.as new file mode 100644 index 0000000..1e6c9bd --- /dev/null +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ILayoutParent.as @@ -0,0 +1,34 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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 +{ + /** + * The ILayoutParent interface is implemented by those components + * that allow their children to be manipulated by a layout. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public interface ILayoutParent + { + function getLayoutHost():ILayoutHost; + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ListBase.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ListBase.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ListBase.as index dbdcace..07139c5 100644 --- a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ListBase.as +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ListBase.as @@ -20,6 +20,7 @@ package org.apache.flex.core { import org.apache.flex.core.IMXMLDocument; import org.apache.flex.core.ValuesManager; + import org.apache.flex.core.ILayoutParent; import org.apache.flex.events.Event; import org.apache.flex.events.ValueChangeEvent; import org.apache.flex.states.State; @@ -34,7 +35,7 @@ package org.apache.flex.core * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public class ListBase extends UIBase implements IContentViewHost + public class ListBase extends UIBase implements IContentViewHost, ILayoutParent { /** * Constructor. @@ -63,6 +64,14 @@ package org.apache.flex.core /** * @private + */ + public function getLayoutHost():ILayoutHost + { + return view as ILayoutHost; + } + + /** + * @private * @suppress {undefinedNames} * Support strandChildren. */ http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ViewBase.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ViewBase.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ViewBase.as index 7e4b65e..73092af 100644 --- a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ViewBase.as +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ViewBase.as @@ -48,7 +48,7 @@ package org.apache.flex.core * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public class ViewBase extends ContainerBase implements IPopUpHost, IApplicationView + public class ViewBase extends ContainerBase implements IPopUpHost, IApplicationView, ILayoutParent { /** * Constructor. @@ -92,6 +92,20 @@ package org.apache.flex.core _applicationModel = value; dispatchEvent(new Event("modelChanged")); } + + /** + * Implements the ILayoutParent protocol by returning the bead that + * is acting as the host for layout. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function getLayoutHost():ILayoutHost + { + return getBeadByType(ILayoutHost) as ILayoutHost; + } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Container.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Container.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Container.as index ee30b7f..6d2e655 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Container.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Container.as @@ -21,6 +21,8 @@ package org.apache.flex.html import org.apache.flex.core.ContainerBase; import org.apache.flex.core.IChrome; import org.apache.flex.core.IContainer; + import org.apache.flex.core.ILayoutParent; + import org.apache.flex.core.ILayoutHost; import org.apache.flex.core.IUIBase; COMPILE::JS { @@ -65,7 +67,7 @@ package org.apache.flex.html * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public class Container extends ContainerBase + public class Container extends ContainerBase implements ILayoutParent { /** * Constructor. @@ -79,6 +81,11 @@ package org.apache.flex.html { super(); } + + public function getLayoutHost():ILayoutHost + { + return view as ILayoutHost; + } /** * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as index fdfd9b3..36a151f 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayData.as @@ -154,6 +154,7 @@ package org.apache.flex.html.beads for (var i:int = 0; i < n; i++) { var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer; + dataGroup.addElement(ir); ir.index = i; ir.labelField = labelField; if (presentationModel) { @@ -161,8 +162,8 @@ package org.apache.flex.html.beads style.marginBottom = presentationModel.separatorThickness; UIBase(ir).style = style; UIBase(ir).height = presentationModel.rowHeight; + UIBase(ir).percentWidth = 100; } - dataGroup.addElement(ir); ir.data = dp[i]; var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED); http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as index 42b159c..41af5b1 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForArrayList.as @@ -171,6 +171,7 @@ package org.apache.flex.html.beads for (var i:int = 0; i < n; i++) { var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer; + dataGroup.addElement(ir); if (presentationModel) { UIBase(ir).height = presentationModel.rowHeight; @@ -180,7 +181,6 @@ package org.apache.flex.html.beads style.left = 0; UIBase(ir).style = style; } - dataGroup.addElement(ir); setData(ir, dp.getItemAt(i), i); var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED); http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForColumnData.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForColumnData.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForColumnData.as index d399cfb..43c5c33 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForColumnData.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataItemRendererFactoryForColumnData.as @@ -130,9 +130,9 @@ package org.apache.flex.html.beads for (var i:int = 0; i < n; i++) { var tf:DataItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as DataItemRenderer; + dataGroup.addElement(tf); tf.index = i; tf.labelField = view.column.dataField; - dataGroup.addElement(tf); tf.data = dp[i]; } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/BasicLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/BasicLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/BasicLayout.as index b566354..809b259 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/BasicLayout.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/BasicLayout.as @@ -22,6 +22,7 @@ package org.apache.flex.html.beads.layouts import org.apache.flex.core.IBeadLayout; import org.apache.flex.core.ILayoutChild; import org.apache.flex.core.ILayoutHost; + import org.apache.flex.core.ILayoutParent; import org.apache.flex.core.IParentIUIBase; import org.apache.flex.core.IStrand; import org.apache.flex.core.IUIBase; @@ -85,7 +86,7 @@ package org.apache.flex.html.beads.layouts COMPILE::SWF { //trace(DOMPathUtil.getPath(host), event ? event.type : "fixed size"); - var layoutParent:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; + var layoutParent:ILayoutHost = (host as ILayoutParent).getLayoutHost(); var contentView:IParentIUIBase = layoutParent ? layoutParent.contentView : IParentIUIBase(host); var gotMargin:Boolean; @@ -109,6 +110,7 @@ package org.apache.flex.html.beads.layouts for (var i:int = 0; i < n; i++) { var child:IUIBase = contentView.getElementAt(i) as IUIBase; + if (child == null || !child.visible) continue; var left:Number = ValuesManager.valuesImpl.getValue(child, "left"); var right:Number = ValuesManager.valuesImpl.getValue(child, "right"); var top:Number = ValuesManager.valuesImpl.getValue(child, "top"); @@ -379,7 +381,7 @@ package org.apache.flex.html.beads.layouts var h:Number; var w:Number; - var viewBead:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; + var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost(); var contentView:IParentIUIBase = viewBead.contentView; w = contentView.width; var hasWidth:Boolean = !host.isWidthSizedToContent(); @@ -390,6 +392,7 @@ package org.apache.flex.html.beads.layouts n = contentView.numElements; for (i = 0; i < n; i++) { var child:UIBase = contentView.getElementAt(i) as UIBase; + if (child == null || !child.visible) continue; child.setDisplayStyleForLayout('block'); var left:Number = org.apache.flex.core.ValuesManager.valuesImpl.getValue(child, 'left'); var right:Number = org.apache.flex.core.ValuesManager.valuesImpl.getValue(child, 'right'); http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as index 4198fea..13d4092 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/FlexibleFirstChildHorizontalLayout.as @@ -21,6 +21,7 @@ package org.apache.flex.html.beads.layouts import org.apache.flex.core.IBeadLayout; import org.apache.flex.core.ILayoutChild; import org.apache.flex.core.ILayoutHost; + import org.apache.flex.core.ILayoutParent; import org.apache.flex.core.IParentIUIBase; import org.apache.flex.core.IStrand; import org.apache.flex.core.IUIBase; @@ -130,7 +131,7 @@ package org.apache.flex.html.beads.layouts */ public function layout():Boolean { - var layoutParent:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; + var layoutParent:ILayoutHost = (host as ILayoutParent).getLayoutHost(); var contentView:IParentIUIBase = layoutParent.contentView as IParentIUIBase; var padding:Rectangle = CSSContainerUtils.getPaddingMetrics(host); var hostSizedToContent:Boolean = host.isHeightSizedToContent(); @@ -152,6 +153,7 @@ package org.apache.flex.html.beads.layouts for (var i:int = n - 1; i >= 0; i--) { var child:IUIBase = contentView.getElementAt(i) as IUIBase; + if (child == null || !child.visible) continue; margin = ValuesManager.valuesImpl.getValue(child, "margin"); if (margin is Array) { @@ -226,6 +228,7 @@ package org.apache.flex.html.beads.layouts { var obj:Object = verticalMargins[0] child = contentView.getElementAt(i) as IUIBase; + if (child == null || !child.visible) continue; if (obj.valign == "middle") child.y = (maxHeight - child.height) / 2; else if (valign == "bottom") http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalLayout.as index 225e0ac..9c01ba5 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalLayout.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/HorizontalLayout.as @@ -22,6 +22,7 @@ package org.apache.flex.html.beads.layouts 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.IParentIUIBase; import org.apache.flex.core.IStrand; import org.apache.flex.core.IUIBase; @@ -93,7 +94,7 @@ package org.apache.flex.html.beads.layouts COMPILE::SWF { //trace(DOMPathUtil.getPath(host), event ? event.type : "fixed size"); - var layoutParent:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; + var layoutParent:ILayoutHost = (host as ILayoutParent).getLayoutHost(); //host.getBeadByType(ILayoutHost) as ILayoutHost; var contentView:IParentIUIBase = layoutParent.contentView; var padding:Rectangle = CSSContainerUtils.getPaddingMetrics(host); @@ -211,7 +212,7 @@ package org.apache.flex.html.beads.layouts var i:int; var n:int; - var viewBead:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; + var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost(); var contentView:IParentIUIBase = viewBead.contentView; children = contentView.internalChildren(); var hasHeight:Boolean = !host.isHeightSizedToContent(); @@ -222,6 +223,7 @@ package org.apache.flex.html.beads.layouts for (i = 0; i < n; i++) { var child:WrappedHTMLElement = children[i] as WrappedHTMLElement; + if (child == null) continue; child.flexjs_wrapper.internalDisplay = 'inline-block'; if (child.style.display == 'none') child.flexjs_wrapper.setDisplayStyleForLayout('inline-block'); http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as index c052442..aedc3dc 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildHorizontalLayout.as @@ -22,6 +22,7 @@ package org.apache.flex.html.beads.layouts import org.apache.flex.core.IDocument; import org.apache.flex.core.ILayoutChild; import org.apache.flex.core.ILayoutHost; + import org.apache.flex.core.ILayoutParent; import org.apache.flex.core.IParentIUIBase; import org.apache.flex.core.IStrand; import org.apache.flex.core.IUIBase; @@ -148,7 +149,7 @@ package org.apache.flex.html.beads.layouts */ public function layout():Boolean { - var layoutParent:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; + var layoutParent:ILayoutHost = (host as ILayoutParent).getLayoutHost(); //host.getBeadByType(ILayoutHost) as ILayoutHost; var contentView:IParentIUIBase = layoutParent ? layoutParent.contentView : IParentIUIBase(host); var padding:Rectangle = CSSContainerUtils.getPaddingMetrics(host); actualChild = document[flexibleChild]; @@ -179,6 +180,7 @@ package org.apache.flex.html.beads.layouts for (var i:int = 0; i < n; i++) { var child:IUIBase = contentView.getElementAt(i) as IUIBase; + if (child == null || !child.visible) continue; if (child == actualChild) { flexChildIndex = i; @@ -213,6 +215,7 @@ package org.apache.flex.html.beads.layouts for (i = n - 1; i > flexChildIndex; i--) { child = contentView.getElementAt(i) as IUIBase; + if (child == null || !child.visible) continue; margin = ValuesManager.valuesImpl.getValue(child, "margin"); marginLeft = ValuesManager.valuesImpl.getValue(child, "margin-left"); marginTop = ValuesManager.valuesImpl.getValue(child, "margin-top"); @@ -266,6 +269,7 @@ package org.apache.flex.html.beads.layouts { var obj:Object = verticalMargins[i] child = contentView.getElementAt(i) as IUIBase; + if (child == null || !child.visible) continue; setPositionAndHeight(child, obj.top, obj.marginTop, padding.top, obj.bottom, obj.marginBottom, padding.bottom, maxHeight, obj.valign); } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayout.as index 77af305..3e964d2 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayout.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/OneFlexibleChildVerticalLayout.as @@ -22,6 +22,7 @@ package org.apache.flex.html.beads.layouts import org.apache.flex.core.IDocument; import org.apache.flex.core.ILayoutChild; import org.apache.flex.core.ILayoutHost; + import org.apache.flex.core.ILayoutParent; import org.apache.flex.core.IParentIUIBase; import org.apache.flex.core.IStrand; import org.apache.flex.core.IUIBase; @@ -147,7 +148,7 @@ package org.apache.flex.html.beads.layouts */ public function layout():Boolean { - var layoutParent:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; + var layoutParent:ILayoutHost = (host as ILayoutParent).getLayoutHost(); var contentView:IParentIUIBase = layoutParent ? layoutParent.contentView : IParentIUIBase(host); var padding:Rectangle = CSSContainerUtils.getPaddingMetrics(host); actualChild = document[flexibleChild]; @@ -178,6 +179,7 @@ package org.apache.flex.html.beads.layouts for (var i:int = 0; i < n; i++) { var child:IUIBase = contentView.getElementAt(i) as IUIBase; + if (child == null || !child.visible) continue; ilc = child as ILayoutChild; left = ValuesManager.valuesImpl.getValue(child, "left"); right = ValuesManager.valuesImpl.getValue(child, "right"); @@ -260,6 +262,7 @@ package org.apache.flex.html.beads.layouts for (i = n - 1; i > flexChildIndex; i--) { child = contentView.getElementAt(i) as IUIBase; + if (child == null || !child.visible) continue; ilc = child as ILayoutChild; left = ValuesManager.valuesImpl.getValue(child, "left"); right = ValuesManager.valuesImpl.getValue(child, "right"); http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TileLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TileLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TileLayout.as index a7917ff..ff869b4 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TileLayout.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TileLayout.as @@ -20,6 +20,7 @@ package org.apache.flex.html.beads.layouts { import org.apache.flex.core.IBeadLayout; import org.apache.flex.core.ILayoutHost; + import org.apache.flex.core.ILayoutParent; import org.apache.flex.core.IParentIUIBase; import org.apache.flex.core.IStrand; import org.apache.flex.core.IUIBase; @@ -135,7 +136,7 @@ package org.apache.flex.html.beads.layouts { // this is where the layout is calculated var host:UIBase = _strand as UIBase; - var p:ILayoutHost = _strand.getBeadByType(ILayoutHost) as ILayoutHost; + var p:ILayoutHost = (host as ILayoutParent).getLayoutHost(); var area:UIBase = p.contentView as UIBase; var xpos:Number = 0; @@ -149,7 +150,7 @@ package org.apache.flex.html.beads.layouts for(var j:int=0; j < n; j++) { var testChild:IUIBase = area.getElementAt(i) as IUIBase; - if (testChild && !testChild.visible) realN--; + if (testChild || !testChild.visible) realN--; } if (isNaN(useWidth)) useWidth = Math.floor(host.width / numColumns); // + gap @@ -165,7 +166,7 @@ package org.apache.flex.html.beads.layouts for(var i:int=0; i < n; i++) { var child:IUIBase = area.getElementAt(i) as IUIBase; - if (child && !child.visible) continue; + if (child == null || !child.visible) continue; child.width = useWidth; child.height = useHeight; child.x = xpos; @@ -206,7 +207,7 @@ package org.apache.flex.html.beads.layouts var useHeight:Number; var host:UIBase = _strand as UIBase; - var viewBead:ILayoutHost = _strand.getBeadByType(ILayoutHost) as ILayoutHost; + var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost(); var contentView:IParentIUIBase = viewBead.contentView; children = contentView.internalChildren(); n = children.length; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as index 6eaa30a..0d02425 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalColumnLayout.as @@ -21,6 +21,7 @@ package org.apache.flex.html.beads.layouts import org.apache.flex.core.IBeadLayout; import org.apache.flex.core.IContainer; import org.apache.flex.core.ILayoutHost; + import org.apache.flex.core.ILayoutParent; import org.apache.flex.core.IMeasurementBead; import org.apache.flex.core.IParent; import org.apache.flex.core.IStrand; @@ -98,7 +99,7 @@ package org.apache.flex.html.beads.layouts public function layout():Boolean { var host:UIBase = UIBase(_strand); - var layoutParent:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; + var layoutParent:ILayoutHost = (host as ILayoutParent).getLayoutHost(); var contentView:IParent = layoutParent.contentView; var padding:Rectangle = CSSContainerUtils.getPaddingMetrics(host); var sw:Number = host.width; @@ -130,6 +131,7 @@ package org.apache.flex.html.beads.layouts // determine max widths of columns for (i = 0; i < n; i++) { e = contentView.getElementAt(i) as IUIBase; + if (e == null || !e.visible) continue; margin = ValuesManager.valuesImpl.getValue(e, "margin"); marginLeft = ValuesManager.valuesImpl.getValue(e, "margin-left"); marginTop = ValuesManager.valuesImpl.getValue(e, "margin-top"); @@ -172,6 +174,7 @@ package org.apache.flex.html.beads.layouts for (i = 0; i < n; i++) { e = contentView.getElementAt(i) as IUIBase; + if (e == null || !e.visible) continue; e.x = curx + ml; e.y = cury + data[i].mt; curx += columns[col++]; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as index dd02989..c8970ba 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/VerticalLayout.as @@ -22,6 +22,7 @@ package org.apache.flex.html.beads.layouts 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.IParentIUIBase; import org.apache.flex.core.IStrand; import org.apache.flex.core.IUIBase; @@ -92,7 +93,7 @@ package org.apache.flex.html.beads.layouts { COMPILE::SWF { - var layoutParent:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; + var layoutParent:ILayoutHost = (host as ILayoutParent).getLayoutHost(); var contentView:IParentIUIBase = layoutParent ? layoutParent.contentView : IParentIUIBase(host); var padding:Rectangle = CSSContainerUtils.getPaddingMetrics(host); @@ -269,7 +270,7 @@ package org.apache.flex.html.beads.layouts var i:int; var n:int; - var viewBead:ILayoutHost = host.getBeadByType(ILayoutHost) as ILayoutHost; + var viewBead:ILayoutHost = (host as ILayoutParent).getLayoutHost(); var contentView:IParentIUIBase = viewBead.contentView; children = contentView.internalChildren(); var scv:Object = getComputedStyle(host.positioner); http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as new file mode 100644 index 0000000..70b4849 --- /dev/null +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/MXMLItemRenderer.as @@ -0,0 +1,72 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.IStrand; + import org.apache.flex.core.IBead; + import org.apache.flex.core.IBeadLayout; + import org.apache.flex.core.IParentIUIBase; + + /** + * 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 + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function MXMLItemRenderer() + { + super(); + } + + public function getLayoutHost():ILayoutHost + { + return this; + } + + public function get contentView():IParentIUIBase + { + 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/5f8b1654/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/UIItemRendererBase.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/UIItemRendererBase.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/UIItemRendererBase.as index f253bd2..d7826de 100644 --- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/UIItemRendererBase.as +++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/UIItemRendererBase.as @@ -55,6 +55,9 @@ package org.apache.flex.html.supportClasses */ override public function addedToParent():void { + MXMLDataInterpreter.generateMXMLProperties(this, mxmlProperties); + MXMLDataInterpreter.generateMXMLInstances(this, this, MXMLDescriptor); + super.addedToParent(); // very common for item renderers to be resized by their containers, @@ -64,10 +67,6 @@ package org.apache.flex.html.supportClasses // each MXML file can also have styles in fx:Style block ValuesManager.valuesImpl.init(this); - - MXMLDataInterpreter.generateMXMLProperties(this, mxmlProperties); - MXMLDataInterpreter.generateMXMLInstances(this, this, MXMLDescriptor); - dispatchEvent(new Event("initBindings")); dispatchEvent(new Event("initComplete")); http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f8b1654/frameworks/projects/HTML/src/main/resources/basic-manifest.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml index 6737a40..624438f 100644 --- a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml +++ b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml @@ -69,6 +69,7 @@ <component id="StringItemRenderer" class="org.apache.flex.html.supportClasses.StringItemRenderer"/> <component id="TreeItemRenderer" class="org.apache.flex.html.supportClasses.TreeItemRenderer"/> <component id="DataItemRenderer" class="org.apache.flex.html.supportClasses.DataItemRenderer"/> + <component id="MXMLItemRenderer" class="org.apache.flex.html.supportClasses.MXMLItemRenderer"/> <component id="ButtonBarButtonItemRenderer" class="org.apache.flex.html.supportClasses.ButtonBarButtonItemRenderer"/> <!-- <component id="TextFieldItemRenderer" class="org.apache.flex.html.supportClasses.TextFieldItemRenderer"/>