Repository: flex-asjs
Updated Branches:
  refs/heads/develop 008ff2872 -> 88cd277a2


Changes for drag and drop support in the DataGrid, especially to provide 
movable columns.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/88cd277a
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/88cd277a
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/88cd277a

Branch: refs/heads/develop
Commit: 88cd277a2e6c4038ec4c1359a747e0d5243d4d6a
Parents: 008ff28
Author: Peter Ent <[email protected]>
Authored: Tue Sep 19 15:24:56 2017 -0400
Committer: Peter Ent <[email protected]>
Committed: Tue Sep 19 15:24:56 2017 -0400

----------------------------------------------------------------------
 .../org/apache/flex/html/beads/DataGridView.as  | 131 +++----
 .../TextItemRendererFactoryForArrayData.as      |  62 ++--
 .../flex/html/beads/models/DataGridModel.as     |  46 ++-
 .../html/supportClasses/DataGridColumnList.as   |   2 +
 .../supportClasses/TextButtonItemRenderer.as    |  77 ++--
 .../flex/org/apache/flex/core/IDataGridModel.as |  15 +-
 .../DragDrop/src/main/flex/DragDropClasses.as   |  14 +-
 .../flex/html/beads/ButtonBarReorderBead.as     | 368 +++++++++++++++++++
 .../DataGridButtonBarViewForMovableColumns.as   |  53 +++
 .../html/beads/DataGridColumnReorderView.as     | 100 +++++
 .../apache/flex/html/beads/DragDropListView.as  |  35 +-
 .../html/beads/SingleSelectionDragImageBead.as  |  58 +--
 .../html/beads/SingleSelectionDragSourceBead.as |  73 ++--
 .../html/beads/SingleSelectionDropTargetBead.as | 187 +++++-----
 .../src/main/resources/basic-manifest.xml       |   4 +
 15 files changed, 921 insertions(+), 304 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as
index 58ee8c7..5f58cf5 100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/DataGridView.as
@@ -37,11 +37,11 @@ package org.apache.flex.html.beads
        import org.apache.flex.html.supportClasses.DataGridColumn;
        import org.apache.flex.html.supportClasses.DataGridColumnList;
        import org.apache.flex.html.supportClasses.Viewport;
-       
+
        COMPILE::SWF {
                import org.apache.flex.core.SimpleCSSStylesWithFlex;
        }
-               
+
                /**
                 *  The DataGridView class is the visual bead for the 
org.apache.flex.html.DataGrid.
                 *  This class constructs the items that make the DataGrid: 
Lists for each column and a
@@ -67,13 +67,13 @@ package org.apache.flex.html.beads
                        {
                                super();
                        }
-                       
+
                        private var _strand:IStrand;
                        private var _header:DataGridButtonBar;
                        private var _listArea:Container;
-                       
+
                        private var _lists:Array;
-                       
+
                        /**
                         * An array of List objects the comprise the columns of 
the DataGrid.
                         */
@@ -81,7 +81,7 @@ package org.apache.flex.html.beads
                        {
                                return _lists;
                        }
-                       
+
                        /**
                         * The area used to hold the columns
                         *
@@ -90,7 +90,7 @@ package org.apache.flex.html.beads
                        {
                                return _listArea;
                        }
-                       
+
                        /**
                         * Returns the component used as the header for the 
DataGrid.
                         */
@@ -98,7 +98,7 @@ package org.apache.flex.html.beads
                        {
                                return _header;
                        }
-                       
+
                        /**
                         *  @copy org.apache.flex.core.IBead#strand
                         *
@@ -111,21 +111,43 @@ package org.apache.flex.html.beads
                        {
                                super.strand = value;
                                _strand = value;
-                               
-                               var host:DataGrid = value as DataGrid;
-                               
+
+                               
IEventDispatcher(_strand).addEventListener("beadsAdded", finishSetup);
+                       }
+
+                       public function refreshContent():void
+                       {
+                               finishSetup(null);
+                       }
+
+                       /**
+                        * @private
+                        */
+                       protected function finishSetup(event:Event):void
+                       {
+                               var host:DataGrid = _strand as DataGrid;
+
+                               // see if there is a presentation model already 
in place. if not, add one.
+                               var 
presentationModel:IDataGridPresentationModel = host.presentationModel;
+                               var sharedModel:IDataGridModel = host.model as 
IDataGridModel;
+                               
IEventDispatcher(sharedModel).addEventListener("dataProviderChanged",handleDataProviderChanged);
+                               
IEventDispatcher(sharedModel).addEventListener("selectedIndexChanged", 
handleSelectedIndexChanged);
+
                                _header = new DataGridButtonBar();
                                _header.height = 30;
                                _header.percentWidth = 100;
-                               
+                               _header.dataProvider = sharedModel.columns;
+                               _header.labelField = "label";
+                               sharedModel.headerModel = _header.model as 
IBeadModel;
+
                                _listArea = new Container();
                                _listArea.percentWidth = 100;
                                _listArea.className = 
"opt_org-apache-flex-html-DataGrid_ListArea";
-                               
+
                                COMPILE::SWF {
                                        _header.style = new 
SimpleCSSStylesWithFlex();
                                        _header.style.flexGrow = 0;
-                                       
+
                                        _listArea.style = new 
SimpleCSSStylesWithFlex();
                                        _listArea.style.flexGrow = 1;
                                }
@@ -134,41 +156,23 @@ package org.apache.flex.html.beads
                                        _header.element.style["min-height"] = 
"30px";
                                        _listArea.element.style["flex-grow"] = 
"1";
                                }
-                               
-                               
IEventDispatcher(_strand).addEventListener("beadsAdded", finishSetup);
-                       }
-                       
-                       /**
-                        * @private
-                        */
-                       private function finishSetup(event:Event):void
-                       {
-                               var host:DataGrid = _strand as DataGrid;
-                               
-                               if (_lists == null || _lists.length == 0) {
-                                       createLists();
-                               }
-                               
-                               // see if there is a presentation model already 
in place. if not, add one.
-                               var 
presentationModel:IDataGridPresentationModel = host.presentationModel;
-                               var sharedModel:IDataGridModel = host.model as 
IDataGridModel;
-                               
IEventDispatcher(sharedModel).addEventListener("dataProviderChanged",handleDataProviderChanged);
-                               
IEventDispatcher(sharedModel).addEventListener("selectedIndexChanged", 
handleSelectedIndexChanged);
-                               
-                               var columnLabels:Array = new Array();
+
+                               createLists();
+
+                               //var columnLabels:Array = new Array();
                                var buttonWidths:Array = new Array();
-                               
+
                                var marginBorderOffset:int = 0;
                                COMPILE::SWF {
                                        marginBorderOffset = 1;
                                }
-                                       
+
                                for(var i:int=0; i < 
sharedModel.columns.length; i++) {
                                        var dgc:DataGridColumn = 
sharedModel.columns[i] as DataGridColumn;
-                                       columnLabels.push(dgc.label);
+                                       //columnLabels.push(dgc.label);
                                        var colWidth:Number = dgc.columnWidth - 
marginBorderOffset;
                                        buttonWidths.push(colWidth);
-                                       
+
                                        var list:DataGridColumnList = _lists[i] 
as DataGridColumnList;
                                        if (!isNaN(colWidth)) {
                                                list.width = Number(colWidth - 
marginBorderOffset);
@@ -182,49 +186,48 @@ package org.apache.flex.html.beads
                                                        }
                                        }
                                }
-                                       
+
                                var bblayout:ButtonBarLayout = new 
ButtonBarLayout();
                                _header.buttonWidths = buttonWidths
                                _header.widthType = ButtonBarModel.PIXEL_WIDTHS;
-                               _header.dataProvider = columnLabels;
                                _header.addBead(bblayout);
                                _header.addBead(new Viewport());
                                host.addElement(_header);
-                               
+
                                host.addElement(_listArea);
-                               
+
                                handleDataProviderChanged(event);
-                               
+
                                host.addEventListener("widthChanged", 
handleSizeChanges);
                                host.addEventListener("heightChanged", 
handleSizeChanges);
                        }
-                       
+
                        /**
                         * @private
                         */
                        private function handleSizeChanges(event:Event):void
