Initializing more variables in wxGrid::Create()

Minor fixes for crashes under wxMotif when setting attributes before
the grid has been first painted.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5920 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Michael Bedward
2000-02-09 05:04:21 +00:00
parent b0d6ff2f7f
commit 4634a5d6d7
2 changed files with 29 additions and 10 deletions

View File

@@ -449,7 +449,7 @@ public:
void DrawGridCellArea( wxDC& dc ); void DrawGridCellArea( wxDC& dc );
void DrawCellBorder( wxDC& dc, const wxGridCellCoords& ); void DrawCellBorder( wxDC& dc, const wxGridCellCoords& );
void DrawAllGridLines( wxDC& dc, const wxRegion & reg = wxRegion() ); void DrawAllGridLines( wxDC& dc, const wxRegion & reg );
void DrawCell( wxDC& dc, const wxGridCellCoords& ); void DrawCell( wxDC& dc, const wxGridCellCoords& );
void DrawCellBackground( wxDC& dc, const wxGridCellCoords& ); void DrawCellBackground( wxDC& dc, const wxGridCellCoords& );
void DrawCellValue( wxDC& dc, const wxGridCellCoords& ); void DrawCellValue( wxDC& dc, const wxGridCellCoords& );
@@ -859,6 +859,7 @@ public:
protected: protected:
bool m_created; bool m_created;
bool m_displayed;
wxGridWindow *m_gridWin; wxGridWindow *m_gridWin;
wxGridRowLabelWindow *m_rowLabelWin; wxGridRowLabelWindow *m_rowLabelWin;

View File

@@ -940,6 +940,16 @@ wxGrid::~wxGrid()
void wxGrid::Create() void wxGrid::Create()
{ {
m_created = FALSE; // set to TRUE by CreateGrid
m_displayed = FALSE; // set to TRUE by OnPaint
m_table = (wxGridTableBase *) NULL;
m_cellEditCtrl = (wxWindow *) NULL;
m_numRows = 0;
m_numCols = 0;
m_currentCellCoords = wxGridNoCellCoords;
int colLblH = WXGRID_DEFAULT_COL_LABEL_HEIGHT; int colLblH = WXGRID_DEFAULT_COL_LABEL_HEIGHT;
int rowLblW = WXGRID_DEFAULT_ROW_LABEL_WIDTH; int rowLblW = WXGRID_DEFAULT_ROW_LABEL_WIDTH;
@@ -1119,6 +1129,10 @@ void wxGrid::Init()
void wxGrid::CalcDimensions() void wxGrid::CalcDimensions()
{ {
// This avoids a crash in SetScrollbars
//
if ( !m_displayed ) return;
int cw, ch; int cw, ch;
GetClientSize( &cw, &ch ); GetClientSize( &cw, &ch );
@@ -2381,6 +2395,8 @@ void wxGrid::OnPaint( wxPaintEvent& WXUNUSED(event) )
SetEditControlValue(); SetEditControlValue();
ShowCellEditControl(); ShowCellEditControl();
} }
m_displayed = TRUE;
} }
@@ -2540,10 +2556,8 @@ void wxGrid::SetCurrentCell( const wxGridCellCoords& coords )
return; return;
} }
wxClientDC dc( m_gridWin ); if ( m_displayed &&
PrepareDC( dc ); m_currentCellCoords != wxGridNoCellCoords )
if ( m_currentCellCoords != wxGridNoCellCoords )
{ {
HideCellEditControl(); HideCellEditControl();
SaveEditControlValue(); SaveEditControlValue();
@@ -2552,13 +2566,17 @@ void wxGrid::SetCurrentCell( const wxGridCellCoords& coords )
m_currentCellCoords = coords; m_currentCellCoords = coords;
SetEditControlValue(); SetEditControlValue();
ShowCellEditControl();
if ( IsSelection() ) if ( m_displayed )
{ {
wxRect r( SelectionToDeviceRect() ); ShowCellEditControl();
ClearSelection();
if ( !GetBatchCount() ) m_gridWin->Refresh( FALSE, &r ); if ( IsSelection() )
{
wxRect r( SelectionToDeviceRect() );
ClearSelection();
if ( !GetBatchCount() ) m_gridWin->Refresh( FALSE, &r );
}
} }
} }