Fix resizing of wxGrid columns when they were reordered.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 13 Nov 2010 15:02:42 +0000 (15:02 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 13 Nov 2010 15:02:42 +0000 (15:02 +0000)
The column resizing code in wxGrid didn't take account of the fact that the
column positions and indices could be different. Correct it by inserting calls
to wxGrid::GetColAt() and GetColPos() in a new wxGridOperations::GetLineBefore()
method.

Closes #11984.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66137 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/generic/private/grid.h
src/generic/grid.cpp

index f12a9c8f130ee1706b80cd2321d8a0c39d8533fe..d39ccd8a9edbff334949730f4803175797452209 100644 (file)
@@ -428,6 +428,7 @@ All (GUI):
 - Added wxToolbook XRC handler (Andrea Zanellato).
 - Added wxDocManager::FindTemplate() (troelsk).
 - Return bool, not void, from wxImage::ConvertAlphaToMask() (troelsk).
+- Fixed resizing columns in wxGrid when they were reordered.
 
 MSW:
 
index 2f3099d07ec226081650d706939ef1cda25fb18f..388146d5025407d2d43b4c942e8e33f2dc4bd196 100644 (file)
@@ -544,8 +544,10 @@ public:
     //
     // NB: currently this is always identity for the rows as reordering is only
     //     implemented for the lines
-    virtual int GetLineAt(const wxGrid *grid, int line) const = 0;
+    virtual int GetLineAt(const wxGrid *grid, int pos) const = 0;
 
+    // Return the index of the line just before the given one.
+    virtual int GetLineBefore(const wxGrid* grid, int line) const = 0;
 
     // Get the row or column label window
     virtual wxWindow *GetHeaderWindow(wxGrid *grid) const = 0;
@@ -614,6 +616,9 @@ public:
     virtual int GetLineAt(const wxGrid * WXUNUSED(grid), int line) const
         { return line; } // TODO: implement row reordering
 
+    virtual int GetLineBefore(const wxGrid* WXUNUSED(grid), int line) const
+        { return line ? line - 1 : line; }
+
     virtual wxWindow *GetHeaderWindow(wxGrid *grid) const
         { return grid->GetGridRowLabelWindow(); }
     virtual int GetHeaderWindowSize(wxGrid *grid) const
@@ -675,6 +680,9 @@ public:
     virtual int GetLineAt(const wxGrid *grid, int line) const
         { return grid->GetColAt(line); }
 
+    virtual int GetLineBefore(const wxGrid* grid, int line) const
+        { return grid->GetColAt(wxMax(0, grid->GetColPos(line) - 1)); }
+
     virtual wxWindow *GetHeaderWindow(wxGrid *grid) const
         { return grid->GetGridColLabelWindow(); }
     virtual int GetHeaderWindowSize(wxGrid *grid) const
index 1b23c55dac8e126f40c8f45fc389121c142f9614..d9a1a800d405b41fec1108856042c81f9e9e9545 100644 (file)
@@ -6281,7 +6281,9 @@ int wxGrid::PosToEdgeOfLine(int pos, const wxGridOperations& oper) const
         else if ( line > 0 &&
                     pos - oper.GetLineStartPos(this,
                                                line) < WXGRID_LABEL_EDGE_ZONE )
-            return line - 1;
+        {
+            return oper.GetLineBefore(this, line);
+        }
     }
 
     return -1;