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 @@
-