-                       {       
+                       {
                                _header.dispatchEvent(new 
Event("layoutChanged"));
                                _listArea.dispatchEvent(new 
Event("layoutChanged"));
                        }
-                       
+
                        /**
                         * @private
                         */
                        private function 
handleDataProviderChanged(event:Event):void
                        {
                                var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
-                               
+
                                for (var i:int=0; i < _lists.length; i++)
                                {
                                        var list:DataGridColumnList = _lists[i] 
as DataGridColumnList;
                                        var listModel:ISelectionModel = 
list.getBeadByType(IBeadModel) as ISelectionModel;
                                        listModel.dataProvider = 
sharedModel.dataProvider;
                                }
-                               
+
                                host.dispatchEvent(new Event("layoutNeeded"));
                        }
-                       
+
                        /**
                         * @private
                         */
@@ -232,14 +235,14 @@ package org.apache.flex.html.beads
                        {
                                var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
                                var newIndex:int = sharedModel.selectedIndex;
-                               
+
                                for (var i:int=0; i < _lists.length; i++)
                                {
                                        var list:DataGridColumnList = _lists[i] 
as DataGridColumnList;
                                        list.selectedIndex = newIndex;
                                }
                        }
-                       
+
                        /**
                         * @private
                         */
@@ -248,40 +251,40 @@ package org.apache.flex.html.beads
                                var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
                                var list:DataGridColumnList = event.target as 
DataGridColumnList;
                                sharedModel.selectedIndex = list.selectedIndex;
-                               
+
                                for(var i:int=0; i < _lists.length; i++) {
                                        if (list != _lists[i]) {
                                                var 
otherList:DataGridColumnList = _lists[i] as DataGridColumnList;
                                                otherList.selectedIndex = 
list.selectedIndex;
                                        }
                                }
-                               
+
                                host.dispatchEvent(new Event('change'));
                        }
-                       
+
                        /**
                         * @private
                         */
                        private function createLists():void
                        {
                                var host:DataGrid = _strand as DataGrid;
-                               
+
                                var sharedModel:IDataGridModel = host.model as 
IDataGridModel;
                                var 
presentationModel:IDataGridPresentationModel = host.presentationModel;
-                               
+
                                _lists = new Array();
-                               
+
                                for (var i:int=0; i < 
sharedModel.columns.length; i++) {
                                        var dataGridColumn:DataGridColumn = 
sharedModel.columns[i] as DataGridColumn;
-                                       
+
                                        var list:DataGridColumnList = new 
DataGridColumnList();
                                        list.id = "dataGridColumn"+String(i);
-                                       list.addBead(sharedModel);
+                                       list.dataProvider = 
sharedModel.dataProvider;
                                        list.itemRenderer = 
dataGridColumn.itemRenderer;
                                        list.labelField = 
dataGridColumn.dataField;
                                        
list.addEventListener('change',handleColumnListChange);
                                        list.addBead(presentationModel);
-                                       
+
                                        if (i == 0) {
                                                list.className = "first";
                                        } else if (i == 
sharedModel.columns.length-1) {
@@ -289,11 +292,11 @@ package org.apache.flex.html.beads
                                        } else {
                                                list.className = "middle";
                                        }
-                                       
+
                                        _listArea.addElement(list);
                                        _lists.push(list);
                                }
-                               
+
                                host.dispatchEvent(new Event("layoutNeeded"));
                        }
                }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
index 7752e90..db5c7d0 100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/TextItemRendererFactoryForArrayData.as
@@ -30,17 +30,17 @@ package org.apache.flex.html.beads
        import org.apache.flex.events.EventDispatcher;
        import org.apache.flex.events.ItemRendererEvent;
     import org.apache.flex.events.IEventDispatcher;
-       
+
        
[Event(name="itemRendererCreated",type="org.apache.flex.events.ItemRendererEvent")]
 
     /**
-     *  The TextItemRendererFactoryForArrayData class is the 
-     *  IDataProviderItemRendererMapper for creating 
+     *  The TextItemRendererFactoryForArrayData class is the
+     *  IDataProviderItemRendererMapper for creating
      *  ITextItemRenderers and assigning them data from an array.
      *  Other IDataProviderItemRendererMapper implementations
      *  assign specific array or vector types to item
      *  renderers expecting those types.
-     *  
+     *
      *  @langversion 3.0
      *  @playerversion Flash 10.2
      *  @playerversion AIR 2.6
@@ -50,7 +50,7 @@ package org.apache.flex.html.beads
        {
         /**
          *  Constructor.
-         *  
+         *
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
@@ -60,14 +60,14 @@ package org.apache.flex.html.beads
                {
                        super(target);
                }
-               
+
                private var selectionModel:ISelectionModel;
-               
+
                private var _strand:IStrand;
-               
+
         /**
          *  @copy org.apache.flex.core.IBead#strand
-         *  
+         *
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
@@ -78,13 +78,13 @@ package org.apache.flex.html.beads
                        _strand = value;
                        
IEventDispatcher(value).addEventListener("initComplete",finishSetup);
                }
-               
+
                private function finishSetup(event:Event):void
                {
                        selectionModel = _strand.getBeadByType(ISelectionModel) 
as ISelectionModel;
                        selectionModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
-            
-                       // if the host component inherits from 
DataContainerBase, the itemRendererClassFactory will 
+
+                       // if the host component inherits from 
DataContainerBase, the itemRendererClassFactory will
                        // already have been loaded by 
DataContainerBase.addedToParent function.
             if (!itemRendererFactory)
             {
@@ -95,15 +95,15 @@ package org.apache.flex.html.beads
                    _strand.addBead(_itemRendererFactory);
                                }
             }
-            
+
                        dataProviderChangeHandler(null);
                }
-               
+
         private var _itemRendererFactory:IItemRendererClassFactory;
-        
+
         /**
          *  An IItemRendererClassFactory that should generate 
ITextItemRenderers
-         *  
+         *
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
@@ -113,7 +113,7 @@ package org.apache.flex.html.beads
         {
             return _itemRendererFactory
         }
-        
+
         /**
          *  @private
          */
@@ -121,44 +121,44 @@ package org.apache.flex.html.beads
         {
             _itemRendererFactory = value;
         }
-        
+
         /**
          *  The IItemRendererParent that should parent the ITextItemRenderers
-         *  
+         *
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
-         */            
+         */
                private function dataProviderChangeHandler(event:Event):void
                {
                        var dp:Array = selectionModel.dataProvider as Array;
                        if (!dp)
                                return;
-                       
+
                        var list:IList = _strand as IList;
                        var dataGroup:IItemRendererParent = list.dataGroup;
-                       
+
                        dataGroup.removeAllItemRenderers();
-                       
-                       var n:int = dp.length; 
+
+                       var n:int = dp.length;
                        for (var i:int = 0; i < n; i++)
                        {
                                var tf:ITextItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as ITextItemRenderer;
                 tf.index = i;
                 dataGroup.addItemRenderer(tf);
-                if (selectionModel.labelField)
-                    tf.text = dp[i][selectionModel.labelField];
-                else
-                               tf.text = dp[i];
-                               
+                if (selectionModel.labelField) {
+                       tf.labelField = selectionModel.labelField;
+                }
+                tf.data = dp[i];
+
                                var newEvent:ItemRendererEvent = new 
ItemRendererEvent(ItemRendererEvent.CREATED);
                                newEvent.itemRenderer = tf;
                                dispatchEvent(newEvent);
                        }
-                       
+
                        IEventDispatcher(_strand).dispatchEvent(new 
Event("itemsCreated"));
                }
-               
+
        }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/DataGridModel.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/DataGridModel.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/DataGridModel.as
