This is an automated email from the ASF dual-hosted git repository.

gregdove pushed a commit to branch emulation_improvements
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit b5d9fbbcb89608c487e2f675c13c0f62ab9cd05b
Author: greg-dove <[email protected]>
AuthorDate: Sat Mar 23 15:34:35 2024 +1300

    interim changes
---
 .../src/main/royale/org/apache/royale/crux/Bean.as |   2 +-
 .../royale/org/apache/royale/crux/BeanFactory.as   |   8 +-
 .../org/apache/royale/crux/beads/JSStageEvents.as  |   4 +-
 .../apache/royale/crux/binding/BindabilityInfo.as  |   6 +-
 .../royale/crux/processors/DispatcherProcessor.as  |   4 +-
 .../royale/crux/processors/InjectProcessor.as      |  10 +-
 .../royale/crux/reflection/TypeDescriptor.as       |   2 +-
 .../html/beads/controllers/DragMouseController.as  |  32 +++--
 .../MXRoyale/src/main/resources/defaults.css       |   4 +
 .../src/main/royale/mx/controls/ComboBase.as       |  12 +-
 .../src/main/royale/mx/controls/ComboBox.as        |   8 +-
 .../AdvancedDataGridItemRenderer.as                |   4 +-
 .../models/SingleSelectionICollectionViewModel.as  |  39 ++++--
 .../mx/controls/listClasses/DataGridListBase.as    |   2 +-
 .../menuClasses/CascadingMenuItemRenderer.as       |   4 +
 .../src/main/royale/mx/supportClasses/IFoldable.as |   1 +
 .../src/main/royale/mx/events/IndexChangedEvent.as | 144 ++++++++++++++++++++-
 .../src/main/royale/mx/events/TextEvent.as         |  15 ++-
 .../mx/net/beads/FileUploaderUsingFormData.as      |  25 +++-
 .../src/main/royale/mx/utils/RoyaleUtil.as         |  13 ++
 frameworks/projects/XML/src/main/royale/XML.as     |  18 ++-
 .../flexUnitTests/xml/XMLNotificationTest.as       |   4 +
 .../flexUnitTests/xml/XMLTesterGeneralTest.as      |  22 ++++
 23 files changed, 314 insertions(+), 69 deletions(-)

diff --git 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/Bean.as 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/Bean.as
index 87f79f6a87..544c430f8e 100644
--- a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/Bean.as
+++ b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/Bean.as
@@ -75,7 +75,7 @@ package org.apache.royale.crux
 
                public function toString():String
                {
-                       return "Bean{ source: " + source + ", name: " + name + 
" }";
+                       return "Bean{ source: " + (this.typeDescriptor? 
this.typeDescriptor.className : source) + ", name: " + name + " }";
                }
     }
 }
diff --git 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/BeanFactory.as
 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/BeanFactory.as
