]> git.saurik.com Git - wxWidgets.git/commitdiff
Compute update rectangle only when needed [i.e. if (!m_grid->GetBatchCount())]
authorStefan Neis <Stefan.Neis@t-online.de>
Sun, 25 Jan 2004 14:26:06 +0000 (14:26 +0000)
committerStefan Neis <Stefan.Neis@t-online.de>
Sun, 25 Jan 2004 14:26:06 +0000 (14:26 +0000)
                [Patch 882656]

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

src/generic/gridsel.cpp

index 17e8f0ecbc5ce261a84bee82d64ec86b4bc03ed6..d7487cb1df5d725f0db3e4f7c327051b6508b213 100644 (file)
@@ -259,10 +259,12 @@ void wxGridSelection::SelectRow( int row,
     }
 
     // Update View:
-    wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ),
-                                          wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) );
     if ( !m_grid->GetBatchCount() )
+    {
+        wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ),
+                                              wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) );
         ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+    }
 
     // Send Event
     wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
@@ -352,10 +354,12 @@ void wxGridSelection::SelectCol( int col,
     }
 
     // Update View:
-    wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ),
-                                          wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) );
     if ( !m_grid->GetBatchCount() )
+    {
+        wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ),
+                                              wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) );
         ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+    }
 
     // Send Event
     wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
@@ -494,10 +498,12 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol,
     m_blockSelectionBottomRight.Add( wxGridCellCoords( bottomRow, rightCol ) );
 
     // Update View:
-    wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( topRow, leftCol ),
-                                          wxGridCellCoords( bottomRow, rightCol ) );
     if ( !m_grid->GetBatchCount() )
+    {
+        wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( topRow, leftCol ),
+                                              wxGridCellCoords( bottomRow, rightCol ) );
         ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+    }
 
     // Send Event, if not disabled.
     if ( sendEvent )
@@ -536,10 +542,12 @@ void wxGridSelection::SelectCell( int row, int col,
     m_cellSelection.Add( wxGridCellCoords( row, col ) );
 
     // Update View:
-    wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ),
-                                          wxGridCellCoords( row, col ) );
     if ( !m_grid->GetBatchCount() )
+    {
+        wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ),
+                                              wxGridCellCoords( row, col ) );
         ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+    }
 
     // Send event
     if (sendEvent)
@@ -585,12 +593,13 @@ void wxGridSelection::ToggleCellSelection( int row, int col,
             wxGridCellCoords& coords = m_cellSelection[n];
             if ( row == coords.GetRow() && col == coords.GetCol() )
             {
-                wxRect r;
-                r = m_grid->BlockToDeviceRect( m_cellSelection[n],
-                                               m_cellSelection[n] );
+                wxGridCellCoords coords = m_cellSelection[n];
                 m_cellSelection.RemoveAt(n);
                 if ( !m_grid->GetBatchCount() )
+                {
+                    wxRect r = m_grid->BlockToDeviceRect( coords, coords );
                     ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+                }
 
                 // Send event
                 wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
@@ -647,19 +656,19 @@ void wxGridSelection::ToggleCellSelection( int row, int col,
             {
                 if ( topRow < row )
                     SelectBlock( topRow, leftCol, row - 1, rightCol,
-                                FALSE, FALSE, FALSE, FALSE, FALSE );
+                                 FALSE, FALSE, FALSE, FALSE, FALSE );
                 if ( bottomRow > row )
                     SelectBlock( row + 1, leftCol, bottomRow, rightCol,
-                                FALSE, FALSE, FALSE, FALSE, FALSE );
+                                 FALSE, FALSE, FALSE, FALSE, FALSE );
             }
             if ( m_selectionMode != wxGrid::wxGridSelectRows )
             {
                 if ( leftCol < col )
                     SelectBlock( row, leftCol, row, col - 1,
-                                FALSE, FALSE, FALSE, FALSE, FALSE );
+                                 FALSE, FALSE, FALSE, FALSE, FALSE );
                 if ( rightCol > col )
                     SelectBlock( row, col + 1, row, rightCol,
-                                FALSE, FALSE, FALSE, FALSE, FALSE );
+                                 FALSE, FALSE, FALSE, FALSE, FALSE );
             }
         }
     }