index 531edac..c709108 100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/DataGridModel.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/models/DataGridModel.as
@@ -18,13 +18,14 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.html.beads.models
 {
+       import org.apache.flex.core.IBeadModel;
        import org.apache.flex.core.IDataGridModel;
        import org.apache.flex.events.Event;
-       
+
        /**
-        *  The DataGridModel class bead extends 
org.apache.flex.html.beads.models.ArrayListSelectionModel 
+        *  The DataGridModel class bead extends 
org.apache.flex.html.beads.models.ArrayListSelectionModel
         *  to facilitate using an ArrayList as the dataProvider for the 
DataGrid.
-        *  
+        *
         *  @langversion 3.0
         *  @playerversion Flash 10.2
         *  @playerversion AIR 2.6
@@ -34,7 +35,7 @@ package org.apache.flex.html.beads.models
        {
                /**
                 *  constructor.
-                *  
+                *
                 *  @langversion 3.0
                 *  @playerversion Flash 10.2
                 *  @playerversion AIR 2.6
@@ -44,13 +45,13 @@ package org.apache.flex.html.beads.models
                {
                        super();
                }
-               
+
                private var _columns:Array;
-               
+
                /**
-                *  The array of 
org.apache.flex.html.supportClasses.DataGridColumns used to 
+                *  The array of 
org.apache.flex.html.supportClasses.DataGridColumns used to
                 *  define each column of the org.apache.flex.html.DataGrid.
-                *  
+                *
                 *  @langversion 3.0
                 *  @playerversion Flash 10.2
                 *  @playerversion AIR 2.6
@@ -67,5 +68,34 @@ package org.apache.flex.html.beads.models
                                dispatchEvent( new Event("columnsChanged"));
                        }
                }
+
+               private var _headerModel:IBeadModel;
+
+               /**
+                * The model to use for the DataGrid's header.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.9
+                */
+               public function get headerModel():IBeadModel
+               {
+                       return _headerModel;
+               }
+               public function set headerModel(value:IBeadModel):void
+               {
+                       if (_headerModel != value) {
+                               _headerModel = value;
+                               dispatchEvent(new Event("headerModelChanged"));
+
+                               
_headerModel.addEventListener("dataProviderChanged", handleHeaderModelChange);
+                       }
+               }
+
+               private function handleHeaderModelChange(event:Event):void
+               {
+                       dispatchEvent(new Event("headerModelChanged"));
+               }
        }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
index e612517..8db6437 100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/DataGridColumnList.as
@@ -58,5 +58,7 @@ package org.apache.flex.html.supportClasses
                        super();
                        typeNames = "DataGridColumnList";
                }
+               
+               public var columnInfo: DataGridColumn;
        }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/TextButtonItemRenderer.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/TextButtonItemRenderer.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/TextButtonItemRenderer.as
index b164f97..dba0b93 100644
--- 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/TextButtonItemRenderer.as
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/supportClasses/TextButtonItemRenderer.as
@@ -27,12 +27,12 @@ package org.apache.flex.html.supportClasses
        import org.apache.flex.html.TextButton;
        import org.apache.flex.html.beads.ITextItemRenderer;
        import org.apache.flex.events.ItemClickedEvent;
-       
+
        COMPILE::JS
        {
-               import org.apache.flex.core.WrappedHTMLElement;            
+               import org.apache.flex.core.WrappedHTMLElement;
        }
-       
+
        /**
         * The TextButtonItemRenderer class extends TextButton and turns it 
into an itemRenderer
         * suitable for use in most DataContainer/List/DataGrid applications.
@@ -47,14 +47,14 @@ package org.apache.flex.html.supportClasses
                public function TextButtonItemRenderer()
                {
                        super();
-                       
+
                        style = new SimpleCSSStylesWithFlex();
-                       
+
                        addEventListener('click',handleClickEvent);
                }
-               
+
                private var _data:Object;
-               
+
                /**
                 *  The data to be displayed as the text value. Use this in 
conjunction with
                 *  the labelField property to select an item from the 
dataProvider record to use
@@ -72,22 +72,32 @@ package org.apache.flex.html.supportClasses
                public function set data(value:Object):void
                {
                        _data = value;
-                       
+
+                       updateButtonLabelFromData();
+               }
+
+               private function updateButtonLabelFromData():void
+               {
                        var valueAsString:String;
-                       
-                       if (value is String) {
-                               valueAsString = value as String;
+
+                       if (data == null) return;
+
+                       if (data is String) {
+                               valueAsString = data as String;
+                       }
+                       else if (labelField != null) {
+                               valueAsString = String(data[labelField]);
                        }
-                       else if (value.hasOwnProperty("label")) {
-                               valueAsString = String(value["label"]);
+                       else if (data.hasOwnProperty("label")) {
+                               valueAsString = String(data["label"]);
                        }
-                       else if (value.hasOwnProperty("title")) {
-                               valueAsString = String(value["title"]);
+                       else if (data.hasOwnProperty("title")) {
+                               valueAsString = String(data["title"]);
                        }
-                       
+
                        if (valueAsString) text = valueAsString;
                }
-               
+
                /**
                 * @private
                 */
@@ -99,13 +109,13 @@ package org.apache.flex.html.supportClasses
                        newEvent.data = data;
                        dispatchEvent(newEvent);
                }
-               
+
                /*
                 * IItemRenderer, ISelectableItemRenderer
                 */
-               
+
                private var _itemRendererParent:Object;
-               
+
                /**
                 * The parent container for the itemRenderer instance.
                 *
@@ -122,9 +132,9 @@ package org.apache.flex.html.supportClasses
                {
                        _itemRendererParent = value;
                }
-               
-               private var _labelField:String = "label";
-               
+
+               private var _labelField:String = null;
+
                /**
                 * The name of the field within the data to use as a label. 
Some itemRenderers use this field to
                 * identify the value they should show while other 
itemRenderers ignore this if they are showing
@@ -142,10 +152,11 @@ package org.apache.flex.html.supportClasses
                public function set labelField(value:String):void
                {
                        _labelField = value;
+                       updateButtonLabelFromData();
                }
-               
+
                private var _listData:Object;
-               
+
                [Bindable("__NoChangeEvent__")]
                /**
                 *  Additional data about the list structure the itemRenderer 
may
@@ -164,9 +175,9 @@ package org.apache.flex.html.supportClasses
                {
                        _listData = value;
                }
-               
+
                private var _index:int;
-               
+
                /**
                 *  The position with the dataProvider being shown by the 
itemRenderer instance.
                 *
@@ -183,9 +194,9 @@ package org.apache.flex.html.supportClasses
                {
                        _index = value;
                }
-               
+
                private var _hovered:Boolean;
-               
+
                /**
                 *  Whether or not the itemRenderer is in a hovered state.
                 *
@@ -202,9 +213,9 @@ package org.apache.flex.html.supportClasses
                {
                        _hovered = value;
                }
-               
+
                private var _selected:Boolean;
-               
+
                /**
                 *  Whether or not the itemRenderer is in a selected state.
                 *
@@ -221,9 +232,9 @@ package org.apache.flex.html.supportClasses
                {
                        _selected = value;
                }
-               
+
                private var _down:Boolean;
-               
+
                /**
                 *  Whether or not the itemRenderer is in a down (or 
pre-selected) state.
                 *

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/IDataGridModel.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/IDataGridModel.as 
b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/IDataGridModel.as
index e0948da..3b5b222 100644
--- 
a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/IDataGridModel.as
+++ 
b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/IDataGridModel.as
@@ -22,14 +22,14 @@ package org.apache.flex.core
      *  The IDataGridModel interface describes the minimum set of properties
      *  available to an DataGrid control.  More sophisticated DataGrid controls
      *  could have models that extend IDataGridModel.
-     *  
+     *
      *  @langversion 3.0
      *  @playerversion Flash 10.2
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.0
      */
        public interface IDataGridModel extends ISelectionModel