index 9422124ede..b138ba0e2f 100644
--- 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/BeanFactory.as
+++ 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/BeanFactory.as
@@ -428,7 +428,7 @@ package org.apache.royale.crux
                        {
                                case BeanEvent.ADD_BEAN:
                                        if( existingBean )
-                                               trace("{0} already exists as a 
bean. Ignoring ADD_BEAN request.", event.source.toString());// logger.warn( 
"{0} already exists as a bean. Ignoring ADD_BEAN request.", 
event.source.toString() );
+                                               tracer("{0} already exists as a 
bean. Ignoring ADD_BEAN request.", event.source.toString());// logger.warn( 
"{0} already exists as a bean. Ignoring ADD_BEAN request.", 
event.source.toString() );
                                        else
                                                addBean( 
constructBean(event.source, event.beanName));
                                        break;
@@ -436,7 +436,7 @@ package org.apache.royale.crux
                                case BeanEvent.SET_UP_BEAN:
                                        if( existingBean )
                                                if( existingBean.initialized )
-                                                       trace("{0} is already 
set up as a bean. Ignoring SET_UP_BEAN request.", event.source.toString());// 
logger.warn( "{0} is already set up as a bean. Ignoring SET_UP_BEAN request.", 
event.source.toString() );
+                                                       tracer("{0} is already 
set up as a bean. Ignoring SET_UP_BEAN request.", event.source.toString());// 
logger.warn( "{0} is already set up as a bean. Ignoring SET_UP_BEAN request.", 
event.source.toString() );
                                                else
                                                        setUpBean( existingBean 
);
                                        else
@@ -454,7 +454,7 @@ package org.apache.royale.crux
                                        if( existingBean )
                                                removeBean( existingBean );
                                        else
-                                               trace("Could not find bean with 
{0} as its source. Ignoring REMOVE_BEAN request.", 
event.source.toString());//logger.warn( "Could not find bean with {0} as its 
source. Ignoring REMOVE_BEAN request.", event.source.toString() );
+                                               tracer("Could not find bean 
with {0} as its source. Ignoring REMOVE_BEAN request.", 
event.source.toString());//logger.warn( "Could not find bean with {0} as its 
source. Ignoring REMOVE_BEAN request.", event.source.toString() );
                                        break;
                        }
                }
@@ -515,7 +515,7 @@ package org.apache.royale.crux
                protected function setUpEventHandlerSysMgr( event:Event ):void
                {
 
-                       trace('todo setUpEventHandlerSysMgr')
+                       tracer('todo setUpEventHandlerSysMgr')
                        // make sure the view is not a descendant of the main 
dispatcher
                        // if it's not, it is a popup, so we pass it along for 
processing
                        // if( !Sprite( crux.dispatcher ).contains( 
DisplayObject( event.target ) ) )
diff --git 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/beads/JSStageEvents.as
 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/beads/JSStageEvents.as
index 11687a3f15..94ddcb0119 100644
--- 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/beads/JSStageEvents.as
+++ 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/beads/JSStageEvents.as
@@ -104,13 +104,13 @@ package org.apache.royale.crux.beads
                 host = value as UIBase;
                 if (_activeInstance) {
                     //assume it will always be that the active instance 
'contains' this one...
-                    trace('[IGNORING] there is already an active instance of 
JSStageEvents at ', _activeInstance.host);
+                    tracer('[IGNORING] there is already an active instance of 
JSStageEvents at ', _activeInstance.host);
                 } else {
                     _activeInstance = this;
                     if (!_dispatcher) _dispatcher = value as IEventDispatcher;
                     var observer:MutationObserver = new 
MutationObserver(mutationDetected);
                     observer.observe((value as ElementWrapper).element, 
{'childList': true, 'subtree': true});
-                    trace('Activating JSStageEvents')
+                    tracer('Activating JSStageEvents')
                 }
             }
         }
diff --git 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/binding/BindabilityInfo.as
 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/binding/BindabilityInfo.as
