This is an automated email from the ASF dual-hosted git repository. gregdove pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 57465046da4678a9e3f1613021e736955187a804 Author: greg-dove <[email protected]> AuthorDate: Tue Jan 25 12:48:20 2022 +1300 Some interim tuning in core classes to avoid duplicated code for removeBead method, and adding support for unlistening to strand in LayoutBase if layout is set to null (layout swapping) --- .../royale/org/apache/royale/core/Application.as | 6 +- .../royale/org/apache/royale/html/MXMLBeadView.as | 6 +- .../org/apache/royale/html/beads/TextAreaView.as | 6 +- .../html/supportClasses/TextFieldItemRenderer.as | 8 +- .../projects/Core/src/main/royale/CoreClasses.as | 1 + .../src/main/royale/org/apache/royale/core/Bead.as | 9 ++- .../org/apache/royale/core/ElementWrapper.as | 11 ++- .../org/apache/royale/core/HTMLElementWrapper.as | 6 +- .../royale/org/apache/royale/core/LayoutBase.as | 20 +++-- .../main/royale/org/apache/royale/core/Strand.as | 6 +- .../royale/org/apache/royale/core/UIButtonBase.as | 8 +- .../org/apache/royale/utils/removeBeadFromBeads.as | 91 ++++++++++++++++++++++ .../royale/org/apache/royale/jewel/Application.as | 7 +- .../royale/org/apache/royale/net/BinaryUploader.as | 9 ++- .../royale/org/apache/royale/net/HTTPService.as | 9 ++- 15 files changed, 167 insertions(+), 36 deletions(-) diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/Application.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/Application.as index 6102f79..3b673cc 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/Application.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/Application.as @@ -24,6 +24,7 @@ package org.apache.royale.core import org.apache.royale.events.MouseEvent; import org.apache.royale.utils.MXMLDataInterpreter; import org.apache.royale.utils.Timer; + import org.apache.royale.utils.removeBeadFromBeads; import org.apache.royale.utils.sendEvent; COMPILE::SWF { @@ -460,7 +461,7 @@ package org.apache.royale.core COMPILE::SWF public function removeBead(value:IBead):IBead { - var n:int = _beads.length; + /* var n:int = _beads.length; for (var i:int = 0; i < n; i++) { var bead:IBead = _beads[i]; @@ -470,7 +471,8 @@ package org.apache.royale.core return bead; } } - return null; + return null;*/ + return removeBeadFromBeads(_beads,value,false); } /** diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/MXMLBeadView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/MXMLBeadView.as index c5896e0..9995e34 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/MXMLBeadView.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/MXMLBeadView.as @@ -31,6 +31,7 @@ package org.apache.royale.html import org.apache.royale.utils.MXMLDataInterpreter; import org.apache.royale.utils.loadBeadFromValuesManager; import org.apache.royale.core.IStrandWithModel; + import org.apache.royale.utils.removeBeadFromBeads; [DefaultProperty("mxmlContent")] @@ -306,7 +307,7 @@ package org.apache.royale.html */ public function removeBead(value:IBead):IBead { - var n:int = _beads.length; + /* var n:int = _beads.length; for (var i:int = 0; i < n; i++) { var bead:IBead = _beads[i]; @@ -316,7 +317,8 @@ package org.apache.royale.html return bead; } } - return null; + return null;*/ + return removeBeadFromBeads(_beads,value, false); } } diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextAreaView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextAreaView.as index bb239e5..c61ac78 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextAreaView.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextAreaView.as @@ -33,6 +33,7 @@ package org.apache.royale.html.beads import org.apache.royale.html.supportClasses.Border; import org.apache.royale.html.supportClasses.VScrollBar; import org.apache.royale.html.beads.models.ScrollBarModel; + import org.apache.royale.utils.removeBeadFromBeads; /** * The TextAreaView class is the default view for @@ -248,7 +249,7 @@ package org.apache.royale.html.beads */ public function removeBead(value:IBead):IBead { - var n:int = _beads.length; + /*var n:int = _beads.length; for (var i:int = 0; i < n; i++) { var bead:IBead = _beads[i]; @@ -258,7 +259,8 @@ package org.apache.royale.html.beads return bead; } } - return null; + return null;*/ + return removeBeadFromBeads(_beads, value, false); } } } diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as index 5efc71f..3c98bd6 100644 --- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as +++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as @@ -41,7 +41,8 @@ package org.apache.royale.html.supportClasses import org.apache.royale.html.beads.ITextItemRenderer; import org.apache.royale.utils.loadBeadFromValuesManager; import org.apache.royale.core.IHasLabelField; - + import org.apache.royale.utils.removeBeadFromBeads; + /** * The TextFieldItemRenderer class provides a org.apache.royale.html.TextField as an itemRenderer. * @@ -542,7 +543,7 @@ package org.apache.royale.html.supportClasses */ public function removeBead(value:IBead):IBead { - var n:int = _beads.length; + /*var n:int = _beads.length; for (var i:int = 0; i < n; i++) { var bead:IBead = _beads[i]; @@ -552,7 +553,8 @@ package org.apache.royale.html.supportClasses return bead; } } - return null; + return null;*/ + return removeBeadFromBeads(_beads,value, false) } /** diff --git a/frameworks/projects/Core/src/main/royale/CoreClasses.as b/frameworks/projects/Core/src/main/royale/CoreClasses.as index ebb47c4..8dc1095 100644 --- a/frameworks/projects/Core/src/main/royale/CoreClasses.as +++ b/frameworks/projects/Core/src/main/royale/CoreClasses.as @@ -330,6 +330,7 @@ internal class CoreClasses import org.apache.royale.utils.measureComponent; measureComponent; import org.apache.royale.utils.loadBeadFromValuesManager; loadBeadFromValuesManager; + import org.apache.royale.utils.removeBeadFromBeads;removeBeadFromBeads; import org.apache.royale.utils.HSV; HSV; import org.apache.royale.utils.rgbToHsv; rgbToHsv; import org.apache.royale.utils.hsvToHex; hsvToHex; diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/Bead.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/Bead.as index a36c76c..9dbf053 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/Bead.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/Bead.as @@ -65,10 +65,15 @@ package org.apache.royale.core /** * Helper function to attach event listener without the need for casting * @royaleignorecoercion org.apache.royale.events.IEventDispatcher + * */ - protected function listenOnStrand(eventType:String,handler:Function,capture:Boolean=false):void + protected function listenOnStrand(eventType:String,handler:Function,capture:Boolean=false,unListen:Boolean=false):void { - (_strand as IEventDispatcher).addEventListener(eventType, handler, capture); + if (unListen) { + (_strand as IEventDispatcher).removeEventListener(eventType, handler, capture); + } else { + (_strand as IEventDispatcher).addEventListener(eventType, handler, capture); + } } } diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as index f6ee842..f5517a1 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as @@ -39,6 +39,7 @@ package org.apache.royale.core import org.apache.royale.events.Event; import org.apache.royale.events.EventDispatcher; + import org.apache.royale.utils.removeBeadFromBeads; COMPILE::SWF public class ElementWrapper extends EventDispatcher implements IStrand @@ -114,7 +115,7 @@ package org.apache.royale.core */ public function removeBead(bead:IBead):IBead { - var i:uint, n:uint, value:Object; + /*var i:uint, n:uint, value:Object; n = _beads.length; for (i = 0; i < n; i++) { @@ -128,7 +129,8 @@ package org.apache.royale.core } } - return null; + return null;*/ + return removeBeadFromBeads(_beads,bead, true); } override public function addEventListener(type:String, handler:Function, opt_capture:Boolean = false, priority:int = 0, weak:Boolean = false):void @@ -305,7 +307,7 @@ package org.apache.royale.core */ public function removeBead(bead:IBead):IBead { - var i:uint, n:uint, value:Object; + /*var i:uint, n:uint, value:Object; n = _beads.length; for (i = 0; i < n; i++) { @@ -318,7 +320,8 @@ package org.apache.royale.core } } - return null; + return null;*/ + return removeBeadFromBeads(_beads,bead, false); } override public function addEventListener(type:String, handler:Function, opt_capture:Boolean = false, opt_handlerScope:Object = null):void diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as index 694f20a..c21738d 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as @@ -19,6 +19,7 @@ package org.apache.royale.core { import org.apache.royale.events.IEventDispatcher; + import org.apache.royale.utils.removeBeadFromBeads; COMPILE::SWF { @@ -98,7 +99,7 @@ package org.apache.royale.core */ public function removeBead(value:IBead):IBead { - var n:int = _beads.length; + /*var n:int = _beads.length; for (var i:int = 0; i < n; i++) { var bead:IBead = _beads[i]; @@ -108,7 +109,8 @@ package org.apache.royale.core return bead; } } - return null; + return null;*/ + return removeBeadFromBeads(_beads,value, false); } diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/LayoutBase.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/LayoutBase.as index 2110809..2f9733e 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/LayoutBase.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/LayoutBase.as @@ -84,16 +84,24 @@ package org.apache.royale.core */ override public function set strand(value:IStrand):void { + if (value != _strand) { + if (_strand) setListeners(true); + } _strand = value; host = value as ILayoutChild; - listenOnStrand("widthChanged", handleSizeChange); - listenOnStrand("heightChanged", handleSizeChange); - listenOnStrand("sizeChanged", handleSizeChange); + if (value) { + setListeners(); + } + } - listenOnStrand("childrenAdded", handleChildrenAdded); - listenOnStrand("initComplete", handleInitComplete); - listenOnStrand("layoutNeeded", handleLayoutNeeded); + protected function setListeners(off:Boolean=false):void{ + listenOnStrand("widthChanged", handleSizeChange, false, off); + listenOnStrand("heightChanged", handleSizeChange, false, off); + listenOnStrand("sizeChanged", handleSizeChange, false, off); + listenOnStrand("childrenAdded", handleChildrenAdded, false, off); + listenOnStrand("initComplete", handleInitComplete, false, off); + listenOnStrand("layoutNeeded", handleLayoutNeeded, false, off); } private var lastWidth:Number = -1; diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/Strand.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/Strand.as index 5610ccc..c5a8901 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/Strand.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/Strand.as @@ -20,6 +20,7 @@ package org.apache.royale.core { import org.apache.royale.events.Event; import org.apache.royale.events.EventDispatcher; + import org.apache.royale.utils.removeBeadFromBeads; import org.apache.royale.utils.sendStrandEvent; /** @@ -131,7 +132,7 @@ package org.apache.royale.core */ public function removeBead(value:IBead):IBead { - var n:int = _beads.length; + /*var n:int = _beads.length; for (var i:int = 0; i < n; i++) { var bead:IBead = _beads[i]; @@ -141,7 +142,8 @@ package org.apache.royale.core return bead; } } - return null; + return null;*/ + return removeBeadFromBeads(_beads,value, false); } } diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/UIButtonBase.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/UIButtonBase.as index 7620dd5..38bc88c 100644 --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/UIButtonBase.as +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/UIButtonBase.as @@ -31,7 +31,8 @@ package org.apache.royale.core import org.apache.royale.events.utils.MouseEventConverter; import org.apache.royale.events.IEventDispatcher; import org.apache.royale.utils.loadBeadFromValuesManager; - + import org.apache.royale.utils.removeBeadFromBeads; + //-------------------------------------- // Events //-------------------------------------- @@ -808,7 +809,7 @@ package org.apache.royale.core */ public function removeBead(value:IBead):IBead { - var n:int = strand.length; + /*var n:int = strand.length; for (var i:int = 0; i < n; i++) { var bead:IBead = strand[i]; @@ -818,7 +819,8 @@ package org.apache.royale.core return bead; } } - return null; + return null;*/ + return removeBeadFromBeads(strand,value, false) } /** diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/removeBeadFromBeads.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/removeBeadFromBeads.as new file mode 100644 index 0000000..c466c75 --- /dev/null +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/removeBeadFromBeads.as @@ -0,0 +1,91 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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 org.apache.royale.utils +{ + import org.apache.royale.core.IBead; + import org.apache.royale.core.IStrand; + import org.apache.royale.core.ValuesManager; + + /** + * Utility function for internal use in removeBead methods + * @param beads the implementation's collection of beads to check against + * @param beadToRemove the bead to remove + * @param setStrandNull true if the strand setter of the removed bead should be set to null when it is removed + * + * @return the removed Bead (if it was present), with its strand value set to null, otherwise null (no bead was removed). + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Royale 0.9.9 + * + */ + COMPILE::SWF + public function removeBeadFromBeads(beads:Vector.<IBead>, beadToRemove:IBead, setStrandNull:Boolean):IBead + { + var i:uint, n:uint; + n = beads.length; + for (i = 0; i < n; i++) + { + if (beadToRemove === beads[i]) + { + beads.splice(i, 1); + if (setStrandNull) beadToRemove.strand = null; + return beadToRemove; + } + } + return null; + } + + + /** + * Utility function for internal use in removeBead methods + * @param beads the implementation's collection of beads to check against + * @param beadToRemove the bead to remove + * @param setStrandNull true if the strand setter of the removed bead should be set to null when it is removed + * + * @return the removed Bead (if it was present), with its strand value set to null, otherwise null (no bead was removed). + * + * @langversion 3.0 + * @playerversion Flash 9 + * @playerversion AIR 1.1 + * @productversion Royale 0.9.9 + * @royaleignorecoercion org.apache.royale.core.IBead + * + * @royalesuppressexport + * @royaleignorecoercion Array + */ + COMPILE::JS + public function removeBeadFromBeads(beads:Object, beadToRemove:IBead, setStrandNull:Boolean):IBead + { + var i:uint, n:uint; + var arr:Array = beads as Array; //we don't really have a Vector.<IBead> internally + n = arr.length; + for (i = 0; i < n; i++) + { + if (beadToRemove === arr[i]) + { + arr.splice(i, 1); + if (setStrandNull) beadToRemove.strand = null; + return beadToRemove; + } + } + return null; + } +} diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Application.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Application.as index dbcd24a..a74bc97 100644 --- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Application.as +++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Application.as @@ -18,6 +18,8 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.royale.jewel { + import org.apache.royale.utils.removeBeadFromBeads; + COMPILE::SWF { import flash.display.DisplayObject; import flash.display.StageAlign; @@ -480,7 +482,7 @@ package org.apache.royale.jewel COMPILE::SWF public function removeBead(value:IBead):IBead { - var n:int = _beads.length; + /*var n:int = _beads.length; for (var i:int = 0; i < n; i++) { var bead:IBead = _beads[i]; @@ -490,7 +492,8 @@ package org.apache.royale.jewel return bead; } } - return null; + return null;*/ + return removeBeadFromBeads(_beads, value, false); } /** diff --git a/frameworks/projects/Network/src/main/royale/org/apache/royale/net/BinaryUploader.as b/frameworks/projects/Network/src/main/royale/org/apache/royale/net/BinaryUploader.as index 120f6ac..067ee40 100644 --- a/frameworks/projects/Network/src/main/royale/org/apache/royale/net/BinaryUploader.as +++ b/frameworks/projects/Network/src/main/royale/org/apache/royale/net/BinaryUploader.as @@ -18,7 +18,9 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.royale.net { - COMPILE::SWF +import org.apache.royale.utils.removeBeadFromBeads; + +COMPILE::SWF { import flash.events.HTTPStatusEvent; import flash.events.IOErrorEvent; @@ -482,7 +484,7 @@ package org.apache.royale.net COMPILE::SWF public function removeBead(value:IBead):IBead { - var n:int = _beads.length; + /*var n:int = _beads.length; for (var i:int = 0; i < n; i++) { var bead:IBead = _beads[i]; @@ -492,7 +494,8 @@ package org.apache.royale.net return bead; } } - return null; + return null;*/ + return removeBeadFromBeads(_beads, value, false); } COMPILE::SWF diff --git a/frameworks/projects/Network/src/main/royale/org/apache/royale/net/HTTPService.as b/frameworks/projects/Network/src/main/royale/org/apache/royale/net/HTTPService.as index 667d99c..9b63f35 100644 --- a/frameworks/projects/Network/src/main/royale/org/apache/royale/net/HTTPService.as +++ b/frameworks/projects/Network/src/main/royale/org/apache/royale/net/HTTPService.as @@ -18,7 +18,9 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.royale.net { - COMPILE::SWF +import org.apache.royale.utils.removeBeadFromBeads; + +COMPILE::SWF { import flash.events.HTTPStatusEvent; import flash.events.IOErrorEvent; @@ -496,7 +498,7 @@ package org.apache.royale.net COMPILE::SWF public function removeBead(value:IBead):IBead { - var n:int = _beads.length; + /*var n:int = _beads.length; for (var i:int = 0; i < n; i++) { var bead:IBead = _beads[i]; @@ -506,7 +508,8 @@ package org.apache.royale.net return bead; } } - return null; + return null;*/ + return removeBeadFromBeads(_beads,value, false); } /**
