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 67a54a324fb1697a6f41b12ac266bec2e7cec8b3
Author: greg-dove <[email protected]>
AuthorDate: Mon Aug 10 16:53:02 2020 +1200

    Make columns immutable for internal use. getter/setter works on copies.
---
 .../beads/models/DataGridCollectionViewModel.as    | 26 +++++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridCollectionViewModel.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridCollectionViewModel.as
index 29119c1..7e47d50 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridCollectionViewModel.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridCollectionViewModel.as
@@ -61,12 +61,32 @@ package org.apache.royale.html.beads.models
                 */
                public function get columns():Array
                {
-                       return _columns;
+                       return _columns ? _columns.slice() : []; //return a 
copy. Internal state is not externally mutable
                }
                public function set columns(value:Array):void
                {
-                       if (_columns != value) {
-                               _columns = value;
+                       var change:Boolean;
+                       var oldCols:Array = _columns;
+                       if (oldCols) {
+                               var l:uint = oldCols.length;
+                               if (value) {
+                                       change = value.length != l; //different 
columns lengths
+                                       if (!change) {
+                                               for (var i:uint = 0; i < l; 
i++) {
+                                                       if (oldCols[i] != 
value[i]) {
+                                                               change = true; 
//at least one non-matching column
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                               } else {
+                                       change = l > 0; //reset to empty
+                               }
+                       } else {
+                               change = value && value.length; //set to 
something after previously empty
+                       }
+                       if (change) {
+                               _columns = value ? value.slice() : [];
                                dispatchEvent( new Event("columnsChanged"));
                        }
                }

Reply via email to