index 43cf71ef68..03a4e564d0 100644
--- 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/binding/BindabilityInfo.as
+++ 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/binding/BindabilityInfo.as
@@ -136,7 +136,7 @@ public class BindabilityInfo
 
                        if (numChildren == 0)
                        {
-                               trace("warning: no describeType entry for '" +
+                               tracer("warning: no describeType entry for '" +
                                          childName + "' on non-dynamic type '" 
+
                                          typeDefinition.name + "'");
                        }
@@ -144,7 +144,7 @@ public class BindabilityInfo
                        {
                                if (numChildren > 1)
                                {
-                                       trace("warning: multiple describeType 
entries for '" +
+                                       tracer("warning: multiple describeType 
entries for '" +
                                                  childName + "' on type '" + 
typeDefinition.name +
                                                  "':\n" + accessorsAndMethods);
                                }
@@ -232,7 +232,7 @@ public class BindabilityInfo
                                                                
eventListObj[ValueChangeEvent.VALUE_CHANGE] = true;
                                                        }
                                                         else {
-                                                               trace("warning: 
unconverted change events metadata in class '" +
+                                                               
tracer("warning: unconverted change events metadata in class '" +
                                                                                
typeDefinition.name + "'", metaItem);
                                                        }
                                                        
diff --git 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/DispatcherProcessor.as
 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/DispatcherProcessor.as
index 99439cee95..29095a5e0d 100644
--- 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/DispatcherProcessor.as
+++ 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/DispatcherProcessor.as
@@ -87,7 +87,7 @@ package org.apache.royale.crux.processors
                        if (property) {
                                property.sourceDefinition.setValue(bean.source, 
dispatcher);
                        } else {
-                               trace('unexpected branch in 
\'DispatcherProcessor\'');
+                               tracer('unexpected branch in 
\'DispatcherProcessor\'');
                                bean.source[ metadataTag.host.name ] = 
dispatcher;
                        }
                }
@@ -101,7 +101,7 @@ package org.apache.royale.crux.processors
                        if (property) {
                                property.sourceDefinition.setValue(bean.source, 
null);
                        } else {
-                               trace('unexpected branch in 
\'DispatcherProcessor\'');
+                               tracer('unexpected branch in 
\'DispatcherProcessor\'');
                                bean.source[ metadataTag.host.name ] = null;
                        }
                }
diff --git 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/InjectProcessor.as
 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/InjectProcessor.as
index 4a36416ba5..360887f1ac 100644
--- 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/InjectProcessor.as
+++ 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/InjectProcessor.as
@@ -100,7 +100,7 @@ package org.apache.royale.crux.processors
                                        if( injectTag.required )
                                                throw new Error( 
"InjectionProcessorError: bean not found: " + injectTag.source);
                                        else
-                                               trace("InjectProcessor could 
not fulfill {0} tag on {1}", injectTag.asTag, bean);
+                                               tracer("InjectProcessor could 
not fulfill {0} tag on {1}", injectTag.asTag, bean);
                                        
                                        // bail
                                        return;
@@ -140,7 +140,7 @@ package org.apache.royale.crux.processors
                                }
                        }
                        
-                       trace("InjectProcessor set up 
"+metadataTag.toString()+" on " + bean.toString());
+                       tracer("InjectProcessor set up 
"+metadataTag.toString()+" on " + bean.toString());
                }
                
                /**
@@ -273,7 +273,7 @@ package org.apache.royale.crux.processors
                                        throw new Error("InjectProcessor Error: 
bean of type " + targetType.toString() + " not found!" );
                                }
                                else {
-                                       trace( "Bean of type "+ 
targetType.toString()+" not found, injection queues have been removed!" );
+                                       tracer( "Bean of type "+ 
targetType.toString()+" not found, injection queues have been removed!" );
                                }
                                
                        }
@@ -308,7 +308,7 @@ package org.apache.royale.crux.processors
                                if (property) {
                                        
property.sourceDefinition.setValue(destObject, value);
                                } else {
-                                       trace('unexpected branch in 
\'setDestinationValue\'');
+                                       tracer('unexpected branch in 
\'setDestinationValue\'');
                                        destObject[ destPropName ] = value;
                                }
                        }
@@ -404,7 +404,7 @@ package org.apache.royale.crux.processors
                        }
                        catch( error:ReferenceError )
                        {
-                               trace('todo ReferenceError caught', error)
+                               tracer('todo ReferenceError caught', error)
                        }
                        
                }
diff --git 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/reflection/TypeDescriptor.as
 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/reflection/TypeDescriptor.as
index 219a36f5f8..3c0f29a3f5 100644
--- 
a/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/reflection/TypeDescriptor.as
+++ 
b/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/reflection/TypeDescriptor.as
@@ -109,7 +109,7 @@ package org.apache.royale.crux.reflection
                                        var defNames:Array = 
metaDef.retrieveMetaDataByName(defName);
                                        if (defNames.length) {
                                                if (defNames.length > 1) {
-                                                       trace('unexpected - 
more than one metadata with the same name');
+                                                       tracer('unexpected - 
more than one metadata with the same name');
                                                }
                                                var 
metaDataDef:MetaDataDefinition = defNames[0];
                                                var host:IMetadataHost = 
getMetadataHost( metaDef );
diff --git 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as
 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as
index e3da127eaa..088c008920 100644
--- 
a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as
+++ 
b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as
@@ -332,21 +332,25 @@ package org.apache.royale.html.beads.controllers
             }
             else
             {
-               host = UIUtils.findPopUpHost(_strand as IUIBase);
-                if (host == null) return;
+                var drag_image:IUIBase = dragImage;
+                if (drag_image) {
+                    host = UIUtils.findPopUpHost(_strand as IUIBase);
+                    if (host == null) return;
 //                trace("DRAG-MOUSE: sending dragMove via " + 
event.target.toString()+" == "+dragImageOffsetX);
-                dragEvent = DragEvent.createDragEvent("dragMove", event);
-                pt = PointUtils.globalToLocal(new Point(event.clientX, 
event.clientY), host);
-                dragImage.x = pt.x + dragImageOffsetX;
-                dragImage.y = pt.y + dragImageOffsetY;
-                               COMPILE::SWF {
-                                       dragEvent.relatedObject = event.target 
as InteractiveObject;
-                               }
-                               COMPILE::JS {
-                                       dragEvent.relatedObject = event.target;
-                               }
-                DragEvent.dispatchDragEvent(dragEvent, event.target);
-                               dispatchEvent(dragEvent);
+                    dragEvent = DragEvent.createDragEvent("dragMove", event);
+                    pt = PointUtils.globalToLocal(new Point(event.clientX, 
event.clientY), host);
+                    drag_image.x = pt.x + dragImageOffsetX;
+                    drag_image.y = pt.y + dragImageOffsetY;
+                    COMPILE::SWF {
+                        dragEvent.relatedObject = event.target as 
InteractiveObject;
+                    }
+                    COMPILE::JS {
+                        dragEvent.relatedObject = event.target;
+                    }
+                    DragEvent.dispatchDragEvent(dragEvent, event.target);
+                    dispatchEvent(dragEvent);
+                }
+
             }
         }
 
diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css 
b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index 071dec46f3..832de8b14e 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -84,11 +84,15 @@ dg|DataGridButtonBar {
        IItemRenderer: 
ClassReference("mx.controls.dataGridClasses.DataGridHeaderRenderer");
        IDataProviderItemRendererMapper: 
ClassReference("mx.controls.dataGridClasses.HeaderRendererFactoryForArrayData");
        position: absolute;
+       height: unset;
+       min-height: unset;
 }
 
 adg|AdvancedDataGridButtonBar {
        IItemRenderer: 
ClassReference("mx.controls.advancedDataGridClasses.AdvancedDataGridHeaderRenderer");
        position: absolute;
+       height: unset;
+       min-height: unset;
 }
 
 dg|DataGridHeaderRenderer{
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBase.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBase.as
index c601be772d..ff3569f84b 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBase.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBase.as
@@ -471,6 +471,12 @@ public class ComboBase extends UIComponent implements 
/*IIMESupport,*/ IFocusMan
       return null;     
        }
 
+
+    protected function shouldDeselect(dp:Object):Boolean{
+        return !dp || !dp.length;
+    }
+
+
     //----------------------------------
     //  dataProvider
     //----------------------------------
@@ -543,8 +549,10 @@ public class ComboBase extends UIComponent implements 
/*IIMESupport,*/ IFocusMan
             value = new ArrayCollection(tmp);
         }
         IComboBoxModel(model).dataProvider = value;
