diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as index 12af0d8035..e9c6eec12c 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ContainerView.as @@ -99,7 +99,7 @@ package org.apache.royale.html.beads * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion Royale 0.8 - * @royaleignorecoercion org.apache.royale.core.ILayoutView + * @royaleemitcoercion org.apache.royale.core.ILayoutView */ override public function get contentView():ILayoutView { @@ -178,7 +178,6 @@ package org.apache.royale.html.beads * @playerversion Flash 10.2 * @playerversion AIR 2.6 * @productversion Royale 0.8 - * @royaleignorecoercion org.apache.royale.core.IBorderPaddingMarginValuesImpl */ COMPILE::SWF override public function beforeLayout():Boolean diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as index d084ace02b..0f3e4ea237 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as @@ -102,7 +102,8 @@ package org.apache.royale.html.beads { dataModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel; host.addEventListener("itemsCreated", itemsCreatedHandler); - dataModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); + // may be called before IDataProviderModel bead is added + if (dataModel) dataModel.addEventListener("dataProviderChanged", dataProviderChangeHandler); } diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as index eb4641f536..b9c062a0af 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as @@ -60,7 +60,7 @@ package org.apache.royale.html.beads * @productversion Royale 0.9.7 * @royaleignorecoercion HTMLInputElement * @royaleignorecoercion org.apache.royale.core.IStrandWithPresentationModel - * @royaleignorecoercion org.apache.royale.core.IListPresentationModel + * @royaleignorecoercion org.apache.royale.html.IListPresentationModel */ override public function set strand(value:IStrand):void { diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as index d976c08615..7a0a8fbaf4 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VirtualListVerticalLayout.as @@ -228,7 +228,7 @@ package org.apache.royale.html.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) @@ -361,7 +361,7 @@ package org.apache.royale.html.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/VirtualListVerticalLayout.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/VirtualListVerticalLayout.as index bd3fca377e..5c586b8066 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/VirtualListVerticalLayout.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/VirtualListVerticalLayout.as @@ -244,7 +244,7 @@ package org.apache.royale.jewel.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) @@ -377,7 +377,7 @@ package org.apache.royale.jewel.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as index d0d9baf629..3bd28a5095 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as +++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as @@ -213,7 +213,6 @@ internal class MXRoyaleClasses import mx.controls.beads.layouts.DataGridLayout; DataGridLayout; import mx.controls.beads.layouts.AdvancedDataGridVirtualListVerticalLayout; AdvancedDataGridVirtualListVerticalLayout; import mx.controls.beads.layouts.DataGridHeaderLayout; DataGridHeaderLayout; - import mx.controls.listClasses.VirtualListVerticalLayout; VirtualListVerticalLayout; import mx.controls.listClasses.ListSingleSelectionMouseController; ListSingleSelectionMouseController; import mx.controls.treeClasses.TreeSingleSelectionMouseController; TreeSingleSelectionMouseController; import mx.controls.beads.TreeItemRendererMouseController; TreeItemRendererMouseController; diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as index 3ea401c585..709ad9d3a2 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/SortField.as @@ -686,6 +686,25 @@ public class SortField extends EventDispatcher implements ISortField try { result = obj[_name]; + COMPILE::JS + { + // support XML data in JS (in libraries without access to XML class) + if (result == null) + { + if (_name.charAt(0) == '@') + { + var fa:* = obj["attribute"]; + if (fa && typeof(fa) === "function") + result = fa.call(obj, _name); + } + else + { + var fc:* = obj["child"]; + if (fc && typeof(fc) === "function") + result = fc.call(obj, _name).toString(); + } + } + } } catch(error:Error) { diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as index 8b2b854084..c4eeaac23d 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as @@ -86,7 +86,10 @@ import mx.controls.AdvancedDataGrid; var dataField:String = adg.columns[adgColumnListModel.columnIndex].dataField; var text:String = ""; try { - text = data[dataField]; + if (data is XML) + text = (data as XML)[dataField]; + else + text = data[dataField]; } catch (e:Error) { } diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridSelectableItemRendererClassFactory.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridSelectableItemRendererClassFactory.as index fb1a64021d..88afae197d 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridSelectableItemRendererClassFactory.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridSelectableItemRendererClassFactory.as @@ -50,7 +50,7 @@ package mx.controls.beads override public function createItemRenderer():IItemRenderer { var ir:IItemRenderer = super.createItemRenderer(); - ir["outerDocument"] = (_strand as AdvancedDataGridColumnList).grid.mxmlDocument; + ir["outerDocument"] = (_strand as AdvancedDataGridColumnList).grid.parentMxmlDocument; if (ir.getBeadByType(IBeadController) == null) { //add a default mouse controller for DropInRenderers that may not have a mousecontroller ir.addBead(new ItemRendererMouseController()); diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridSelectableItemRendererClassFactory.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridSelectableItemRendererClassFactory.as index 9133c8de91..29bd38109d 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridSelectableItemRendererClassFactory.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridSelectableItemRendererClassFactory.as @@ -52,7 +52,7 @@ package mx.controls.beads var ir:IItemRenderer = super.createItemRenderer(); COMPILE::JS { - ir["outerDocument"] = (_strand as DataGridColumnList).grid.mxmlDocument; + ir["outerDocument"] = (_strand as DataGridColumnList).grid.parentMxmlDocument; } if (ir.getBeadByType(IBeadController) == null) { //add a default mouse controller for DropInRenderers that may not have a mousecontroller diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridVirtualListVerticalLayout.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridVirtualListVerticalLayout.as index 10ba8fb868..f3a3c8d392 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridVirtualListVerticalLayout.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridVirtualListVerticalLayout.as @@ -209,7 +209,7 @@ package mx.controls.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) @@ -330,7 +330,7 @@ package mx.controls.beads.layouts } for (var i:int = startIndex; i < endIndex; i++) { - if (i >= dp.length) continue; // no more renderers needed + if (i >= dp.length) break; // no more renderers needed var ir:IIndexedItemRenderer; if (i < firstIndex) diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as index aa60789b06..0fd73b4508 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForIListData.as @@ -73,51 +73,29 @@ package mx.controls.listClasses super(); } - private var dp:IList; - /** * @private - * @royaleignorecoercion org.apache.royale.core.IListPresentationModel - * @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer - * @royaleignorecoercion org.apache.royale.events.IEventDispatcher */ override protected function dataProviderChangeHandler(event:Event):void { if (!dataProviderModel) return; - dp = dataProviderModel.dataProvider as IList; - if (!dp) + var dpTest:IList = dataProviderModel.dataProvider as IList; + if (!dpTest) { // temporary until descriptor is used in MenuBarModel var obj:Object = dataProviderModel.dataProvider; if (obj is Array) { - dp = new ArrayList(obj as Array); + dataProviderModel.dataProvider = new ArrayList(obj as Array); } else return; } - - // listen for individual items being added in the future. - var dped:IEventDispatcher = dp as IEventDispatcher; - dped.addEventListener(CollectionEvent.ITEM_ADDED, itemAddedHandler); - dped.addEventListener(CollectionEvent.ITEM_REMOVED, itemRemovedHandler); - dped.addEventListener(CollectionEvent.ITEM_UPDATED, itemUpdatedHandler); - + super.dataProviderChangeHandler(event); - - } - - override protected function get dataProviderLength():int - { - return dp.length; } - override protected function getItemAt(index:int):Object - { - return dp.getItemAt(index); - } - override protected function createAllItemRenderers(dataGroup:IItemRendererOwnerView):void { var functionBead:ItemRendererFunctionBead = _strand.getBeadByType(ItemRendererFunctionBead) as ItemRendererFunctionBead; @@ -134,7 +112,6 @@ package mx.controls.listClasses ir.data = data; } } - } } diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualListVerticalLayout.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualListVerticalLayout.as deleted file mode 100644 index c0ecf816a1..0000000000 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualListVerticalLayout.as +++ /dev/null @@ -1,426 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// 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 org.apache.royale.core.IBeadLayout; - import org.apache.royale.core.IBeadModel; - import org.apache.royale.core.IBorderPaddingMarginValuesImpl; - import org.apache.royale.core.IDataProviderModel; - import org.apache.royale.core.IDataProviderVirtualItemRendererMapper; - import org.apache.royale.core.ILayoutChild; - import org.apache.royale.core.ILayoutHost; - import org.apache.royale.core.ILayoutParent; - import org.apache.royale.core.ILayoutView; - import org.apache.royale.core.IListPresentationModel; - import org.apache.royale.core.IParentIUIBase; - import org.apache.royale.core.IScrollingViewport; - import org.apache.royale.core.IIndexedItemRenderer; - import org.apache.royale.core.IStrand; - import org.apache.royale.core.IStrandWithPresentationModel; - import org.apache.royale.core.IUIBase; - import org.apache.royale.core.LayoutBase; - import org.apache.royale.core.ValuesManager; - import org.apache.royale.core.layout.EdgeData; - COMPILE::JS - { - import org.apache.royale.core.WrappedHTMLElement; - } - import org.apache.royale.events.Event; - import org.apache.royale.events.IEventDispatcher; - import org.apache.royale.geom.Rectangle; - import org.apache.royale.html.beads.VirtualDataContainerView; - import org.apache.royale.utils.CSSUtils; - - COMPILE::SWF { - import org.apache.royale.geom.Size; - } - - /** - * The VerticalLayout class is a simple layout - * bead. It takes the set of children and lays them out - * vertically in one column, separating them according to - * CSS layout rules for margin and horizontal-align styles. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - */ - public class VirtualListVerticalLayout extends LayoutBase implements IBeadLayout - { - /** - * Constructor. - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - * @royaleignorecoercion HTMLDivElement - */ - public function VirtualListVerticalLayout() - { - super(); - } - - protected var dataProviderModel:IDataProviderModel; - - override public function set strand(value:IStrand):void - { - super.strand = value; - dataProviderModel = host.getBeadByType(IDataProviderModel) as IDataProviderModel; - COMPILE::JS - { - host.element.addEventListener("scroll", scrollHandler); - } - } - - COMPILE::JS - private var topSpacer:HTMLDivElement; - - COMPILE::JS - private var bottomSpacer:HTMLDivElement; - - private var visibleIndexes:Array = []; - - private function scrollHandler(e:Event):void - { - layout(); - } - - private var inLayout:Boolean; - - /** - * Layout children vertically - * - * @langversion 3.0 - * @playerversion Flash 10.2 - * @playerversion AIR 2.6 - * @productversion Royale 0.0 - * @royaleignorecoercion Array - * @royaleignorecoercion org.apache.royale.core.ILayoutHost - * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement - * @royaleignorecoercion org.apache.royale.core.IListPresentationModel - * @royaleignorecoercion org.apache.royale.core.IStrandWithPresentationModel - */ - override public function layout():Boolean - { - if (inLayout) return true; - inLayout = true; - - COMPILE::SWF - { - // the strategy for virtualization in SWF is based on the - // fact that we can completely control the scrolling metrics - // instead of trying to rely on the browsers built-in scrolling. - // This code puts enough renderers on the screen and then dictates - // the scrolling metrics. - var contentView:ILayoutView = layoutView; - - var maxWidth:Number = 0; - var maxHeight:Number = 0; - var dp:Array = dataProviderModel.dataProvider as Array; - if (!dp) - { - inLayout = false; - return true; - } - var presentationModel:IListPresentationModel = (host as IStrandWithPresentationModel).presentationModel as IListPresentationModel; - var hostWidthSizedToContent:Boolean = host.isWidthSizedToContent(); - var hostHeightSizedToContent:Boolean = host.isHeightSizedToContent(); - var hostWidth:Number = host.width; - var hostHeight:Number = host.height; - - var data:Object; - var canAdjust:Boolean = false; - - var paddingMetrics:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getPaddingMetrics(host); - var borderMetrics:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getBorderMetrics(host); - - // adjust the host's usable size by the metrics. If hostSizedToContent, then the - // resulting adjusted value may be less than zero. - hostWidth -= paddingMetrics.left + paddingMetrics.right + borderMetrics.left + borderMetrics.right; - hostHeight -= paddingMetrics.top + paddingMetrics.bottom + borderMetrics.top + borderMetrics.bottom; - - var xpos:Number = borderMetrics.left + paddingMetrics.left; - var ypos:Number = borderMetrics.top + paddingMetrics.top; - - var viewport:IScrollingViewport = host.getBeadByType(IScrollingViewport) as IScrollingViewport; - viewport.addEventListener("verticalScrollPositionChanged", scrollHandler); - var viewportTop:Number = viewport.verticalScrollPosition; - var viewportHeight:Number = hostHeight; - var startIndex:int = Math.floor(viewportTop / presentationModel.rowHeight); - var factory:IDataProviderVirtualItemRendererMapper = host.getBeadByType(IDataProviderVirtualItemRendererMapper) as IDataProviderVirtualItemRendererMapper; - var endIndex:int = Math.ceil((viewportTop + viewportHeight) / presentationModel.rowHeight); - var freeIndex:int; - var firstIndex:int; - var lastIndex:int; - - if (visibleIndexes.length) - { - if (startIndex < visibleIndexes[0]) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.pop(); - while (freeIndex >= endIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.pop(); - } - if (visibleIndexes.length) - endIndex = visibleIndexes[visibleIndexes.length - 1]; - } - else if (startIndex > visibleIndexes[0]) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.shift(); - while (freeIndex < startIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.shift(); - } - } - else - { - // see if rows got added or removed because height changed - lastIndex = visibleIndexes[visibleIndexes.length - 1]; - if (lastIndex > endIndex) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.pop(); - while (freeIndex > endIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.pop(); - } - inLayout = false; - return true; // we should be all done if we shrunk - } - } - firstIndex = visibleIndexes[0]; - lastIndex = visibleIndexes[visibleIndexes.length - 1]; - } - else - { - firstIndex = dp.length; - lastIndex = 0; - } - for (var i:int = startIndex; i < endIndex; i++) - { - var ir:IIndexedItemRenderer; - if (i < firstIndex) - { - ir = factory.getItemRendererForIndex(i, i - startIndex); - sizeAndPositionRenderer(ir, xpos, ypos + (presentationModel.rowHeight * i), hostWidth, hostHeight); - visibleIndexes.push(i); - } - else if (i > lastIndex) - { - ir = factory.getItemRendererForIndex(i, i - startIndex); - sizeAndPositionRenderer(ir, xpos, ypos + (presentationModel.rowHeight * i), hostWidth, hostHeight); - visibleIndexes.push(i); - } - } - visibleIndexes = visibleIndexes.sort(numberSort); - - var view:VirtualDataContainerView = host.getBeadByType(VirtualDataContainerView) as VirtualDataContainerView; - view.lastContentSize = new Size(hostWidth, dp.length * presentationModel.rowHeight); - - inLayout = false; - return true; - } - COMPILE::JS - { - // the strategy for virtualization in JS is to leverage the built-in scrollbars - // by creating a topSpacer and bottomSpacer that take up the area that is offscreen - // so the scrollbars have the right metrics, then create enough renderers to - // show in the visible area. This code does not recycle renderers, but the - // factory can. This code does try to keep renderers on the DOM that aren't - // going off-screen - var contentView:ILayoutView = layoutView; - var dp:Array = dataProviderModel.dataProvider as Array; - if (!dp) - { - inLayout = false; - return true; - } - var presentationModel:IListPresentationModel = (host as IStrandWithPresentationModel).presentationModel as IListPresentationModel; - var totalHeight:Number = presentationModel.rowHeight * dp.length; - var viewportTop:Number = Math.max(contentView.element.scrollTop, 0); - var viewportHeight:Number = contentView.element.clientHeight; - var startIndex:int = Math.floor(viewportTop / presentationModel.rowHeight); - var factory:IDataProviderVirtualItemRendererMapper = host.getBeadByType(IDataProviderVirtualItemRendererMapper) as IDataProviderVirtualItemRendererMapper; - var endIndex:int = Math.ceil((viewportTop + viewportHeight) / presentationModel.rowHeight); - var freeIndex:int; - var firstIndex:int; - var lastIndex:int; - if (!topSpacer) - { - topSpacer = document.createElement("div") as HTMLDivElement; - contentView.element.appendChild(topSpacer); - } - topSpacer.style.height = (startIndex * presentationModel.rowHeight).toString() + "px"; - if (visibleIndexes.length) - { - if (startIndex < visibleIndexes[0]) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.pop(); - while (freeIndex > endIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.pop(); - } - // we popped it off at the end of loop but if we didn't - // use it, then push it back on - if (freeIndex == endIndex) - visibleIndexes.push(freeIndex); - if (visibleIndexes.length) - endIndex = visibleIndexes[visibleIndexes.length - 1]; - } - else if (startIndex > visibleIndexes[0]) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.shift(); - while (freeIndex < startIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.shift(); - } - } - else - { - // see if rows got added or removed because height changed - lastIndex = visibleIndexes[visibleIndexes.length - 1]; - if (lastIndex > endIndex) - { - // see if we can re-use any renderers - freeIndex = visibleIndexes.pop(); - while (freeIndex > endIndex) - { - factory.freeItemRendererForIndex(freeIndex); - if (visibleIndexes.length == 0) - break; - freeIndex = visibleIndexes.pop(); - } - inLayout = false; - return true; // we should be all done if we shrunk - } - } - firstIndex = visibleIndexes[0]; - lastIndex = visibleIndexes[visibleIndexes.length - 1]; - } - else - { - firstIndex = dp.length; - lastIndex = 0; - } - for (var i:int = startIndex; i < endIndex; i++) - { - var ir:IIndexedItemRenderer; - if (i < firstIndex) - { - ir = factory.getItemRendererForIndex(i, i - startIndex + 1); - ir.element.style.display = "block"; - visibleIndexes.push(i); - } - else if (i > lastIndex) - { - ir = factory.getItemRendererForIndex(i, i - startIndex + 1); - ir.element.style.display = "block"; - visibleIndexes.push(i); - } - } - visibleIndexes = visibleIndexes.sort(numberSort); - if (!bottomSpacer) - { - bottomSpacer = document.createElement("div") as HTMLDivElement; - contentView.element.appendChild(bottomSpacer); - } - else - { - // ensure bottom spacer is at the bottom! - contentView.element.removeChild(bottomSpacer); - contentView.element.appendChild(bottomSpacer); - } - bottomSpacer.style.height = ((dp.length - endIndex) * presentationModel.rowHeight).toString() + "px"; - inLayout = false; - return true; - } - } - - public function numberSort(a:int, b:int):int - { - return a - b; - } - - COMPILE::SWF - private function sizeAndPositionRenderer(ir:IIndexedItemRenderer, xpos:Number, ypos:Number, hostWidth:Number, hostHeight:Number):void - { - var ilc:ILayoutChild; - var positions:Object = childPositions(ir); - var margins:Object = childMargins(ir, hostWidth, hostHeight); - - ilc = ir as ILayoutChild; - var child:IUIBase = ir as IUIBase; - - ypos += margins.top; - - var childXpos:Number = xpos + margins.left; // default x position - - var childWidth:Number = child.width; - if (ilc != null && !isNaN(ilc.percentWidth)) { - childWidth = hostWidth * ilc.percentWidth/100.0; - ilc.setWidth(childWidth); - } - else if (ilc.isWidthSizedToContent() && !margins.auto) - { - childWidth = hostWidth; - ilc.setWidth(childWidth); - } - if (margins.auto) - childXpos = (hostWidth - childWidth) / 2; - - if (ilc) { - ilc.setX(childXpos); - ilc.setY(ypos); - - if (!isNaN(ilc.percentHeight)) { - var newHeight:Number = hostHeight * ilc.percentHeight / 100; - ilc.setHeight(newHeight); - } - - } else { - child.x = childXpos; - child.y = ypos; - } - - ypos += child.height + margins.bottom; - } - } -} diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/logging/LogLogger.as b/frameworks/projects/MXRoyale/src/main/royale/mx/logging/LogLogger.as index 1936771f12..92cfa17093 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/logging/LogLogger.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/logging/LogLogger.as @@ -256,7 +256,7 @@ public class LogLogger extends EventDispatcher implements ILogger private function argToString(arg:Object):String { - if (!arg) return null; + if (arg == null) return null; if (arg is XML || arg is XMLList) { diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectProxy.as b/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectProxy.as index ed7f99ba16..d89e86a71d 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectProxy.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectProxy.as @@ -272,10 +272,17 @@ public dynamic class ObjectProxy extends Proxy * @playerversion AIR 1.1 * @productversion Flex 3 */ -// object_proxy function get object():Object -// { -// return _item; -// } + COMPILE::SWF + object_proxy function get object():Object + { + return _item; + } + + COMPILE::JS + public function get object():Object + { + return _item; + } //---------------------------------- // type diff --git a/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml b/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml index 53549b1340..46ba1af862 100644 --- a/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml +++ b/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml @@ -146,7 +146,6 @@ -