more attempts to get Application and Label to compile
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/c4cb764e Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/c4cb764e Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/c4cb764e Branch: refs/heads/spark Commit: c4cb764ebc7011ee97fb870834ab7a5cb8aff9fc Parents: dc36448 Author: Alex Harui <[email protected]> Authored: Thu May 26 15:45:09 2016 -0700 Committer: Alex Harui <[email protected]> Committed: Thu May 26 16:04:24 2016 -0700 ---------------------------------------------------------------------- .../mx/containers/errors/ConstraintError.as | 58 + .../utilityClasses/ApplicationLayout.as | 116 ++ .../mx/containers/utilityClasses/BoxLayout.as | 20 +- .../flex/mx/containers/utilityClasses/Flex.as | 696 +++++++ .../containers/utilityClasses/FlexChildInfo.as | 142 ++ .../utilityClasses/IConstraintLayout.as | 99 + .../mx/controls/listClasses/BaseListData.as | 233 +++ .../listClasses/IDropInListItemRenderer.as | 163 ++ .../controls/listClasses/IListItemRenderer.as | 79 + .../flex/mx/controls/scrollClasses/ScrollBar.as | 1719 ------------------ .../MX/src/main/flex/mx/core/Application.as | 22 +- .../MX/src/main/flex/mx/core/Container.as | 207 ++- .../flex/mx/core/ContainerRawChildrenList.as | 227 +++ .../MX/src/main/flex/mx/core/IContainer.as | 4 + .../MX/src/main/flex/mx/core/IDataRenderer.as | 103 ++ .../src/main/flex/mx/core/INavigatorContent.as | 67 + .../main/flex/mx/events/IndexChangedEvent.as | 310 ++++ .../flex/mx/managers/IActiveWindowManager.as | 100 + .../styles/metadata/ModalTransparencyStyles.as | 80 + .../MX/src/main/flex/mx/utils/LoaderUtil.as | 658 +++++++ 20 files changed, 3329 insertions(+), 1774 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/containers/errors/ConstraintError.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MX/src/main/flex/mx/containers/errors/ConstraintError.as b/frameworks/projects/MX/src/main/flex/mx/containers/errors/ConstraintError.as new file mode 100644 index 0000000..136fa55 --- /dev/null +++ b/frameworks/projects/MX/src/main/flex/mx/containers/errors/ConstraintError.as @@ -0,0 +1,58 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +package mx.containers.errors +{ + +/** + * This error is thrown when a constraint expression is not configured properly; + * for example, if the GridColumn reference is invalid. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ +public class ConstraintError extends Error +{ + include "../../core/Version.as"; + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + /** + * Constructor. + * + * @param message A message providing information about the error cause. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public function ConstraintError(message:String) + { + super(message); + } +} + +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/ApplicationLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/ApplicationLayout.as b/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/ApplicationLayout.as new file mode 100644 index 0000000..6cad8bb --- /dev/null +++ b/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/ApplicationLayout.as @@ -0,0 +1,116 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +package mx.containers.utilityClasses +{ + +import mx.core.Container; +import mx.core.EdgeMetrics; +import mx.core.IFlexDisplayObject; +import mx.core.mx_internal; + +use namespace mx_internal; + +[ExcludeClass] + +/** + * @private + * The ApplicationLayout class is for internal use only. + */ +public class ApplicationLayout extends BoxLayout +{ + include "../../core/Version.as"; + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public function ApplicationLayout() + { + super(); + } + + //-------------------------------------------------------------------------- + // + // Overridden methods + // + //-------------------------------------------------------------------------- + + /** + * @private + * Lay out children as per Application layout rules. + */ + override public function updateDisplayList(unscaledWidth:Number, + unscaledHeight:Number):void + { + super.updateDisplayList(unscaledWidth, unscaledHeight); + + var target:Container = super.target; + + // If there are scrollbars, and any children are at negative + // co-ordinates, make adjustments to bring them into the visible area. + COMPILE::LATER + { + if ((target.horizontalScrollBar && getHorizontalAlignValue() > 0) || + (target.verticalScrollBar && getVerticalAlignValue() > 0)) + { + var paddingLeft:Number = target.getStyle("paddingLeft"); + var paddingTop:Number = target.getStyle("paddingTop"); + var oX:Number = 0; + var oY:Number = 0; + + var n:int = target.numChildren; + var i:int; + var child:IFlexDisplayObject; + + for (i = 0; i < n; i++) + { + child = IFlexDisplayObject(target.getChildAt(i)); + + if (child.x < paddingLeft) + oX = Math.max(oX, paddingLeft - child.x); + + if (child.y < paddingTop) + oY = Math.max(oY, paddingTop - child.y); + } + + if (oX != 0 || oY != 0) + { + for (i = 0; i < n; i++) + { + child = IFlexDisplayObject(target.getChildAt(i)); + child.move(child.x + oX, child.y + oY); + } + } + } + } + } +} + +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/BoxLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/BoxLayout.as b/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/BoxLayout.as index db31dcd..60eefd6 100644 --- a/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/BoxLayout.as +++ b/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/BoxLayout.as @@ -180,8 +180,11 @@ public class BoxLayout extends Layout var w:Number = Math.max(unscaledWidth, mw) - vm.right - vm.left; var h:Number = Math.max(unscaledHeight, mh) - vm.bottom - vm.top; + COMPILE::LATER + { var horizontalScrollBar:ScrollBar = target.horizontalScrollBar; var verticalScrollBar:ScrollBar = target.verticalScrollBar; + } var gap:Number; var numChildrenWithOwnSpace:int; @@ -227,12 +230,18 @@ public class BoxLayout extends Layout height = child.getExplicitOrMeasuredHeight(); } + COMPILE::LATER + { // if scaled and zoom is playing, best to let the sizes be non-integer if (child.scaleX == 1 && child.scaleY == 1) child.setActualSize(Math.floor(width), Math.floor(height)); else child.setActualSize(width, height); + } + child.setActualSize(width, height); + COMPILE::LATER + { // Ignore scrollbar sizes for child alignment purpose. if (verticalScrollBar != null && target.verticalScrollPolicy == ScrollPolicy.AUTO) @@ -244,6 +253,7 @@ public class BoxLayout extends Layout { h += horizontalScrollBar.minHeight; } + } // Use the child's width and height because a Resize effect might // have changed the child's dimensions. Bug 146158. @@ -268,6 +278,8 @@ public class BoxLayout extends Layout excessSpace = Flex.flexChildHeightsProportionally( target, h - (numChildrenWithOwnSpace - 1) * gap, w); + COMPILE::LATER + { // Ignore scrollbar sizes for child alignment purpose. if (horizontalScrollBar != null && target.horizontalScrollPolicy == ScrollPolicy.AUTO) @@ -279,7 +291,8 @@ public class BoxLayout extends Layout { w += verticalScrollBar.minWidth; } - + } + top = paddingTop + excessSpace * verticalAlign; for (i = 0; i < n; i++) @@ -307,6 +320,8 @@ public class BoxLayout extends Layout excessSpace = Flex.flexChildWidthsProportionally( target, w - (numChildrenWithOwnSpace - 1) * gap, h); + COMPILE::LATER + { // Ignore scrollbar sizes for child alignment purpose. if (horizontalScrollBar != null && target.horizontalScrollPolicy == ScrollPolicy.AUTO) @@ -318,7 +333,8 @@ public class BoxLayout extends Layout { excessSpace += verticalScrollBar.minWidth; } - + } + left = paddingLeft + excessSpace * horizontalAlign; for (i = 0; i < n; i++) http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/Flex.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/Flex.as b/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/Flex.as new file mode 100644 index 0000000..6aee0d3 --- /dev/null +++ b/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/Flex.as @@ -0,0 +1,696 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +package mx.containers.utilityClasses +{ + +import mx.core.IChildList; +import mx.core.IUIComponent; + +[ExcludeClass] + +/** + * @private + * The Flex class is for internal use only. + */ +public class Flex +{ + include "../../core/Version.as"; + + //-------------------------------------------------------------------------- + // + // Class methods + // + //-------------------------------------------------------------------------- + + /** + * This function sets the width of each child + * so that the widths add up to spaceForChildren. + * Each child is set to its preferred width + * if its percentWidth is zero. + * If it's percentWidth is a positive number + * the child grows depending on the size of its parent + * The height of each child is set to its preferred height. + * The return value is any extra space that's left over + * after growing all children to their maxWidth. + * + * @param parent The parent container of the children. + * + * @param spaceForChildren The space that is to be + * distributed across all the children. + * + * @param h height for all children. + * + * @result Any extra space that's left over + * after growing all children to their maxWidth. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public static function flexChildWidthsProportionally( + parent:IChildList, + spaceForChildren:Number, + h:Number):Number + { + var spaceToDistribute:Number = spaceForChildren; + var totalPercentWidth:Number = 0; + var childInfoArray:Array = []; + var childInfo:FlexChildInfo; + var child:IUIComponent; + var i:int; + + // If the child is flexible, store information about it in the + // childInfoArray. For non-flexible children, just set the child's + // width and height immediately. + // + // Also calculate the sum of all widthFlexes, and calculate the + // sum of the width of all non-flexible children. + var n:int = parent.numChildren; + for (i = 0; i < n; i++) + { + child = IUIComponent(parent.getChildAt(i)); + + var percentWidth:Number = child.percentWidth; + var percentHeight:Number = child.percentHeight; + var height:Number; + + if (!isNaN(percentHeight) && child.includeInLayout) + { + height = Math.max(child.minHeight, + Math.min(child.maxHeight, + ((percentHeight >= 100) ? h : h * percentHeight / 100))); + } + else + { + height = child.getExplicitOrMeasuredHeight(); + } + + if (!isNaN(percentWidth) && child.includeInLayout) + { + totalPercentWidth += percentWidth; + + childInfo = new FlexChildInfo(); + childInfo.percent = percentWidth; + childInfo.min = child.minWidth; + childInfo.max = child.maxWidth; + childInfo.height = height; + childInfo.child = child; + + childInfoArray.push(childInfo); + } + else + { + var width:Number = child.getExplicitOrMeasuredWidth(); + // if scaled and zoom is playing, best to let the sizes be non-integer + // otherwise the rounding creates an error that accumulates in some components like List + COMPILE::LATER + { + if (child.scaleX == 1 && child.scaleY == 1) + { + child.setActualSize(Math.floor(width), + Math.floor(height)); + } + else + { + child.setActualSize(width, height); + } + } + child.setActualSize(width, height); + + if (child.includeInLayout) + { + // Need to account for the actual child width since + // setActualSize may trigger a Resize effect, which + // could change the size of the component. + spaceToDistribute -= child.width; + } + } + } + + // Distribute the extra space among the children. + if (totalPercentWidth) + { + spaceToDistribute = flexChildrenProportionally(spaceForChildren, + spaceToDistribute, totalPercentWidth, childInfoArray); + + // Set the widths and heights of the flexible children + n = childInfoArray.length; + for (i = 0; i < n; i++) + { + childInfo = childInfoArray[i]; + child = childInfo.child; + + // if scaled and zoom is playing, best to let the sizes be non-integer + // otherwise the rounding creates an error that accumulates in some components like List + COMPILE::LATER + { + if (child.scaleX == 1 && child.scaleY == 1) + { + child.setActualSize(Math.floor(childInfo.size), + Math.floor(childInfo.height)); + } + else + { + child.setActualSize(childInfo.size, childInfo.height); + } + } + child.setActualSize(childInfo.size, childInfo.height); + } + + distributeExtraWidth(parent, spaceForChildren); + } + + return spaceToDistribute; + } + + /** + * This function sets the height of each child + * so that the heights add up to spaceForChildren. + * Each child is set to its preferred height + * if its percentHeight is zero. + * If its percentHeight is a positive number, + * the child grows (or shrinks) to consume its share of extra space. + * The width of each child is set to its preferred width. + * The return value is any extra space that's left over + * after growing all children to their maxHeight. + * + * @param parent The parent container of the children. + * + * @param spaceForChildren The space that is to be + * distributed across all children . + * + * @param w width for all children. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public static function flexChildHeightsProportionally( + parent:IChildList, + spaceForChildren:Number, + w:Number):Number + { + var spaceToDistribute:Number = spaceForChildren; + var totalPercentHeight:Number = 0; + var childInfoArray:Array = []; + var childInfo:FlexChildInfo; + var child:IUIComponent; + var i:int; + + // If the child is flexible, store information about it in the + // childInfoArray. For non-flexible children, just set the child's + // width and height immediately. + // + // Also calculate the sum of all percentHeights, and calculate the + // sum of the height of all non-flexible children. + var n:int = parent.numChildren; + for (i = 0; i < n; i++) + { + child = IUIComponent(parent.getChildAt(i)); + + var percentWidth:Number = child.percentWidth; + var percentHeight:Number = child.percentHeight; + var width:Number; + + if (!isNaN(percentWidth) && child.includeInLayout) + { + width = Math.max(child.minWidth, + Math.min(child.maxWidth, + ((percentWidth >= 100) ? w : w * percentWidth / 100))); + } + else + { + width = child.getExplicitOrMeasuredWidth(); + } + + if (!isNaN(percentHeight) && child.includeInLayout) + { + totalPercentHeight += percentHeight; + + childInfo = new FlexChildInfo(); + childInfo.percent = percentHeight; + childInfo.min = child.minHeight; + childInfo.max = child.maxHeight; + childInfo.width = width; + childInfo.child = child; + + childInfoArray.push(childInfo); + } + else + { + var height:Number = child.getExplicitOrMeasuredHeight(); + // if scaled and zoom is playing, best to let the sizes be non-integer + // otherwise the rounding creates an error that accumulates in some components like List + COMPILE::LATER + { + if (child.scaleX == 1 && child.scaleY == 1) + { + child.setActualSize(Math.floor(width), + Math.floor(height)); + } + else + { + child.setActualSize(width, height); + } + } + child.setActualSize(width, height); + + if (child.includeInLayout) + { + // Need to account for the actual child height since + // setActualSize may trigger a Resize effect, which + // could change the size of the component. + spaceToDistribute -= child.height; + } + } + } + + // Distribute the extra space among the children. + if (totalPercentHeight) + { + spaceToDistribute = flexChildrenProportionally(spaceForChildren, + spaceToDistribute, totalPercentHeight, childInfoArray); + + // Set the widths and heights of the flexible children + n = childInfoArray.length; + for (i = 0; i < n; i++) + { + childInfo = childInfoArray[i]; + child = childInfo.child; + + // if scaled and zoom is playing, best to let the sizes be non-integer + // otherwise the rounding creates an error that accumulates in some components like List + COMPILE::LATER + { + if (child.scaleX == 1 && child.scaleY == 1) + { + child.setActualSize(Math.floor(childInfo.width), + Math.floor(childInfo.size)); + } + else + { + child.setActualSize(childInfo.width, childInfo.size); + } + } + child.setActualSize(childInfo.width, childInfo.size); + } + + distributeExtraHeight(parent, spaceForChildren); + } + + return spaceToDistribute; + } + + /** + * This function distributes excess space among the flexible children. + * It does so with a view to keep the children's overall size + * close the ratios specified by their percent. + * + * @param spaceForChildren The total space for all children + * + * @param spaceToDistribute The space that needs to be distributed + * among the flexible children. + * + * @param childInfoArray An array of Objects. When this function + * is called, each object should define the following properties: + * - percent: the percentWidth or percentHeight of the child (depending + * on whether we're growing in a horizontal or vertical direction) + * - min: the minimum width (or height) for that child + * - max: the maximum width (or height) for that child + * + * @return When this function finishes executing, a "size" property + * will be defined for each child object. The size property contains + * the portion of the spaceToDistribute to be distributed to the child. + * Ideally, the sum of all size properties is spaceToDistribute. + * If all the children hit their minWidth/maxWidth/minHeight/maxHeight + * before the space was distributed, then the remaining unused space + * is returned. Otherwise, the return value is zero. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public static function flexChildrenProportionally( + spaceForChildren:Number, + spaceToDistribute:Number, + totalPercent:Number, + childInfoArray:Array):Number + { + // The algorithm iterivately attempts to break down the space that + // is consumed by "flexible" containers into ratios that are related + // to the percentWidth/percentHeight of the participating containers. + + var numChildren:int = childInfoArray.length; + var flexConsumed:Number; // space consumed by flexible compontents + var done:Boolean; + + // Continue as long as there are some remaining flexible children. + // The "done" flag isn't strictly necessary, except that it catches + // cases where round-off error causes totalPercent to not exactly + // equal zero. + do + { + flexConsumed = 0; // space consumed by flexible compontents + done = true; // we are optimistic + + // We now do something a little tricky so that we can + // support partial filling of the space. If our total + // percent < 100% then we can trim off some space. + // This unused space can be used to fulfill mins and maxes. + var unused:Number = spaceToDistribute - + (spaceForChildren * totalPercent / 100); + if (unused > 0) + spaceToDistribute -= unused; + else + unused = 0; + + // Space for flexible children is the total amount of space + // available minus the amount of space consumed by non-flexible + // components.Divide that space in proportion to the percent + // of the child + var spacePerPercent:Number = spaceToDistribute / totalPercent; + + // Attempt to divide out the space using our percent amounts, + // if we hit its limit then that control becomes 'non-flexible' + // and we run the whole space to distribute calculation again. + for (var i:int = 0; i < numChildren; i++) + { + var childInfo:FlexChildInfo = childInfoArray[i]; + + // Set its size in proportion to its percent. + var size:Number = childInfo.percent * spacePerPercent; + + // If our flexiblity calc say grow/shrink more than we are + // allowed, then we grow/shrink whatever we can, remove + // ourselves from the array for the next pass, and start + // the loop over again so that the space that we weren't + // able to consume / release can be re-used by others. + if (size < childInfo.min) + { + var min:Number = childInfo.min; + childInfo.size = min; + + // Move this object to the end of the array + // and decrement the length of the array. + // This is slightly expensive, but we don't expect + // to hit these min/max limits very often. + childInfoArray[i] = childInfoArray[--numChildren]; + childInfoArray[numChildren] = childInfo; + + totalPercent -= childInfo.percent; + // Use unused space first before reducing flexible space. + if (unused >= min) + { + unused -= min; + } + else + { + spaceToDistribute -= min - unused; + unused = 0; + } + done = false; + break; + } + else if (size > childInfo.max) + { + var max:Number = childInfo.max; + childInfo.size = max; + + childInfoArray[i] = childInfoArray[--numChildren]; + childInfoArray[numChildren] = childInfo; + + totalPercent -= childInfo.percent; + // Use unused space first before reducing flexible space. + if (unused >= max) + { + unused -= max; + } + else + { + spaceToDistribute -= max - unused; + unused = 0; + } + done = false; + break; + } + else + { + // All is well, let's carry on... + childInfo.size = size; + flexConsumed += size; + } + } + } + while (!done); + + return Math.max(0, Math.floor((spaceToDistribute + unused) - flexConsumed)) + } + + /** + * This function distributes excess space among the flexible children + * because of rounding errors where we want to keep children's dimensions + * full pixel amounts. This only distributes the extra space + * if there was some rounding down and there are still + * flexible children. + * + * @param parent The parent container of the children. + * + * @param spaceForChildren The total space for all children + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public static function distributeExtraHeight( + parent:IChildList, + spaceForChildren:Number):void + { + // We should only get here after distributing the majority of the + // space already. This is done in flexChildHeightsProportionally. + // Strategy here is to keep adding 1 pixel at a time to each + // component that's flexible (percentHeight defined and hasn't + // reached maxHeight yet). We could use another approach where + // we add more than a pixel at a time, but we'd have to first + // calculate exactly how many flexible components we have first + // and see how much space we can add to them without hitting + // their maxHeight. Since we're just dealing with rounding + // issues, we should only make one pass here (if we hit maxHeight + // problems, we might make more than one, but not many more). + + // We just distribute from the top-down and don't care about + // who was "rounded down the most" + + // First check if we should distribute any extra space. To do + // this, we check to see if someone suffers from rounding error. + var n:int = parent.numChildren; + var wantToGrow:Boolean = false; + var i:int; + var percentHeight:Number; + var spaceToDistribute:Number = spaceForChildren; + var spaceUsed:Number = 0; + var child:IUIComponent; + var childHeight:Number; + var wantSpace:Number; + + for (i = 0; i < n; i++) + { + child = IUIComponent(parent.getChildAt(i)); + + if (!child.includeInLayout) + continue; + + childHeight = child.height; + percentHeight = child.percentHeight; + + spaceUsed += childHeight; + + if (!isNaN(percentHeight)) + { + wantSpace = Math.ceil(percentHeight/100 * spaceForChildren); + + if (wantSpace > childHeight) + wantToGrow = true; + } + } + + // No need to distribute extra size + if (!wantToGrow) + return; + + // Start distributing... + spaceToDistribute -= spaceUsed; + + // If we still have components that will let us + // distribute to them + var stillFlexibleComponents:Boolean = true; + + while (stillFlexibleComponents && spaceToDistribute >= 1.0) + { + // Start optimistically + stillFlexibleComponents = false; + + for (i = 0; i < n; i++) + { + child = IUIComponent(parent.getChildAt(i)); + childHeight = child.height; + percentHeight = child.percentHeight + + // if they have a percentHeight, and we won't reach their + // maxHeight by giving them one more pixel, then + // give them a pixel + if (!isNaN(percentHeight) && + child.includeInLayout && + childHeight < child.maxHeight) + { + wantSpace = Math.ceil(percentHeight/100 * spaceForChildren); + + if (wantSpace > childHeight) + { + child.setActualSize(child.width, childHeight+1); + spaceToDistribute--; + stillFlexibleComponents = true; + + if (spaceToDistribute == 0) + return; + } + } + } + } + } + + /** + * This function distributes excess space among the flexible children + * because of rounding errors where we want to keep children's dimensions + * full pixel amounts. This only distributes the extra space + * if there was some rounding down and there are still + * flexible children. + * + * @param parent The parent container of the children. + * + * @param spaceForChildren The total space for all children + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public static function distributeExtraWidth( + parent:IChildList, + spaceForChildren:Number):void + { + // We should only get here after distributing the majority of the + // space already. This is done in flexChildWidthsProportionally. + // Strategy here is to keep adding 1 pixel at a time to each + // component that's flexible (percentWidth defined and hasn't + // reached maxWidth yet). We could use another approach where + // we add more than a pixel at a time, but we'd have to first + // calculate exactly how many flexible components we have first + // and see how much space we can add to them without hitting + // their maxWidth. Since we're just dealing with rounding + // issues, we should only make one pass here (if we hit maxWidth + // problems, we might make more than one, but not many more). + + // We just distribute from the top-down and don't care about + // who was "rounded down the most" + + // First check if we should distribute any extra space. To do + // this, we check to see if someone suffers from rounding error. + var n:int = parent.numChildren; + var wantToGrow:Boolean = false; + var i:int; + var percentWidth:Number; + var spaceToDistribute:Number = spaceForChildren; + var spaceUsed:Number = 0; + var child:IUIComponent; + var childWidth:Number; + var wantSpace:Number; + + for (i = 0; i < n; i++) + { + child = IUIComponent(parent.getChildAt(i)); + + if (!child.includeInLayout) + continue; + + childWidth = child.width; + percentWidth = child.percentWidth; + + spaceUsed += childWidth; + + if (!isNaN(percentWidth)) + { + wantSpace = Math.ceil(percentWidth/100 * spaceForChildren); + + if (wantSpace > childWidth) + wantToGrow = true; + } + } + + // No need to distribute extra size + if (!wantToGrow) + return; + + // Start distributing... + spaceToDistribute -= spaceUsed; + + // If we still have components that will let us + // distribute to them + var stillFlexibleComponents:Boolean = true; + + while (stillFlexibleComponents && spaceToDistribute >= 1.0) + { + // Start optimistically + stillFlexibleComponents = false; + + for (i = 0; i < n; i++) + { + child = IUIComponent(parent.getChildAt(i)); + childWidth = child.width; + percentWidth = child.percentWidth + + // if they have a percentWidth, and we won't reach their + // maxWidth by giving them one more pixel, then + // give them a pixel + if (!isNaN(percentWidth) && + child.includeInLayout && + childWidth < child.maxWidth) + { + wantSpace = Math.ceil(percentWidth / 100 * spaceForChildren); + + if (wantSpace > childWidth) + { + child.setActualSize(childWidth +1, child.height); + spaceToDistribute--; + stillFlexibleComponents = true; + + if (spaceToDistribute == 0) + return; + } + } + } + } + } +} + +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/FlexChildInfo.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/FlexChildInfo.as b/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/FlexChildInfo.as new file mode 100644 index 0000000..e910e03 --- /dev/null +++ b/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/FlexChildInfo.as @@ -0,0 +1,142 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +package mx.containers.utilityClasses +{ + +import mx.core.IUIComponent; + +[ExcludeClass] + +/** + * @private + * Helper class for the Flex.flexChildrenProportionally() method. + */ +public class FlexChildInfo +{ + include "../../core/Version.as"; + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public function FlexChildInfo() + { + super(); + } + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // child + //---------------------------------- + + /** + * @private + */ + public var child:IUIComponent; + + //---------------------------------- + // size + //---------------------------------- + + /** + * @private + */ + public var size:Number = 0; + + //---------------------------------- + // preferred + //---------------------------------- + + /** + * @private + */ + public var preferred:Number = 0; + + //---------------------------------- + // flex + //---------------------------------- + + /** + * @private + */ + public var flex:Number = 0; + + //---------------------------------- + // percent + //---------------------------------- + + /** + * @private + */ + public var percent:Number; + + //---------------------------------- + // min + //---------------------------------- + + /** + * @private + */ + public var min:Number; + + //---------------------------------- + // max + //---------------------------------- + + /** + * @private + */ + public var max:Number; + + //---------------------------------- + // width + //---------------------------------- + + /** + * @private + */ + public var width:Number; + + //---------------------------------- + // height + //---------------------------------- + + /** + * @private + */ + public var height:Number; +} + +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/IConstraintLayout.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/IConstraintLayout.as b/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/IConstraintLayout.as new file mode 100644 index 0000000..9fcb43b --- /dev/null +++ b/frameworks/projects/MX/src/main/flex/mx/containers/utilityClasses/IConstraintLayout.as @@ -0,0 +1,99 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +package mx.containers.utilityClasses +{ + +/** + * IConstraintLayout is a marker interface that indicates that a container + * supports ConstraintColumn class and ConstraintRow class within its layout. + * Application, Canvas, and Panel containers support ConstraintRow and + * ConstraintColumn classes. + * To utilize this type of constraint in these containers, + * set the <code>layout</code> property to <code>"absolute"</code> + * and create ConstraintColumn and ConstraintRow instances. + * + * @see mx.containers.Canvas + * @see mx.containers.Panel + * @see mx.core.Application + * @see mx.containers.utilityClasses.ConstraintColumn + * @see mx.containers.utilityClasses.ConstraintRow + * @see mx.modules.Module + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ +public interface IConstraintLayout +{ + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // constraintColumns + //---------------------------------- + + /** + * An Array of ConstraintColumn instances that partition this container. + * The ConstraintColumn instance at index 0 is the left-most column; + * indices increase from left to right. + * + * @default [] + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + function get constraintColumns():Array /* of ConstraintColumn */; + + /** + * @private + */ + function set constraintColumns(value:Array /* of ConstraintColumn */):void; + + //---------------------------------- + // constraintRows + //---------------------------------- + + /** + * An Array of ConstraintRow instances that partition this container. + * The ConstraintRow instance at index 0 is the top-most row; + * indices increase from top to bottom. + * + * @default [] + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + function get constraintRows():Array /* of ConstraintRow */; + + /** + * @private + */ + function set constraintRows(value:Array /* of ConstraintRow */):void; +} + +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/BaseListData.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/BaseListData.as b/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/BaseListData.as new file mode 100644 index 0000000..cdb1651 --- /dev/null +++ b/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/BaseListData.as @@ -0,0 +1,233 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +package mx.controls.listClasses +{ + +import flash.events.EventDispatcher; + +import mx.core.IUIComponent; +import mx.core.IUID; + +/** + * The BaseListData class defines the data type of the <code>listData</code> + * property implemented by drop-in item renderers or drop-in item editors. + * All drop-in item renderers and drop-in item editors must implement the + * IDropInListItemRenderer interface, which defines the <code>listData</code> + * property. + * + * <p>The <code>listData</code> property is of type BaseListData, + * where the BaseListData class has three subclasses: + * DataGridListData, ListData, and TreeListData. + * The actual data type of the value of the <code>listData</code> property + * depends on the control using the drop-in item renderer or item editor. + * For a DataGrid control, the value is of type DataGridListData, + * for a List control the value is of type ListData, + * and for a Tree control, the value is of type TreeListData.</p> + * + * <p>When used as a drop-in item renderer or drop-in item editor, + * Flex sets the <code>listData</code> property to a BaseListData-derived + * class containing information computed about the item in the data provider + * containing the data for the item.</p> + * + * <p>While the properties of this class are writable, + * you should consider them to be read only. + * They are initialized by the list class, + * and read by an item renderer or item editor. + * Changing these values can lead to unexpected results.</p> + * + * <p>The properties are marked bindable, but these properties + * do not actually do any change detection or send change events. + * The properties are changed as a whole by setting a new + * value for the <code>listData</code> property. + * The <code>change</code> event for the modification of + * the <code>listData</code> property updates all bindings.</p> + * + * @see mx.controls.listClasses.IDropInListItemRenderer + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + +public class BaseListData extends EventDispatcher +{ + + include "../../core/Version.as"; + + //-------------------------------------------------------------------------- + // + // Constructor + // + //-------------------------------------------------------------------------- + + /** + * Constructor. + * + * @param label The textual representation of the item data. + * + * @param uid A unique identifier. + * + * @param owner A reference to the list control. + * + * @param rowIndex The index of the row in the currently visible rows of the control. + * + * @param columnIndex The index of the column in the currently visible columns of the + * control. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public function BaseListData(label:String, uid:String, + owner:IUIComponent, rowIndex:int = 0, + columnIndex:int = 0) + { + super(); + + this.label = label; + this.uid = uid; + this.owner = owner; + this.rowIndex = rowIndex; + this.columnIndex = columnIndex; + } + + + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // columnIndex + //---------------------------------- + + [Bindable("__NoChangeEvent__")] + + /** + * The index of the column of the List-based control relative + * to the currently visible columns of the control, where the first column + * is at an index of 1. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public var columnIndex:int; + + //---------------------------------- + // label + //---------------------------------- + + [Bindable("__NoChangeEvent__")] + + /** + * The textual representation of the item data, based on the list class's + * <code>itemToLabel()</code> method. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public var label:String; + + //---------------------------------- + // owner + //---------------------------------- + + [Bindable("__NoChangeEvent__")] + + /** + * A reference to the list object that owns this item. + * This should be a ListBase-derived class. + * This property is typed as IUIComponent so that drop-ins + * like Label and TextInput don't have to have dependencies + * on List and all of its dependencies. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public var owner:IUIComponent; + + //---------------------------------- + // rowIndex + //---------------------------------- + + [Bindable("__NoChangeEvent__")] + + /** + * The index of the row of the DataGrid, List, or Tree control relative + * to the currently visible rows of the control, where the first row + * is at an index of 1. + * For example, you click on an item in the control and <code>rowIndex</code> + * is set to 3. + * You then scroll the control to change the row's position in the visible rows + * of the control, and then click on the same row as before. + * The <code>rowIndex</code> now contains a different value corresponding to + * the new index of the row in the currently visible rows. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public var rowIndex:int; + + //---------------------------------- + // uid + //---------------------------------- + + /** + * @private + * Storage for the uid property. + */ + private var _uid:String; + + [Bindable("__NoChangeEvent__")] + + /** + * The unique identifier for this item. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + public function get uid():String + { + return _uid; + } + + /** + * @private + */ + public function set uid(value:String):void + { + _uid = value; + } +} + +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/IDropInListItemRenderer.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/IDropInListItemRenderer.as b/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/IDropInListItemRenderer.as new file mode 100644 index 0000000..97ce464 --- /dev/null +++ b/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/IDropInListItemRenderer.as @@ -0,0 +1,163 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +package mx.controls.listClasses +{ + +/** + * The interface for "drop-in" item renderers. Most IListItemRenderers + * are not "drop-ins". They are expecting to use a particular field of + * the data provider item. For example, they may assign the "lastName" + * property of the item to a Label's <code>text</code> property. This + * is easy to write using data-binding, but has the negative + * consequence that the renderer cannot be re-used in another column + * of a DataGrid or another List with different fields. + * IDropInListItemRenderer allows a renderer to be re-used. The list + * classes will pass more information to the renderer so that it + * can determine which field to use at run-time. + * + * <p>Components that you want to use as drop-in item renderers or drop-in + * item editors must implement the IDropInListItemRenderer interface. + * Many Flex component implement this interface, and therefore are usable + * as drop-in item renderers and drop-in item editors in any column or + * list.</p> + * + * <p>Drop-in item renderers or drop-in item editors also must implement + * the IDataRenderer interface to define the <code>data</code> property.</p> + * + * <p>When a component is used as a drop-in item renderer or drop-in + * item editor, Flex initializes the <code>listData</code> property + * of the component with the appropriate data from the list control. + * The component can then use the <code>listData</code> property + * to initialize the <code>data</code> property of the drop-in + * item renderer or drop-in item editor.</p> + * + * <p>The <code>listData</code> property is of type BaseListData, + * where the BaseListData class has four subclasses: + * DataGridListData, ListData, TreeListData, and MenuListData. + * The actual data type of the value of the <code>listData</code> property + * depends on the control using the drop-in item renderer or item editor. + * For a DataGrid control, the value is of type DataGridListData, + * for a List control the value is of type ListData, + * for a Tree control, the value is of type TreeListData, + * and for a Menu control, the value is of type MenuListData..</p> + * + * <p>The following example shows the setter method for the + * <code>data</code> property for the NumericStepper control + * that initializes NumericStepper's <code>value</code> property + * based on the value of the <code>listData</code> property:</p> + * + * <pre> + * public function set data(value:Object):void + * { + * _data = value; + * + * this.value = _listData ? parseFloat(_listData.label) : Number(_data); + * + * dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE)); + * } + * </pre> + * + * <p>In the example above, the NumericStepper control ignores the + * <code>data</code> property when setting NumericStepper's + * <code>value</code> property, and uses the <code>listData</code> + * property instead.</p> + * + * <p>To implement the IDropInListItemRenderer interface, + * you define a setter and getter method to implement + * the <code>listData</code> property. + * Typically, the setter method writes the value of the + * <code>listData</code> property to an internal variable. + * The list class always assigns this property then sets + * the data provider item in the <code>data</code> property.</p> + * + * <p>Notice that the setter method for the <code>listData</code> property + * does not dispatch an event. + * This is because the list classes always set <code>listData</code>, + * then set the <code>data</code> property. + * Setting the <code>data</code> property also dispatches the <code>dataChange</code> event. + * You never set <code>listData</code> on its own, + * so it does not need to dispatch its own event. </p> + * + * <p>The <code>data</code> setter method could call the <code>invalidateProperties()</code> method + * if it did something that required the control to update itself. + * It would then be up to the component developer to write a <code>commitProperties()</code> method + * to determine that <code>listData</code> was modified, and handle it accordingly. </p> + * + * <p>The getter method returns the current value + * of the internal variable, as the following example shows:</p> + * + * <pre> + * // Internal variable for the property value. + * private var _listData:BaseListData; + * + * // Make the listData property bindable. + * [Bindable("dataChange")] + * + * // Define the getter method. + * public function get listData():BaseListData + * { + * return _listData; + * } + * + * // Define the setter method, + * public function set listData(value:BaseListData):void + * { + * _listData = value; + * } + * </pre> + * + * @see mx.controls.listClasses.BaseListData + * @see mx.core.IDataRenderer + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ +public interface IDropInListItemRenderer +{ + //-------------------------------------------------------------------------- + // + // Properties + // + //-------------------------------------------------------------------------- + + //---------------------------------- + // listData + //---------------------------------- + + /** + * Implements the <code>listData</code> property + * using setter and getter methods. + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ + function get listData():BaseListData; + + /** + * @private + */ + function set listData(value:BaseListData):void; +} + +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/IListItemRenderer.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/IListItemRenderer.as b/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/IListItemRenderer.as new file mode 100644 index 0000000..86d2b92 --- /dev/null +++ b/frameworks/projects/MX/src/main/flex/mx/controls/listClasses/IListItemRenderer.as @@ -0,0 +1,79 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +package mx.controls.listClasses +{ + +import flash.events.IEventDispatcher; +import mx.core.IDataRenderer; +import mx.core.IFlexDisplayObject; +import mx.core.IUIComponent; +import mx.managers.ILayoutManagerClient; +import mx.styles.ISimpleStyleClient; + +/** + * Item renderers and item editors for list components must implement + * the IListItemRenderer interface. + * The IListItemRenderer interface is a set of several other interfaces. + * It does not define any new class methods or properties. + * + * <p>The set of interfaces includes the following: + * IDataRenderer, IFlexDisplayObject, ILayoutManagerClient, + * ISimpleStyleClient, IUIComponent. + * The UIComponent class implements all of these interfaces, + * except the IDataRenderer interface. + * Therefore, if you create a custom item renderer or item editor + * as a subclass of the UIComponent class, you only have to implement + * the IDataRenderer interface and then you can add to the class + * definition that the class implements IDataRenderer and IListItemRenderer.</p> + * + * <p>IListItemRenderers are generally dedicated to displaying a particular + * field from the data provider item and cannot be re-used in other + * DataGrid columns or in other lists with different fields. If you want + * to create a renderer that can be re-used you can also implement + * IDropInListItemRenderer, and the list will pass more data to + * the renderer that allows the renderer to be re-used with different + * data fields.</p> + * + * <p>Item renderers and item editors are passed data from a list class' + * data provider using the IDataRenderer interface. + * Renderers and editors that implement the IDropInListItemRenderer + * interface get other information from the list class. + * The item renderer or item editor uses one or both pieces of information + * to display the data.</p> + * + * <p>The renderers and editors are often recycled. + * Once they are created, they may be used again simply by being given + * a new data and optional <code>listData</code> property. + * Therefore in your implementation you must make sure that component + * properties are not assumed to contain their initial, or default values.</p> + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Flex 3 + */ +public interface IListItemRenderer extends IDataRenderer, IEventDispatcher, + IFlexDisplayObject, + ILayoutManagerClient, + ISimpleStyleClient, IUIComponent +{ +} + +}