-        if (value && IComboBoxModel(model).selectedIndex == -1)
-            IComboBoxModel(model).selectedIndex = 0;
+        /*if (value && IComboBoxModel(model).selectedIndex == -1)
+            IComboBoxModel(model).selectedIndex = 0;*/
+        if (shouldDeselect(value)) IComboBoxModel(model).selectedIndex = -1
+            else IComboBoxModel(model).selectedIndex = 0;
     }
 
     //----------------------------------
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBox.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBox.as
index 523fa9b386..fbeb7d2cf6 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBox.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBox.as
@@ -881,6 +881,11 @@ public class ComboBox extends ComboBase
     //
     
//--------------------------------------------------------------------------
 
+
+    override protected function shouldDeselect(dp:Object):Boolean{
+        return prompt || !dp || !dp.length;
+    }
+
     /**
      *  Returns a string representing the <code>item</code> parameter.
      *  
@@ -958,8 +963,7 @@ public class ComboBox extends ComboBase
 
         return " ";
     }
-    
-    mx.controls.ComboBox
+
        
     //----------------------------------
     //  prompt
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as
index 30b717f2c2..1068411eec 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as
@@ -224,8 +224,10 @@ public class AdvancedDataGridItemRenderer extends 
StringItemRenderer
     {
         return _canUnfold;
     }
-    
 
+    public function isFoldInitiator(check:Object):Boolean{
+        return true; //tbd
+    }
 
     
//--------------------------------------------------------------------------
     //
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionICollectionViewModel.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionICollectionViewModel.as
index 58332d807c..b1a3843068 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionICollectionViewModel.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionICollectionViewModel.as
@@ -91,15 +91,21 @@ package mx.controls.beads.models
          */
                public function set dataProvider(value:Object):void
                {
-            if (value == _dataProvider) return;
-
-            _dataProvider = value as ICollectionView;
-            if (_dataProvider)
+                       var dp:ICollectionView = _dataProvider;
+            if (value == dp) return;
+                       if (dp) {
+                               
dp.removeEventListener(CollectionEvent.COLLECTION_CHANGE, 
collectionChangeHandler);
+                               if (_cursor) {
+                                       _cursor.finalizeThis();
+                               }
+                       }
+            dp =_dataProvider = value as ICollectionView;
+            if (dp)
                        {
-                _cursor = _dataProvider.createCursor();
-                               
dataProvider.addEventListener(CollectionEvent.COLLECTION_CHANGE, 
collectionChangeHandler);
+                _cursor = dp.createCursor();
+                               
dp.addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler);
                        }
