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]
