FLEX-35267 FLEX-35260 FLEX-35029
1. GridHeaderViewLayout.getHeaderIndexAt() now verifies if the coordinates are 
over the GridColumnHeaderView's left or right padding.
2. Renamed GridColumnHeaderGroup.mouseEventHeaderView() to 
getHeaderViewUnderGlobalCoordinates(), while also changing the parameter to be 
a Point instead of a MouseEvent. This is so that 
areCoordinatesOverAHeaderView(), areCoordinatesOverLeftPadding() and 
areCoordinatesOverRightPadding() can use it too.
3. Expanded some variable names in GridColumnHeaderGroup.


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

Branch: refs/heads/master
Commit: ad48251737546e5ae17081044f3051bfbb1997e8
Parents: a603b07
Author: Mihai Chira <mih...@apache.org>
Authored: Fri Mar 10 17:44:32 2017 +0100
Committer: Mihai Chira <mih...@apache.org>
Committed: Fri Mar 10 17:44:32 2017 +0100

----------------------------------------------------------------------
 .../spark/components/GridColumnHeaderGroup.as   | 66 +++++++++++++++-----
 .../gridClasses/GridColumnHeaderView.as         |  9 ++-
 .../gridClasses/GridHeaderViewLayout.as         | 40 +++++-------
 3 files changed, 72 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/ad482517/frameworks/projects/spark/src/spark/components/GridColumnHeaderGroup.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/spark/src/spark/components/GridColumnHeaderGroup.as 
b/frameworks/projects/spark/src/spark/components/GridColumnHeaderGroup.as
index 9d5b81d..a9209a1 100644
--- a/frameworks/projects/spark/src/spark/components/GridColumnHeaderGroup.as
+++ b/frameworks/projects/spark/src/spark/components/GridColumnHeaderGroup.as
@@ -782,7 +782,40 @@ public class GridColumnHeaderGroup extends Group 
implements IDataGridElement
     {
         return (_visibleSortIndicatorIndices.indexOf(columnIndex) != -1);
     }
+
+    public function containsGlobalCoordinates(coordinates:Point):Boolean
+    {
+        return areCoordinatesOverAHeaderView(coordinates) || 
areCoordinatesOverPadding(coordinates);
+    }
+
+    public function areCoordinatesOverAHeaderView(coordinates:Point):Boolean
+    {
+        return getHeaderViewUnderGlobalCoordinates(coordinates) != null;
+    }
+
+    public function areCoordinatesOverPadding(coordinates:Point):Boolean
+    {
+        return areCoordinatesOverLeftPadding(coordinates) || 
areCoordinatesOverRightPadding(coordinates);
+    }
+
+    public function areCoordinatesOverLeftPadding(coordinates:Point):Boolean
+    {
+        var paddingLeftStyle:Number = getStyle("paddingLeft");
+        var paddingLeft:Number = isNaN(paddingLeftStyle) ? 0 : 
paddingLeftStyle;
+
+        return getHeaderViewUnderGlobalCoordinates(new Point(coordinates.x, 
coordinates.y)) == null &&
+                getHeaderViewUnderGlobalCoordinates(new Point(coordinates.x + 
paddingLeft, coordinates.y)) != null;
+    }
     
+    public function areCoordinatesOverRightPadding(coordinates:Point):Boolean
+    {
+        var paddingRightStyle:Number = getStyle("paddingRight");
+        var paddingRight:Number = isNaN(paddingRightStyle) ? 0 : 
paddingRightStyle;
+
+        return getHeaderViewUnderGlobalCoordinates(new Point(coordinates.x, 
coordinates.y)) == null &&
+        getHeaderViewUnderGlobalCoordinates(new Point(coordinates.x, 
coordinates.y - paddingRight)) != null;
+    }
+
     
//--------------------------------------------------------------------------
     //
     //  Methods 