-                       if(!_dataProvider || _selectedIndex >= 
_dataProvider.length)
+                       if(!dp || _selectedIndex >= _dataProvider.length)
                                _selectedIndex = -1;
             
                        _selectedItem = _selectedIndex == -1 ? null : 
getItemAt(_selectedIndex);
@@ -252,17 +258,22 @@ package mx.controls.beads.models
             if (value == _selectedItem) return;
 
                        _selectedItem = value;
-                       var n:int = _dataProvider.length;
-                       for (var i:int = 0; i < n; i++)
-                       {
-                               if (getItemAt(i) == value)
+                       var siChange:Boolean;
+                       if (_dataProvider) {
+                               var n:int = _dataProvider.length;
+                               for (var i:int = 0; i < n; i++)
                                {
-                                       _selectedIndex = i;
-                                       break;
+                                       if (getItemAt(i) == value)
+                                       {
+                                               if (_selectedIndex != i) 
siChange = true;
+                                               _selectedIndex = i;
+                                               break;
+                                       }
                                }
                        }
+
                        dispatchEvent(new Event("selectedItemChanged"));
-                       dispatchEvent(new Event("selectedIndexChanged"));
+                       if (siChange) dispatchEvent(new 
Event("selectedIndexChanged"));
                }
 
                private var _selectedString:String;
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataGridListBase.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataGridListBase.as
index e3fa399b31..f096e98c46 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataGridListBase.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataGridListBase.as
@@ -5759,7 +5759,7 @@ public class DataGridListBase extends ListBase /* extends 
UIComponent
             }
             return tmp;
         }
-        
+
         var curSelectionData:ListBaseSelectionData = firstSelectionData;
         while (curSelectionData != null)
         {
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as
index 20d5972d2f..99c2798bc3 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as
@@ -130,6 +130,10 @@ package mx.controls.menuClasses
                {
                        return getHasMenu();
                }
+
+               public function isFoldInitiator(check:Object):Boolean{
+                       return true; //tbd
+               }
        }
 
 }
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/supportClasses/IFoldable.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/supportClasses/IFoldable.as
index 71105d6af8..f98c9623bc 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/supportClasses/IFoldable.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/supportClasses/IFoldable.as
@@ -22,5 +22,6 @@ package mx.supportClasses
        {
                function get canFold():Boolean;
                function get canUnfold():Boolean;
+               function isFoldInitiator(check:Object):Boolean;
        }
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/IndexChangedEvent.as
 
b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/IndexChangedEvent.as
index ad7d88fcaa..43653da257 100644
--- 
a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/IndexChangedEvent.as
+++ 
b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/IndexChangedEvent.as
@@ -22,7 +22,12 @@ package mx.events
 
 import org.apache.royale.events.Event;
 import org.apache.royale.events.IRoyaleEvent;
-
+COMPILE::JS
+{
+       import goog.events.BrowserEvent;
+       import org.apache.royale.core.WrappedHTMLElement;
+       import org.apache.royale.events.getTargetWrapper;
+}
 /**
  *  The IndexChangedEvent class represents events that are dispatched when 
  *  an index changes.
@@ -291,6 +296,14 @@ public class IndexChangedEvent extends Event
        
        public function get relatedObject():Object
        {
+               COMPILE::JS{
+
+                       if (nativeEvent && nativeEvent["relatedTarget"])
+                       {
+                               return (nativeEvent["relatedTarget"] as 
WrappedHTMLElement).royale_wrapper;
+                       }
+
+               }
                return _relatedObject;
        }
        public function set relatedObject(value:Object):void
@@ -339,6 +352,135 @@ public class IndexChangedEvent extends Event
                                      relatedObject, oldIndex, 
                                      newIndex, triggerEvent);
     }
+
+
+       COMPILE::JS{
+               private var _target:Object;
+
+               /**
+                * @type {?goog.events.Event}
+                */
+               private var wrappedEvent:Object;
+
+               /**
+                * @type {Event}
+                */
+               private var nativeEvent:Object;
+
+               public function wrapEvent(event:goog.events.BrowserEvent):void
+               {
+                       wrappedEvent = event;
+                       nativeEvent = event.getBrowserEvent();
+               }
+
+
+               /**
+                *  @copy org.apache.royale.events.BrowserEvent#target
+                *
+                * @langversion 3.0
+                * @playerversion Flash 10.2
+                * @playerversion AIR 2.6
+                * @productversion Royale 0.9.4
+                */
+               override public function get target():Object
+               {
+                       return wrappedEvent ? 
getTargetWrapper(wrappedEvent.target) : _target;
+               }
+               override public function set target(value:Object):void
+               {
+                       _target = value;
+               }
+
+               /**
+                *  @copy org.apache.royale.events.BrowserEvent#currentTarget
+                *
+                * @langversion 3.0
+                * @playerversion Flash 10.2
+                * @playerversion AIR 2.6
+                * @productversion Royale 0.9.4
+                */
+               override public function get currentTarget():Object
+               {
+                       return wrappedEvent ? 
getTargetWrapper(wrappedEvent.currentTarget) : _target;
+               }
+               override public function set currentTarget(value:Object):void
+               {
+                       _target = value;
+               }
+
+               // TODO remove this when figure out how to preserve the real 
target
+               // The problem only manifests in SWF, so this alias is good 
enough for now
+               public function get targetBeforeBubbling():Object
+               {
+                       return target;
+               }
+
+               /**
+                * Whether the default action has been prevented.
+                *
+                * @langversion 3.0
+                * @playerversion Flash 10.2
+                * @playerversion AIR 2.6
+                * @productversion Royale 0.9.4
+                */
+               override public function preventDefault():void
+               {
+                       if(wrappedEvent)
+                               wrappedEvent.preventDefault();
+                       else
+                       {
+                               super.preventDefault();
+                               _defaultPrevented = true;
+                       }
+               }
+
+               private var _defaultPrevented:Boolean;
+               /**
+                * Whether the default action has been prevented.
+                * @type {boolean}
+                *
+                * @langversion 3.0
+                * @playerversion Flash 10.2
+                * @playerversion AIR 2.6
+                * @productversion Royale 0.9.4
+                */
+               override public function get defaultPrevented():Boolean
+               {
+                       return wrappedEvent ? wrappedEvent.defaultPrevented : 
_defaultPrevented;
+               }
+               override public function set 
defaultPrevented(value:Boolean):void
+               {
+                       _defaultPrevented = value;
+               }
+
+
+               /**
+                * @langversion 3.0
+                * @playerversion Flash 10.2
+                * @playerversion AIR 2.6
+                * @productversion Royale 0.9.4
+                */
+               override public function stopImmediatePropagation():void
+               {
+                       if(wrappedEvent)
+                       {
+                               wrappedEvent.stopPropagation();
+                               nativeEvent.stopImmediatePropagation();
+                       }
+               }
+
+               /**
+                * @langversion 3.0
+                * @playerversion Flash 10.2
+                * @playerversion AIR 2.6
+                * @productversion Royale 0.9.4
+                */
+               override public function stopPropagation():void
+               {
+                       if(wrappedEvent)
+                               wrappedEvent.stopPropagation();
+               }
+       }
 }
 
 }
