]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/grid.cpp
Missing #include
[wxWidgets.git] / src / generic / grid.cpp
index c00faac20df19ebe01b2abafd6ebd008c5a24a58..f9ff98782805cdb2f0b0c4b335744acdc7c44438 100644 (file)
@@ -1953,7 +1953,7 @@ void wxGridCellAttr::MergeWith(wxGridCellAttr *mergefrom)
         SetBackgroundColour(mergefrom->GetBackgroundColour());
     if ( !HasFont() && mergefrom->HasFont() )
         SetFont(mergefrom->GetFont());
-    if ( !!HasAlignment() && mergefrom->HasAlignment() ){
+    if ( !HasAlignment() && mergefrom->HasAlignment() ){
         int hAlign, vAlign;
         mergefrom->GetAlignment( &hAlign, &vAlign);
         SetAlignment(hAlign, vAlign);
@@ -3994,6 +3994,15 @@ bool wxGrid::Redimension( wxGridTableMessage& msg )
     int i;
     bool result = FALSE;
 
+    // Clear the attribute cache as the attribute might refer to a different
+    // cell than stored in the cache after adding/removing rows/columns.
+    ClearAttrCache();
+    // By the same reasoning, the editor should be dismissed if columns are
+    // added or removed. And for consistency, it should IMHO always be
+    // removed, not only if the cell "underneath" it actually changes.
+    // For now, I intentionally do not save the editor's content as the
+    // cell it might want to save that stuff to might no longer exist.
+    DisableCellEditControl();
 #if 0
     // if we were using the default widths/heights so far, we must change them
     // now
@@ -6788,7 +6797,6 @@ void wxGrid::DrawTextRectangle( wxDC& dc,
 {
     wxArrayString lines;
 
-    dc.SetClippingRegion( rect );
     StringToLines( value, lines );
 
 
@@ -6810,6 +6818,7 @@ void wxGrid::DrawTextRectangle( wxDC& dc,
     long textWidth, textHeight;
     long lineWidth, lineHeight;
 
+    dc.SetClippingRegion( rect );
     if ( lines.GetCount() )
     {
         GetTextBoxSize( dc, lines, &textWidth, &textHeight );
@@ -8509,11 +8518,17 @@ bool wxGrid::LookupAttr(int row, int col, wxGridCellAttr **attr) const
 
 wxGridCellAttr *wxGrid::GetCellAttr(int row, int col) const
 {
-    wxGridCellAttr *attr;
-    if ( !LookupAttr(row, col, &attr) )
+    wxGridCellAttr *attr = NULL;
+    // Additional test to avoid looking at the cache e.g. for
+    // wxNoCellCoords, as this will confuse memory management.
+    if ( row >= 0 )
     {
-        attr = m_table ? m_table->GetAttr(row, col , wxGridCellAttr::Any) : (wxGridCellAttr *)NULL;
-        CacheAttr(row, col, attr);
+       if ( !LookupAttr(row, col, &attr) )
+       {
+           attr = m_table ? m_table->GetAttr(row, col , wxGridCellAttr::Any)
+                          : (wxGridCellAttr *)NULL;
+           CacheAttr(row, col, attr);
+       }
     }
     if (attr)
     {
@@ -9181,8 +9196,17 @@ wxSize wxGrid::DoGetBestSize() const
     // don't set sizes, only calculate them
     wxGrid *self = (wxGrid *)this;  // const_cast
 
-    return wxSize(self->SetOrCalcColumnSizes(TRUE),
-                  self->SetOrCalcRowSizes(TRUE));
+    int width, height;
+    width = self->SetOrCalcColumnSizes(TRUE);
+    height = self->SetOrCalcRowSizes(TRUE);
+
+    int maxwidth, maxheight;
+    wxDisplaySize( & maxwidth, & maxheight );
+
+    if ( width > maxwidth ) width = maxwidth;
+    if ( height > maxheight ) height = maxheight;
+
+    return wxSize( width, height );
 }
 
 void wxGrid::Fit()
@@ -9333,7 +9357,7 @@ bool wxGrid::IsSelection()
                m_selectingBottomRight != wxGridNoCellCoords) ) );
 }
 
-bool wxGrid::IsInSelection( int row, int col )
+bool wxGrid::IsInSelection( int row, int col ) const
 {
     return ( m_selection && (m_selection->IsInSelection( row, col ) ||
              ( row >= m_selectingTopLeft.GetRow() &&