@@ -804,28 +837,28 @@ public class GridColumnHeaderGroup extends Group 
implements IDataGridElement
         */
        public function configureGridColumnHeaderViews():void
        {
-        const ghl:GridHeaderLayout = layout as GridHeaderLayout;
-        if (!ghl)
+        const headerLayout:GridHeaderLayout = layout as GridHeaderLayout;
+        if (!headerLayout)
             return;
         
-               if (ghl.centerGridColumnHeaderView == null)
-                       ghl.centerGridColumnHeaderView = 
createGridColumnHeaderView();
+               if (headerLayout.centerGridColumnHeaderView == null)
+                       headerLayout.centerGridColumnHeaderView = 
createGridColumnHeaderView();
                
                if (dataGrid.lockedColumnCount > 0)
                {
-                       ghl.leftGridColumnHeaderView = 
createGridColumnHeaderView();
+                       headerLayout.leftGridColumnHeaderView = 
createGridColumnHeaderView();
                }
-               else if (ghl.leftGridColumnHeaderView)
+               else if (headerLayout.leftGridColumnHeaderView)
                {
-                       removeElement(ghl.leftGridColumnHeaderView);
-                       ghl.leftGridColumnHeaderView = null;
+                       removeElement(headerLayout.leftGridColumnHeaderView);
+                       headerLayout.leftGridColumnHeaderView = null;
                }
                
                const gridLayout:GridLayout = dataGrid.grid.layout as 
GridLayout;
 
-               
GridHeaderViewLayout(ghl.centerGridColumnHeaderView.layout).gridView = 
gridLayout.centerGridView;
-               if (ghl.leftGridColumnHeaderView)
-                       
GridHeaderViewLayout(ghl.leftGridColumnHeaderView.layout).gridView = 
gridLayout.leftGridView;
+               
GridHeaderViewLayout(headerLayout.centerGridColumnHeaderView.layout).gridView = 
gridLayout.centerGridView;
+               if (headerLayout.leftGridColumnHeaderView)
+                       
GridHeaderViewLayout(headerLayout.leftGridColumnHeaderView.layout).gridView = 
gridLayout.leftGridView;
        }
        
        /**
@@ -850,7 +883,6 @@ public class GridColumnHeaderGroup extends Group implements 
IDataGridElement
      */
     public function getHeaderIndexAt(x:Number, y:Number):int
     {
-        // TODO: fix this: x coordinate has to be adjusted
                const view:Group = getColumnHeaderViewAtX(x);
         return GridHeaderViewLayout(view.layout).getHeaderIndexAt(x, y);
     }
@@ -1000,16 +1032,16 @@ public class GridColumnHeaderGroup extends Group 
implements IDataGridElement
         *  comparison is based strictly on the event's location and the 
GridViews' bounds.
         *  The event's target can be anything.
         */