diff --git 
a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/TextEvent.as 
b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/TextEvent.as
index 9dba0b6ca7..17c8fcf2bc 100644
--- a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/TextEvent.as
+++ b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/TextEvent.as
@@ -44,8 +44,10 @@ public class TextEvent extends flash.events.TextEvent
             return s;
         }
                
-    public static const TEXT_INPUT : String = platformConstant("textInput"); 
-               
+    public static const TEXT_INPUT : String = platformConstant("textInput");
+
+       public static const LINK : String = 
platformConstant(flash.events.TextEvent.LINK);
+
        public function TextEvent(type:String, bubbles:Boolean = false, 
cancelable:Boolean = false, text:String = "")
     {
         super(type, bubbles, cancelable);
@@ -71,10 +73,11 @@ public class TextEvent extends 
org.apache.royale.events.Event
         {
             return s;
         }
-               
-    public static const TEXT_INPUT : String = platformConstant("textInput"); 
-               
-               
+
+       public static const TEXT_INPUT : String = platformConstant("textInput");
+
+       public static const LINK : String = platformConstant("link");
+
        
//--------------------------------------------------------------------------
        //
        //  Class constants
diff --git 
a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as
 
b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as
index 8ec3b337e2..ac1d332c8c 100644
--- 
a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as
+++ 
b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as
@@ -69,8 +69,8 @@ public class FileUploaderUsingFormData extends FileUploader
                        xhr = new XMLHttpRequest();
                        xhr.open("POST", url);
                        xhr.addEventListener("readystatechange", 
xhr_onreadystatechange,false);
-                       xhr.addEventListener("progress", xhr_progress, false);
-
+                       //xhr.upload.addEventListener("progress", xhr_progress, 
false);
+                       trackUpload();
                        if (_referenceRequest) {
                                var contentType:String;
                                for (var i:int = 0; i < 
_referenceRequest.requestHeaders.length; i++)
@@ -93,16 +93,29 @@ public class FileUploaderUsingFormData extends FileUploader
                }
        }
 