-       {               
+       {
         /**
          *  The set of DataGridColumns.
          *
@@ -40,5 +40,16 @@ package org.apache.flex.core
          */
                function get columns():Array;
                function set columns(value:Array):void;
+
+               /**
+                * The model to use for the DataGrid's header.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.9
+                */
+               function get headerModel():IBeadModel;
+               function set headerModel(value:IBeadModel):void;
        }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as 
b/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
index 0ae4f1c..c62250d 100644
--- a/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
+++ b/frameworks/projects/DragDrop/src/main/flex/DragDropClasses.as
@@ -26,21 +26,25 @@ package
  *  from the classes specified in manifest.xml.
  */
 internal class DragDropClasses
-{        
+{
     import org.apache.flex.core.DropType; DropType;
-    import org.apache.flex.events.DragEvent; DragEvent;   
-       
+    import org.apache.flex.events.DragEvent; DragEvent;
+
        import org.apache.flex.html.beads.SingleSelectionDragImageBead; 
SingleSelectionDragImageBead;
        import org.apache.flex.html.beads.SingleSelectionDragSourceBead; 
SingleSelectionDragSourceBead;
        import org.apache.flex.html.beads.SingleSelectionDropIndicatorBead; 
SingleSelectionDropIndicatorBead;
        import org.apache.flex.html.beads.SingleSelectionDropTargetBead; 
SingleSelectionDropTargetBead;
-       
+
        import org.apache.flex.html.beads.DataGridDrawingLayerBead; 
DataGridDrawingLayerBead;
        import org.apache.flex.html.beads.DataGridWithDrawingLayerLayout; 
DataGridWithDrawingLayerLayout;
        import org.apache.flex.html.beads.IDrawingLayerBead; IDrawingLayerBead;
        import org.apache.flex.html.beads.DragDropListView; DragDropListView;
        import org.apache.flex.html.beads.ListDrawingLayerBead; 
ListDrawingLayerBead;
-       
+
+       import 
org.apache.flex.html.beads.DataGridButtonBarViewForMovableColumns; 
DataGridButtonBarViewForMovableColumns;
+       import org.apache.flex.html.beads.DataGridColumnReorderView; 
DataGridColumnReorderView;
+       import org.apache.flex.html.beads.ButtonBarReorderBead; 
ButtonBarReorderBead;
+
 }
 
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/ButtonBarReorderBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/ButtonBarReorderBead.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/ButtonBarReorderBead.as
new file mode 100644
index 0000000..cc66ba7
--- /dev/null
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/ButtonBarReorderBead.as
@@ -0,0 +1,368 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.flex.html.beads
+{
+       import org.apache.flex.collections.ArrayList;
+       import org.apache.flex.core.IBead;
+       import org.apache.flex.core.IDataProviderModel;
+       import org.apache.flex.core.IDocument;
+       import org.apache.flex.core.IDragInitiator;
+       import org.apache.flex.core.IItemRenderer;
+       import org.apache.flex.core.IItemRendererParent;
+       import org.apache.flex.core.IParent;
+       import org.apache.flex.core.IChild;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.IUIBase;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.DragEvent;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.EventDispatcher;
+       import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.geom.Point;
+       import org.apache.flex.geom.Rectangle;
+       import org.apache.flex.html.Group;
+       import org.apache.flex.html.Label;
+       import org.apache.flex.html.beads.controllers.DragMouseController;
+       import org.apache.flex.html.beads.controllers.DropMouseController;
+       import org.apache.flex.html.supportClasses.DataItemRenderer;
+       import org.apache.flex.utils.PointUtils;
+       import org.apache.flex.utils.UIUtils;
+
+
+       /**
+        *  The ButtonBarReorderBead bead can be added to a ButtonBar to 
re-order the buttons
+        *  using drag-and-drop. This bead will add additional beads as 
necessary.
+        *
+        *  @see org.apache.flex.html.beads.SingleSelectionDropTargetBead.
+     *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.8
+        */
+       public class ButtonBarReorderBead extends EventDispatcher implements 
IBead
+       {
+               /**
+                * Constructor
+            *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.8
+                */
+               public function ButtonBarReorderBead()
+               {
+                       super();
+               }
+
+               private var _strand:IStrand;
+               private var _dragController:DragMouseController;
+               private var _dropController:DropMouseController;
+               private var _dropIndicatorBead:SingleSelectionDropIndicatorBead;
+               private var _dropIndicator:UIBase;
+               private var lastItemVisited:Object;
+               private var indicatorVisible:Boolean = false;
+               private var dropDirection:String;
+
+               /**
+                * @private
+                */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+
+                       dropDirection = "horizontal";
+
+                       _dragController = new DragMouseController();
+                       _strand.addBead(_dragController);
+
+                       
IEventDispatcher(_strand).addEventListener(DragEvent.DRAG_START, 
handleDragStart);
+                       
IEventDispatcher(_strand).addEventListener(DragEvent.DRAG_MOVE, handleDragMove);
+                       
IEventDispatcher(_strand).addEventListener(DragEvent.DRAG_END, handleDragEnd);
+
+                       _dropController = new DropMouseController();
+                       _strand.addBead(_dropController);
+
+                       
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_ENTER, 
handleDragEnter);
+                       
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_EXIT, 
handleDragExit);
+                       
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_OVER, 
handleDragOver);
+                       
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_DROP, 
handleDragDrop);
+               }
+
+               /**
+                * @private
+                * The index of the item being moved
+                */
+               private var sourceIndex:int = -1;
+
+               /**
+                * @private
+                * The index of where the item is being moved before or if -1,
+                * the item is being put at the end.
+                */
+               private var targetIndex:int = -1;
+
+               /**
+                * @private
+                */
+               private function handleDragStart(event:DragEvent):void
+               {
+                       trace("ButtonBarReorderBead received the DragStart");
+
+                       DragMouseController.dragImageOffsetX = 0;
+                       DragMouseController.dragImageOffsetY = -30;
+
+                       var startHere:Object = event.target;
+                       while (!(startHere is IItemRenderer) && startHere != 
null) {
+                               startHere = startHere.itemRendererParent;
+                       }
+                       if (startHere is IItemRenderer) {
+                               var p:UIBase = startHere.itemRendererParent as 
UIBase;
+                               sourceIndex = p.getElementIndex(startHere as 
IChild);
+                               DragEvent.dragSource = (startHere as 
IItemRenderer).data;
+                       }
+               }
+
+               /**
+                * @private
+                */
+               protected function handleDragMove(event:DragEvent):void
+               {
+               }
+
+               /**
+                * @private
+                */
+               protected function handleDragEnd(event:DragEvent):void
+               {
+               }
+
+               /**
+                * @private
+                */
+               private function handleDragEnter(event:DragEvent):void
+               {
+                       trace("ButtonBarReorderBead received DragEnter via: 
"+event.relatedObject.toString());
+                       var pt0:Point;
+                       var pt1:Point;
+                       var pt2:Point;
+
+                       var startHere:Object = event.relatedObject;
+                       while( !(startHere is IItemRenderer) && startHere != 
null) {
+                               startHere = startHere.parent;
+                       }
+
+                       if (startHere is IItemRenderer) {
+                               var ir:IItemRenderer = startHere as 
IItemRenderer;
+                               lastItemVisited = ir;
+                       }
+
+                       if (lastItemVisited && !indicatorVisible && 
indicatorParent) {
+                               var di:UIBase = 
getDropIndicator(lastItemVisited, (dropDirection == "horizontal") ? 
indicatorParent.width : 4,
+                                                                    
(dropDirection == "horizontal") ? 4 : indicatorParent.height);
+                               indicatorVisible = true;
+                               displayDropIndicator(lastItemVisited as 
IUIBase);
+
+                               if (indicatorParent != null) {
+                                       indicatorParent.addElement(di);
+                               }
+                       }
+
+               }
+
+               /**
+                * @private
+                */
+               private function handleDragOver(event:DragEvent):void
+               {
+                       trace("ButtonBarReorderBead received DragOver via: 
"+event.relatedObject.toString());
+                       var pt0:Point;
+                       var pt1:Point;
+                       var pt2:Point;
+
+                       var startHere:Object = event.relatedObject;
+                       while( !(startHere is IItemRenderer) && startHere != 
null) {
+                               startHere = startHere.parent;
+                       }
+
+                       if ((startHere is IItemRenderer) && _dropIndicator != 
null && indicatorParent) {
+                               displayDropIndicator(startHere as IUIBase);
+                               lastItemVisited = startHere;
+
+                       }
+                       else if (lastItemVisited && _dropIndicator != null && 
indicatorParent) {
+                               var lastItem:UIBase = lastItemVisited as UIBase;
+                               displayDropIndicator(lastItemVisited as 
IUIBase);
+                       }
+               }
+
+               /**
+                * @private
+                */
+               private function handleDragExit(event:DragEvent):void
+               {
+                       trace("ButtonBarReorderBead received DragExit via: 
"+event.relatedObject.toString());
+
+                       if (indicatorVisible) {
+                               if (indicatorParent != null) {
+                                       
indicatorParent.removeElement(_dropIndicator);
+                               }
+                               indicatorVisible = false;
+                       }
+               }
+
+               /**
+                * @private
+                */
+               private function handleDragDrop(event:DragEvent):void
+               {
+                       trace("ButtonBarReorderBead received DragDrop via: 
"+event.relatedObject.toString());
+
+                       handleDragExit(event);
+
+                       targetIndex = -1; // assume after the end unless proven 
otherwise.
+
+                       var itemRendererParent:UIBase;
+
+                       var startHere:Object = event.relatedObject;
+                       while( !(startHere is IItemRenderer) && startHere != 
null) {
+                               startHere = startHere.parent;
+                       }
+
+                       if (startHere is IItemRenderer) {
+                               var ir:IItemRenderer = startHere as 
IItemRenderer;
+                               trace("-- dropping onto an existing object: 
"+ir.data.toString());
+
+                               itemRendererParent = ir.itemRendererParent as 
UIBase;
+                               targetIndex = 
itemRendererParent.getElementIndex(ir);
+                       }
+                       else  {
+                               itemRendererParent = 
startHere.itemRendererParent as UIBase;
+                               trace("-- dropping after the last item");
+                       }
+
+                       var dataProviderModel:IDataProviderModel = 
_strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
+
+                       var dragSource:Object;
+
+                       if (dataProviderModel.dataProvider is Array) {
+                               var dataArray:Array = 
dataProviderModel.dataProvider as Array;
+
+                               dragSource = dataArray[sourceIndex];
+
+                               // remove the item from its original position
+                               dataArray.splice(sourceIndex,1)
+
+                               // insert the item being dropped
+                               if (targetIndex == -1) {
+                                       // append to the end
+                                       dataArray.push(dragSource);
+                               } else {
+                                       // insert before targetIndex
+                                       dataArray.splice(targetIndex, 0, 
dragSource);
+                               }
+
+                               var newArray:Array = dataArray.slice()
+                               dataProviderModel.dataProvider = newArray;
+                       }
+                       else if (dataProviderModel.dataProvider is ArrayList) {
+                               var dataList:ArrayList = 
dataProviderModel.dataProvider as ArrayList;
+
+                               dragSource = dataList.getItemAt(sourceIndex);
+
+                               // remove the item from its original position
+                               dataList.removeItemAt(sourceIndex);
+
+                               // insert the item being dropped
+                               if (targetIndex == -1) {
+                                       // sppend to the end
+                                       dataList.addItem(dragSource);
+                               } else {
+                                       // insert before target index
+                                       dataList.addItemAt(dragSource, 
targetIndex);
+                               }
+
+                               var newList:ArrayList = new 
ArrayList(dataList.source);
+                               dataProviderModel.dataProvider = newList;
+                       }
+               }
+
+               protected var _indicatorParent:UIBase;
+
+               protected function get indicatorParent():UIBase
+               {
+                       if (_indicatorParent == null) {
+                               var layerBead:IDrawingLayerBead = 
_strand.getBeadByType(IDrawingLayerBead) as IDrawingLayerBead;
+                               if (layerBead != null) {
+                                       _indicatorParent = layerBead.layer;
+                               }
+                       }
+                       return _indicatorParent;
+               }
+
+               /**
+                * @private
+                */
+               protected function getDropIndicator(ir:Object, width:Number, 
height:Number):UIBase
+               {
+                       if (_dropIndicatorBead == null) {
+                               _dropIndicatorBead = 
_strand.getBeadByType(SingleSelectionDropIndicatorBead) as 
SingleSelectionDropIndicatorBead;
+                               if (_dropIndicatorBead == null) return null;
+                       }
+                       _dropIndicator = 
_dropIndicatorBead.getDropIndicator(ir, width, height);
+                       return _dropIndicator;
+               }
+
+               COMPILE::SWF
+               private function displayDropIndicator(item:IUIBase):void
+               {
+                       var pt0:Point;
+                       var pt1:Point;
+                       var pt2:Point;
+
+                       if (dropDirection == "horizontal") {
+                               pt0 = new Point(0, item.y);
+                               pt1 = PointUtils.localToGlobal(pt0, 
item.parent);
+                               pt2 = PointUtils.globalToLocal(pt1, 
indicatorParent);
+                               _dropIndicator.x = 0;
+                               _dropIndicator.y = pt2.y - 1;
+                       }
+                       else {
+                               pt0 = new Point(item.x, 0);
+                               pt1 = PointUtils.localToGlobal(pt0, 
item.parent);
+                               pt2 = PointUtils.globalToLocal(pt1, 
indicatorParent);
+                               _dropIndicator.x = pt2.x - 1;
+                               _dropIndicator.y = 0;
+                       }
+               }
+
+               COMPILE::JS
+               private function displayDropIndicator(item:IUIBase):void
+               {
+                       if (dropDirection == "horizontal") {
+                               _dropIndicator.x = 0;
+                               _dropIndicator.y = item.y;
+                       } else {
+                               _dropIndicator.x = item.x;
+                               _dropIndicator.y = 0;
+                       }
+               }
+
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridButtonBarViewForMovableColumns.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridButtonBarViewForMovableColumns.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridButtonBarViewForMovableColumns.as
new file mode 100644
index 0000000..abc9b58
--- /dev/null
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridButtonBarViewForMovableColumns.as
@@ -0,0 +1,53 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.flex.html.beads
+{
+       import org.apache.flex.core.IStrand;
+
+       public class DataGridButtonBarViewForMovableColumns extends 
DragDropListView
+       {
+               /**
+                * Constructor
+            *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.8
+                */
+               public function DataGridButtonBarViewForMovableColumns()
+               {
+                       super();
+               }
+
+               private var _strand:IStrand;
+
+               /**
+                * @private
+                */
+               override public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       super.strand = value;
+
+                       _strand.addBead(new ButtonBarReorderBead());
+                       _strand.addBead(new SingleSelectionDragImageBead());
+                       _strand.addBead(new SingleSelectionDropIndicatorBead());
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridColumnReorderView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridColumnReorderView.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridColumnReorderView.as
new file mode 100644
index 0000000..7d45d7e
--- /dev/null
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DataGridColumnReorderView.as
@@ -0,0 +1,100 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.flex.html.beads
+{
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.IBeadModel;
+       import org.apache.flex.core.IDataGridModel;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.html.DataGrid;
+
+               /**
+                *  The DataGridColumnReorderView bead extends DataGridView and
+                *  lists for changes to the model that is used to produce the 
column
+                *  header. When this model changes, this view bead also 
changes the
+                *  sub-components to match.
+                *
+                *  @viewbead
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public class DataGridColumnReorderView extends DataGridView
+               {
+                       /**
+                        *  constructor.
+                        *
+                        *  @langversion 3.0
+                        *  @playerversion Flash 10.2
+                        *  @playerversion AIR 2.6
+                        *  @productversion FlexJS 0.0
+                        */
+                       public function DataGridColumnReorderView()
+                       {
+                               super();
+                       }
+
+                       private var _strand:IStrand;
+
+
+                       /**
+                        *  @copy org.apache.flex.core.IBead#strand
+                        *
+                        *  @langversion 3.0
+                        *  @playerversion Flash 10.2
+                        *  @playerversion AIR 2.6
+                        *  @productversion FlexJS 0.0
+                        */
+                       override public function set strand(value:IStrand):void
+                       {
+                               super.strand = value;
+                               _strand = value;
+                       }
+
+                       /**
+                        * @private
+                        */
+                       override protected function 
finishSetup(event:Event):void
+                       {
+                               super.finishSetup(event);
+
+                                var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
+                               
IEventDispatcher(sharedModel).addEventListener("headerModelChanged", 
handleHeaderModelChanged);
+                       }
+
+                       /**
+                        * @private
+                        */
+                       private function 
handleHeaderModelChanged(event:Event):void
+                       {
+                                trace("** Detected that the DataGrid's header 
has changed in some way");
+                                var host:DataGrid = _strand as DataGrid;
+                                var sharedModel:IDataGridModel = 
_strand.getBeadByType(IBeadModel) as IDataGridModel;
+
+                                host.removeElement(header);
+                                host.removeElement(listArea);
+
+                                
IEventDispatcher(sharedModel).removeEventListener("headerModelChanged", 
handleHeaderModelChanged);
+                                refreshContent();
+                       }
+               }
+}
+

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DragDropListView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DragDropListView.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DragDropListView.as
index c900d50..3321775 100644
--- 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DragDropListView.as
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/DragDropListView.as
@@ -45,9 +45,9 @@ package org.apache.flex.html.beads
        public class DragDropListView extends ListView
        {
                private var _strand:IStrand;
-               
+
                private var _layer:UIBase;
-               
+
                /**
                 * @private
                 */
@@ -55,32 +55,33 @@ package org.apache.flex.html.beads
                {
                        _strand = value;
                        super.strand = value;
-                       
+
                        var layerBead:ListDrawingLayerBead = new 
ListDrawingLayerBead();
                        _strand.addBead(layerBead);
                        _layer = layerBead.layer;
-                       
-                       var chost:IContainer = host as IContainer;
-                       chost.strandChildren.addElement(_layer);
-                       
+
+                       //var chost:IContainer = host as IContainer;
+                       //chost.strandChildren.addElement(_layer);
+                       UIBase(_strand).addElement(_layer);
+
                        UIBase(_strand).element.style['overflow'] = 'auto';
-                       
+
                }
-               
+
                /**
                 * @private
                 */
                override public function afterLayout():void
                {
                        super.afterLayout();
-                       
+
                        _layer.x = 0;
                        _layer.y = 0;
                        _layer.width = UIBase(_strand).width;
                        _layer.height = UIBase(_strand).height;
                }
        }
-       
+
        COMPILE::SWF
        public class DragDropListView extends ListView
        {
@@ -98,7 +99,7 @@ package org.apache.flex.html.beads
                }
 
                private var _strand:IStrand;
-               
+
                private var _layer:UIBase;
 
                /**
@@ -108,23 +109,23 @@ package org.apache.flex.html.beads
                {
                        _strand = value;
                        super.strand = value;
-                       
+
                        var layerBead:ListDrawingLayerBead = new 
ListDrawingLayerBead();
                        _strand.addBead(layerBead);
                        _layer = layerBead.layer;
-                       
+
                        var chost:IContainer = host as IContainer;
                        chost.strandChildren.addElement(_layer);
-                       
+
                }
-               
+
                /**
                 * @private
                 */
                override public function afterLayout():void
                {
                        super.afterLayout();
-                       
+
                        _layer.x = 0;
                        _layer.y = 0;
                        _layer.width = UIBase(_strand).width;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragImageBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragImageBead.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragImageBead.as
index d1ff17b..70effee 100644
--- 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragImageBead.as
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragImageBead.as
@@ -26,7 +26,9 @@ package org.apache.flex.html.beads
        import org.apache.flex.core.IItemRenderer;
        import org.apache.flex.core.IItemRendererParent;
        import org.apache.flex.core.IParent;
+       import org.apache.flex.core.ISelectableItemRenderer;
        import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.IUIBase;
        import org.apache.flex.core.UIBase;
        import org.apache.flex.events.DragEvent;
        import org.apache.flex.events.Event;
@@ -34,22 +36,22 @@ package org.apache.flex.html.beads
        import org.apache.flex.events.IEventDispatcher;
        import org.apache.flex.geom.Point;
        import org.apache.flex.geom.Rectangle;
+       import org.apache.flex.html.Button;
        import org.apache.flex.html.Group;
        import org.apache.flex.html.Label;
        import org.apache.flex.html.beads.controllers.DragMouseController;
-       import org.apache.flex.html.supportClasses.DataItemRenderer;
        import org.apache.flex.utils.PointUtils;
-       
-    
+
+
        /**
         *  The SingleSelectionDragImageBead produces a UIBase component that 
represents
         *  the item being dragged. It does this by taking the data associcated 
with the
         *  index of the item selected and running the toString() function on 
it, placing
         *  it inside of a Label that is inside of Group (which is given the 
className of
         *  "DragImage").
-        * 
+        *
         *  The createDragImage() function can be overridden and a different 
component returned.
-        * 
+        *
         *  @see org.apache.flex.html.beads.SingleSelectionDragSourceBead.
      *
         *  @langversion 3.0
@@ -71,23 +73,23 @@ package org.apache.flex.html.beads
                {
                        super();
                }
-               
+
                private var _strand:IStrand;
-               
+
                /**
                 * @private
                 */
                public function set strand(value:IStrand):void
                {
                        _strand = value;
-                       
+
                        
IEventDispatcher(_strand).addEventListener(DragEvent.DRAG_START, 
handleDragStart);
                }
-               
+
                /**
                 * Creates an example/temporary component to be dragged and 
returns it.
-                * 
-                * @param ir DataItemRenderer The itemRenderer to be used as a 
template.
+                *
+                * @param ir IItemRenderer The itemRenderer to be used as a 
template.
                 * @return UIBase The "dragImage" to use.
                 *
                 *  @langversion 3.0
@@ -95,29 +97,33 @@ package org.apache.flex.html.beads
                 *  @playerversion AIR 2.6
                 *  @productversion FlexJS 0.8
                 */
-               protected function createDragImage(ir:DataItemRenderer):UIBase
+               protected function createDragImage(ir:IItemRenderer):UIBase
                {
                        var dragImage:UIBase = new Group();
                        dragImage.className = "DragImage";
-                       dragImage.width = (ir as UIBase).width;
-                       dragImage.height = (ir as UIBase).height;
+                       dragImage.width = (ir as IUIBase).width;
+                       dragImage.height = (ir as IUIBase).height;
+
                        var label:Label = new Label();
-                       if (ir.dataField != null) {
-                               label.text = ir.data[ir.dataField].toString();
-                       } else {
-                               label.text = ir.data.toString();
+                       if (ir is ISelectableItemRenderer) {
+                               var selIR:ISelectableItemRenderer = ir as 
ISelectableItemRenderer;
+                               if (selIR.labelField != null && selIR.data != 
null) {
+                                       label.text = 
selIR.data[selIR.labelField].toString();
+                               } else {
+                                       label.text = selIR.data.toString();
+                               }
                        }
-                       
+
                        COMPILE::JS {
                                dragImage.element.style.position = 'absolute';
                                dragImage.element.style.cursor = 'pointer';
                        }
-                               
+
                        dragImage.addElement(label);
-                       
+
                        return dragImage;
                }
-               
+
                /**
                 * @private
                 */
@@ -126,10 +132,10 @@ package org.apache.flex.html.beads
                        trace("SingleSelectionDragImageBead received the 
DragStart via: "+event.target.toString());
 
                        var startHere:Object = event.target;
-                       
-                       if (startHere is DataItemRenderer) {
-                               var ir:DataItemRenderer = startHere as 
DataItemRenderer;
-                               DragEvent.dragSource = ir.data;
+
+                       if (startHere is IItemRenderer) {
+                               var ir:IItemRenderer = startHere as 
IItemRenderer;
+                               //DragEvent.dragSource = ir.data;
                                DragMouseController.dragImage = 
createDragImage(ir);
                        }
                }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragSourceBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragSourceBead.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragSourceBead.as
index 8b4e1f1..6a2d6f1 100644
--- 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragSourceBead.as
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDragSourceBead.as
@@ -26,7 +26,9 @@ package org.apache.flex.html.beads
        import org.apache.flex.core.IItemRenderer;
        import org.apache.flex.core.IItemRendererParent;
        import org.apache.flex.core.IParent;
+       import org.apache.flex.core.IChild;
        import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.IUIBase;
        import org.apache.flex.core.UIBase;
        import org.apache.flex.events.DragEvent;
        import org.apache.flex.events.Event;
@@ -40,17 +42,17 @@ package org.apache.flex.html.beads
        import org.apache.flex.html.supportClasses.DataItemRenderer;
        import org.apache.flex.utils.PointUtils;
        import org.apache.flex.utils.UIUtils;
-       
-    
+
+
        /**
         *  The SingleSelectionDragSourceBead brings drag capability to 
single-selection List components.
         *  By adding this bead, a user can drag a row of the List to a new 
location within the list. This bead
         *  should be used in conjunction with SingleSelectionDropTargetBead.
-        * 
+        *
         *  This bead adds a new event to the strand, "dragImageNeeded", which 
is dispatched on the strand
         *  just prior to the dragImage's appearance. An event listener can 
create its own dragImage if the
         *  default, taken from the data item, is not suitable.
-        * 
+        *
         *  @see org.apache.flex.html.beads.SingleSelectionDropTargetBead.
      *
         *  @langversion 3.0
@@ -72,12 +74,12 @@ package org.apache.flex.html.beads
                {
                        super();
                }
-               
+
                private var _strand:IStrand;
                private var _dragController:DragMouseController;
-               
+
                private var _dragType:String = "move";
-               
+
                /**
                 * The type of drag and drop operation: move or copy.
             *
@@ -94,64 +96,63 @@ package org.apache.flex.html.beads
                {
                        _dragType = value;
                }
-               
+
                /**
                 * @private
                 */
                public function set strand(value:IStrand):void
                {
                        _strand = value;
-                       
+
                        _dragController = new DragMouseController();
                        _strand.addBead(_dragController);
-                       
+
                        
IEventDispatcher(_strand).addEventListener(DragEvent.DRAG_START, 
handleDragStart);
                        
IEventDispatcher(_strand).addEventListener(DragEvent.DRAG_MOVE, handleDragMove);
                        
IEventDispatcher(_strand).addEventListener(DragEvent.DRAG_END, handleDragEnd);
                }
-               
+
                private var indexOfDragSource:int = -1;
-               
+
                /**
                 * @private
                 */
                private function handleDragStart(event:DragEvent):void
                {
                        trace("SingleSelectionDragSourceBead received the 
DragStart");
-                                               
+
                        DragEvent.dragInitiator = this;
                        DragMouseController.dragImageOffsetX = 0;
                        DragMouseController.dragImageOffsetY = -30;
-                       
+
                        var startHere:Object = event.target;
-                       while( !(startHere is DataItemRenderer) && startHere != 
null) {
-                               startHere = startHere.parent;
+                       while (!(startHere is IItemRenderer) && startHere != 
null) {
+                               startHere = startHere.itemRendererParent;
                        }
-                       
-                       if (startHere is DataItemRenderer) {
-                               var ir:DataItemRenderer = startHere as 
DataItemRenderer;
-                               
-                               var p:UIBase = (ir as UIBase).parent as UIBase;
-                               indexOfDragSource = p.getElementIndex(ir);      
                                                        
+
+                       if (startHere is IItemRenderer) {
+                               var p:UIBase = startHere.itemRendererParent as 
UIBase;
+                               indexOfDragSource = p.getElementIndex(startHere 
as IChild);
+                               DragEvent.dragSource = (startHere as 
IItemRenderer).data;
                        }
                }
-               
+
                /**
                 * @private
                 */
                protected function handleDragMove(event:DragEvent):void
                {
                }
-               
+
                /**
                 * @private
                 */
                protected function handleDragEnd(event:DragEvent):void
                {
                }
-               
+
                /* IDragInitiator */
-               
+
                /**
                 * Handles pre-drop actions.
             *
@@ -164,30 +165,30 @@ package org.apache.flex.html.beads
                {
                        trace("SingleSelectionDragSourceBead accepting drop of 
type "+type);
                        if (dragType == "copy") return;
-                       
+
                        var dataProviderModel:IDataProviderModel = 
_strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
                        if (dataProviderModel.dataProvider is Array) {
                                var dataArray:Array = 
dataProviderModel.dataProvider as Array;
-                               
+
                                // remove the item being selected
-                               dataArray.splice(indexOfDragSource,1);
-                               
+                               DragEvent.dragSource = 
dataArray.splice(indexOfDragSource,1)[0];
+
                                // refresh the dataProvider model
                                var newArray:Array = dataArray.slice()
                                dataProviderModel.dataProvider = newArray;
                        }
                        else if (dataProviderModel.dataProvider is ArrayList) {
                                var dataList:ArrayList = 
dataProviderModel.dataProvider as ArrayList;
-                               
+
                                // remove the item being selected
-                               dataList.removeItemAt(indexOfDragSource);
-                               
+                               DragEvent.dragSource = 
dataList.removeItemAt(indexOfDragSource);
+
                                // refresh the dataProvider model
                                var newList:ArrayList = new 
ArrayList(dataList.source);
                                dataProviderModel.dataProvider = newList;
                        }
                }
-               
+
                /**
                 * Handles post-drop actions.
             *
@@ -201,9 +202,9 @@ package org.apache.flex.html.beads
                        trace("SingleSelectionDragSourceBead accepted drop of 
type "+type);
                        var value:Object = DragEvent.dragSource;
                        trace(" -- index: "+indexOfDragSource+" of data: 
"+value.toString());
-                       
+
                        indexOfDragSource = -1;
                }
-               
+
        }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDropTargetBead.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDropTargetBead.as
 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDropTargetBead.as
index ee93eca..c4facda 100644
--- 
a/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDropTargetBead.as
+++ 
b/frameworks/projects/DragDrop/src/main/flex/org/apache/flex/html/beads/SingleSelectionDropTargetBead.as
@@ -21,12 +21,14 @@ package org.apache.flex.html.beads
        import org.apache.flex.collections.ArrayList;
        import org.apache.flex.core.DropType;
        import org.apache.flex.core.IBead;
+       import org.apache.flex.core.IChild;
        import org.apache.flex.core.IDataProviderModel;
        import org.apache.flex.core.IItemRenderer;
        import org.apache.flex.core.IParent;
        import org.apache.flex.core.IStrand;
        import org.apache.flex.core.IUIBase;
        import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.Event;
        import org.apache.flex.events.DragEvent;
        import org.apache.flex.events.EventDispatcher;
        import org.apache.flex.events.IEventDispatcher;
@@ -36,13 +38,13 @@ package org.apache.flex.html.beads
        import org.apache.flex.html.supportClasses.DataItemRenderer;
        import org.apache.flex.utils.PointUtils;
        import org.apache.flex.utils.UIUtils;
-       
-    
+
+
        /**
         *  The SingleSelectionDropTargetBead enables items to be dropped onto 
single-selection List
         *  components. This bead can be used with 
SingleSelectionDragSourceBead to enable the re-arrangement
         *  of rows within the same list.
-     *  
+     *
         *  @see org.apache.flex.html.beads.SingleSelectionDropIndicatorBead
      *
         *  @langversion 3.0
@@ -64,33 +66,44 @@ package org.apache.flex.html.beads
                {
                        super();
                }
-               
+
                private var _dropController:DropMouseController;
                private var _dropIndicatorBead:SingleSelectionDropIndicatorBead;
                private var _dropIndicator:UIBase;
                private var lastItemVisited:Object;
                private var indicatorVisible:Boolean = false;
-               
+
                private var _strand:IStrand;
-               
+
                /**
                 * @private
                 */
                public function set strand(value:IStrand):void
                {
                        _strand = value;
-                       
+
                        _dropController = new DropMouseController();
                        _strand.addBead(_dropController);
-                       
+
                        
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_ENTER, 
handleDragEnter);
                        
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_EXIT, 
handleDragExit);
                        
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_OVER, 
handleDragOver);
                        
IEventDispatcher(_dropController).addEventListener(DragEvent.DRAG_DROP, 
handleDragDrop);
                }
-               
+
+               private var _dropDirection: String = "horizontal";
+
+               public function get dropDirection():String
+               {
+                       return _dropDirection;
+               }
+               public function set dropDirection(value:String):void
+               {
+                       _dropDirection = value;
+               }
+
                protected var _indicatorParent:UIBase;
-               
+
                protected function get indicatorParent():UIBase
                {
                        if (_indicatorParent == null) {
@@ -101,7 +114,7 @@ package org.apache.flex.html.beads
                        }
                        return _indicatorParent;
                }
-               
+
                /**
                 * @private
                 */
@@ -114,7 +127,7 @@ package org.apache.flex.html.beads
                        _dropIndicator = 
_dropIndicatorBead.getDropIndicator(ir, width, height);
                        return _dropIndicator;
                }
-               
+
                /**
                 * @private
                 */
@@ -124,48 +137,39 @@ package org.apache.flex.html.beads
                        var pt0:Point;
                        var pt1:Point;
                        var pt2:Point;
-                       
+
                        _dropController.acceptDragDrop(event.target as IUIBase, 
DropType.COPY);
-                       
+
                        var startHere:Object = event.relatedObject;
-                       while( !(startHere is DataItemRenderer) && startHere != 
null) {
+                       while( !(startHere is IItemRenderer) && startHere != 
null) {
                                startHere = startHere.parent;
                        }
-                       
-                       if (startHere is DataItemRenderer) {
-                               var ir:DataItemRenderer = startHere as 
DataItemRenderer;                                
+
+                       if (startHere is IItemRenderer) {
+                               var ir:IItemRenderer = startHere as 
IItemRenderer;
                                lastItemVisited = ir;
                        }
-                       
+
                        if (lastItemVisited && !indicatorVisible && 
indicatorParent) {
-                               var di:UIBase = 
getDropIndicator(lastItemVisited, indicatorParent.width, 4);
+                               var di:UIBase = 
getDropIndicator(lastItemVisited, (dropDirection == "horizontal") ? 
indicatorParent.width : 4,
+                                                                    
(dropDirection == "horizontal") ? 4 : indicatorParent.height);
                                indicatorVisible = true;
-                               COMPILE::SWF {
-                                       pt0 = new Point(0, (lastItemVisited as 
UIBase).y);
-                                       pt1 = PointUtils.localToGlobal(pt0, 
lastItemVisited.parent ? lastItemVisited.parent : _strand);
-                                       pt2 = PointUtils.globalToLocal(pt1, 
indicatorParent);
-                                       di.x = 0;
-                                       di.y = pt2.y;
-                               }
-                               COMPILE::JS {
-                                       di.x = 0;
-                                       di.y = (lastItemVisited as UIBase).y;
-                               }
-                                                               
+                               displayDropIndicator(lastItemVisited as 
IUIBase);
+
                                if (indicatorParent != null) {
                                        indicatorParent.addElement(di);
                                }
                        }
-                       
+
                }
-               
+
                /**
                 * @private
                 */
                private function handleDragExit(event:DragEvent):void
                {
                        trace("SingleSelectionDropTargetBead received DragExit 
via: "+event.relatedObject.toString());
-                       
+
                        if (indicatorVisible) {
                                if (indicatorParent != null) {
                                        
indicatorParent.removeElement(_dropIndicator);
@@ -173,7 +177,7 @@ package org.apache.flex.html.beads
                                indicatorVisible = false;
                        }
                }
-               
+
                /**
                 * @private
                 */
@@ -183,83 +187,65 @@ package org.apache.flex.html.beads
                        var pt0:Point;
                        var pt1:Point;
                        var pt2:Point;
-                       
+
                        var startHere:Object = event.relatedObject;
-                       while( !(startHere is DataItemRenderer) && startHere != 
null) {
+                       while( !(startHere is IItemRenderer) && startHere != 
null) {
                                startHere = startHere.parent;
                        }
-                       
-                       if ((startHere is DataItemRenderer) && _dropIndicator 
!= null && indicatorParent) {
-                               COMPILE::SWF {
-                                       pt0 = new Point(0, (startHere as 
UIBase).y);
-                                       pt1 = PointUtils.localToGlobal(pt0, 
startHere.parent);
-                                       pt2 = PointUtils.globalToLocal(pt1, 
indicatorParent);
-                                       _dropIndicator.x = 0;
-                                       _dropIndicator.y = pt2.y - 1;
-                               }
-                               COMPILE::JS {
-                                       _dropIndicator.x = 0;
-                                       _dropIndicator.y = (startHere as 
UIBase).y;
-                               }
-                               
+
+                       if ((startHere is IItemRenderer) && _dropIndicator != 
null && indicatorParent) {
+                               displayDropIndicator(startHere as IUIBase);
                                lastItemVisited = startHere;
-                               
-                       } 
+
+                       }
                        else if (lastItemVisited && _dropIndicator != null && 
indicatorParent) {
                                var lastItem:UIBase = lastItemVisited as UIBase;
-                               COMPILE::SWF {
-                                       pt0 = new Point(0, lastItem.y);
-                                       pt1 = PointUtils.localToGlobal(pt0, 
lastItem.parent);
-                                       pt2 = PointUtils.globalToLocal(pt1, 
indicatorParent);
-                                       _dropIndicator.x = 0;
-                                       _dropIndicator.y = pt2.y + 
lastItem.height + 1;
-                               }
-                               COMPILE::JS {
-                                       _dropIndicator.x = 0;
-                                       _dropIndicator.y = lastItem.y;
-                               }
+                               displayDropIndicator(lastItemVisited as 
IUIBase);
                        }
                }
-               
+
                /**
                 * @private
                 */
                private function handleDragDrop(event:DragEvent):void
                {
                        trace("SingleSelectionDropTargetBead received DragDrop 
via: "+event.relatedObject.toString());
-                       
+
                        handleDragExit(event);
-                                               
+
                        var targetIndex:int = -1; // indicates drop beyond 
length of items
-                       
+                       var itemRendererParent:UIBase;
+
                        var startHere:Object = event.relatedObject;
                        while( !(startHere is IItemRenderer) && startHere != 
null) {
                                startHere = startHere.parent;
                        }
-                       
+
                        if (startHere is IItemRenderer) {
                                var ir:IItemRenderer = startHere as 
IItemRenderer;
                                trace("-- dropping onto an existing object: 
"+ir.data.toString());
-                               
-                               var p:UIBase = (ir as UIBase).parent as UIBase;
-                               targetIndex = p.getElementIndex(ir);
+
+                               itemRendererParent = ir.itemRendererParent as 
UIBase;
+                               targetIndex = 
itemRendererParent.getElementIndex(ir);
                        }
                        else  {
+                               itemRendererParent = 
startHere.itemRendererParent as UIBase;
                                trace("-- dropping after the last item");
                        }
-                       
-                       var downPoint:Point = new Point(event.clientX, 
event.clientY); 
+
+                       var downPoint:Point = new Point(event.clientX, 
event.clientY);
                        //trace("Dropping at this point: "+downPoint.x+", 
"+downPoint.y);
                        //trace("-- find the itemRenderer this object is over");
-                                               
+
                        // Let the dragInitiator know that the drop was 
accepted so it can do
                        // whatever it needs to do to prepare the data or 
structures.
                        if (DragEvent.dragInitiator) {
                                DragEvent.dragInitiator.acceptingDrop(_strand, 
"object");
                        }
-                               
+
                        var dragSource:Object = DragEvent.dragSource;
-                               
+                       var sourceIndex:int = 0;
+
                        var dataProviderModel:IDataProviderModel = 
_strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
                        if (dataProviderModel.dataProvider is Array) {
                                var dataArray:Array = 
dataProviderModel.dataProvider as Array;
@@ -272,13 +258,13 @@ package org.apache.flex.html.beads
                                        // insert before targetIndex
                                        dataArray.splice(targetIndex, 0, 
dragSource);
                                }
-                               
+
                                var newArray:Array = dataArray.slice()
                                dataProviderModel.dataProvider = newArray;
                        }
                        else if (dataProviderModel.dataProvider is ArrayList) {
                                var dataList:ArrayList = 
dataProviderModel.dataProvider as ArrayList;
-                               
+
                                // insert the item being dropped
                                if (targetIndex == -1) {
                                        // sppend to the end
@@ -287,15 +273,52 @@ package org.apache.flex.html.beads
                                        // insert before target index
                                        dataList.addItemAt(dragSource, 
targetIndex);
                                }
-                               
+
                                var newList:ArrayList = new 
ArrayList(dataList.source);
                                dataProviderModel.dataProvider = newList;
                        }
-                               
+
                        // Let the dragInitiator know the drop has been 
completed.
                        if (DragEvent.dragInitiator) {
                                DragEvent.dragInitiator.acceptedDrop(_strand, 
"object");
                        }
+
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("dragDropAccepted"));
+               }
+
+               COMPILE::SWF
+               private function displayDropIndicator(item:IUIBase):void
+               {
+                       var pt0:Point;
+                       var pt1:Point;
+                       var pt2:Point;
+
+                       if (dropDirection == "horizontal") {
+                               pt0 = new Point(0, item.y);
+                               pt1 = PointUtils.localToGlobal(pt0, 
item.parent);
+                               pt2 = PointUtils.globalToLocal(pt1, 
indicatorParent);
+                               _dropIndicator.x = 0;
+                               _dropIndicator.y = pt2.y - 1;
+                       }
+                       else {
+                               pt0 = new Point(item.x, 0);
+                               pt1 = PointUtils.localToGlobal(pt0, 
item.parent);
+                               pt2 = PointUtils.globalToLocal(pt1, 
indicatorParent);
+                               _dropIndicator.x = pt2.x - 1;
+                               _dropIndicator.y = 0;
+                       }
+               }
+
+               COMPILE::JS
+               private function displayDropIndicator(item:IUIBase):void
+               {
+                       if (dropDirection == "horizontal") {
+                               _dropIndicator.x = 0;
+                               _dropIndicator.y = item.y;
+                       } else {
+                               _dropIndicator.x = item.x;
+                               _dropIndicator.y = 0;
+                       }
                }
        }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/88cd277a/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml 
b/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
index 68804ac..75f426a 100644
--- a/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/DragDrop/src/main/resources/basic-manifest.xml
@@ -33,4 +33,8 @@
        <component id="DragDropListView" 
class="org.apache.flex.html.beads.DragDropListView" />
        <component id="ListDrawingLayerBead" 
class="org.apache.flex.html.beads.ListDrawingLayerBead" />
        
+       <component id="DataGridButtonBarViewForMovableColumns" 
class="org.apache.flex.html.beads.DataGridButtonBarViewForMovableColumns" />
+       <component id="DataGridColumnReorderView" 
class="org.apache.flex.html.beads.DataGridColumnReorderView" />
+       <component id="ButtonBarReorderBead" 
class="org.apache.flex.html.beads.ButtonBarReorderBead" />
+       
 </componentPackage>

Reply via email to