-       private function 
mouseEventHeaderView(event:MouseEvent):GridColumnHeaderView
+       private function 
getHeaderViewUnderGlobalCoordinates(globalCoordinates:Point):GridColumnHeaderView
        {
                const ghl:GridHeaderLayout = layout as GridHeaderLayout;
 
-               const centerGridColumnHeaderView:GridColumnHeaderView = 
GridColumnHeaderView(ghl.centerGridColumnHeaderView)
-               if (centerGridColumnHeaderView && 
centerGridColumnHeaderView.containsMouseEvent(event))
+               const centerGridColumnHeaderView:GridColumnHeaderView = 
GridColumnHeaderView(ghl.centerGridColumnHeaderView);
+               if (centerGridColumnHeaderView && 
centerGridColumnHeaderView.containsStageCoordinates(globalCoordinates))
                        return centerGridColumnHeaderView;
                
                const leftGridColumnHeaderView:GridColumnHeaderView = 
GridColumnHeaderView(ghl.leftGridColumnHeaderView);
-               if (leftGridColumnHeaderView && 
leftGridColumnHeaderView.containsMouseEvent(event))
+               if (leftGridColumnHeaderView && 
leftGridColumnHeaderView.containsStageCoordinates(globalCoordinates))
                        return leftGridColumnHeaderView;
                
                return null;
@@ -1018,7 +1050,7 @@ public class GridColumnHeaderGroup extends Group 
implements IDataGridElement
     // TODO: apologize for stashing the separatorIndex in headerCP.rowIndex
     private function eventToHeaderLocations(event:MouseEvent, 
headerCP:CellPosition, headerXY:Point):Boolean
     {
-        const view:Group = mouseEventHeaderView(event);
+        const view:Group = getHeaderViewUnderGlobalCoordinates(new 
Point(event.stageX, event.stageY));
         if (!view)
             return false;
 

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/ad482517/frameworks/projects/spark/src/spark/components/gridClasses/GridColumnHeaderView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/spark/src/spark/components/gridClasses/GridColumnHeaderView.as
 
b/frameworks/projects/spark/src/spark/components/gridClasses/GridColumnHeaderView.as
index ee475ee..2e6f449 100644
--- 
a/frameworks/projects/spark/src/spark/components/gridClasses/GridColumnHeaderView.as
+++ 
b/frameworks/projects/spark/src/spark/components/gridClasses/GridColumnHeaderView.as
@@ -106,8 +106,13 @@ public class GridColumnHeaderView extends Group
      */
     public function containsMouseEvent(event:MouseEvent):Boolean
     {
-        const eventStageX:Number = event.stageX;
-        const eventStageY:Number = event.stageY;
+        return containsStageCoordinates(new Point(event.stageX, event.stageY));
+    }
+
+    public function containsStageCoordinates(coordinates:Point):Boolean
+    {
+        const eventStageX:Number = coordinates.x;
+        const eventStageY:Number = coordinates.y;
         const origin:Point = localToGlobal(zeroPoint);
 
         origin.x += horizontalScrollPosition;

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/ad482517/frameworks/projects/spark/src/spark/components/gridClasses/GridHeaderViewLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/spark/src/spark/components/gridClasses/GridHeaderViewLayout.as
 
b/frameworks/projects/spark/src/spark/components/gridClasses/GridHeaderViewLayout.as
index 2d98b89..4dd36b8 100644
--- 
a/frameworks/projects/spark/src/spark/components/gridClasses/GridHeaderViewLayout.as
+++ 
b/frameworks/projects/spark/src/spark/components/gridClasses/GridHeaderViewLayout.as
@@ -500,33 +500,25 @@ public class GridHeaderViewLayout extends LayoutBase
      */
     public function getHeaderIndexAt(x:Number, y:Number):int
     {
-        return gridView.gridViewLayout.gridDimensionsView.getColumnIndexAt(x, 
y);
-        
-        // TODO: restore the special case handling below
-        /*
-        const gridColumnHeaderGroup:GridColumnHeaderGroup = 
this.gridColumnHeaderGroup;
-        const grid:Grid = this.grid;
-        const columnsView:IList = this.columnsView;
-        
-        if (!gridColumnHeaderGroup || !grid || !columnsView)
-            return -1; 
-        
-        const paddingLeft:Number = 
gridColumnHeaderGroup.getStyle("paddingLeft");
-        const paddedX:Number = x + paddingLeft;
-        var columnIndex:int = grid.getColumnIndexAt(paddedX, 0);
-        
-        // Special case for the stretched renderer above the vertical scrollbar
-        // TODO (klin): Rethink this case if we change how the last header 
looks.
-        if (columnIndex < 0)
+        var headerIndex:int = -1;
+        var globalPoint:Point = gridColumnHeaderGroup.localToGlobal(new 
Point(x, y));
+
+        if(!gridColumnHeaderGroup.areCoordinatesOverLeftPadding(globalPoint))
         {
-            const contentWidth:Number = gridColumnHeaderGroup.contentWidth;
-            const totalWidth:Number = horizontalScrollPosition + 
gridColumnHeaderGroup.width - gridColumnHeaderGroup.getStyle("paddingRight");
-            if (paddedX >= contentWidth && paddedX < totalWidth)
-                columnIndex = 
grid.getPreviousVisibleColumnIndex(columnsView.length)
+            var paddingLeftStyle:Number = 
gridColumnHeaderGroup.getStyle("paddingLeft");
+            var paddingLeft:Number = isNaN(paddingLeftStyle) ? 0 : 
paddingLeftStyle;
+        
+            headerIndex = 
gridView.gridViewLayout.gridDimensionsView.getColumnIndexAt(x - paddingLeft + 
horizontalScrollPosition, y);
+
+            if(headerIndex == -1 && 
gridColumnHeaderGroup.containsGlobalCoordinates(globalPoint))
+            {
+                //then the point is either over the right padding, over the 
width of the vertical
+                //scroll bar, or over the space between the last separator and 
the width of the grid
+                headerIndex = 
grid.getPreviousVisibleColumnIndex(columnsView.length);
+            }
         }
         
-        return columnIndex;
-        */
+        return headerIndex;
     }
     
     /**

Reply via email to