You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2015/05/18 19:44:53 UTC
[2/2] git commit: [flex-asjs] [refs/heads/develop] - update the way
layout works
update the way layout works
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/3c23b3a1
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/3c23b3a1
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/3c23b3a1
Branch: refs/heads/develop
Commit: 3c23b3a1a2882cd13bfccdfa14044e470a12bc20
Parents: 40b5b8c
Author: Alex Harui <ah...@apache.org>
Authored: Mon May 18 10:43:35 2015 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Mon May 18 10:44:42 2015 -0700
----------------------------------------------------------------------
.../src/productsView/CatalogTitleButtons.mxml | 1 +
.../ProductCatalogPanelTitleBarView.mxml | 4 +-
.../productsView/ProductCatalogThumbnail.mxml | 1 +
.../flex/binding/ApplicationDataBinding.as | 4 +-
.../apache/flex/binding/ContainerDataBinding.as | 4 +-
.../org/apache/flex/charts/beads/ChartView.as | 16 +-
.../charts/beads/layouts/ChartBaseLayout.as | 13 +-
.../as/src/org/apache/flex/core/Application.as | 8 +
.../src/org/apache/flex/core/ContainerBase.as | 138 +++++++++++++-
.../as/src/org/apache/flex/core/IBeadLayout.as | 5 +-
.../Core/as/src/org/apache/flex/core/UIBase.as | 16 +-
.../as/src/org/apache/flex/core/UIButtonBase.as | 20 +-
.../as/src/org/apache/flex/core/ViewBase.as | 2 +
.../apache/flex/utils/MXMLDataInterpreter.as | 13 +-
frameworks/projects/HTML/as/defaults.css | 12 ++
.../as/src/org/apache/flex/html/Container.as | 119 +-----------
.../HTML/as/src/org/apache/flex/html/Label.as | 15 +-
.../org/apache/flex/html/beads/ContainerView.as | 173 ++++++++++++-----
.../src/org/apache/flex/html/beads/ListView.as | 62 ++++--
.../src/org/apache/flex/html/beads/PanelView.as | 1 +
.../org/apache/flex/html/beads/ScrollBarView.as | 30 ++-
.../flex/html/beads/ScrollingContainerView.as | 77 +++++++-
.../flex/html/beads/SolidBackgroundBead.as | 7 +-
.../flex/html/beads/layouts/BasicLayout.as | 170 ++++++++++++-----
.../html/beads/layouts/BasicScrollingLayout.as | 19 +-
.../flex/html/beads/layouts/ButtonBarLayout.as | 11 +-
.../flex/html/beads/layouts/HorizontalLayout.as | 190 ++++++++++++-------
.../beads/layouts/HorizontalScrollingLayout.as | 15 +-
.../flex/html/beads/layouts/TileLayout.as | 28 +--
.../flex/html/beads/layouts/VScrollBarLayout.as | 18 +-
.../flex/html/beads/layouts/VerticalLayout.as | 188 +++++++++++-------
.../beads/layouts/VerticalScrollingLayout.as | 18 +-
.../org/apache/flex/html/beads/DataGridView.as | 2 +-
.../flex/html/beads/layouts/DataGridLayout.as | 15 +-
.../FlexibleFirstChildHorizontalLayout.as | 40 ++--
.../layouts/OneFlexibleChildHorizontalLayout.as | 36 +---
.../layouts/OneFlexibleChildVerticalLayout.as | 38 +---
.../html/beads/layouts/VerticalColumnLayout.as | 13 +-
38 files changed, 938 insertions(+), 604 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/examples/FlexJSStore/src/productsView/CatalogTitleButtons.mxml
----------------------------------------------------------------------
diff --git a/examples/FlexJSStore/src/productsView/CatalogTitleButtons.mxml b/examples/FlexJSStore/src/productsView/CatalogTitleButtons.mxml
index 9dbd4c8..5269fc0 100755
--- a/examples/FlexJSStore/src/productsView/CatalogTitleButtons.mxml
+++ b/examples/FlexJSStore/src/productsView/CatalogTitleButtons.mxml
@@ -28,6 +28,7 @@ limitations under the License.
<js:beads>
<js:ParentDocumentBead id="pdb" />
<js:ContainerDataBinding />
+ <js:LayoutChangeNotifier watchedProperty="{viewCart.text}" initialValue="#FFFFFF" />
</js:beads>
<fx:Script>
<![CDATA[
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/examples/FlexJSStore/src/productsView/ProductCatalogPanelTitleBarView.mxml
----------------------------------------------------------------------
diff --git a/examples/FlexJSStore/src/productsView/ProductCatalogPanelTitleBarView.mxml b/examples/FlexJSStore/src/productsView/ProductCatalogPanelTitleBarView.mxml
index b89c7b6..5e82f95 100755
--- a/examples/FlexJSStore/src/productsView/ProductCatalogPanelTitleBarView.mxml
+++ b/examples/FlexJSStore/src/productsView/ProductCatalogPanelTitleBarView.mxml
@@ -38,12 +38,12 @@ limitations under the License.
<js:beads>
<js:MXMLBeadViewBaseDataBinding />
<js:ParentDocumentBead id="pdb" />
- <js:LayoutChangeNotifier watchedProperty="{titleLabel.height}" />
+ <js:LayoutChangeNotifier watchedProperty="{buttons.width}" />
</js:beads>
<js:Label id="titleLabel" text="{ITitleBarModel(model).title}"
/>
<js:CloseButton id="closeButton" click="clickHandler()"
visible="{ITitleBarModel(model).showCloseButton}";
/>
- <productsView:CatalogTitleButtons />
+ <productsView:CatalogTitleButtons id="buttons" />
</js:MXMLBeadViewBase>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/examples/FlexJSStore/src/productsView/ProductCatalogThumbnail.mxml
----------------------------------------------------------------------
diff --git a/examples/FlexJSStore/src/productsView/ProductCatalogThumbnail.mxml b/examples/FlexJSStore/src/productsView/ProductCatalogThumbnail.mxml
index 848d202..cabbe81 100755
--- a/examples/FlexJSStore/src/productsView/ProductCatalogThumbnail.mxml
+++ b/examples/FlexJSStore/src/productsView/ProductCatalogThumbnail.mxml
@@ -73,6 +73,7 @@ limitations under the License.
borderStyles.borderColor = "#CCCCCC";
//style["dropShadowEnabled"] = true;
buttons.visible = true;
+ dispatchEvent(new Event("layoutNeeded"));
}
private function rollOutHandler(event:MouseEvent):void
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/Binding/asjs/src/org/apache/flex/binding/ApplicationDataBinding.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Binding/asjs/src/org/apache/flex/binding/ApplicationDataBinding.as b/frameworks/projects/Binding/asjs/src/org/apache/flex/binding/ApplicationDataBinding.as
index e4379bd..4038645 100644
--- a/frameworks/projects/Binding/asjs/src/org/apache/flex/binding/ApplicationDataBinding.as
+++ b/frameworks/projects/Binding/asjs/src/org/apache/flex/binding/ApplicationDataBinding.as
@@ -150,11 +150,11 @@ package org.apache.flex.binding
if (destObject)
{
cb.destination = destObject;
- _strand.addBead(sb);
+ _strand.addBead(cb);
}
else
{
- deferredBindings[binding.destination[0]] = sb;
+ deferredBindings[binding.destination[0]] = cb;
IEventDispatcher(_strand).addEventListener("valueChange", deferredBindingsHandler);
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/Binding/asjs/src/org/apache/flex/binding/ContainerDataBinding.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Binding/asjs/src/org/apache/flex/binding/ContainerDataBinding.as b/frameworks/projects/Binding/asjs/src/org/apache/flex/binding/ContainerDataBinding.as
index fbe399f..d138d60 100644
--- a/frameworks/projects/Binding/asjs/src/org/apache/flex/binding/ContainerDataBinding.as
+++ b/frameworks/projects/Binding/asjs/src/org/apache/flex/binding/ContainerDataBinding.as
@@ -153,11 +153,11 @@ package org.apache.flex.binding
if (destObject)
{
cb.destination = destObject;
- _strand.addBead(sb);
+ _strand.addBead(cb);
}
else
{
- deferredBindings[binding.destination[0]] = sb;
+ deferredBindings[binding.destination[0]] = cb;
IEventDispatcher(_strand).addEventListener("valueChange", deferredBindingsHandler);
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/ChartView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/ChartView.as b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/ChartView.as
index 6593d1a..feadcce 100644
--- a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/ChartView.as
+++ b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/ChartView.as
@@ -56,9 +56,7 @@ package org.apache.flex.charts.beads
super.strand = value;
_strand = value;
- IEventDispatcher(_strand).addEventListener("widthChanged", handleLocalChange);
- IEventDispatcher(_strand).addEventListener("heightChanged",handleLocalChange);
-
+
var listModel:ISelectionModel = value.getBeadByType(ISelectionModel) as ISelectionModel;
listModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
@@ -77,15 +75,7 @@ package org.apache.flex.charts.beads
vaxis.axisGroup = _verticalAxisGroup;
IParent(_strand).addElement(_verticalAxisGroup);
}
-
- if (_strand.getBeadByType(IBeadLayout) == null)
- {
- var layout:IBeadLayout = new (ValuesManager.valuesImpl.getValue(_strand, "iBeadLayout")) as IBeadLayout;
- _strand.addBead(layout);
- }
-
- handleLocalChange(null);
-
+
IEventDispatcher(_strand).dispatchEvent( new Event("viewCreated") );
}
@@ -118,7 +108,7 @@ package org.apache.flex.charts.beads
/**
* @private
*/
- private function handleLocalChange(event:Event):void
+ override protected function layoutList():void
{
var widthAdjustment:Number = 0;
var heightAdjustment:Number = 0;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/ChartBaseLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/ChartBaseLayout.as b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/ChartBaseLayout.as
index ef4e9b8..87f288b 100644
--- a/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/ChartBaseLayout.as
+++ b/frameworks/projects/Charts/asjs/src/org/apache/flex/charts/beads/layouts/ChartBaseLayout.as
@@ -47,10 +47,6 @@ package org.apache.flex.charts.beads.layouts
public function set strand(value:IStrand):void
{
_strand = value;
- IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
- IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
- IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
- IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
}
/**
@@ -122,12 +118,13 @@ package org.apache.flex.charts.beads.layouts
return _chartDataGroup;
}
- /**
- * @private
- */
- private function changeHandler(event:Event):void
+ /**
+ * @copy org.apache.flex.core.IBeadLayout#layout
+ */
+ public function layout():Boolean
{
performLayout();
+ return true;
}
/**
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/Core/as/src/org/apache/flex/core/Application.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Core/as/src/org/apache/flex/core/Application.as b/frameworks/projects/Core/as/src/org/apache/flex/core/Application.as
index a7d0a77..c44a0bb 100644
--- a/frameworks/projects/Core/as/src/org/apache/flex/core/Application.as
+++ b/frameworks/projects/Core/as/src/org/apache/flex/core/Application.as
@@ -147,6 +147,14 @@ package org.apache.flex.core
if (isNaN(initialView.explicitHeight))
initialView.setHeight(stage.stageHeight);
this.addElement(initialView);
+ var bgColor:Object = ValuesManager.valuesImpl.getValue(this, "background-color");
+ if (bgColor != null)
+ {
+ var backgroundColor:uint = ValuesManager.valuesImpl.convertColor(bgColor);
+ graphics.beginFill(backgroundColor);
+ graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
+ graphics.endFill();
+ }
dispatchEvent(new org.apache.flex.events.Event("viewChanged"));
}
dispatchEvent(new org.apache.flex.events.Event("applicationComplete"));
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/Core/as/src/org/apache/flex/core/ContainerBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Core/as/src/org/apache/flex/core/ContainerBase.as b/frameworks/projects/Core/as/src/org/apache/flex/core/ContainerBase.as
index daeeae6..f3efca6 100644
--- a/frameworks/projects/Core/as/src/org/apache/flex/core/ContainerBase.as
+++ b/frameworks/projects/Core/as/src/org/apache/flex/core/ContainerBase.as
@@ -18,12 +18,14 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.core
{
- import org.apache.flex.states.State;
+ import flash.display.DisplayObject;
+ import flash.display.DisplayObjectContainer;
import org.apache.flex.core.IMXMLDocument;
- import org.apache.flex.core.ValuesManager;
+ import org.apache.flex.core.ValuesManager;
import org.apache.flex.events.Event;
import org.apache.flex.events.ValueChangeEvent;
+ import org.apache.flex.states.State;
import org.apache.flex.utils.MXMLDataInterpreter;
/**
@@ -72,7 +74,7 @@ package org.apache.flex.core
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class ContainerBase extends UIBase implements IMXMLDocument, IStatesObject
+ public class ContainerBase extends UIBase implements IMXMLDocument, IStatesObject, IContainer
{
/**
* Constructor.
@@ -85,9 +87,138 @@ package org.apache.flex.core
public function ContainerBase()
{
super();
+ actualParent = this;
}
/**
+ * False if IChrome children are treated just like
+ * any other children.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ protected var supportsChromeChildren:Boolean = true;
+
+ private var actualParent:DisplayObjectContainer;
+
+ /**
+ * Set a platform-specific object as the actual parent for
+ * children. This must be public so it can be accessed
+ * by beads.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function setActualParent(parent:DisplayObjectContainer):void
+ {
+ actualParent = parent;
+ }
+
+ /**
+ * @private
+ */
+ override public function getElementIndex(c:Object):int
+ {
+ if (c is IUIBase)
+ return actualParent.getChildIndex(IUIBase(c).element as DisplayObject);
+ else
+ return actualParent.getChildIndex(c as DisplayObject);
+ }
+
+ /**
+ * @private
+ */
+ override public function addElement(c:Object, dispatchEvent:Boolean = true):void
+ {
+ if (c is IUIBase)
+ {
+ if (supportsChromeChildren && c is IChrome) {
+ addChild(IUIBase(c).element as DisplayObject);
+ IUIBase(c).addedToParent();
+ }
+ else {
+ actualParent.addChild(IUIBase(c).element as DisplayObject);
+ IUIBase(c).addedToParent();
+ }
+ }
+ else {
+ if (supportsChromeChildren && c is IChrome) {
+ addChild(c as DisplayObject);
+ }
+ else {
+ actualParent.addChild(c as DisplayObject);
+ }
+ }
+ if (dispatchEvent)
+ this.dispatchEvent(new Event("childrenAdded"));
+ }
+
+ /**
+ * @private
+ */
+ override public function addElementAt(c:Object, index:int, dispatchEvent:Boolean = true):void
+ {
+ if (c is IUIBase)
+ {
+ if (supportsChromeChildren && c is IChrome) {
+ addChildAt(IUIBase(c).element as DisplayObject, index);
+ IUIBase(c).addedToParent();
+ }
+ else {
+ actualParent.addChildAt(IUIBase(c).element as DisplayObject, index);
+ IUIBase(c).addedToParent();
+ }
+ }
+ else {
+ if (supportsChromeChildren && c is IChrome) {
+ addChildAt(c as DisplayObject, index);
+ } else {
+ actualParent.addChildAt(c as DisplayObject, index);
+ }
+ }
+ if (dispatchEvent)
+ this.dispatchEvent(new Event("childrenAdded"));
+ }
+
+ /**
+ * @private
+ */
+ override public function removeElement(c:Object, dispatchEvent:Boolean = true):void
+ {
+ if (c is IUIBase)
+ actualParent.removeChild(IUIBase(c).element as DisplayObject);
+ else
+ actualParent.removeChild(c as DisplayObject);
+ if (dispatchEvent)
+ this.dispatchEvent(new Event("childrenRemoved"));
+ }
+
+ /**
+ * Get the array of children. To change the children use
+ * addElement, removeElement.
+ */
+ public function getChildren():Array
+ {
+ var children:Array = [];
+ var n:int = actualParent.numChildren;
+ for (var i:int = 0; i < n; i++)
+ children.push(actualParent.getChildAt(i));
+ return children;
+ }
+
+ /**
+ * @private
+ */
+ public function childrenAdded():void
+ {
+ dispatchEvent(new Event("childrenAdded"));
+ }
+
+ /**
* A ContainerBase doesn't create its children until it is added to
* a parent.
*
@@ -114,7 +245,6 @@ package org.apache.flex.core
dispatchEvent(new Event("initComplete"));
_initialized = true;
}
- dispatchEvent(new Event("childrenAdded"));
}
private var _mxmlDescriptor:Array;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/Core/as/src/org/apache/flex/core/IBeadLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Core/as/src/org/apache/flex/core/IBeadLayout.as b/frameworks/projects/Core/as/src/org/apache/flex/core/IBeadLayout.as
index 0166f24..fcc5569 100644
--- a/frameworks/projects/Core/as/src/org/apache/flex/core/IBeadLayout.as
+++ b/frameworks/projects/Core/as/src/org/apache/flex/core/IBeadLayout.as
@@ -32,6 +32,9 @@ package org.apache.flex.core
*/
public interface IBeadLayout extends IBead
{
-
+ /**
+ * @return true if size changed
+ */
+ function layout():Boolean;
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/Core/as/src/org/apache/flex/core/UIBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Core/as/src/org/apache/flex/core/UIBase.as b/frameworks/projects/Core/as/src/org/apache/flex/core/UIBase.as
index 2f8bca1..3bec8fb 100644
--- a/frameworks/projects/Core/as/src/org/apache/flex/core/UIBase.as
+++ b/frameworks/projects/Core/as/src/org/apache/flex/core/UIBase.as
@@ -518,7 +518,11 @@ package org.apache.flex.core
if (!isNaN(_percentWidth))
return false;
var value:* = ValuesManager.valuesImpl.getValue(this, "width");
- return value === undefined;
+ if (value !== undefined)
+ return false;
+ var left:* = ValuesManager.valuesImpl.getValue(this, "left");
+ var right:* = ValuesManager.valuesImpl.getValue(this, "right");
+ return (left === undefined || right === undefined);
}
@@ -537,7 +541,11 @@ package org.apache.flex.core
if (!isNaN(_percentHeight))
return false;
var value:* = ValuesManager.valuesImpl.getValue(this, "height");
- return value === undefined;
+ if (value !== undefined)
+ return false;
+ var top:* = ValuesManager.valuesImpl.getValue(this, "top");
+ var bottom:* = ValuesManager.valuesImpl.getValue(this, "bottom");
+ return (top === undefined || bottom === undefined);
}
/**
@@ -1056,5 +1064,9 @@ package org.apache.flex.core
_stageProxy = null;
}
+ protected function repeaterListener(event:Event):void
+ {
+ dispatchEvent(event);
+ }
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/Core/as/src/org/apache/flex/core/UIButtonBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Core/as/src/org/apache/flex/core/UIButtonBase.as b/frameworks/projects/Core/as/src/org/apache/flex/core/UIButtonBase.as
index d3f0a25..be1bc05 100644
--- a/frameworks/projects/Core/as/src/org/apache/flex/core/UIButtonBase.as
+++ b/frameworks/projects/Core/as/src/org/apache/flex/core/UIButtonBase.as
@@ -256,13 +256,10 @@ package org.apache.flex.core
* @productversion FlexJS 0.0
*/
public function get clientWidth():Number
- {
- var padding:Object = determinePadding();
- var pl:Number = 0;
- var pr:Number = 0;
- if (!isNaN(padding.paddingLeft)) pl = padding.paddingLeft;
- if (!isNaN(padding.paddingRight)) pr = padding.paddingRight;
- return width + pl + pr;
+ {
+ // button views should already factor in padding to set
+ // the borders
+ return width;
}
/**
@@ -276,12 +273,9 @@ package org.apache.flex.core
*/
public function get clientHeight():Number
{
- var padding:Object = determinePadding();
- var pt:Number = 0;
- var pb:Number = 0;
- if (!isNaN(padding.paddingTop)) pt = padding.paddingTop;
- if (!isNaN(padding.paddingBottom)) pb = padding.paddingBottom;
- return height + pt + pb;
+ // button views should already factor in padding to set
+ // the borders
+ return height;
}
private var _width:Number;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/Core/as/src/org/apache/flex/core/ViewBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Core/as/src/org/apache/flex/core/ViewBase.as b/frameworks/projects/Core/as/src/org/apache/flex/core/ViewBase.as
index fc4fafb..74c30ce 100644
--- a/frameworks/projects/Core/as/src/org/apache/flex/core/ViewBase.as
+++ b/frameworks/projects/Core/as/src/org/apache/flex/core/ViewBase.as
@@ -63,6 +63,8 @@ package org.apache.flex.core
{
super();
+ supportsChromeChildren = false;
+
className = "flexjs";
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/Core/as/src/org/apache/flex/utils/MXMLDataInterpreter.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Core/as/src/org/apache/flex/utils/MXMLDataInterpreter.as b/frameworks/projects/Core/as/src/org/apache/flex/utils/MXMLDataInterpreter.as
index 7b2982d..89ce693 100644
--- a/frameworks/projects/Core/as/src/org/apache/flex/utils/MXMLDataInterpreter.as
+++ b/frameworks/projects/Core/as/src/org/apache/flex/utils/MXMLDataInterpreter.as
@@ -269,7 +269,7 @@ public class MXMLDataInterpreter
}
if (parent && comp is DisplayObject)
{
- parent.addElement(comp, !(comp is IContainer));
+ parent.addElement(comp, !(parent is IContainer));
}
if (children)
@@ -277,12 +277,6 @@ public class MXMLDataInterpreter
if (!(comp is IMXMLDocument))
{
generateMXMLInstances(document, comp as IParent, children);
-
- // maybe we can remove this. All IContainers should be IMXMLDocuments?
- if (comp is IContainer)
- {
- IContainer(comp).childrenAdded();
- }
}
}
@@ -313,6 +307,11 @@ public class MXMLDataInterpreter
if (!data) return;
generateMXMLArray(document, parent, data);
+ // maybe we can remove this. All IContainers should be IMXMLDocuments?
+ if (parent is IContainer)
+ {
+ IContainer(parent).childrenAdded();
+ }
}
/**
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/defaults.css b/frameworks/projects/HTML/as/defaults.css
index 1363157..67717a6 100644
--- a/frameworks/projects/HTML/as/defaults.css
+++ b/frameworks/projects/HTML/as/defaults.css
@@ -213,6 +213,13 @@ ToolTip
background-color: #FFFFCC;
}
+ViewBase
+{
+ IBeadView: ClassReference("org.apache.flex.html.beads.ContainerView");
+ IBeadLayout: ClassReference("org.apache.flex.html.beads.layouts.BasicLayout");
+}
+
+
/* Global Style Declaration */
global
{
@@ -448,6 +455,11 @@ ToggleTextButton
IBeadView: ClassReference("org.apache.flex.html.beads.CSSTextButtonView");
}
+ViewBase
+{
+ iBackgroundBead: ClassReference("org.apache.flex.html.beads.SolidBackgroundBead");
+ iBorderBead: ClassReference("org.apache.flex.html.beads.SingleLineBorderBead");
+}
/* SVG */
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/Container.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/Container.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/Container.as
index 70caf45..fb9b867 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/Container.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/Container.as
@@ -58,7 +58,7 @@ package org.apache.flex.html
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
*/
- public class Container extends ContainerBase implements IContainer
+ public class Container extends ContainerBase
{
/**
* Constructor.
@@ -71,124 +71,7 @@ package org.apache.flex.html
public function Container()
{
super();
- actualParent = this;
- }
-
- private var actualParent:DisplayObjectContainer;
-
- /**
- * Set a platform-specific object as the actual parent for
- * children. This must be public so it can be accessed
- * by beads.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion FlexJS 0.0
- */
- public function setActualParent(parent:DisplayObjectContainer):void
- {
- actualParent = parent;
- }
-
- /**
- * @private
- */
- override public function getElementIndex(c:Object):int
- {
- if (c is IUIBase)
- return actualParent.getChildIndex(IUIBase(c).element as DisplayObject);
- else
- return actualParent.getChildIndex(c as DisplayObject);
- }
-
- /**
- * @private
- */
- override public function addElement(c:Object, dispatchEvent:Boolean = true):void
- {
- if (c is IUIBase)
- {
- if (c is IChrome ) {
- addChild(IUIBase(c).element as DisplayObject);
- IUIBase(c).addedToParent();
- }
- else {
- actualParent.addChild(IUIBase(c).element as DisplayObject);
- IUIBase(c).addedToParent();
- }
- }
- else {
- if (c is IChrome) {
- addChild(c as DisplayObject);
- }
- else {
- actualParent.addChild(c as DisplayObject);
- }
- }
- if (dispatchEvent)
- this.dispatchEvent(new Event("childrenAdded"));
- }
-
- /**
- * @private
- */
- override public function addElementAt(c:Object, index:int, dispatchEvent:Boolean = true):void
- {
- if (c is IUIBase)
- {
- if (c is IChrome) {
- addChildAt(IUIBase(c).element as DisplayObject, index);
- IUIBase(c).addedToParent();
- }
- else {
- actualParent.addChildAt(IUIBase(c).element as DisplayObject, index);
- IUIBase(c).addedToParent();
- }
- }
- else {
- if (c is IChrome) {
- addChildAt(c as DisplayObject, index);
- } else {
- actualParent.addChildAt(c as DisplayObject, index);
- }
- }
- if (dispatchEvent)
- this.dispatchEvent(new Event("childrenAdded"));
- }
-
- /**
- * @private
- */
- override public function removeElement(c:Object, dispatchEvent:Boolean = true):void
- {
- if (c is IUIBase)
- actualParent.removeChild(IUIBase(c).element as DisplayObject);
- else
- actualParent.removeChild(c as DisplayObject);
- if (dispatchEvent)
- this.dispatchEvent(new Event("childrenRemoved"));
- }
-
- /**
- * Get the array of children. To change the children use
- * addElement, removeElement.
- */
- public function getChildren():Array
- {
- var children:Array = [];
- var n:int = actualParent.numChildren;
- for (var i:int = 0; i < n; i++)
- children.push(actualParent.getChildAt(i));
- return children;
}
- /**
- * @private
- */
- public function childrenAdded():void
- {
- dispatchEvent(new Event("childrenAdded"));
- }
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/Label.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/Label.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/Label.as
index 27d54ed..c47d8b9 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/Label.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/Label.as
@@ -56,6 +56,7 @@ package org.apache.flex.html
super();
}
+ [Bindable("textChange")]
/**
* The text to display in the label.
*
@@ -77,6 +78,7 @@ package org.apache.flex.html
ITextModel(model).text = value;
}
+ [Bindable("htmlChange")]
/**
* The html-formatted text to display in the label.
*
@@ -97,6 +99,17 @@ package org.apache.flex.html
{
ITextModel(model).html = value;
}
-
+
+
+ /**
+ * @private
+ */
+ override public function addedToParent():void
+ {
+ super.addedToParent();
+ model.addEventListener("textChange", repeaterListener);
+ model.addEventListener("htmlChange", repeaterListener);
+ }
+
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ContainerView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ContainerView.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ContainerView.as
index 59fb6f5..a6e8b25 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ContainerView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ContainerView.as
@@ -19,25 +19,25 @@
package org.apache.flex.html.beads
{
import org.apache.flex.core.BeadViewBase;
- import org.apache.flex.core.IBead;
+ import org.apache.flex.core.ContainerBase;
+ import org.apache.flex.core.IBead;
import org.apache.flex.core.IBeadLayout;
- import org.apache.flex.core.IBeadView;
- import org.apache.flex.core.ILayoutParent;
+ import org.apache.flex.core.IBeadView;
+ import org.apache.flex.core.ILayoutParent;
import org.apache.flex.core.IParentIUIBase;
- import org.apache.flex.core.IStrand;
+ import org.apache.flex.core.IStrand;
import org.apache.flex.core.IUIBase;
import org.apache.flex.core.UIBase;
- import org.apache.flex.core.ValuesManager;
+ import org.apache.flex.core.ValuesManager;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
- import org.apache.flex.html.Container;
- import org.apache.flex.html.supportClasses.Border;
- import org.apache.flex.html.supportClasses.ContainerContentArea;
- import org.apache.flex.html.supportClasses.ScrollBar;
+ import org.apache.flex.html.supportClasses.Border;
+ import org.apache.flex.html.supportClasses.ContainerContentArea;
+ import org.apache.flex.html.supportClasses.ScrollBar;
/**
* The ContainerView class is the default view for
- * the org.apache.flex.html.Container class.
+ * the org.apache.flex.core.ContainerBase classes.
* It lets you use some CSS styles to manage the border, background
* and padding around the content area.
*
@@ -71,6 +71,20 @@ package org.apache.flex.html.beads
protected var actualParent:UIBase;
/**
+ * The layout. The layout may actually layout
+ * the children of the internal content area
+ * and not the pieces of the "chrome" like titlebars
+ * and borders. The ContainerView or its subclass will have some
+ * baked-in logic for handling the chrome.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ protected var layout:IBeadLayout;
+
+ /**
* @copy org.apache.flex.core.IBead#strand
*
* @langversion 3.0
@@ -86,29 +100,30 @@ package org.apache.flex.html.beads
if (host.isWidthSizedToContent() && host.isHeightSizedToContent())
{
+ // if both dimensions are sized to content, then only draw the
+ // borders, etc, after a child is added. The children in an MXML
+ // document don't send this event until the last child is added.
host.addEventListener("childrenAdded", changeHandler);
- checkActualParent();
+ host.addEventListener("layoutNeeded", changeHandler);
+ // listen for width and height changes as well in case the app
+ // switches away from content sizing via binding or other code
+ host.addEventListener("widthChanged", changeHandler);
+ host.addEventListener("heightChanged", changeHandler);
}
else
{
+ // otherwise, listen for size changes before drawing
+ // borders and laying out children.
host.addEventListener("widthChanged", changeHandler);
host.addEventListener("heightChanged", changeHandler);
host.addEventListener("sizeChanged", sizeChangeHandler);
+ // if we have fixed size in both dimensions, wait for children
+ // to be added then run a layout pass right then as the
+ // parent won't kick off any other event in the child
if (!isNaN(host.explicitWidth) && !isNaN(host.explicitHeight))
- sizeChangeHandler(null);
- else
- checkActualParent();
- }
-
- if (_strand.getBeadByType(IBeadLayout) == null)
- {
- var c:Class = ValuesManager.valuesImpl.getValue(host, "iBeadLayout");
- if (c)
- {
- var layout:IBeadLayout = new c() as IBeadLayout;
- _strand.addBead(layout);
- }
+ host.addEventListener("childrenAdded", changeHandler);
}
+ checkActualParent();
}
private function checkActualParent():Boolean
@@ -120,8 +135,8 @@ package org.apache.flex.html.beads
{
actualParent = new ContainerContentArea();
actualParent.className = "ActualParent";
- host.addElement(actualParent);
- Container(host).setActualParent(actualParent);
+ host.addElement(actualParent, false);
+ ContainerBase(host).setActualParent(actualParent);
}
return true;
}
@@ -137,6 +152,7 @@ package org.apache.flex.html.beads
var host:UIBase = UIBase(_strand);
host.addEventListener("childrenAdded", changeHandler);
host.addEventListener("layoutNeeded", changeHandler);
+ host.addEventListener("itemsCreated", changeHandler);
changeHandler(event);
}
@@ -157,29 +173,73 @@ package org.apache.flex.html.beads
inChangeHandler = true;
var host:UIBase = UIBase(_strand);
-
+
+ if (layout == null)
+ {
+ layout = _strand.getBeadByType(IBeadLayout) as IBeadLayout;
+ if (layout == null)
+ {
+ var c:Class = ValuesManager.valuesImpl.getValue(host, "iBeadLayout");
+ if (c)
+ {
+ layout = new c() as IBeadLayout;
+ _strand.addBead(layout);
+ }
+ }
+ }
+
var padding:Object = determinePadding();
if (checkActualParent())
{
actualParent.x = padding.paddingLeft;
actualParent.y = padding.paddingTop;
- var pb:Number = padding.paddingBottom;
- if (isNaN(pb))
- pb = 0;
- var pr:Number = padding.paddingRight;
- if (isNaN(pr))
- pr = 0;
- if (!isNaN(host.explicitWidth) || !isNaN(host.percentWidth))
+ }
+ var pb:Number = padding.paddingBottom;
+ if (isNaN(pb))
+ pb = 0;
+ var pr:Number = padding.paddingRight;
+ if (isNaN(pr))
+ pr = 0;
+ // if the width is dictated by the parent
+ if (!host.isWidthSizedToContent())
+ {
+ if (actualParent != host)
+ {
+ // force the width of the internal content area as desired.
actualParent.setWidth(host.width - padding.paddingLeft - pr);
+ }
+ // run the layout
+ layout.layout();
+ }
+ else
+ {
+ // if the height is dictated by the parent
+ if (!host.isHeightSizedToContent())
+ {
+ if (actualParent != host)
+ {
+ // force the height
+ actualParent.setHeight(host.height - padding.paddingTop - pb);
+ }
+ }
+ layout.layout();
+ if (actualParent != host)
+ {
+ // actualParent.width should be the new width after layout.
+ // set the host's width. This should send a widthChanged event and
+ // have it blocked at the beginning of this method
+ host.setWidth(padding.paddingLeft + pr + actualParent.width);
+ }
+ }
+ // and if the height is sized to content, set the height now as well.
+ if (host != actualParent)
+ {
+ if (host.isHeightSizedToContent())
+ host.setHeight(padding.paddingTop + pb + actualParent.height);
else
- host.dispatchEvent(new Event("widthChanged"));
-
- if (!isNaN(host.explicitHeight) || !isNaN(host.percentHeight))
actualParent.setHeight(host.height - padding.paddingTop - pb);
- else
- host.dispatchEvent(new Event("heightChanged"));
- }
+ }
var backgroundColor:Object = ValuesManager.valuesImpl.getValue(host, "background-color");
var backgroundImage:Object = ValuesManager.valuesImpl.getValue(host, "background-image");
@@ -272,11 +332,10 @@ package org.apache.flex.html.beads
*/
protected function contentAreaNeeded():Boolean
{
- return true;
-// var padding:Object = determinePadding();
-//
-// return (!isNaN(padding.paddingLeft) && padding.paddingLeft > 0 ||
-// !isNaN(padding.paddingTop) && padding.paddingTop > 0);
+ var padding:Object = determinePadding();
+
+ return (!isNaN(padding.paddingLeft) && padding.paddingLeft > 0 ||
+ !isNaN(padding.paddingTop) && padding.paddingTop > 0);
}
/**
@@ -305,6 +364,8 @@ package org.apache.flex.html.beads
return _strand as IUIBase;
}
+ private var inGetViewHeight:Boolean;
+
/**
* @copy org.apache.flex.core.IBeadView#viewHeight
*
@@ -315,11 +376,19 @@ package org.apache.flex.html.beads
*/
override public function get viewHeight():Number
{
- // don't want to put $height in an interface
+ if (inGetViewHeight)
+ {
+ trace("ContainerView: no height set for " + host);
+ return host["$height"];
+ }
+ inGetViewHeight = true;
var vh:Number = contentView.height;
- return vh;
+ inGetViewHeight = false;
+ return vh;
}
+ private var inGetViewWidth:Boolean;
+
/**
* @copy org.apache.flex.core.IBeadView#viewWidth
*
@@ -330,10 +399,16 @@ package org.apache.flex.html.beads
*/
override public function get viewWidth():Number
{
- // don't want to put $width in an interface
+ if (inGetViewWidth)
+ {
+ trace("ContainerView: no width set for " + host);
+ return host["$width"];
+ }
+ inGetViewWidth = true;
var vw:Number = contentView.width;
+ inGetViewWidth = false;
return vw;
}
-
+
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ListView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ListView.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ListView.as
index 7b14d2a..87ac761 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ListView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ListView.as
@@ -147,6 +147,8 @@ package org.apache.flex.html.beads
return _strand as IUIBase;
}
+ private var _layout:IBeadLayout;
+
/**
* @private
*/
@@ -170,12 +172,15 @@ package org.apache.flex.html.beads
_strand = value;
for each (var bead:IBead in beads)
- addBead(bead);
+ addBead(bead);
dispatchEvent(new org.apache.flex.events.Event("beadsAdded"));
IEventDispatcher(_strand).addEventListener("widthChanged", handleSizeChange);
IEventDispatcher(_strand).addEventListener("heightChanged",handleSizeChange);
+ // this gets sent at least once after the beads are all in place.
+ IEventDispatcher(_strand).addEventListener("layoutNeeded",handleSizeChange);
+
listModel = value.getBeadByType(ISelectionModel) as ISelectionModel;
listModel.addEventListener("selectedIndexChanged", selectionChangeHandler);
listModel.addEventListener("rollOverIndexChanged", rollOverIndexChangeHandler);
@@ -191,13 +196,6 @@ package org.apache.flex.html.beads
}
IParent(_strand).addElement(_dataGroup);
- if (_strand.getBeadByType(IBeadLayout) == null)
- {
- var mapper:IBeadLayout = new (ValuesManager.valuesImpl.getValue(_strand, "iBeadLayout")) as IBeadLayout;
- _strand.addBead(mapper);
- }
-
- handleSizeChange(null);
}
private var lastSelectedIndex:int = -1;
@@ -268,16 +266,46 @@ package org.apache.flex.html.beads
IParent(_strand).addElement(vsb);
return vsb;
}
-
- /**
- * @private
- */
- private function handleSizeChange(event:Event):void
+
+ /**
+ * Layout everything except the DataGroup,
+ * but size the DataGroup as needed
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ protected function layoutList():void
+ {
+ UIBase(_dataGroup).x = 0;
+ UIBase(_dataGroup).y = 0;
+ UIBase(_dataGroup).width = UIBase(_strand).width;
+ UIBase(_dataGroup).height = UIBase(_strand).height;
+ }
+
+ /**
+ * respond to a change in size or request to re-layout everything
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ protected function handleSizeChange(event:Event):void
{
- UIBase(_dataGroup).x = 0;
- UIBase(_dataGroup).y = 0;
- UIBase(_dataGroup).width = UIBase(_strand).width;
- UIBase(_dataGroup).height = UIBase(_strand).height;
+ layoutList();
+
+ if (_layout == null)
+ {
+ _layout = _strand.getBeadByType(IBeadLayout) as IBeadLayout;
+ if (_layout == null)
+ {
+ _layout = new (ValuesManager.valuesImpl.getValue(_strand, "iBeadLayout")) as IBeadLayout;
+ _strand.addBead(_layout);
+ }
+ }
+ _layout.layout();
}
/**
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
index dac93ad..8be59e0 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/PanelView.as
@@ -93,6 +93,7 @@ package org.apache.flex.html.beads
if (!_titleBar)
_titleBar = new TitleBar();
+ _titleBar.percentWidth = 100;
// replace the TitleBar's model with the Panel's model (it implements ITitleBarModel) so that
// any changes to values in the Panel's model that correspond values in the TitleBar will
// be picked up automatically by the TitleBar.
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ScrollBarView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ScrollBarView.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ScrollBarView.as
index 8091b71..e6f31cf 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ScrollBarView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ScrollBarView.as
@@ -29,6 +29,8 @@ package org.apache.flex.html.beads
import org.apache.flex.core.Strand;
import org.apache.flex.core.UIBase;
import org.apache.flex.core.ValuesManager;
+ import org.apache.flex.events.IEventDispatcher;
+ import org.apache.flex.events.Event;
import org.apache.flex.html.Button;
import org.apache.flex.html.beads.controllers.ButtonAutoRepeatController;
@@ -63,6 +65,16 @@ package org.apache.flex.html.beads
private var _strand:IStrand;
/**
+ * The layout.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ private var layout:IBeadLayout;
+
+ /**
* The host component.
*
* @langversion 3.0
@@ -91,6 +103,13 @@ package org.apache.flex.html.beads
addBead(bead);
sbModel = value.getBeadByType(IScrollBarModel) as IScrollBarModel;
+ sbModel = _strand.getBeadByType(IScrollBarModel) as IScrollBarModel;
+ sbModel.addEventListener("maximumChange", changeHandler);
+ sbModel.addEventListener("minimumChange", changeHandler);
+ sbModel.addEventListener("snapIntervalChange", changeHandler);
+ sbModel.addEventListener("stepSizeChange", changeHandler);
+ sbModel.addEventListener("pageSizeChange", changeHandler);
+ sbModel.addEventListener("valueChange", changeHandler);
// TODO: (aharui) put in values impl
_increment = new Button();
@@ -109,13 +128,20 @@ package org.apache.flex.html.beads
UIBase(value).addChild(_track);
UIBase(value).addChild(_thumb);
+ IEventDispatcher(_strand).addEventListener("heightChanged", changeHandler);
+
if( _strand.getBeadByType(IBeadLayout) == null ) {
- var layout:IBeadLayout = new (ValuesManager.valuesImpl.getValue(_strand, "iBeadLayout")) as IBeadLayout;
+ layout = new (ValuesManager.valuesImpl.getValue(_strand, "iBeadLayout")) as IBeadLayout;
_strand.addBead(layout);
}
-
+ layout.layout();
}
+ private function changeHandler(event:Event):void
+ {
+ layout.layout();
+ }
+
private var _decrement:DisplayObject;
private var _increment:DisplayObject;
private var _track:DisplayObject;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ScrollingContainerView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ScrollingContainerView.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ScrollingContainerView.as
index b6098cc..ca702ee 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ScrollingContainerView.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/ScrollingContainerView.as
@@ -21,6 +21,7 @@ package org.apache.flex.html.beads
import org.apache.flex.core.BeadViewBase;
import org.apache.flex.core.IBead;
+ import org.apache.flex.core.IBeadLayout;
import org.apache.flex.core.IBeadView;
import org.apache.flex.core.IParent;
import org.apache.flex.core.IParentIUIBase;
@@ -29,7 +30,7 @@ package org.apache.flex.html.beads
import org.apache.flex.core.IUIBase;
import org.apache.flex.core.UIBase;
import org.apache.flex.core.ValuesManager;
- import org.apache.flex.events.Event;
+ import org.apache.flex.events.Event;
import org.apache.flex.html.Container;
import org.apache.flex.html.beads.models.ScrollBarModel;
import org.apache.flex.html.supportClasses.Border;
@@ -81,6 +82,20 @@ package org.apache.flex.html.beads
protected var actualParent:UIBase;
/**
+ * The layout. The layout may actually layout
+ * the children of the internal content area
+ * and not the pieces of the "chrome" like titlebars
+ * and borders. The ContainerView or its subclass will have some
+ * baked-in logic for handling the chrome.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ protected var layout:IBeadLayout;
+
+ /**
* @copy org.apache.flex.core.IBead#strand
*
* @langversion 3.0
@@ -92,20 +107,72 @@ package org.apache.flex.html.beads
{
super.strand = value;
var host:UIBase = value as UIBase;
- if (host.numChildren > 0)
- childHandler(null);
+
+ if (host.isWidthSizedToContent() && host.isHeightSizedToContent())
+ {
+ // if both dimensions are sized to content, then only draw the
+ // borders, etc, after a child is added. The children in an MXML
+ // document don't send this event until the last child is added.
+ host.addEventListener("childrenAdded", changeHandler);
+ host.addEventListener("layoutNeeded", changeHandler);
+ // listen for width and height changes as well in case the app
+ // switches away from content sizing via binding or other code
+ host.addEventListener("widthChanged", changeHandler);
+ host.addEventListener("heightChanged", changeHandler);
+ }
else
- host.addEventListener("childrenAdded", childHandler);
+ {
+ // otherwise, listen for size changes before drawing
+ // borders and laying out children.
+ host.addEventListener("widthChanged", changeHandler);
+ host.addEventListener("heightChanged", changeHandler);
+ host.addEventListener("sizeChanged", sizeChangeHandler);
+ // if we have fixed size in both dimensions, wait for children
+ // to be added then run a layout pass right then as the
+ // parent won't kick off any other event in the child
+ if (!isNaN(host.explicitWidth) && !isNaN(host.explicitHeight))
+ {
+ if (host.numChildren > 0)
+ changeHandler(null);
+ else
+ host.addEventListener("childrenAdded", changeHandler);
+ }
+ }
}
- private function childHandler(event:Event):void
+ private function sizeChangeHandler(event:Event):void
+ {
+ var host:UIBase = UIBase(_strand);
+ host.addEventListener("childrenAdded", changeHandler);
+ host.addEventListener("layoutNeeded", changeHandler);
+ host.addEventListener("itemsCreated", changeHandler);
+ changeHandler(event);
+ }
+
+ private function changeHandler(event:Event):void
{
var host:UIBase = _strand as UIBase;
+ if (layout == null)
+ {
+ layout = host.getBeadByType(IBeadLayout) as IBeadLayout;
+ if (layout == null)
+ {
+ var c:Class = ValuesManager.valuesImpl.getValue(host, "iBeadLayout");
+ if (c)
+ {
+ layout = new c() as IBeadLayout;
+ host.addBead(layout);
+ }
+ }
+ }
+
if (host.numChildren > 0)
{
actualParent = host.getChildAt(0) as UIBase;
}
+ layout.layout();
+
var backgroundColor:Object = ValuesManager.valuesImpl.getValue(host, "background-color");
var backgroundImage:Object = ValuesManager.valuesImpl.getValue(host, "background-image");
if (backgroundColor != null || backgroundImage != null)
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SolidBackgroundBead.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SolidBackgroundBead.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SolidBackgroundBead.as
index c62b59b..3078048 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SolidBackgroundBead.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/SolidBackgroundBead.as
@@ -86,12 +86,7 @@ package org.apache.flex.html.beads
if( bgAlpha != null ) {
opacity = Number(bgAlpha);
}
- var ilc:ILayoutChild = value as ILayoutChild;
- if (ilc)
- {
- if (!isNaN(ilc.explicitWidth) && !isNaN(ilc.explicitHeight))
- changeHandler(null);
- }
+ changeHandler(null);
}
private var _backgroundColor:uint;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicLayout.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicLayout.as
index 665e169..bb1bc08 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicLayout.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicLayout.as
@@ -71,46 +71,25 @@ package org.apache.flex.html.beads.layouts
public function set strand(value:IStrand):void
{
host = value as ILayoutChild;
-
- // if host is going to be sized by its parent, then don't
- // run layout when the children are added until after the
- // initial sizing by the parent.
- if (host.isWidthSizedToContent() && host.isHeightSizedToContent())
- {
- addOtherListeners();
- }
- else
- {
- host.addEventListener("heightChanged", changeHandler);
- host.addEventListener("widthChanged", changeHandler);
- host.addEventListener("sizeChanged", sizeChangeHandler);
- if (!isNaN(host.explicitWidth) && !isNaN(host.explicitHeight))
- addOtherListeners();
- }
}
-
- private function addOtherListeners():void
- {
- host.addEventListener("childrenAdded", changeHandler);
- host.addEventListener("layoutNeeded", changeHandler);
- host.addEventListener("itemsCreated", changeHandler);
- }
-
- private function sizeChangeHandler(event:Event):void
- {
- addOtherListeners();
- changeHandler(event);
- }
-
- private function changeHandler(event:Event):void
+
+ /**
+ * @copy org.apache.flex.core.IBeadLayout#layout
+ */
+ public function layout():Boolean
{
//trace(DOMPathUtil.getPath(host), event ? event.type : "fixed size");
var layoutParent:ILayoutParent = host.getBeadByType(ILayoutParent) as ILayoutParent;
var contentView:IParentIUIBase = layoutParent ? layoutParent.contentView : IParentIUIBase(host);
- var w:Number = contentView.width;
- var h:Number = contentView.height;
+ var hostWidthSizedToContent:Boolean = host.isWidthSizedToContent();
+ var hostHeightSizedToContent:Boolean = host.isHeightSizedToContent();
+ var w:Number = hostWidthSizedToContent ? 0 : contentView.width;
+ var h:Number = hostHeightSizedToContent ? 0 : contentView.height;
var n:int = contentView.numElements;
+ var maxWidth:Number = 0;
+ var maxHeight:Number = 0;
+ var childData:Array = [];
for (var i:int = 0; i < n; i++)
{
var child:IUIBase = contentView.getElementAt(i) as IUIBase;
@@ -134,42 +113,131 @@ package org.apache.flex.html.beads.layouts
var ilc:ILayoutChild = child as ILayoutChild;
if (ilc)
{
- ilc = child as ILayoutChild;
- if (!isNaN(ilc.percentWidth))
- ilc.setWidth((ww - (isNaN(right) ? 0 : right)) * ilc.percentWidth / 100, true);
+ if (!hostWidthSizedToContent)
+ {
+ if (!isNaN(ilc.percentWidth))
+ ilc.setWidth((ww - (isNaN(right) ? 0 : right)) * ilc.percentWidth / 100, true);
+ }
+ else
+ childData[i] = { bottom: bottom, right: right, ww: ww, ilc: ilc, child: child };
}
if (!isNaN(right))
{
- if (!isNaN(left))
+ if (!hostWidthSizedToContent)
{
- if (ilc)
- ilc.setWidth(ww - right);
+ if (!isNaN(left))
+ {
+ if (ilc)
+ ilc.setWidth(ww - right, true);
+ else
+ child.width = ww - right;
+ }
else
- child.width = ww - right;
+ child.x = w - right - child.clientWidth;
}
else
- child.x = w - right - child.clientWidth;
+ childData[i] = { ww: ww, left: left, right: right, ilc: ilc, child: child };
}
- if (child is ILayoutChild)
+ if (ilc)
{
- ilc = child as ILayoutChild;
- if (!isNaN(ilc.percentHeight))
- ilc.setHeight((hh - (isNaN(bottom) ? 0 : bottom)) * ilc.percentHeight / 100, true);
+ if (!hostHeightSizedToContent)
+ {
+ if (!isNaN(ilc.percentHeight))
+ ilc.setHeight((hh - (isNaN(bottom) ? 0 : bottom)) * ilc.percentHeight / 100, true);
+ }
+ else
+ {
+ if (!childData[i])
+ childData[i] = { hh: hh, bottom: bottom, ilc: ilc, child: child };
+ else
+ {
+ childData[i].hh = hh;
+ childData[i].bottom = bottom;
+ }
+ }
}
if (!isNaN(bottom))
{
- if (!isNaN(top))
+ if (!hostHeightSizedToContent)
{
- if (ilc)
- ilc.setHeight(hh - bottom);
+ if (!isNaN(top))
+ {
+ if (ilc)
+ ilc.setHeight(hh - bottom, true);
+ else
+ child.height = hh - bottom;
+ }
else
- child.height = hh - bottom;
+ child.y = h - bottom - child.clientHeight;
}
else
- child.y = h - bottom - child.clientHeight;
+ {
+ if (!childData[i])
+ childData[i] = { top: top, bottom: bottom, hh:hh, ilc: ilc, child: child };
+ else
+ {
+ childData[i].top = top;
+ childData[i].bottom = bottom;
+ childData[i].hh = hh;
+ }
+ }
}
- child.dispatchEvent(new Event("sizeChanged"));
+ if (!childData[i])
+ child.dispatchEvent(new Event("sizeChanged"));
+ maxWidth = Math.max(maxWidth, child.x + child.clientWidth);
+ maxHeight = Math.max(maxHeight, child.y + child.clientHeight);
}
+ if (hostHeightSizedToContent || hostWidthSizedToContent)
+ {
+ if (hostHeightSizedToContent)
+ ILayoutChild(contentView).setHeight(maxHeight, true);
+ if (hostHeightSizedToContent)
+ ILayoutChild(contentView).setWidth(maxWidth, true);
+ for (i = 0; i < n; i++)
+ {
+ var data:Object = childData[i];
+ if (data)
+ {
+ if (hostWidthSizedToContent)
+ {
+ if (data.ilc && !isNaN(data.ilc.percentWidth))
+ data.ilc.setWidth((data.ww - (isNaN(data.right) ? 0 : data.right)) * data.ilc.percentWidth / 100, true);
+ if (!isNaN(data.right))
+ {
+ if (!isNaN(data.left))
+ {
+ if (data.ilc)
+ data.ilc.setWidth(data.ww - data.right, true);
+ else
+ data.child.width = data.ww - data.right;
+ }
+ else
+ data.child.x = maxWidth - data.right - data.child.clientWidth;
+ }
+ }
+ if (hostHeightSizedToContent)
+ {
+ if (data.ilc && !isNaN(data.ilc.percentHeight))
+ data.ilc.setHeight((data.hh - (isNaN(data.bottom) ? 0 : data.bottom)) * data.ilc.percentHeight / 100, true);
+ if (!isNaN(data.bottom))
+ {
+ if (!isNaN(data.top))
+ {
+ if (data.ilc)
+ data.ilc.setHeight(data.hh - data.bottom, true);
+ else
+ data.child.height = data.hh - data.bottom;
+ }
+ else
+ data.child.y = maxHeight - data.bottom - data.child.clientHeight;
+ }
+ }
+ child.dispatchEvent(new Event("sizeChanged"));
+ }
+ }
+
+ }
+ return true;
}
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicScrollingLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicScrollingLayout.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicScrollingLayout.as
index e9ef9ef..c432985 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicScrollingLayout.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/BasicScrollingLayout.as
@@ -77,23 +77,15 @@ package org.apache.flex.html.beads.layouts
public function set strand(value:IStrand):void
{
_strand = value;
- IEventDispatcher(value).addEventListener("heightChanged", changeHandler);
- IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
- IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
- IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
- IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
- IEventDispatcher(value).addEventListener("beadsAdded", changeHandler);
}
- private function changeHandler(event:Event):void
+ /**
+ * @copy org.apache.flex.core.IBeadLayout#layout
+ */
+ public function layout():Boolean
{
var layoutParent:IScrollingLayoutParent = _strand.getBeadByType(IScrollingLayoutParent) as IScrollingLayoutParent;
var contentView:IParentIUIBase = layoutParent.contentView;
- if (!contentView)
- return;
-
- IEventDispatcher(contentView).addEventListener("childrenAdded", changeHandler);
- IEventDispatcher(contentView).addEventListener("layoutNeeded", changeHandler);
var border:Border = layoutParent.border;
var borderModel:IBorderModel;
@@ -208,8 +200,7 @@ package org.apache.flex.html.beads.layouts
DisplayObject(contentView).scrollRect = null;
vScrollBar.visible = false;
}
-
- IEventDispatcher(_strand).dispatchEvent(new Event("layoutComplete"));
+ return true;
}
private function scrollHandler(event:Event):void
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
index 7589cdb..83e6803 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/ButtonBarLayout.as
@@ -71,12 +71,6 @@ package org.apache.flex.html.beads.layouts
public function set strand(value:IStrand):void
{
_strand = value;
- IEventDispatcher(value).addEventListener("sizeChanged", changeHandler);
- IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
- IEventDispatcher(value).addEventListener("heightChanged", changeHandler);
- IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
- IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
- IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
}
private var _buttonWidths:Array = null;
@@ -100,9 +94,9 @@ package org.apache.flex.html.beads.layouts
}
/**
- * @private
+ * @copy org.apache.flex.core.IBeadLayout#layout
*/
- private function changeHandler(event:Event):void
+ public function layout():Boolean
{
var layoutParent:ILayoutParent = _strand.getBeadByType(ILayoutParent) as ILayoutParent;
var contentView:IParent = layoutParent.contentView;
@@ -133,6 +127,7 @@ package org.apache.flex.html.beads.layouts
else UIBase(ir).width = useWidth;
xpos += UIBase(ir).width;
}
+ return true;
}
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalLayout.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalLayout.as
index 0105e2b..5400432 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalLayout.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalLayout.as
@@ -19,15 +19,15 @@
package org.apache.flex.html.beads.layouts
{
import org.apache.flex.core.IBeadLayout;
- import org.apache.flex.core.ILayoutChild;
+ import org.apache.flex.core.ILayoutChild;
import org.apache.flex.core.ILayoutParent;
+ import org.apache.flex.core.IParentIUIBase;
import org.apache.flex.core.IStrand;
- import org.apache.flex.core.IParentIUIBase;
- import org.apache.flex.core.IUIBase;
+ import org.apache.flex.core.IUIBase;
import org.apache.flex.core.ValuesManager;
import org.apache.flex.events.Event;
import org.apache.flex.events.IEventDispatcher;
- import org.apache.flex.utils.dbg.DOMPathUtil;
+ import org.apache.flex.utils.dbg.DOMPathUtil;
/**
* The HorizontalLayout class is a simple layout
@@ -70,44 +70,19 @@ package org.apache.flex.html.beads.layouts
public function set strand(value:IStrand):void
{
host = value as ILayoutChild;
-
- // if host is going to be sized by its parent, then don't
- // run layout when the children are added until after the
- // initial sizing by the parent.
- if (host.isWidthSizedToContent() && host.isHeightSizedToContent())
- {
- addOtherListeners();
- }
- else
- {
- host.addEventListener("widthChanged", changeHandler);
- host.addEventListener("heightChanged", changeHandler);
- host.addEventListener("sizeChanged", sizeChangeHandler);
- if (!isNaN(host.explicitWidth) && !isNaN(host.explicitHeight))
- addOtherListeners();
- }
}
- private function addOtherListeners():void
- {
- host.addEventListener("childrenAdded", changeHandler);
- host.addEventListener("layoutNeeded", changeHandler);
- host.addEventListener("itemsCreated", changeHandler);
- }
-
- private function sizeChangeHandler(event:Event):void
- {
- addOtherListeners();
- changeHandler(event);
- }
-
- private function changeHandler(event:Event):void
+ /**
+ * @copy org.apache.flex.core.IBeadLayout#layout
+ */
+ public function layout():Boolean
{
//trace(DOMPathUtil.getPath(host), event ? event.type : "fixed size");
var layoutParent:ILayoutParent = host.getBeadByType(ILayoutParent) as ILayoutParent;
var contentView:IParentIUIBase = layoutParent.contentView;
var n:int = contentView.numElements;
+ var hostSizedToContent:Boolean = host.isHeightSizedToContent();
var ilc:ILayoutChild;
var marginLeft:Object;
var marginRight:Object;
@@ -115,12 +90,18 @@ package org.apache.flex.html.beads.layouts
var marginBottom:Object;
var margin:Object;
var maxHeight:Number = 0;
+ // asking for contentView.width can result in infinite loop if host isn't sized already
+ var h:Number = hostSizedToContent ? 0 : contentView.height;
var verticalMargins:Array = [];
+ var hasVerticalAlign:Boolean;
for (var i:int = 0; i < n; i++)
{
var child:IUIBase = contentView.getElementAt(i) as IUIBase;
if (child == null || !child.visible) continue;
+ var top:Number = ValuesManager.valuesImpl.getValue(child, "top");
+ var bottom:Number = ValuesManager.valuesImpl.getValue(child, "bottom");
+ ilc = child as ILayoutChild;
margin = ValuesManager.valuesImpl.getValue(child, "margin");
if (margin is Array)
{
@@ -161,6 +142,16 @@ package org.apache.flex.html.beads.layouts
mb = Number(marginBottom);
if (isNaN(mb))
mb = 0;
+ var xx:Number;
+ if (i == 0)
+ child.x = ml;
+ else
+ child.x = xx + ml + lastmr;
+ if (ilc)
+ {
+ if (!isNaN(ilc.percentWidth))
+ ilc.setWidth(contentView.width * ilc.percentWidth / 100, !isNaN(ilc.percentHeight));
+ }
if (marginLeft == "auto")
ml = 0;
else
@@ -177,43 +168,112 @@ package org.apache.flex.html.beads.layouts
if (isNaN(mr))
mr = 0;
}
- child.y = mt;
- maxHeight = Math.max(maxHeight, ml + child.clientHeight + mr);
- var xx:Number;
- if (i == 0)
- child.x = ml;
- else
- child.x = xx + ml + lastmr;
- if (child is ILayoutChild)
+ lastmr = mr;
+ var marginObject:Object = {};
+ verticalMargins[i] = marginObject;
+ if (!hostSizedToContent)
{
- ilc = child as ILayoutChild;
- if (!isNaN(ilc.percentWidth))
- ilc.setWidth(contentView.width * ilc.percentWidth / 100, true);
+ // if host is sized by parent,
+ // we can position and size children horizontally now
+ setPositionAndHeight(child, top, mt, bottom, mb, h);
+ }
+ else
+ {
+ if (!isNaN(top))
+ {
+ mt = top;
+ marginObject.top = mt;
+ }
+ if (!isNaN(bottom))
+ {
+ mb = bottom;
+ marginObject.bottom = mb;
+ }
+ maxHeight = Math.max(maxHeight, mt + child.clientHeight + mb);
}
xx = child.x + child.clientWidth;
- lastmr = mr;
- var valign:Object = ValuesManager.valuesImpl.getValue(child, "vertical-align");
- verticalMargins.push({ marginTop: mt, marginBottom: mb, valign: valign });
+ var valign:* = ValuesManager.valuesImpl.getValue(child, "vertical-align");
+ marginObject.valign = valign;
+ if (valign !== undefined)
+ hasVerticalAlign = true;
}
- for (i = 0; i < n; i++)
- {
- var obj:Object = verticalMargins[0]
- child = contentView.getElementAt(i) as IUIBase;
- if (child == null || !child.visible) continue;
- if (child is ILayoutChild)
+ if (hostSizedToContent)
+ {
+ ILayoutChild(contentView).setHeight(maxHeight, true);
+ if (host.isWidthSizedToContent())
+ ILayoutChild(contentView).setWidth(xx, true);
+ for (i = 0; i < n; i++)
{
- ilc = child as ILayoutChild;
- if (!isNaN(ilc.percentHeight))
- ilc.setHeight(contentView.height * ilc.percentHeight / 100, true);
+ child = contentView.getElementAt(i) as IUIBase;
+ if (child == null || !child.visible) continue;
+ var obj:Object = verticalMargins[i];
+ setPositionAndHeight(child, obj.top, obj.marginTop,
+ obj.bottom, obj.marginBottom, maxHeight);
}
- if (obj.valign == "middle")
- child.y = (maxHeight - child.clientHeight) / 2;
- else if (valign == "bottom")
- child.y = maxHeight - child.clientHeight - obj.marginBottom;
- else
- child.y = obj.marginTop;
- child.dispatchEvent(new Event("sizeChanged"));
- }
+ }
+ if (hasVerticalAlign)
+ {
+ for (i = 0; i < n; i++)
+ {
+ child = contentView.getElementAt(i) as IUIBase;
+ if (child == null || !child.visible) continue;
+ obj = verticalMargins[i];
+ if (child is ILayoutChild)
+ {
+ ilc = child as ILayoutChild;
+ if (!isNaN(ilc.percentHeight))
+ ilc.setHeight(contentView.height * ilc.percentHeight / 100, !isNaN(ilc.percentHeight));
+ }
+ if (obj.valign == "middle")
+ child.y = (maxHeight - child.clientHeight) / 2;
+ else if (valign == "bottom")
+ child.y = maxHeight - child.clientHeight - obj.marginBottom;
+ else
+ child.y = obj.marginTop;
+ }
+ }
+ return true;
}
+
+ private function setPositionAndHeight(child:IUIBase, top:Number, mt:Number,
+ bottom:Number, mb:Number, h:Number):void
+ {
+ var heightSet:Boolean = false;
+
+ var hh:Number = h;
+ var ilc:ILayoutChild = child as ILayoutChild;
+ if (!isNaN(top))
+ {
+ child.y = top + mt;
+ hh -= top + mt;
+ }
+ else
+ {
+ child.y = mt;
+ hh -= top;
+ }
+ if (!isNaN(bottom))
+ {
+ if (!isNaN(top))
+ {
+ if (ilc)
+ ilc.setHeight(hh - bottom - mb, true);
+ else
+ {
+ child.height = hh - bottom - mb;
+ heightSet = true;
+ }
+ }
+ else
+ child.y = h - bottom - mb - child.clientHeight;
+ }
+ if (ilc)
+ {
+ if (!isNaN(ilc.percentHeight))
+ ilc.setHeight(h * ilc.percentHeight / 100, true);
+ }
+ if (!heightSet)
+ child.dispatchEvent(new Event("sizeChanged"));
+ }
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalScrollingLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalScrollingLayout.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalScrollingLayout.as
index 1e19e48..066d5f1 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalScrollingLayout.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/HorizontalScrollingLayout.as
@@ -70,13 +70,17 @@ package org.apache.flex.html.beads.layouts
public function set strand(value:IStrand):void
{
_strand = value;
-
- IEventDispatcher(value).addEventListener("heightChanged", changeHandler);
- IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
- IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
}
- private function changeHandler(event:Event):void
+ /**
+ * @copy org.apache.flex.core.IBeadLayout#layout
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+ public function layout():Boolean
{
var layoutParent:IScrollingLayoutParent =
_strand.getBeadByType(IScrollingLayoutParent) as IScrollingLayoutParent;
@@ -126,6 +130,7 @@ package org.apache.flex.html.beads.layouts
hScrollBar.visible = false;
}
*/
+ return true;
}
/*private function scrollHandler(event:Event):void
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/TileLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/TileLayout.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/TileLayout.as
index cbdb4dc..ea7e7df 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/TileLayout.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/TileLayout.as
@@ -63,11 +63,7 @@ package org.apache.flex.html.beads.layouts
*/
public function set strand(value:IStrand):void
{
- _strand = value;
-
- IEventDispatcher(_strand).addEventListener("itemsCreated",handleCreated);
- IEventDispatcher(_strand).addEventListener("childrenAdded",handleCreated);
- IEventDispatcher(_strand).addEventListener("layoutNeeded",handleCreated);
+ _strand = value;
}
private var _numColumns:Number = 4;
@@ -129,32 +125,21 @@ package org.apache.flex.html.beads.layouts
_rowHeight = value;
}
- /**
- * @private
- */
- private function handleCreated(event:Event):void
- {
- // this is where we know the strand has things in it and we want to
- // get the part of the strand that holds the items for the layout
- updateLayout();
- }
-
- /**
- * @private
- */
- protected function updateLayout():void
+ /**
+ * @copy org.apache.flex.core.IBeadLayout#layout
+ */
+ public function layout():Boolean
{
// this is where the layout is calculated
var p:ILayoutParent = _strand.getBeadByType(ILayoutParent) as ILayoutParent;
var area:UIBase = p.contentView as UIBase;
- if (area == null) return;
var xpos:Number = 0;
var ypos:Number = 0;
var useWidth:Number = columnWidth;
var useHeight:Number = rowHeight;
var n:Number = area.numChildren;
- if (n == 0) return;
+ if (n == 0) return false;
var realN:Number = n;
for(var j:int=0; j < n; j++)
@@ -188,6 +173,7 @@ package org.apache.flex.html.beads.layouts
ypos += useHeight;
}
}
+ return true;
}
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/3c23b3a1/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VScrollBarLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VScrollBarLayout.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VScrollBarLayout.as
index f01b2b4..6d299eb 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VScrollBarLayout.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/beads/layouts/VScrollBarLayout.as
@@ -69,19 +69,16 @@ package org.apache.flex.html.beads.layouts
{
_strand = value;
sbView = _strand.getBeadByType(IScrollBarView) as IScrollBarView;
- sbModel = _strand.getBeadByType(IScrollBarModel) as IScrollBarModel;
- sbModel.addEventListener("maximumChange", changeHandler);
- sbModel.addEventListener("minimumChange", changeHandler);
- sbModel.addEventListener("snapIntervalChange", changeHandler);
- sbModel.addEventListener("stepSizeChange", changeHandler);
- sbModel.addEventListener("pageSizeChange", changeHandler);
- sbModel.addEventListener("valueChange", changeHandler);
- IEventDispatcher(_strand).addEventListener("heightChanged", changeHandler);
- changeHandler(null);
}
- private function changeHandler(event:Event):void
+ /**
+ * @copy org.apache.flex.core.IBeadLayout#layout
+ */
+ public function layout():Boolean
{
+ if (!sbModel)
+ sbModel = _strand.getBeadByType(IScrollBarModel) as IScrollBarModel
+
var h:Number = DisplayObject(_strand).height;
var increment:DisplayObject = sbView.increment;
var decrement:DisplayObject = sbView.decrement;
@@ -105,6 +102,7 @@ package org.apache.flex.html.beads.layouts
{
thumb.visible = false;
}
+ return true;
}
}