You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2018/12/03 07:19:17 UTC
[royale-asjs] 05/08: refactor virtual layout so it can be re-used
in MXRoyale
This is an automated email from the ASF dual-hosted git repository.
aharui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 037768395fcc6af4216cb1f49a0152bc2c1866ae
Author: Alex Harui <ah...@apache.org>
AuthorDate: Sun Dec 2 22:24:10 2018 -0800
refactor virtual layout so it can be re-used in MXRoyale
---
.../Basic/src/main/resources/basic-manifest.xml | 1 +
.../apache/royale/html/beads/DataContainerView.as | 9 +-
.../royale/html/beads/VirtualDataContainerView.as | 170 ++++-----------------
.../apache/royale/html/beads/VirtualListView.as | 21 +--
.../beads/layouts/VirtualListVerticalLayout.as | 15 +-
5 files changed, 43 insertions(+), 173 deletions(-)
diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index fcb5c78..2a5b73e 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -81,6 +81,7 @@
<component id="RemovableBasicLayout" class="org.apache.royale.html.beads.layouts.RemovableBasicLayout"/>
<component id="LayoutChangeNotifier" class="org.apache.royale.html.beads.layouts.LayoutChangeNotifier"/>
<component id="VerticalLayout" class="org.apache.royale.html.beads.layouts.VerticalLayout"/>
+ <component id="VirtualDataContainerView" class="org.apache.royale.html.beads.VirtualDataContainerView"/>
<component id="VirtualListView" class="org.apache.royale.html.beads.VirtualListView"/>
<component id="VirtualListVerticalLayout" class="org.apache.royale.html.beads.layouts.VirtualListVerticalLayout"/>
<component id="VerticalLayoutWithPaddingAndGap" class="org.apache.royale.html.beads.layouts.VerticalLayoutWithPaddingAndGap"/>
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 3641ad8..e4fa1fa 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
@@ -121,14 +121,7 @@ package org.apache.royale.html.beads
protected function dataProviderChangeHandler(event:Event):void
{
// trace("DataContainerView: dataProviderChangeHandler");
- COMPILE::JS
- {
- performLayout(event);
- }
- COMPILE::SWF
- {
- host.dispatchEvent(new Event("layoutNeeded"));
- }
+ host.dispatchEvent(new Event("layoutNeeded"));
}
/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataContainerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataContainerView.as
index 7e6d17e..2901996 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataContainerView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataContainerView.as
@@ -18,7 +18,7 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.royale.html.beads
{
- import org.apache.royale.html.beads.ContainerView;
+ import org.apache.royale.html.beads.DataContainerView;
import org.apache.royale.core.BeadViewBase;
import org.apache.royale.core.ContainerBase;
import org.apache.royale.core.IBead;
@@ -43,6 +43,9 @@ package org.apache.royale.html.beads
import org.apache.royale.html.supportClasses.Border;
import org.apache.royale.html.supportClasses.DataGroup;
import org.apache.royale.html.beads.IListView;
+ COMPILE::SWF {
+ import org.apache.royale.geom.Size;
+ }
/**
* The DataContainerView provides the visual elements for the DataContainer.
@@ -53,8 +56,7 @@ package org.apache.royale.html.beads
* @playerversion AIR 2.6
* @productversion Royale 0.8
*/
- COMPILE::JS
- public class VirtualDataContainerView extends ContainerView implements IListView
+ public class VirtualDataContainerView extends DataContainerView implements IListView
{
public function VirtualDataContainerView()
{
@@ -77,147 +79,29 @@ package org.apache.royale.html.beads
host.addEventListener("beadsAdded", beadsAddedHandler);
}
- protected var dataModel:IDataProviderModel;
-
- /**
- * @royaleignorecoercion org.apache.royale.core.IItemRendererParent
- */
- public function get dataGroup():IItemRendererParent
- {
- return super.contentView as IItemRendererParent;
- }
-
- protected function beadsAddedHandler(event:Event):void
- {
- dataModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
- host.addEventListener("itemsCreated", itemsCreatedHandler);
- dataModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
- }
-
- /**
- * @private
- */
- override protected function handleInitComplete(event:Event):void
- {
- super.handleInitComplete(event);
- }
-
- /**
- * @private
- */
- protected function itemsCreatedHandler(event:Event):void
- {
- // trace("DataContainerView: itemsCreatedHandler");
- host.dispatchEvent(new Event("layoutNeeded"));
- }
-
- /**
- * @private
- */
- protected function dataProviderChangeHandler(event:Event):void
- {
- // trace("DataContainerView: dataProviderChangeHandler");
- performLayout(event);
- }
-
- }
-
- COMPILE::SWF
- public class VirtualDataContainerView extends ContainerView implements IListView
- {
- public function VirtualDataContainerView()
- {
- super();
- }
-
- protected var dataModel:IDataProviderModel;
-
- /**
- * @private
- */
- override public function get host():IUIBase
- {
- return _strand as IUIBase;
- }
-
- /**
- * @copy org.apache.royale.core.IBead#strand
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.8
- */
- override public function set strand(value:IStrand):void
- {
- _strand = value;
- super.strand = value;
-
- host.addEventListener("beadsAdded", beadsAddedHandler);
- }
-
- override protected function completeSetup():void
- {
- super.completeSetup();
-
- // list is not interested in UI children, it wants to know when new items
- // have been added or the dataProvider has changed.
-// host.removeEventListener("childrenAdded", childrenChangedHandler);
-// host.removeEventListener("childrenAdded", performLayout);
- }
-
- protected function beadsAddedHandler(event:Event):void
- {
- dataModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
- dataModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
- }
-
- override protected function handleInitComplete(event:Event):void
- {
- super.handleInitComplete(event);
- }
-
- /**
- * The area holding the itemRenderers.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.8
- */
- public function get dataGroup():IItemRendererParent
- {
- return super.contentView as IItemRendererParent;
- }
-
- /**
- * @private
- */
- override public function get resizableView():IUIBase
- {
- return _strand as IUIBase;
- }
-
- /**
- * @private
- */
- protected function dataProviderChangeHandler(event:Event):void
- {
- host.dispatchEvent(new Event("layoutNeeded"));
- }
-
/**
- * respond to a change in size or request to re-layout everything
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.0
+ * @private
*/
- override protected function resizeHandler(event:Event):void
- {
- // might need to do something here, not sure yet.
- super.resizeHandler(event);
- }
+ COMPILE::SWF
+ override public function get resizableView():IUIBase
+ {
+ return _strand as IUIBase;
+ }
+
+ COMPILE::SWF
+ override protected function calculateContentSize():Size
+ {
+ return _lastContentSize;
+ }
+
+ COMPILE::SWF
+ private var _lastContentSize:Size;
+
+ COMPILE::SWF
+ public function set lastContentSize(value:Size):void
+ {
+ _lastContentSize = value;
+ }
}
+
}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
index da97038..6b4a259 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
@@ -40,9 +40,6 @@ package org.apache.royale.html.beads
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.html.supportClasses.Border;
import org.apache.royale.html.supportClasses.DataGroup;
- COMPILE::SWF {
- import org.apache.royale.geom.Size;
- }
/**
* The List class creates the visual elements of the org.apache.royale.html.List
@@ -55,7 +52,7 @@ package org.apache.royale.html.beads
* @playerversion AIR 2.6
* @productversion Royale 0.0
*/
- public class VirtualListView extends DataContainerView // was VirtualDataContainerView
+ public class VirtualListView extends VirtualDataContainerView
{
public function VirtualListView()
{
@@ -112,21 +109,5 @@ package org.apache.royale.html.beads
lastRollOverIndex = (listModel as IRollOverModel).rollOverIndex;
}
- COMPILE::SWF
- override protected function calculateContentSize():Size
- {
- return _lastContentSize;
- }
-
- COMPILE::SWF
- private var _lastContentSize:Size;
-
- COMPILE::SWF
- public function set lastContentSize(value:Size):void
- {
- _lastContentSize = value;
- }
-
-
}
}
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 f62ae94..923b8b9 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
@@ -44,7 +44,7 @@ package org.apache.royale.html.beads.layouts
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.geom.Rectangle;
- import org.apache.royale.html.beads.VirtualListView;
+ import org.apache.royale.html.beads.VirtualDataContainerView;
import org.apache.royale.utils.CSSUtils;
COMPILE::SWF {
@@ -112,6 +112,7 @@ package org.apache.royale.html.beads.layouts
* @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
@@ -134,6 +135,11 @@ package org.apache.royale.html.beads.layouts
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();
@@ -238,7 +244,7 @@ package org.apache.royale.html.beads.layouts
}
visibleIndexes = visibleIndexes.sort(numberSort);
- var view:VirtualListView = host.getBeadByType(VirtualListView) as VirtualListView;
+ var view:VirtualDataContainerView = host.getBeadByType(VirtualDataContainerView) as VirtualDataContainerView;
view.lastContentSize = new Size(hostWidth, dp.length * presentationModel.rowHeight);
inLayout = false;
@@ -254,6 +260,11 @@ package org.apache.royale.html.beads.layouts
// 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);