+       COMPILE::JS
+       private function trackUpload():void{
+               var xhr:XMLHttpRequest = this.xhr;
+               var handler:Function = xhr_upload;
+               xhr.upload.addEventListener('loadstart', handler);
+               xhr.upload.addEventListener('load', handler);
+               xhr.upload.addEventListener('loadend', handler);
+               xhr.upload.addEventListener('progress', handler);
+               xhr.upload.addEventListener('error', handler);
+               xhr.upload.addEventListener('abort', handler);
+       }
+
+
        /**
-        *  Download is progressing (JS only).
+        *  Upload is progressing (JS only).
         *
         *  @langversion 3.0
         *  @playerversion Flash 10.2
         *  @playerversion AIR 2.6
-        *  @productversion Royale 0.7.0
+        *  @productversion Royale 0.9.10
         */
        COMPILE::JS
-       private function xhr_progress(error:Object):void
+       private function xhr_upload(event:Object):void
        {
                /*
                var progEv:ProgressEvent = new 
ProgressEvent(ProgressEvent.PROGRESS);
@@ -113,6 +126,8 @@ public class FileUploaderUsingFormData extends FileUploader
                if(onProgress)
                        onProgress(this);
                */
+
+               trace('xhr_upload:',event);
        }
 
        /**
diff --git 
a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/utils/RoyaleUtil.as 
b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/utils/RoyaleUtil.as
index a6e2d81e8d..24e603bfe9 100644
--- a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/utils/RoyaleUtil.as
+++ b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/utils/RoyaleUtil.as
@@ -18,6 +18,8 @@
 
////////////////////////////////////////////////////////////////////////////////
 package mx.utils
 {
+
+import mx.core.IUIComponent;
 import mx.core.IUIComponent;
 import mx.core.IChildList;
 
@@ -87,6 +89,17 @@ public class RoyaleUtil
         return null;
     }
 
+
+    COMPILE::JS
+    public static function linkEventEnhancer(base:IUIComponent):void{
+
+    }
+
+   // COMPILE::JS
+    //private static function onClickLinkCheck(event:Mou)
+
+
+
 }
 
 }
diff --git a/frameworks/projects/XML/src/main/royale/XML.as 
b/frameworks/projects/XML/src/main/royale/XML.as
index 8262e9e48d..e90882e1d5 100644
--- a/frameworks/projects/XML/src/main/royale/XML.as
+++ b/frameworks/projects/XML/src/main/royale/XML.as
@@ -1173,12 +1173,19 @@ package
                        var i:int;
                        var len:int;
                        var list:XMLList = new XMLList();
-                       if(parseInt(propertyName,10).toString() == propertyName)
+                       var propNum:Number = parseInt(propertyName,10);
+                       if(propNum.toString() == propertyName)
                        {
-                               if(propertyName != "0")
-                                       return null;
-                               list.append(this);
-                               list.targetObject = this;
+                               //@todo fixme, this is wrong, it should return 
a list of that child index content, not the self reference
+                               /*if(propertyName != "0")
+                                       return null;*/
+                               if(propNum >= 0 && propNum < _children.length)
+                               {
+                                       list.append(_children[propNum]);
+                                       list.targetObject = this;
+                               }
+                               /*list.append(this);
+                               list.targetObject = this;*/
                                return list;
                        }
                        //support MultiQName for multiple use namespace 