@@ -678,7 +687,7 @@ void wxGridSelection::ToggleCellSelection( int row, int col,
                 {
                     if ( col > 0 )
                         SelectBlock( row, 0, row, col - 1,
-                                    FALSE, FALSE, FALSE, FALSE, FALSE );
+                                     FALSE, FALSE, FALSE, FALSE, FALSE );
                     if ( col < m_grid->GetNumberCols() - 1 )
                         SelectBlock( row, col + 1,
                                      row, m_grid->GetNumberCols() - 1,
@@ -702,7 +711,7 @@ void wxGridSelection::ToggleCellSelection( int row, int col,
                 {
                     if ( row > 0 )
                         SelectBlock( 0, col, row - 1, col,
-                                    FALSE, FALSE, FALSE, FALSE, FALSE );
+                                     FALSE, FALSE, FALSE, FALSE, FALSE );
                     if ( row < m_grid->GetNumberRows() - 1 )
                         SelectBlock( row + 1, col,
                                      m_grid->GetNumberRows() - 1, col,
@@ -719,10 +728,13 @@ void wxGridSelection::ToggleCellSelection( int row, int col,
     {
       case wxGrid::wxGridSelectCells:
       {
-          r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ),
-                                         wxGridCellCoords( row, col ) );
           if ( !m_grid->GetBatchCount() )
+          {
+              r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ),
+                                             wxGridCellCoords( row, col ) );
               ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+          }
+
           wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
                                           wxEVT_GRID_RANGE_SELECT,
                                           m_grid,
@@ -736,10 +748,13 @@ void wxGridSelection::ToggleCellSelection( int row, int col,
       }
       case wxGrid::wxGridSelectRows:
       {
-          r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ),
-                                         wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) );
           if ( !m_grid->GetBatchCount() )
+          {
+              r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ),
+                                             wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) );
               ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+          }
+
           wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
                                           wxEVT_GRID_RANGE_SELECT,
                                           m_grid,
@@ -753,10 +768,13 @@ void wxGridSelection::ToggleCellSelection( int row, int col,
       }
       case wxGrid::wxGridSelectColumns:
       {
-          r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ),
-                                         wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) );
           if ( !m_grid->GetBatchCount() )
+          {
+              r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ),
+                                             wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) );
               ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+          }
+
           wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
                                           wxEVT_GRID_RANGE_SELECT,
                                           m_grid,
@@ -774,34 +792,38 @@ void wxGridSelection::ToggleCellSelection( int row, int col,
 void wxGridSelection::ClearSelection()
 {
     size_t n;
+    wxRect r;
+    wxGridCellCoords coords1, coords2;
 
     // deselect all invidiual cells and update the screen
     if ( m_selectionMode == wxGrid::wxGridSelectCells )
     {
-
         while( ( n = m_cellSelection.GetCount() ) > 0)
         {
-            wxRect r;
             n--;
-            r = m_grid->BlockToDeviceRect( m_cellSelection[n],
-                                           m_cellSelection[n] );
+            coords1 = m_cellSelection[n];
             m_cellSelection.RemoveAt(n);
             if ( !m_grid->GetBatchCount() )
+            {
+                r = m_grid->BlockToDeviceRect( coords1, coords1 );
                 ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+            }
         }
     }
 
     // deselect all blocks and update the screen
     while( ( n = m_blockSelectionTopLeft.GetCount() ) > 0)
     {
-        wxRect r;
         n--;
-        r = m_grid->BlockToDeviceRect( m_blockSelectionTopLeft[n],
-                                       m_blockSelectionBottomRight[n] );
+        coords1 = m_blockSelectionTopLeft[n];
+        coords2 = m_blockSelectionBottomRight[n];
         m_blockSelectionTopLeft.RemoveAt(n);
         m_blockSelectionBottomRight.RemoveAt(n);
         if ( !m_grid->GetBatchCount() )
+        {
+            r = m_grid->BlockToDeviceRect( coords1, coords2 );
             ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+        }
     }
 
     // deselect all rows and update the screen
@@ -810,13 +832,14 @@ void wxGridSelection::ClearSelection()
         while( ( n = m_rowSelection.GetCount() ) > 0)
         {
             n--;
-            int & row = m_rowSelection[n];
-            wxRect r;
-            r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ),
-                                           wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) );
+            int row = m_rowSelection[n];
             m_rowSelection.RemoveAt(n);
             if ( !m_grid->GetBatchCount() )
+            {
+                r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ),
+                                               wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) );
                 ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+            }
         }
     }
 
@@ -826,13 +849,14 @@ void wxGridSelection::ClearSelection()
         while( ( n = m_colSelection.GetCount() ) > 0)
         {
             n--;
-            int & col = m_colSelection[n];
-            wxRect r;
-            r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ),
-                                           wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) );
+            int col = m_colSelection[n];
             m_colSelection.RemoveAt(n);
             if ( !m_grid->GetBatchCount() )
+            {
+                r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ),
+                                               wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) );
                 ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
+            }
         }
     }