From 5c3313a9687b17b0b21ec279e8bed32ee525da25 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 22 May 2009 19:53:32 +0000 Subject: [PATCH] return the correct number of columns from wxGridStringTable, even when we don't have any rows (closes #10818) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60717 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/grid.h | 14 ++++++++++---- src/generic/grid.cpp | 33 +++++++++++++++++---------------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index 7fd7dd7b12..0471fddbcc 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -729,10 +729,10 @@ public: // these are pure virtual in wxGridTableBase // - int GetNumberRows(); - int GetNumberCols(); - wxString GetValue( int row, int col ); - void SetValue( int row, int col, const wxString& s ); + virtual int GetNumberRows() { return m_data.size(); } + virtual int GetNumberCols() { return m_numCols; } + virtual wxString GetValue( int row, int col ); + virtual void SetValue( int row, int col, const wxString& s ); // overridden functions from wxGridTableBase // @@ -752,6 +752,12 @@ public: private: wxGridStringArray m_data; + // notice that while we don't need to store the number of our rows as it's + // always equal to the size of m_data array, we do need to store the number + // of our columns as we can't retrieve it from m_data when the number of + // rows is 0 (see #10818) + int m_numCols; + // These only get used if you set your own labels, otherwise the // GetRow/ColLabelValue functions return wxGridTableBase defaults // diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index f794d5cfa7..ce85b12f1c 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -1127,11 +1127,14 @@ IMPLEMENT_DYNAMIC_CLASS( wxGridStringTable, wxGridTableBase ) wxGridStringTable::wxGridStringTable() : wxGridTableBase() { + m_numCols = 0; } wxGridStringTable::wxGridStringTable( int numRows, int numCols ) : wxGridTableBase() { + m_numCols = numCols; + m_data.Alloc( numRows ); wxArrayString sa; @@ -1145,19 +1148,6 @@ wxGridStringTable::~wxGridStringTable() { } -int wxGridStringTable::GetNumberRows() -{ - return m_data.GetCount(); -} - -int wxGridStringTable::GetNumberCols() -{ - if ( m_data.GetCount() > 0 ) - return m_data[0].GetCount(); - else - return 0; -} - wxString wxGridStringTable::GetValue( int row, int col ) { wxCHECK_MSG( (row < GetNumberRows()) && (col < GetNumberCols()), @@ -1327,6 +1317,8 @@ bool wxGridStringTable::InsertCols( size_t pos, size_t numCols ) } } + m_numCols += numCols; + if ( GetView() ) { wxGridTableMessage msg( this, @@ -1351,6 +1343,8 @@ bool wxGridStringTable::AppendCols( size_t numCols ) m_data[row].Add( wxEmptyString, numCols ); } + m_numCols += numCols; + if ( GetView() ) { wxGridTableMessage msg( this, @@ -1404,16 +1398,23 @@ bool wxGridStringTable::DeleteCols( size_t pos, size_t numCols ) m_colLabels.RemoveAt( colID, nToRm ); } - for ( row = 0; row < curNumRows; row++ ) + if ( numCols >= curNumCols ) { - if ( numCols >= curNumCols ) + for ( row = 0; row < curNumRows; row++ ) { m_data[row].Clear(); } - else + + m_numCols = 0; + } + else // something will be left + { + for ( row = 0; row < curNumRows; row++ ) { m_data[row].RemoveAt( colID, numCols ); } + + m_numCols -= numCols; } if ( GetView() ) -- 2.47.2