directives:
@@ -1418,6 +1425,7 @@ package
                                        list.concat(child.descendants(name));
                                }
                        }
+                       list.targetObject = this;
                        return list;
                }
                
diff --git 
a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLNotificationTest.as
 
b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLNotificationTest.as
index 02b18f6a4e..9fdc491556 100644
--- 
a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLNotificationTest.as
+++ 
b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLNotificationTest.as
@@ -336,6 +336,10 @@ package flexUnitTests.xml
             ]
             assertTrue(isExpected(expected), 'unexpected XML notifications');
 
+
+            setNotifier(xml);
+            xml.appendChild(att);
+
         }
 
 
diff --git 
a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLTesterGeneralTest.as
 
b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLTesterGeneralTest.as
index e04cf07ab6..af9e7e187e 100644
--- 
a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLTesterGeneralTest.as
+++ 
b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLTesterGeneralTest.as
@@ -475,6 +475,28 @@ package flexUnitTests.xml
                     '<test>undefined</test>', 'testReplace 3 result is bad');
 
         }
+        [Test]
+        public function testXMLChildNumeric():void{
+            var node:XML = <node></node>;
+
+            var child1:XML = <child1/>;
+            var child2:XML = <child2/>
+
+
+            node.appendChild(child1);
+            node.appendChild(child2);
+
+
+            var query:Object = node.child(0);
+            assertFalse( query is XML, 'numeric child result should be an 
XMLlist');
+            assertTrue( query is XMLList, 'numeric child result should be an 
XMLlist');
+            assertTrue( (query as XMLList).length()==1, 'numeric child result 
should be an XMLlist');
+            assertTrue( query[0] === child1 ,'numeric child result should 
still be an XMLlist');
+            query = node.child(1);
+            assertTrue( (query as XMLList).length()==1, 'numeric child result 
should be an XMLlist');
+            assertTrue( query[0] === child2 ,'numeric child result should be 
an XMLlist');
+        }
+
         
         
         [Test]

Reply via email to