added possibility to reorder columns by dragging them (patch 1409677)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39498 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		| @@ -91,6 +91,7 @@ All (GUI): | |||||||
| - Added wxDC::GradientFillLinear/Concentric() | - Added wxDC::GradientFillLinear/Concentric() | ||||||
| - Added wxHyperlinkCtrl (Francesco Montorsi) | - Added wxHyperlinkCtrl (Francesco Montorsi) | ||||||
| - Added clipboard events (wxEVT_COMMAND_TEXT_COPY/CUT/PASTE) | - Added clipboard events (wxEVT_COMMAND_TEXT_COPY/CUT/PASTE) | ||||||
|  | - Allow to reorder wxGrid columns by drag-and-drop (Santiago Palacios) | ||||||
| - Added wxRadioBox::SetItemToolTip() | - Added wxRadioBox::SetItemToolTip() | ||||||
| - Added support for CMYK JPEG images loading (Robert Wruck) | - Added support for CMYK JPEG images loading (Robert Wruck) | ||||||
| - Added wxListCtrl::GetSubItemRect() and subitem hit testing (Agron Selimaj) | - Added wxListCtrl::GetSubItemRect() and subitem hit testing (Agron Selimaj) | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| %% Name:        grid.tex | %% Name:        grid.tex | ||||||
| %% Purpose:     wxGrid | %% Purpose:     wxGrid | ||||||
| %% Author: | %% Author: | ||||||
| %% Modified by: | %% Modified by: Santiago Palacios | ||||||
| %% Created: | %% Created: | ||||||
| %% RCS-ID:      $Id$ | %% RCS-ID:      $Id$ | ||||||
| %% Copyright:   (c) wxWidgets | %% Copyright:   (c) wxWidgets | ||||||
| @@ -265,6 +265,15 @@ to the client size of the grid window. | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | \membersection{wxGrid::CanDragColMove}\label{wxgridcandragcolmove} | ||||||
|  |  | ||||||
|  | \func{bool}{CanDragColMove}{\void} | ||||||
|  |  | ||||||
|  | Returns true if columns can be moved by dragging with the mouse. Columns can be moved | ||||||
|  | by dragging on their labels. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| \membersection{wxGrid::CanDragColSize}\label{wxgridcandragcolsize} | \membersection{wxGrid::CanDragColSize}\label{wxgridcandragcolsize} | ||||||
|  |  | ||||||
| \func{bool}{CanDragColSize}{\void} | \func{bool}{CanDragColSize}{\void} | ||||||
| @@ -391,6 +400,15 @@ Equivalent to calling EnableCellEditControl(false). | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | \membersection{wxGrid::DisableDragColMove}\label{wxgriddisabledragcolmove} | ||||||
|  |  | ||||||
|  | \func{void}{DisableDragColMove}{\void} | ||||||
|  |  | ||||||
|  | Disables column moving by dragging with the mouse. Equivalent to passing false to | ||||||
|  | \helpref{wxGrid::EnableDragColMove}{wxgridenabledragcolmove}. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| \membersection{wxGrid::DisableDragColSize}\label{wxgriddisabledragcolsize} | \membersection{wxGrid::DisableDragColSize}\label{wxgriddisabledragcolsize} | ||||||
|  |  | ||||||
| \func{void}{DisableDragColSize}{\void} | \func{void}{DisableDragColSize}{\void} | ||||||
| @@ -435,6 +453,14 @@ Enables or disables column sizing by dragging with the mouse. | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | \membersection{wxGrid::EnableDragColMove}\label{wxgridenabledragcolmove} | ||||||
|  |  | ||||||
|  | \func{void}{EnableDragColMove}{\param{bool }{enable = true}} | ||||||
|  |  | ||||||
|  | Enables or disables column moving by dragging with the mouse. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| \membersection{wxGrid::EnableDragGridSize}\label{wxgridenabledraggridsize} | \membersection{wxGrid::EnableDragGridSize}\label{wxgridenabledraggridsize} | ||||||
|  |  | ||||||
| \func{void}{EnableDragGridSize}{\param{bool }{enable = true}} | \func{void}{EnableDragGridSize}{\param{bool }{enable = true}} | ||||||
| @@ -596,6 +622,13 @@ and the \helpref{wxGrid overview}{gridoverview} for more information. | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | \membersection{wxGrid::GetColAt}\label{wxgridgetcolat} | ||||||
|  |  | ||||||
|  | \constfunc{int}{GetColAt}{\param{int }{colPos}} | ||||||
|  |  | ||||||
|  | Returns the column ID of the specified column position. | ||||||
|  |  | ||||||
|  |  | ||||||
| \membersection{wxGrid::GetColLeft}\label{wxgridgetcolleft} | \membersection{wxGrid::GetColLeft}\label{wxgridgetcolleft} | ||||||
|  |  | ||||||
| \constfunc{int}{GetColLeft}{\param{int }{col}} | \constfunc{int}{GetColLeft}{\param{int }{col}} | ||||||
| @@ -652,6 +685,14 @@ Get the minimal width of the given column/row. | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | \membersection{wxGrid::GetColPos}\label{wxgridgetcolpos} | ||||||
|  |  | ||||||
|  | \constfunc{int}{GetColPos}{\param{int }{colID}} | ||||||
|  |  | ||||||
|  | Returns the position of the specified column. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| \membersection{wxGrid::GetColRight}\label{wxgridgetcolright} | \membersection{wxGrid::GetColRight}\label{wxgridgetcolright} | ||||||
|  |  | ||||||
| \constfunc{int}{GetColRight}{\param{int }{col}} | \constfunc{int}{GetColRight}{\param{int }{col}} | ||||||
| @@ -1543,6 +1584,14 @@ with sizes smaller than the value specified here. | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | \membersection{wxGrid::SetColPos}\label{wxgridsetcolpos} | ||||||
|  |  | ||||||
|  | \func{void}{SetColPos}{\param{int }{colID}, \param{int }{newPos}} | ||||||
|  |  | ||||||
|  | Sets the position of the specified column. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| \membersection{wxGrid::SetColSize}\label{wxgridsetcolsize} | \membersection{wxGrid::SetColSize}\label{wxgridsetcolsize} | ||||||
|  |  | ||||||
| \func{void}{SetColSize}{\param{int }{col}, \param{int }{width}} | \func{void}{SetColSize}{\param{int }{col}, \param{int }{width}} | ||||||
| @@ -1877,9 +1926,14 @@ Displays the in-place cell edit control for the current cell. | |||||||
|  |  | ||||||
| \membersection{wxGrid::XToCol}\label{wxgridxtocol} | \membersection{wxGrid::XToCol}\label{wxgridxtocol} | ||||||
|  |  | ||||||
| \func{int}{XToCol}{\param{int }{x}} | \func{int}{XToCol}{\param{int }{x}, \param{bool }{clipToMinMax = false}} | ||||||
|  |  | ||||||
| Returns the grid column that corresponds to the logical x coordinate. Returns  | \wxheading{Parameters} | ||||||
|  | \docparam{x}{The x position to evaluate.} | ||||||
|  | \docparam{clipToMinMax}{If true, rather than returning wxNOT\_FOUND, it returns either the first or last column depending on whether x is too far to the left or right respectively.} | ||||||
|  |  | ||||||
|  | \wxheading{Return value} | ||||||
|  | The grid column that corresponds to the logical x coordinate. Returns | ||||||
| {\tt wxNOT\_FOUND} if there is no column at the x position. | {\tt wxNOT\_FOUND} if there is no column at the x position. | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| // Name:        wx/generic/grid.h | // Name:        wx/generic/grid.h | ||||||
| // Purpose:     wxGrid and related classes | // Purpose:     wxGrid and related classes | ||||||
| // Author:      Michael Bedward (based on code by Julian Smart, Robin Dunn) | // Author:      Michael Bedward (based on code by Julian Smart, Robin Dunn) | ||||||
| // Modified by: | // Modified by: Santiago Palacios | ||||||
| // Created:     1/08/1999 | // Created:     1/08/1999 | ||||||
| // RCS-ID:      $Id$ | // RCS-ID:      $Id$ | ||||||
| // Copyright:   (c) Michael Bedward | // Copyright:   (c) Michael Bedward | ||||||
| @@ -1123,6 +1123,7 @@ public: | |||||||
|  |  | ||||||
|     void DoEndDragResizeRow(); |     void DoEndDragResizeRow(); | ||||||
|     void DoEndDragResizeCol(); |     void DoEndDragResizeCol(); | ||||||
|  |     void DoEndDragMoveCol(); | ||||||
|  |  | ||||||
|     wxGridTableBase * GetTable() const { return m_table; } |     wxGridTableBase * GetTable() const { return m_table; } | ||||||
|     bool SetTable( wxGridTableBase *table, bool takeOwnership = false, |     bool SetTable( wxGridTableBase *table, bool takeOwnership = false, | ||||||
| @@ -1226,7 +1227,7 @@ public: | |||||||
|     // |     // | ||||||
|     void XYToCell( int x, int y, wxGridCellCoords& ); |     void XYToCell( int x, int y, wxGridCellCoords& ); | ||||||
|     int  YToRow( int y ); |     int  YToRow( int y ); | ||||||
|     int  XToCol( int x ); |     int  XToCol( int x, bool clipToMinMax = false ); | ||||||
|  |  | ||||||
|     int  YToEdgeOfRow( int y ); |     int  YToEdgeOfRow( int y ); | ||||||
|     int  XToEdgeOfCol( int x ); |     int  XToEdgeOfCol( int x ); | ||||||
| @@ -1306,6 +1307,9 @@ public: | |||||||
|     void     EnableDragColSize( bool enable = true ); |     void     EnableDragColSize( bool enable = true ); | ||||||
|     void     DisableDragColSize() { EnableDragColSize( false ); } |     void     DisableDragColSize() { EnableDragColSize( false ); } | ||||||
|     bool     CanDragColSize() { return m_canDragColSize; } |     bool     CanDragColSize() { return m_canDragColSize; } | ||||||
|  |     void     EnableDragColMove( bool enable = true ); | ||||||
|  |     void     DisableDragColMove() { EnableDragColMove( false ); } | ||||||
|  |     bool     CanDragColMove() { return m_canDragColMove; } | ||||||
|     void     EnableDragGridSize(bool enable = true); |     void     EnableDragGridSize(bool enable = true); | ||||||
|     void     DisableDragGridSize() { EnableDragGridSize(false); } |     void     DisableDragGridSize() { EnableDragGridSize(false); } | ||||||
|     bool     CanDragGridSize() { return m_canDragGridSize; } |     bool     CanDragGridSize() { return m_canDragGridSize; } | ||||||
| @@ -1361,6 +1365,33 @@ public: | |||||||
|  |  | ||||||
|     void     SetColSize( int col, int width ); |     void     SetColSize( int col, int width ); | ||||||
|  |  | ||||||
|  |     //Column positions | ||||||
|  |     int GetColAt( int colPos ) const | ||||||
|  |     { | ||||||
|  |         if ( m_colAt.IsEmpty() ) | ||||||
|  |             return colPos; | ||||||
|  |         else | ||||||
|  |             return m_colAt[colPos]; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     void SetColPos( int colID, int newPos ); | ||||||
|  |  | ||||||
|  |     int GetColPos( int colID ) const | ||||||
|  |     { | ||||||
|  |         if ( m_colAt.IsEmpty() ) | ||||||
|  |             return colID; | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |             for ( int i = 0; i < m_numCols; i++ ) | ||||||
|  |             { | ||||||
|  |                 if ( m_colAt[i] == colID ) | ||||||
|  |                     return i; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return -1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     // automatically size the column or row to fit to its contents, if |     // automatically size the column or row to fit to its contents, if | ||||||
|     // setAsMin is true, this optimal width will also be set as minimal width |     // setAsMin is true, this optimal width will also be set as minimal width | ||||||
|     // for this column |     // for this column | ||||||
| @@ -1869,7 +1900,8 @@ protected: | |||||||
|         WXGRID_CURSOR_RESIZE_ROW, |         WXGRID_CURSOR_RESIZE_ROW, | ||||||
|         WXGRID_CURSOR_RESIZE_COL, |         WXGRID_CURSOR_RESIZE_COL, | ||||||
|         WXGRID_CURSOR_SELECT_ROW, |         WXGRID_CURSOR_SELECT_ROW, | ||||||
|         WXGRID_CURSOR_SELECT_COL |         WXGRID_CURSOR_SELECT_COL, | ||||||
|  |         WXGRID_CURSOR_MOVE_COL | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     // this method not only sets m_cursorMode but also sets the correct cursor |     // this method not only sets m_cursorMode but also sets the correct cursor | ||||||
| @@ -1885,8 +1917,13 @@ protected: | |||||||
|     wxWindow *m_winCapture;     // the window which captured the mouse |     wxWindow *m_winCapture;     // the window which captured the mouse | ||||||
|     CursorMode m_cursorMode; |     CursorMode m_cursorMode; | ||||||
|  |  | ||||||
|  |     //Column positions | ||||||
|  |     wxArrayInt m_colAt; | ||||||
|  |     int m_moveToCol; | ||||||
|  |  | ||||||
|     bool    m_canDragRowSize; |     bool    m_canDragRowSize; | ||||||
|     bool    m_canDragColSize; |     bool    m_canDragColSize; | ||||||
|  |     bool    m_canDragColMove; | ||||||
|     bool    m_canDragGridSize; |     bool    m_canDragGridSize; | ||||||
|     bool    m_canDragCell; |     bool    m_canDragCell; | ||||||
|     int     m_dragLastPos; |     int     m_dragLastPos; | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| // Name:        griddemo.cpp | // Name:        griddemo.cpp | ||||||
| // Purpose:     Grid control wxWidgets sample | // Purpose:     Grid control wxWidgets sample | ||||||
| // Author:      Michael Bedward | // Author:      Michael Bedward | ||||||
| // Modified by: | // Modified by: Santiago Palacios | ||||||
| // RCS-ID:      $Id$ | // RCS-ID:      $Id$ | ||||||
| // Copyright:   (c) Michael Bedward, Julian Smart, Vadim Zeitlin | // Copyright:   (c) Michael Bedward, Julian Smart, Vadim Zeitlin | ||||||
| // Licence:     wxWindows license | // Licence:     wxWindows license | ||||||
| @@ -68,6 +68,7 @@ BEGIN_EVENT_TABLE( GridFrame, wxFrame ) | |||||||
|     EVT_MENU( ID_TOGGLEEDIT, GridFrame::ToggleEditing ) |     EVT_MENU( ID_TOGGLEEDIT, GridFrame::ToggleEditing ) | ||||||
|     EVT_MENU( ID_TOGGLEROWSIZING, GridFrame::ToggleRowSizing ) |     EVT_MENU( ID_TOGGLEROWSIZING, GridFrame::ToggleRowSizing ) | ||||||
|     EVT_MENU( ID_TOGGLECOLSIZING, GridFrame::ToggleColSizing ) |     EVT_MENU( ID_TOGGLECOLSIZING, GridFrame::ToggleColSizing ) | ||||||
|  |     EVT_MENU( ID_TOGGLECOLMOVING, GridFrame::ToggleColMoving ) | ||||||
|     EVT_MENU( ID_TOGGLEGRIDSIZING, GridFrame::ToggleGridSizing ) |     EVT_MENU( ID_TOGGLEGRIDSIZING, GridFrame::ToggleGridSizing ) | ||||||
|     EVT_MENU( ID_TOGGLEGRIDDRAGCELL, GridFrame::ToggleGridDragCell ) |     EVT_MENU( ID_TOGGLEGRIDDRAGCELL, GridFrame::ToggleGridDragCell ) | ||||||
|     EVT_MENU( ID_TOGGLEGRIDLINES, GridFrame::ToggleGridLines ) |     EVT_MENU( ID_TOGGLEGRIDLINES, GridFrame::ToggleGridLines ) | ||||||
| @@ -146,6 +147,7 @@ GridFrame::GridFrame() | |||||||
|     viewMenu->Append( ID_TOGGLEEDIT,  _T("&Editable"), wxEmptyString, wxITEM_CHECK ); |     viewMenu->Append( ID_TOGGLEEDIT,  _T("&Editable"), wxEmptyString, wxITEM_CHECK ); | ||||||
|     viewMenu->Append( ID_TOGGLEROWSIZING, _T("Ro&w drag-resize"), wxEmptyString, wxITEM_CHECK ); |     viewMenu->Append( ID_TOGGLEROWSIZING, _T("Ro&w drag-resize"), wxEmptyString, wxITEM_CHECK ); | ||||||
|     viewMenu->Append( ID_TOGGLECOLSIZING, _T("C&ol drag-resize"), wxEmptyString, wxITEM_CHECK ); |     viewMenu->Append( ID_TOGGLECOLSIZING, _T("C&ol drag-resize"), wxEmptyString, wxITEM_CHECK ); | ||||||
|  |     viewMenu->Append( ID_TOGGLECOLMOVING, _T("Col drag-&move"), wxEmptyString, wxITEM_CHECK ); | ||||||
|     viewMenu->Append( ID_TOGGLEGRIDSIZING, _T("&Grid drag-resize"), wxEmptyString, wxITEM_CHECK ); |     viewMenu->Append( ID_TOGGLEGRIDSIZING, _T("&Grid drag-resize"), wxEmptyString, wxITEM_CHECK ); | ||||||
|     viewMenu->Append( ID_TOGGLEGRIDDRAGCELL, _T("&Grid drag-cell"), wxEmptyString, wxITEM_CHECK ); |     viewMenu->Append( ID_TOGGLEGRIDDRAGCELL, _T("&Grid drag-cell"), wxEmptyString, wxITEM_CHECK ); | ||||||
|     viewMenu->Append( ID_TOGGLEGRIDLINES, _T("&Grid Lines"), wxEmptyString, wxITEM_CHECK ); |     viewMenu->Append( ID_TOGGLEGRIDLINES, _T("&Grid Lines"), wxEmptyString, wxITEM_CHECK ); | ||||||
| @@ -376,6 +378,7 @@ void GridFrame::SetDefaults() | |||||||
|     GetMenuBar()->Check( ID_TOGGLEEDIT, true ); |     GetMenuBar()->Check( ID_TOGGLEEDIT, true ); | ||||||
|     GetMenuBar()->Check( ID_TOGGLEROWSIZING, true ); |     GetMenuBar()->Check( ID_TOGGLEROWSIZING, true ); | ||||||
|     GetMenuBar()->Check( ID_TOGGLECOLSIZING, true ); |     GetMenuBar()->Check( ID_TOGGLECOLSIZING, true ); | ||||||
|  |     GetMenuBar()->Check( ID_TOGGLECOLMOVING, false ); | ||||||
|     GetMenuBar()->Check( ID_TOGGLEGRIDSIZING, true ); |     GetMenuBar()->Check( ID_TOGGLEGRIDSIZING, true ); | ||||||
|     GetMenuBar()->Check( ID_TOGGLEGRIDDRAGCELL, false ); |     GetMenuBar()->Check( ID_TOGGLEGRIDDRAGCELL, false ); | ||||||
|     GetMenuBar()->Check( ID_TOGGLEGRIDLINES, true ); |     GetMenuBar()->Check( ID_TOGGLEGRIDLINES, true ); | ||||||
| @@ -429,6 +432,12 @@ void GridFrame::ToggleColSizing( wxCommandEvent& WXUNUSED(ev) ) | |||||||
|         GetMenuBar()->IsChecked( ID_TOGGLECOLSIZING ) ); |         GetMenuBar()->IsChecked( ID_TOGGLECOLSIZING ) ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void GridFrame::ToggleColMoving( wxCommandEvent& WXUNUSED(ev) ) | ||||||
|  | { | ||||||
|  |     grid->EnableDragColMove( | ||||||
|  |         GetMenuBar()->IsChecked( ID_TOGGLECOLMOVING ) ); | ||||||
|  | } | ||||||
|  |  | ||||||
| void GridFrame::ToggleGridSizing( wxCommandEvent& WXUNUSED(ev) ) | void GridFrame::ToggleGridSizing( wxCommandEvent& WXUNUSED(ev) ) | ||||||
| { | { | ||||||
|     grid->EnableDragGridSize( |     grid->EnableDragGridSize( | ||||||
| @@ -927,6 +936,11 @@ void GridFrame::OnSelectCell( wxGridEvent& ev ) | |||||||
|            << _T(", ShiftDown: ")<< (ev.ShiftDown() ? 'T':'F') |            << _T(", ShiftDown: ")<< (ev.ShiftDown() ? 'T':'F') | ||||||
|            << _T(", AltDown: ")<< (ev.AltDown() ? 'T':'F') |            << _T(", AltDown: ")<< (ev.AltDown() ? 'T':'F') | ||||||
|            << _T(", MetaDown: ")<< (ev.MetaDown() ? 'T':'F') << _T(" )"); |            << _T(", MetaDown: ")<< (ev.MetaDown() ? 'T':'F') << _T(" )"); | ||||||
|  |  | ||||||
|  |     //Indicate whether this column was moved | ||||||
|  |     if ( ((wxGrid *)ev.GetEventObject())->GetColPos( ev.GetCol() ) != ev.GetCol() ) | ||||||
|  |         logBuf << _T(" *** Column moved, current position: ") << ((wxGrid *)ev.GetEventObject())->GetColPos( ev.GetCol() ); | ||||||
|  |  | ||||||
|     wxLogMessage( wxT("%s"), logBuf.c_str() ); |     wxLogMessage( wxT("%s"), logBuf.c_str() ); | ||||||
|  |  | ||||||
|     // you must call Skip() if you want the default processing |     // you must call Skip() if you want the default processing | ||||||
|   | |||||||
| @@ -37,6 +37,7 @@ class GridFrame : public wxFrame | |||||||
|     void ToggleEditing( wxCommandEvent& ); |     void ToggleEditing( wxCommandEvent& ); | ||||||
|     void ToggleRowSizing( wxCommandEvent& ); |     void ToggleRowSizing( wxCommandEvent& ); | ||||||
|     void ToggleColSizing( wxCommandEvent& ); |     void ToggleColSizing( wxCommandEvent& ); | ||||||
|  |     void ToggleColMoving( wxCommandEvent& ); | ||||||
|     void ToggleGridSizing( wxCommandEvent& ); |     void ToggleGridSizing( wxCommandEvent& ); | ||||||
|     void ToggleGridDragCell ( wxCommandEvent& ); |     void ToggleGridDragCell ( wxCommandEvent& ); | ||||||
|     void ToggleGridLines( wxCommandEvent& ); |     void ToggleGridLines( wxCommandEvent& ); | ||||||
| @@ -107,6 +108,7 @@ public: | |||||||
|         ID_TOGGLEEDIT, |         ID_TOGGLEEDIT, | ||||||
|         ID_TOGGLEROWSIZING, |         ID_TOGGLEROWSIZING, | ||||||
|         ID_TOGGLECOLSIZING, |         ID_TOGGLECOLSIZING, | ||||||
|  |         ID_TOGGLECOLMOVING, | ||||||
|         ID_TOGGLEGRIDSIZING, |         ID_TOGGLEGRIDSIZING, | ||||||
|         ID_TOGGLEGRIDDRAGCELL, |         ID_TOGGLEGRIDDRAGCELL, | ||||||
|         ID_TOGGLEGRIDLINES, |         ID_TOGGLEGRIDLINES, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| // Name:        src/generic/grid.cpp | // Name:        src/generic/grid.cpp | ||||||
| // Purpose:     wxGrid and related classes | // Purpose:     wxGrid and related classes | ||||||
| // Author:      Michael Bedward (based on code by Julian Smart, Robin Dunn) | // Author:      Michael Bedward (based on code by Julian Smart, Robin Dunn) | ||||||
| // Modified by: Robin Dunn, Vadim Zeitlin | // Modified by: Robin Dunn, Vadim Zeitlin, Santiago Palacios | ||||||
| // Created:     1/08/1999 | // Created:     1/08/1999 | ||||||
| // RCS-ID:      $Id$ | // RCS-ID:      $Id$ | ||||||
| // Copyright:   (c) Michael Bedward (mbedward@ozemail.com.au) | // Copyright:   (c) Michael Bedward (mbedward@ozemail.com.au) | ||||||
| @@ -104,6 +104,7 @@ DEFINE_EVENT_TYPE(wxEVT_GRID_LABEL_LEFT_DCLICK) | |||||||
| DEFINE_EVENT_TYPE(wxEVT_GRID_LABEL_RIGHT_DCLICK) | DEFINE_EVENT_TYPE(wxEVT_GRID_LABEL_RIGHT_DCLICK) | ||||||
| DEFINE_EVENT_TYPE(wxEVT_GRID_ROW_SIZE) | DEFINE_EVENT_TYPE(wxEVT_GRID_ROW_SIZE) | ||||||
| DEFINE_EVENT_TYPE(wxEVT_GRID_COL_SIZE) | DEFINE_EVENT_TYPE(wxEVT_GRID_COL_SIZE) | ||||||
|  | DEFINE_EVENT_TYPE(wxEVT_GRID_COL_MOVE) | ||||||
| DEFINE_EVENT_TYPE(wxEVT_GRID_RANGE_SELECT) | DEFINE_EVENT_TYPE(wxEVT_GRID_RANGE_SELECT) | ||||||
| DEFINE_EVENT_TYPE(wxEVT_GRID_CELL_CHANGE) | DEFINE_EVENT_TYPE(wxEVT_GRID_CELL_CHANGE) | ||||||
| DEFINE_EVENT_TYPE(wxEVT_GRID_SELECT_CELL) | DEFINE_EVENT_TYPE(wxEVT_GRID_SELECT_CELL) | ||||||
| @@ -622,7 +623,7 @@ void wxGridCellTextEditor::Create(wxWindow* parent, | |||||||
|     m_control = new wxTextCtrl(parent, id, wxEmptyString, |     m_control = new wxTextCtrl(parent, id, wxEmptyString, | ||||||
|                                wxDefaultPosition, wxDefaultSize |                                wxDefaultPosition, wxDefaultSize | ||||||
| #if defined(__WXMSW__) | #if defined(__WXMSW__) | ||||||
|                                , wxTE_PROCESS_TAB | wxTE_AUTO_SCROLL |                                , wxTE_PROCESS_TAB | wxTE_AUTO_SCROLL | wxNO_BORDER | ||||||
| #endif | #endif | ||||||
|                               ); |                               ); | ||||||
|  |  | ||||||
| @@ -658,16 +659,22 @@ void wxGridCellTextEditor::SetSize(const wxRect& rectOrig) | |||||||
|         rect.width -= 1; |         rect.width -= 1; | ||||||
|         rect.height -= 1; |         rect.height -= 1; | ||||||
|     } |     } | ||||||
| #else // !GTK | #elif defined(__WXMSW__) | ||||||
|     int extra_x = ( rect.x > 2 ) ? 2 : 1; |     if ( rect.x == 0 ) | ||||||
|  |         rect.x += 2; | ||||||
|  |     else | ||||||
|  |         rect.x += 3; | ||||||
|  |  | ||||||
| // MB: treat MSW separately here otherwise the caret doesn't show |     if ( rect.y == 0 ) | ||||||
| // when the editor is in the first row. |         rect.y += 2; | ||||||
| #if defined(__WXMSW__) |     else | ||||||
|     int extra_y = 2; |         rect.y += 3; | ||||||
|  |  | ||||||
|  |     rect.width -= 2; | ||||||
|  |     rect.height -= 2; | ||||||
| #else | #else | ||||||
|  |     int extra_x = ( rect.x > 2 ) ? 2 : 1; | ||||||
|     int extra_y = ( rect.y > 2 ) ? 2 : 1; |     int extra_y = ( rect.y > 2 ) ? 2 : 1; | ||||||
| #endif |  | ||||||
|  |  | ||||||
|     #if defined(__WXMOTIF__) |     #if defined(__WXMOTIF__) | ||||||
|         extra_x *= 2; |         extra_x *= 2; | ||||||
| @@ -678,7 +685,7 @@ void wxGridCellTextEditor::SetSize(const wxRect& rectOrig) | |||||||
|     rect.SetTop( wxMax(0, rect.y - extra_y) ); |     rect.SetTop( wxMax(0, rect.y - extra_y) ); | ||||||
|     rect.SetRight( rect.GetRight() + 2 * extra_x ); |     rect.SetRight( rect.GetRight() + 2 * extra_x ); | ||||||
|     rect.SetBottom( rect.GetBottom() + 2 * extra_y ); |     rect.SetBottom( rect.GetBottom() + 2 * extra_y ); | ||||||
| #endif // GTK/!GTK | #endif | ||||||
|  |  | ||||||
|     wxGridCellEditor::SetSize(rect); |     wxGridCellEditor::SetSize(rect); | ||||||
| } | } | ||||||
| @@ -3506,6 +3513,15 @@ bool wxGridStringTable::InsertCols( size_t pos, size_t numCols ) | |||||||
|         return AppendCols( numCols ); |         return AppendCols( numCols ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     if ( !m_colLabels.IsEmpty() ) | ||||||
|  |     { | ||||||
|  |         m_colLabels.Insert( wxEmptyString, pos, numCols ); | ||||||
|  |  | ||||||
|  |         size_t i; | ||||||
|  |         for ( i = pos; i < pos + numCols; i++ ) | ||||||
|  |             m_colLabels[i] = wxGridTableBase::GetColLabelValue( i ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     for ( row = 0; row < curNumRows; row++ ) |     for ( row = 0; row < curNumRows; row++ ) | ||||||
|     { |     { | ||||||
|         for ( col = pos; col < pos + numCols; col++ ) |         for ( col = pos; col < pos + numCols; col++ ) | ||||||
| @@ -3580,9 +3596,20 @@ bool wxGridStringTable::DeleteCols( size_t pos, size_t numCols ) | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if ( numCols > curNumCols - pos ) |     int colID; | ||||||
|  |     if ( GetView() ) | ||||||
|  |         colID = GetView()->GetColAt( pos ); | ||||||
|  |     else | ||||||
|  |         colID = pos; | ||||||
|  |  | ||||||
|  |     if ( numCols > curNumCols - colID ) | ||||||
|     { |     { | ||||||
|         numCols = curNumCols - pos; |         numCols = curNumCols - colID; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if ( !m_colLabels.IsEmpty() ) | ||||||
|  |     { | ||||||
|  |         m_colLabels.RemoveAt( colID, numCols ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     for ( row = 0; row < curNumRows; row++ ) |     for ( row = 0; row < curNumRows; row++ ) | ||||||
| @@ -3593,7 +3620,7 @@ bool wxGridStringTable::DeleteCols( size_t pos, size_t numCols ) | |||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             m_data[row].RemoveAt( pos, numCols ); |             m_data[row].RemoveAt( colID, numCols ); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -3851,7 +3878,7 @@ void wxGridCornerLabelWindow::OnPaint( wxPaintEvent& WXUNUSED(event) ) | |||||||
|  |  | ||||||
|     wxRendererNative::Get().DrawHeaderButton( this, dc, rect, 0 ); |     wxRendererNative::Get().DrawHeaderButton( this, dc, rect, 0 ); | ||||||
| #else // !__WXGTK__ | #else // !__WXGTK__ | ||||||
|     dc.SetPen( wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DDKSHADOW), 1, wxSOLID) ); |     dc.SetPen( wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID) ); | ||||||
|     dc.DrawLine( client_width - 1, client_height - 1, client_width - 1, 0 ); |     dc.DrawLine( client_width - 1, client_height - 1, client_width - 1, 0 ); | ||||||
|     dc.DrawLine( client_width - 1, client_height - 1, 0, client_height - 1 ); |     dc.DrawLine( client_width - 1, client_height - 1, 0, client_height - 1 ); | ||||||
|     dc.DrawLine( 0, 0, client_width, 0 ); |     dc.DrawLine( 0, 0, client_width, 0 ); | ||||||
| @@ -4006,9 +4033,7 @@ static int CoordToRowOrCol(int coord, int defaultDist, int minDist, | |||||||
|                            const wxArrayInt& BorderArray, int nMax, |                            const wxArrayInt& BorderArray, int nMax, | ||||||
|                            bool clipToMinMax); |                            bool clipToMinMax); | ||||||
|  |  | ||||||
| #define internalXToCol(x) CoordToRowOrCol(x, m_defaultColWidth, \ | #define internalXToCol(x) XToCol(x, true) | ||||||
|                                           m_minAcceptableColWidth, \ |  | ||||||
|                                           m_colRights, m_numCols, true) |  | ||||||
| #define internalYToRow(y) CoordToRowOrCol(y, m_defaultRowHeight, \ | #define internalYToRow(y) CoordToRowOrCol(y, m_defaultRowHeight, \ | ||||||
|                                           m_minAcceptableRowHeight, \ |                                           m_minAcceptableRowHeight, \ | ||||||
|                                           m_rowBottoms, m_numRows, true) |                                           m_rowBottoms, m_numRows, true) | ||||||
| @@ -4376,6 +4401,8 @@ void wxGrid::Init() | |||||||
|     m_cellHighlightPenWidth = 2; |     m_cellHighlightPenWidth = 2; | ||||||
|     m_cellHighlightROPenWidth = 1; |     m_cellHighlightROPenWidth = 1; | ||||||
|  |  | ||||||
|  |     m_canDragColMove = false; | ||||||
|  |  | ||||||
|     m_cursorMode  = WXGRID_CURSOR_SELECT_CELL; |     m_cursorMode  = WXGRID_CURSOR_SELECT_CELL; | ||||||
|     m_winCapture = (wxWindow *)NULL; |     m_winCapture = (wxWindow *)NULL; | ||||||
|     m_canDragRowSize = true; |     m_canDragRowSize = true; | ||||||
| @@ -4453,7 +4480,7 @@ void wxGrid::InitColWidths() | |||||||
|  |  | ||||||
|     for ( int i = 0; i < m_numCols; i++ ) |     for ( int i = 0; i < m_numCols; i++ ) | ||||||
|     { |     { | ||||||
|         colRight += m_defaultColWidth; |         colRight = ( GetColPos( i ) + 1 ) * m_defaultColWidth; | ||||||
|         m_colRights.Add( colRight ); |         m_colRights.Add( colRight ); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -4465,13 +4492,13 @@ int wxGrid::GetColWidth(int col) const | |||||||
|  |  | ||||||
| int wxGrid::GetColLeft(int col) const | int wxGrid::GetColLeft(int col) const | ||||||
| { | { | ||||||
|     return m_colRights.IsEmpty() ? col * m_defaultColWidth |     return m_colRights.IsEmpty() ? GetColPos( col ) * m_defaultColWidth | ||||||
|                                  : m_colRights[col] - m_colWidths[col]; |                                  : m_colRights[col] - m_colWidths[col]; | ||||||
| } | } | ||||||
|  |  | ||||||
| int wxGrid::GetColRight(int col) const | int wxGrid::GetColRight(int col) const | ||||||
| { | { | ||||||
|     return m_colRights.IsEmpty() ? (col + 1) * m_defaultColWidth |     return m_colRights.IsEmpty() ? (GetColPos( col ) + 1) * m_defaultColWidth | ||||||
|                                  : m_colRights[col]; |                                  : m_colRights[col]; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -4503,7 +4530,7 @@ void wxGrid::CalcDimensions() | |||||||
|         ch -= m_colLabelHeight; |         ch -= m_colLabelHeight; | ||||||
|  |  | ||||||
|     // grid total size |     // grid total size | ||||||
|     int w = m_numCols > 0 ? GetColRight(m_numCols - 1) + m_extraWidth + 1 : 0; |     int w = m_numCols > 0 ? GetColRight(GetColAt( m_numCols - 1 )) + m_extraWidth + 1 : 0; | ||||||
|     int h = m_numRows > 0 ? GetRowBottom(m_numRows - 1) + m_extraHeight + 1 : 0; |     int h = m_numRows > 0 ? GetRowBottom(m_numRows - 1) + m_extraHeight + 1 : 0; | ||||||
|  |  | ||||||
|     // take into account editor if shown |     // take into account editor if shown | ||||||
| @@ -4755,6 +4782,25 @@ bool wxGrid::Redimension( wxGridTableMessage& msg ) | |||||||
|             int numCols = msg.GetCommandInt2(); |             int numCols = msg.GetCommandInt2(); | ||||||
|             m_numCols += numCols; |             m_numCols += numCols; | ||||||
|  |  | ||||||
|  |             if ( !m_colAt.IsEmpty() ) | ||||||
|  |             { | ||||||
|  |                 //Shift the column IDs | ||||||
|  |                 int i; | ||||||
|  |                 for ( i = 0; i < m_numCols - numCols; i++ ) | ||||||
|  |                 { | ||||||
|  |                     if ( m_colAt[i] >= (int)pos ) | ||||||
|  |                         m_colAt[i] += numCols; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 m_colAt.Insert( pos, pos, numCols ); | ||||||
|  |  | ||||||
|  |                 //Set the new columns' positions | ||||||
|  |                 for ( i = pos + 1; i < (int)pos + numCols; i++ ) | ||||||
|  |                 { | ||||||
|  |                     m_colAt[i] = i; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|             if ( !m_colWidths.IsEmpty() ) |             if ( !m_colWidths.IsEmpty() ) | ||||||
|             { |             { | ||||||
|                 m_colWidths.Insert( m_defaultColWidth, pos, numCols ); |                 m_colWidths.Insert( m_defaultColWidth, pos, numCols ); | ||||||
| @@ -4762,10 +4808,13 @@ bool wxGrid::Redimension( wxGridTableMessage& msg ) | |||||||
|  |  | ||||||
|                 int right = 0; |                 int right = 0; | ||||||
|                 if ( pos > 0 ) |                 if ( pos > 0 ) | ||||||
|                     right = m_colRights[pos - 1]; |                     right = m_colRights[GetColAt( pos - 1 )]; | ||||||
|  |  | ||||||
|                 for ( i = pos; i < m_numCols; i++ ) |                 int colPos; | ||||||
|  |                 for ( colPos = pos; colPos < m_numCols; colPos++ ) | ||||||
|                 { |                 { | ||||||
|  |                     i = GetColAt( colPos ); | ||||||
|  |  | ||||||
|                     right += m_colWidths[i]; |                     right += m_colWidths[i]; | ||||||
|                     m_colRights[i] = right; |                     m_colRights[i] = right; | ||||||
|                 } |                 } | ||||||
| @@ -4798,6 +4847,19 @@ bool wxGrid::Redimension( wxGridTableMessage& msg ) | |||||||
|             int numCols = msg.GetCommandInt(); |             int numCols = msg.GetCommandInt(); | ||||||
|             int oldNumCols = m_numCols; |             int oldNumCols = m_numCols; | ||||||
|             m_numCols += numCols; |             m_numCols += numCols; | ||||||
|  |  | ||||||
|  |             if ( !m_colAt.IsEmpty() ) | ||||||
|  |             { | ||||||
|  |                 m_colAt.Add( 0, numCols ); | ||||||
|  |  | ||||||
|  |                 //Set the new columns' positions | ||||||
|  |                 int i; | ||||||
|  |                 for ( i = oldNumCols; i < m_numCols; i++ ) | ||||||
|  |                 { | ||||||
|  |                     m_colAt[i] = i; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|             if ( !m_colWidths.IsEmpty() ) |             if ( !m_colWidths.IsEmpty() ) | ||||||
|             { |             { | ||||||
|                 m_colWidths.Add( m_defaultColWidth, numCols ); |                 m_colWidths.Add( m_defaultColWidth, numCols ); | ||||||
| @@ -4805,10 +4867,13 @@ bool wxGrid::Redimension( wxGridTableMessage& msg ) | |||||||
|  |  | ||||||
|                 int right = 0; |                 int right = 0; | ||||||
|                 if ( oldNumCols > 0 ) |                 if ( oldNumCols > 0 ) | ||||||
|                     right = m_colRights[oldNumCols - 1]; |                     right = m_colRights[GetColAt( oldNumCols - 1 )]; | ||||||
|  |  | ||||||
|                 for ( i = oldNumCols; i < m_numCols; i++ ) |                 int colPos; | ||||||
|  |                 for ( colPos = oldNumCols; colPos < m_numCols; colPos++ ) | ||||||
|                 { |                 { | ||||||
|  |                     i = GetColAt( colPos ); | ||||||
|  |  | ||||||
|                     right += m_colWidths[i]; |                     right += m_colWidths[i]; | ||||||
|                     m_colRights[i] = right; |                     m_colRights[i] = right; | ||||||
|                 } |                 } | ||||||
| @@ -4836,14 +4901,32 @@ bool wxGrid::Redimension( wxGridTableMessage& msg ) | |||||||
|             int numCols = msg.GetCommandInt2(); |             int numCols = msg.GetCommandInt2(); | ||||||
|             m_numCols -= numCols; |             m_numCols -= numCols; | ||||||
|  |  | ||||||
|  |             if ( !m_colAt.IsEmpty() ) | ||||||
|  |             { | ||||||
|  |                 int colID = GetColAt( pos ); | ||||||
|  |  | ||||||
|  |                 m_colAt.RemoveAt( pos, numCols ); | ||||||
|  |  | ||||||
|  |                 //Shift the column IDs | ||||||
|  |                 int colPos; | ||||||
|  |                 for ( colPos = 0; colPos < m_numCols; colPos++ ) | ||||||
|  |                 { | ||||||
|  |                     if ( m_colAt[colPos] > colID ) | ||||||
|  |                         m_colAt[colPos] -= numCols; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|             if ( !m_colWidths.IsEmpty() ) |             if ( !m_colWidths.IsEmpty() ) | ||||||
|             { |             { | ||||||
|                 m_colWidths.RemoveAt( pos, numCols ); |                 m_colWidths.RemoveAt( pos, numCols ); | ||||||
|                 m_colRights.RemoveAt( pos, numCols ); |                 m_colRights.RemoveAt( pos, numCols ); | ||||||
|  |  | ||||||
|                 int w = 0; |                 int w = 0; | ||||||
|                 for ( i = 0; i < m_numCols; i++ ) |                 int colPos; | ||||||
|  |                 for ( colPos = 0; colPos < m_numCols; colPos++ ) | ||||||
|                 { |                 { | ||||||
|  |                     i = GetColAt( colPos ); | ||||||
|  |  | ||||||
|                     w += m_colWidths[i]; |                     w += m_colWidths[i]; | ||||||
|                     m_colRights[i] = w; |                     m_colRights[i] = w; | ||||||
|                 } |                 } | ||||||
| @@ -4979,8 +5062,11 @@ wxArrayInt wxGrid::CalcColLabelsExposed( const wxRegion& reg ) | |||||||
|         // find the cells within these bounds |         // find the cells within these bounds | ||||||
|         // |         // | ||||||
|         int col; |         int col; | ||||||
|         for ( col = internalXToCol(left); col < m_numCols; col++ ) |         int colPos; | ||||||
|  |         for ( colPos = GetColPos( internalXToCol(left) ); colPos < m_numCols; colPos++ ) | ||||||
|         { |         { | ||||||
|  |             col = GetColAt( colPos ); | ||||||
|  |  | ||||||
|             if ( GetColRight(col) < left ) |             if ( GetColRight(col) < left ) | ||||||
|                 continue; |                 continue; | ||||||
|  |  | ||||||
| @@ -5038,8 +5124,11 @@ wxGridCellCoordsArray wxGrid::CalcCellsExposed( const wxRegion& reg ) | |||||||
|             if ( GetRowTop(row) > bottom ) |             if ( GetRowTop(row) > bottom ) | ||||||
|                 break; |                 break; | ||||||
|  |  | ||||||
|             for ( col = internalXToCol(left); col < m_numCols; col++ ) |             int colPos; | ||||||
|  |             for ( colPos = GetColPos( internalXToCol(left) ); colPos < m_numCols; colPos++ ) | ||||||
|             { |             { | ||||||
|  |                 col = GetColAt( colPos ); | ||||||
|  |  | ||||||
|                 if ( GetColRight(col) <= left ) |                 if ( GetColRight(col) <= left ) | ||||||
|                     continue; |                     continue; | ||||||
|  |  | ||||||
| @@ -5287,6 +5376,9 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event ) | |||||||
|         { |         { | ||||||
|             m_isDragging = true; |             m_isDragging = true; | ||||||
|             m_colLabelWin->CaptureMouse(); |             m_colLabelWin->CaptureMouse(); | ||||||
|  |  | ||||||
|  |             if ( m_cursorMode == WXGRID_CURSOR_MOVE_COL ) | ||||||
|  |                 m_dragRowOrCol = XToCol( x ); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if ( event.LeftIsDown() ) |         if ( event.LeftIsDown() ) | ||||||
| @@ -5330,6 +5422,63 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event ) | |||||||
|                 } |                 } | ||||||
|                 break; |                 break; | ||||||
|  |  | ||||||
|  |                 case WXGRID_CURSOR_MOVE_COL: | ||||||
|  |                 { | ||||||
|  |                     if ( x < 0 ) | ||||||
|  |                         m_moveToCol = GetColAt( 0 ); | ||||||
|  |                     else | ||||||
|  |                         m_moveToCol = XToCol( x ); | ||||||
|  |  | ||||||
|  |                     int markerX; | ||||||
|  |  | ||||||
|  |                     if ( m_moveToCol < 0 ) | ||||||
|  |                         markerX = GetColRight( GetColAt( m_numCols - 1 ) ); | ||||||
|  |                     else | ||||||
|  |                         markerX = GetColLeft( m_moveToCol ); | ||||||
|  |  | ||||||
|  |                     if ( markerX != m_dragLastPos ) | ||||||
|  |                     { | ||||||
|  |                         wxClientDC dc( m_colLabelWin ); | ||||||
|  |  | ||||||
|  |                         int cw, ch; | ||||||
|  |                         m_colLabelWin->GetClientSize( &cw, &ch ); | ||||||
|  |  | ||||||
|  |                         markerX++; | ||||||
|  |  | ||||||
|  |                         //Clean up the last indicator | ||||||
|  |                         if ( m_dragLastPos >= 0 ) | ||||||
|  |                         { | ||||||
|  |                             wxPen pen( m_colLabelWin->GetBackgroundColour(), 2 ); | ||||||
|  |                             dc.SetPen(pen); | ||||||
|  |                             dc.DrawLine( m_dragLastPos + 1, 0, m_dragLastPos + 1, ch ); | ||||||
|  |                             dc.SetPen(wxNullPen); | ||||||
|  |  | ||||||
|  |                             if ( XToCol( m_dragLastPos ) != -1 ) | ||||||
|  |                                 DrawColLabel( dc, XToCol( m_dragLastPos ) ); | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         //Moving to the same place? Don't draw a marker | ||||||
|  |                         if ( (m_moveToCol == m_dragRowOrCol) | ||||||
|  |                           || (GetColPos( m_moveToCol ) == GetColPos( m_dragRowOrCol ) + 1) | ||||||
|  |                           || (m_moveToCol < 0 && m_dragRowOrCol == GetColAt( m_numCols - 1 ))) | ||||||
|  |                         { | ||||||
|  |                             m_dragLastPos = -1; | ||||||
|  |                             return; | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         //Draw the marker | ||||||
|  |                         wxPen pen( *wxBLUE, 2 ); | ||||||
|  |                         dc.SetPen(pen); | ||||||
|  |  | ||||||
|  |                         dc.DrawLine( markerX, 0, markerX, ch ); | ||||||
|  |  | ||||||
|  |                         dc.SetPen(wxNullPen); | ||||||
|  |  | ||||||
|  |                         m_dragLastPos = markerX - 1; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 break; | ||||||
|  |  | ||||||
|                 // default label to suppress warnings about "enumeration value |                 // default label to suppress warnings about "enumeration value | ||||||
|                 // 'xxx' not handled in switch |                 // 'xxx' not handled in switch | ||||||
|                 default: |                 default: | ||||||
| @@ -5369,6 +5518,20 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event ) | |||||||
|             col = XToCol(x); |             col = XToCol(x); | ||||||
|             if ( col >= 0 && |             if ( col >= 0 && | ||||||
|                  !SendEvent( wxEVT_GRID_LABEL_LEFT_CLICK, -1, col, event ) ) |                  !SendEvent( wxEVT_GRID_LABEL_LEFT_CLICK, -1, col, event ) ) | ||||||
|  |             { | ||||||
|  |                 if ( m_canDragColMove ) | ||||||
|  |                 { | ||||||
|  |                     //Show button as pressed | ||||||
|  |                     wxClientDC dc( m_colLabelWin ); | ||||||
|  |                     int colLeft = GetColLeft( col ); | ||||||
|  |                     int colRight = GetColRight( col ) - 1; | ||||||
|  |                     dc.SetPen( wxPen( m_colLabelWin->GetBackgroundColour(), 1 ) ); | ||||||
|  |                     dc.DrawLine( colLeft, 1, colLeft, m_colLabelHeight-1 ); | ||||||
|  |                     dc.DrawLine( colLeft, 1, colRight, 1 ); | ||||||
|  |  | ||||||
|  |                     ChangeCursorMode(WXGRID_CURSOR_MOVE_COL, m_colLabelWin); | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|                 { |                 { | ||||||
|                     if ( !event.ShiftDown() && !event.CmdDown() ) |                     if ( !event.ShiftDown() && !event.CmdDown() ) | ||||||
|                         ClearSelection(); |                         ClearSelection(); | ||||||
| @@ -5397,6 +5560,7 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event ) | |||||||
|                     ChangeCursorMode(WXGRID_CURSOR_SELECT_COL, m_colLabelWin); |                     ChangeCursorMode(WXGRID_CURSOR_SELECT_COL, m_colLabelWin); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             // starting to drag-resize a col |             // starting to drag-resize a col | ||||||
| @@ -5434,7 +5598,9 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event ) | |||||||
|     // |     // | ||||||
|     else if ( event.LeftUp() ) |     else if ( event.LeftUp() ) | ||||||
|     { |     { | ||||||
|         if ( m_cursorMode == WXGRID_CURSOR_RESIZE_COL ) |         switch ( m_cursorMode ) | ||||||
|  |         { | ||||||
|  |             case WXGRID_CURSOR_RESIZE_COL: | ||||||
|             { |             { | ||||||
|                 DoEndDragResizeCol(); |                 DoEndDragResizeCol(); | ||||||
|  |  | ||||||
| @@ -5443,6 +5609,16 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event ) | |||||||
|                 // |                 // | ||||||
|                 SendEvent( wxEVT_GRID_COL_SIZE, -1, m_dragRowOrCol, event ); |                 SendEvent( wxEVT_GRID_COL_SIZE, -1, m_dragRowOrCol, event ); | ||||||
|             } |             } | ||||||
|  |             break; | ||||||
|  |  | ||||||
|  |             case WXGRID_CURSOR_MOVE_COL: | ||||||
|  |             { | ||||||
|  |                 DoEndDragMoveCol(); | ||||||
|  |  | ||||||
|  |                 SendEvent( wxEVT_GRID_COL_MOVE, -1, m_dragRowOrCol, event ); | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |  | ||||||
|         ChangeCursorMode(WXGRID_CURSOR_SELECT_CELL, m_colLabelWin); |         ChangeCursorMode(WXGRID_CURSOR_SELECT_CELL, m_colLabelWin); | ||||||
|         m_dragLastPos = -1; |         m_dragLastPos = -1; | ||||||
| @@ -5536,7 +5712,8 @@ void wxGrid::ChangeCursorMode(CursorMode mode, | |||||||
|         _T("RESIZE_ROW"), |         _T("RESIZE_ROW"), | ||||||
|         _T("RESIZE_COL"), |         _T("RESIZE_COL"), | ||||||
|         _T("SELECT_ROW"), |         _T("SELECT_ROW"), | ||||||
|         _T("SELECT_COL") |         _T("SELECT_COL"), | ||||||
|  |         _T("MOVE_COL"), | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     wxLogTrace(_T("grid"), |     wxLogTrace(_T("grid"), | ||||||
| @@ -5577,6 +5754,10 @@ void wxGrid::ChangeCursorMode(CursorMode mode, | |||||||
|             win->SetCursor( m_colResizeCursor ); |             win->SetCursor( m_colResizeCursor ); | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
|  |         case WXGRID_CURSOR_MOVE_COL: | ||||||
|  |             win->SetCursor( wxCursor(wxCURSOR_HAND) ); | ||||||
|  |             break; | ||||||
|  |  | ||||||
|         default: |         default: | ||||||
|             win->SetCursor( *wxSTANDARD_CURSOR ); |             win->SetCursor( *wxSTANDARD_CURSOR ); | ||||||
|             break; |             break; | ||||||
| @@ -6099,6 +6280,112 @@ void wxGrid::DoEndDragResizeCol() | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void wxGrid::DoEndDragMoveCol() | ||||||
|  | { | ||||||
|  |     //The user clicked on the column but didn't actually drag | ||||||
|  |     if ( m_dragLastPos < 0 ) | ||||||
|  |     { | ||||||
|  |         m_colLabelWin->Refresh();   //Do this to "unpress" the column | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     int newPos; | ||||||
|  |     if ( m_moveToCol == -1 ) | ||||||
|  |         newPos = m_numCols - 1; | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         newPos = GetColPos( m_moveToCol ); | ||||||
|  |         if ( newPos > GetColPos( m_dragRowOrCol ) ) | ||||||
|  |             newPos--; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     SetColPos( m_dragRowOrCol, newPos ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void wxGrid::SetColPos( int colID, int newPos ) | ||||||
|  | { | ||||||
|  |     if ( m_colAt.IsEmpty() ) | ||||||
|  |     { | ||||||
|  |         m_colAt.Alloc( m_numCols ); | ||||||
|  |  | ||||||
|  |         int i; | ||||||
|  |         for ( i = 0; i < m_numCols; i++ ) | ||||||
|  |         { | ||||||
|  |             m_colAt.Add( i ); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     int oldPos = GetColPos( colID ); | ||||||
|  |  | ||||||
|  |     //Reshuffle the m_colAt array | ||||||
|  |     if ( newPos > oldPos ) | ||||||
|  |     { | ||||||
|  |         int i; | ||||||
|  |         for ( i = oldPos; i < newPos; i++ ) | ||||||
|  |         { | ||||||
|  |             m_colAt[i] = m_colAt[i+1]; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         int i; | ||||||
|  |         for ( i = oldPos; i > newPos; i-- ) | ||||||
|  |         { | ||||||
|  |             m_colAt[i] = m_colAt[i-1]; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     m_colAt[newPos] = colID; | ||||||
|  |  | ||||||
|  |     //Recalculate the column rights | ||||||
|  |     if ( !m_colWidths.IsEmpty() ) | ||||||
|  |     { | ||||||
|  |         int colRight = 0; | ||||||
|  |         int colPos; | ||||||
|  |         for ( colPos = 0; colPos < m_numCols; colPos++ ) | ||||||
|  |         { | ||||||
|  |             int colID = GetColAt( colPos ); | ||||||
|  |  | ||||||
|  |             colRight += m_colWidths[colID]; | ||||||
|  |             m_colRights[colID] = colRight; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     m_colLabelWin->Refresh(); | ||||||
|  |     m_gridWin->Refresh(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void wxGrid::EnableDragColMove( bool enable ) | ||||||
|  | { | ||||||
|  |     if ( m_canDragColMove == enable ) | ||||||
|  |         return; | ||||||
|  |  | ||||||
|  |     m_canDragColMove = enable; | ||||||
|  |  | ||||||
|  |     if ( !m_canDragColMove ) | ||||||
|  |     { | ||||||
|  |         m_colAt.Clear(); | ||||||
|  |  | ||||||
|  |         //Recalculate the column rights | ||||||
|  |         if ( !m_colWidths.IsEmpty() ) | ||||||
|  |         { | ||||||
|  |             int colRight = 0; | ||||||
|  |             int colPos; | ||||||
|  |             for ( colPos = 0; colPos < m_numCols; colPos++ ) | ||||||
|  |             { | ||||||
|  |                 colRight += m_colWidths[colPos]; | ||||||
|  |                 m_colRights[colPos] = colRight; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         m_colLabelWin->Refresh(); | ||||||
|  |         m_gridWin->Refresh(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| // | // | ||||||
| // ------ interaction with data model | // ------ interaction with data model | ||||||
| // | // | ||||||
| @@ -7094,7 +7381,7 @@ void wxGrid::DrawGridSpace( wxDC& dc ) | |||||||
|   int right, bottom; |   int right, bottom; | ||||||
|   CalcUnscrolledPosition( cw, ch, &right, &bottom ); |   CalcUnscrolledPosition( cw, ch, &right, &bottom ); | ||||||
|  |  | ||||||
|   int rightCol = m_numCols > 0 ? GetColRight(m_numCols - 1) : 0; |   int rightCol = m_numCols > 0 ? GetColRight(GetColAt( m_numCols - 1 )) : 0; | ||||||
|   int bottomRow = m_numRows > 0 ? GetRowBottom(m_numRows - 1) : 0; |   int bottomRow = m_numRows > 0 ? GetRowBottom(m_numRows - 1) : 0; | ||||||
|  |  | ||||||
|   if ( right > rightCol || bottom > bottomRow ) |   if ( right > rightCol || bottom > bottomRow ) | ||||||
| @@ -7315,13 +7602,13 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & WXUNUSED(reg) ) | |||||||
|  |  | ||||||
|     // avoid drawing grid lines past the last row and col |     // avoid drawing grid lines past the last row and col | ||||||
|     // |     // | ||||||
|     right = wxMin( right, GetColRight(m_numCols - 1) ); |     right = wxMin( right, GetColRight(GetColAt( m_numCols - 1 )) ); | ||||||
|     bottom = wxMin( bottom, GetRowBottom(m_numRows - 1) ); |     bottom = wxMin( bottom, GetRowBottom(m_numRows - 1) ); | ||||||
|  |  | ||||||
|     // no gridlines inside multicells, clip them out |     // no gridlines inside multicells, clip them out | ||||||
|     int leftCol = internalXToCol(left); |     int leftCol = GetColPos( internalXToCol(left) ); | ||||||
|     int topRow = internalYToRow(top); |     int topRow = internalYToRow(top); | ||||||
|     int rightCol = internalXToCol(right); |     int rightCol = GetColPos( internalXToCol(right) ); | ||||||
|     int bottomRow = internalYToRow(bottom); |     int bottomRow = internalYToRow(bottom); | ||||||
|  |  | ||||||
| #ifndef __WXMAC__ | #ifndef __WXMAC__ | ||||||
| @@ -7333,8 +7620,11 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & WXUNUSED(reg) ) | |||||||
|  |  | ||||||
|     for (j=topRow; j<bottomRow; j++) |     for (j=topRow; j<bottomRow; j++) | ||||||
|     { |     { | ||||||
|         for (i=leftCol; i<rightCol; i++) |         int colPos; | ||||||
|  |         for (colPos=leftCol; colPos<rightCol; colPos++) | ||||||
|         { |         { | ||||||
|  |             i = GetColAt( colPos ); | ||||||
|  |  | ||||||
|             GetCellSize( j, i, &cell_rows, &cell_cols ); |             GetCellSize( j, i, &cell_rows, &cell_cols ); | ||||||
|             if ((cell_rows > 1) || (cell_cols > 1)) |             if ((cell_rows > 1) || (cell_cols > 1)) | ||||||
|             { |             { | ||||||
| @@ -7399,8 +7689,11 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & WXUNUSED(reg) ) | |||||||
|  |  | ||||||
|     // vertical grid lines |     // vertical grid lines | ||||||
|     // |     // | ||||||
|     for ( i = internalXToCol(left); i < m_numCols; i++ ) |     int colPos; | ||||||
|  |     for ( colPos = leftCol; colPos < m_numCols; colPos++ ) | ||||||
|     { |     { | ||||||
|  |         i = GetColAt( colPos ); | ||||||
|  |  | ||||||
|         int colRight = GetColRight(i) - 1; |         int colRight = GetColRight(i) - 1; | ||||||
|         if ( colRight > right ) |         if ( colRight > right ) | ||||||
|         { |         { | ||||||
| @@ -7452,7 +7745,7 @@ void wxGrid::DrawRowLabel( wxDC& dc, int row ) | |||||||
|     int rowTop = GetRowTop(row), |     int rowTop = GetRowTop(row), | ||||||
|         rowBottom = GetRowBottom(row) - 1; |         rowBottom = GetRowBottom(row) - 1; | ||||||
|  |  | ||||||
|     dc.SetPen( wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DDKSHADOW), 1, wxSOLID) ); |     dc.SetPen( wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID) ); | ||||||
|     dc.DrawLine( m_rowLabelWidth - 1, rowTop, m_rowLabelWidth - 1, rowBottom ); |     dc.DrawLine( m_rowLabelWidth - 1, rowTop, m_rowLabelWidth - 1, rowBottom ); | ||||||
|     dc.DrawLine( 0, rowTop, 0, rowBottom ); |     dc.DrawLine( 0, rowTop, 0, rowBottom ); | ||||||
|     dc.DrawLine( 0, rowBottom, m_rowLabelWidth, rowBottom ); |     dc.DrawLine( 0, rowBottom, m_rowLabelWidth, rowBottom ); | ||||||
| @@ -7511,7 +7804,7 @@ void wxGrid::DrawColLabel( wxDC& dc, int col ) | |||||||
| #else | #else | ||||||
|     int colRight = GetColRight(col) - 1; |     int colRight = GetColRight(col) - 1; | ||||||
|  |  | ||||||
|     dc.SetPen( wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DDKSHADOW), 1, wxSOLID) ); |     dc.SetPen( wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID) ); | ||||||
|     dc.DrawLine( colRight, 0, colRight, m_colLabelHeight - 1 ); |     dc.DrawLine( colRight, 0, colRight, m_colLabelHeight - 1 ); | ||||||
|     dc.DrawLine( colLeft, 0, colRight, 0 ); |     dc.DrawLine( colLeft, 0, colRight, 0 ); | ||||||
|     dc.DrawLine( colLeft, m_colLabelHeight - 1, |     dc.DrawLine( colLeft, m_colLabelHeight - 1, | ||||||
| @@ -7887,16 +8180,13 @@ void wxGrid::ShowCellEditControl() | |||||||
|             if (rect.x < 0) |             if (rect.x < 0) | ||||||
|                 nXMove = rect.x; |                 nXMove = rect.x; | ||||||
|  |  | ||||||
|             // performed in PaintBackground() |  | ||||||
| #if 0 |  | ||||||
|             // erase the highlight and the cell contents because the editor |             // erase the highlight and the cell contents because the editor | ||||||
|             // might not cover the entire cell |             // might not cover the entire cell | ||||||
|             wxClientDC dc( m_gridWin ); |             wxClientDC dc( m_gridWin ); | ||||||
|             PrepareDC( dc ); |             PrepareDC( dc ); | ||||||
|             dc.SetBrush(*wxLIGHT_GREY_BRUSH); //wxBrush(attr->GetBackgroundColour(), wxSOLID)); |             dc.SetBrush(wxBrush(GetCellAttr(row, col)->GetBackgroundColour(), wxSOLID)); | ||||||
|             dc.SetPen(*wxTRANSPARENT_PEN); |             dc.SetPen(*wxTRANSPARENT_PEN); | ||||||
|             dc.DrawRectangle(rect); |             dc.DrawRectangle(rect); | ||||||
| #endif |  | ||||||
|  |  | ||||||
|             // cell is shifted by one pixel |             // cell is shifted by one pixel | ||||||
|             // However, don't allow x or y to become negative |             // However, don't allow x or y to become negative | ||||||
| @@ -8135,10 +8425,65 @@ int wxGrid::YToRow( int y ) | |||||||
|                            m_minAcceptableRowHeight, m_rowBottoms, m_numRows, false); |                            m_minAcceptableRowHeight, m_rowBottoms, m_numRows, false); | ||||||
| } | } | ||||||
|  |  | ||||||
| int wxGrid::XToCol( int x ) | int wxGrid::XToCol( int x, bool clipToMinMax ) | ||||||
| { | { | ||||||
|     return CoordToRowOrCol(x, m_defaultColWidth, |     if (x < 0) | ||||||
|                            m_minAcceptableColWidth, m_colRights, m_numCols, false); |         return clipToMinMax && (m_numCols > 0) ? GetColAt( 0 ) : -1; | ||||||
|  |  | ||||||
|  |     if (!m_defaultColWidth) | ||||||
|  |         m_defaultColWidth = 1; | ||||||
|  |  | ||||||
|  |     int maxPos = x / m_defaultColWidth; | ||||||
|  |     int minPos = 0; | ||||||
|  |  | ||||||
|  |     if (m_colRights.IsEmpty()) | ||||||
|  |     { | ||||||
|  |         if(maxPos < m_numCols) | ||||||
|  |             return GetColAt( maxPos ); | ||||||
|  |         return clipToMinMax ? GetColAt( m_numCols - 1 ) : -1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if ( maxPos >= m_numCols) | ||||||
|  |         maxPos = m_numCols - 1; | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         if ( x >= m_colRights[GetColAt( maxPos )]) | ||||||
|  |         { | ||||||
|  |             minPos = maxPos; | ||||||
|  |             if (m_minAcceptableColWidth) | ||||||
|  |                 maxPos = x / m_minAcceptableColWidth; | ||||||
|  |             else | ||||||
|  |                 maxPos =  m_numCols - 1; | ||||||
|  |         } | ||||||
|  |         if ( maxPos >= m_numCols) | ||||||
|  |             maxPos = m_numCols - 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     //X is beyond the last column | ||||||
|  |     if ( x >= m_colRights[GetColAt( maxPos )]) | ||||||
|  |         return clipToMinMax ? GetColAt( maxPos ) : -1; | ||||||
|  |  | ||||||
|  |     //X is before the first column | ||||||
|  |     if ( x < m_colRights[GetColAt( 0 )] ) | ||||||
|  |         return GetColAt( 0 ); | ||||||
|  |  | ||||||
|  |     //Perform a binary search | ||||||
|  |     while ( maxPos - minPos > 0 ) | ||||||
|  |     { | ||||||
|  |         wxCHECK_MSG(m_colRights[GetColAt( minPos )] <= x && x < m_colRights[GetColAt( maxPos )], | ||||||
|  |                     0, _T("wxGrid: internal error in XToCol")); | ||||||
|  |  | ||||||
|  |         if (x >=  m_colRights[GetColAt( maxPos - 1 )]) | ||||||
|  |             return GetColAt( maxPos ); | ||||||
|  |         else | ||||||
|  |             maxPos--; | ||||||
|  |         int median = minPos + (maxPos - minPos + 1) / 2; | ||||||
|  |         if (x < m_colRights[GetColAt( median )]) | ||||||
|  |             maxPos = median; | ||||||
|  |         else | ||||||
|  |             minPos = median; | ||||||
|  |     } | ||||||
|  |     return GetColAt( maxPos ); | ||||||
| } | } | ||||||
|  |  | ||||||
| // return the row number that that the y coord is near the edge of, or | // return the row number that that the y coord is near the edge of, or | ||||||
| @@ -8418,11 +8763,12 @@ bool wxGrid::MoveCursorLeft( bool expandSelection ) | |||||||
|                 HighlightBlock( m_currentCellCoords, m_selectingKeyboard ); |                 HighlightBlock( m_currentCellCoords, m_selectingKeyboard ); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         else if ( m_currentCellCoords.GetCol() > 0 ) |         else if ( GetColPos( m_currentCellCoords.GetCol() ) > 0 ) | ||||||
|         { |         { | ||||||
|             int row = m_currentCellCoords.GetRow(); |             int row = m_currentCellCoords.GetRow(); | ||||||
|             int col = m_currentCellCoords.GetCol() - 1; |             int col = GetColAt( GetColPos( m_currentCellCoords.GetCol() ) - 1 ); | ||||||
|             ClearSelection(); |             ClearSelection(); | ||||||
|  |  | ||||||
|             MakeCellVisible( row, col ); |             MakeCellVisible( row, col ); | ||||||
|             SetCurrentCell( row, col ); |             SetCurrentCell( row, col ); | ||||||
|         } |         } | ||||||
| @@ -8452,11 +8798,12 @@ bool wxGrid::MoveCursorRight( bool expandSelection ) | |||||||
|                 HighlightBlock( m_currentCellCoords, m_selectingKeyboard ); |                 HighlightBlock( m_currentCellCoords, m_selectingKeyboard ); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         else if ( m_currentCellCoords.GetCol() < m_numCols - 1 ) |         else if ( GetColPos( m_currentCellCoords.GetCol() ) < m_numCols - 1 ) | ||||||
|         { |         { | ||||||
|             int row = m_currentCellCoords.GetRow(); |             int row = m_currentCellCoords.GetRow(); | ||||||
|             int col = m_currentCellCoords.GetCol() + 1; |             int col = GetColAt( GetColPos( m_currentCellCoords.GetCol() ) + 1 ); | ||||||
|             ClearSelection(); |             ClearSelection(); | ||||||
|  |  | ||||||
|             MakeCellVisible( row, col ); |             MakeCellVisible( row, col ); | ||||||
|             SetCurrentCell( row, col ); |             SetCurrentCell( row, col ); | ||||||
|         } |         } | ||||||
| @@ -9812,7 +10159,7 @@ void wxGrid::SetColSize( int col, int width ) | |||||||
|     // should we check that it's bigger than GetColMinimalWidth(col) here? |     // should we check that it's bigger than GetColMinimalWidth(col) here? | ||||||
|     //                                                                 (VZ) |     //                                                                 (VZ) | ||||||
|     // No, because it is reasonable to assume the library user know's |     // No, because it is reasonable to assume the library user know's | ||||||
|     // what he is doing. However whe should test against the weaker |     // what he is doing. However we should test against the weaker | ||||||
|     // constraint of minimalAcceptableWidth, as this breaks rendering |     // constraint of minimalAcceptableWidth, as this breaks rendering | ||||||
|     // |     // | ||||||
|     // This test then fixes sf.net bug #645734 |     // This test then fixes sf.net bug #645734 | ||||||
| @@ -9843,8 +10190,10 @@ void wxGrid::SetColSize( int col, int width ) | |||||||
|     m_colWidths[col] = w; |     m_colWidths[col] = w; | ||||||
|  |  | ||||||
|     int i; |     int i; | ||||||
|     for ( i = col; i < m_numCols; i++ ) |     int colPos; | ||||||
|  |     for ( colPos = GetColPos( col ); colPos < m_numCols; colPos++ ) | ||||||
|     { |     { | ||||||
|  |         i = GetColAt( colPos ); | ||||||
|         m_colRights[i] += diff; |         m_colRights[i] += diff; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user