]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/listctrl.cpp
corrected CodeWarrior project target names and generated application names
[wxWidgets.git] / src / generic / listctrl.cpp
index 595d70345b52e924fdbe295452e9c61bd929d071..e4fc11143e1ee8011ff2ac0df0f0c8c64e08766b 100644 (file)
@@ -1630,10 +1630,6 @@ void wxListLineData::DrawInReportMode( wxDC *dc,
                                        const wxRect& rectHL,
                                        bool highlighted )
 {
-    // use our own flag if we maintain it
-    if ( !IsVirtual() )
-        highlighted = m_highlighted;
-
     // TODO: later we should support setting different attributes for
     //       different columns - to do it, just add "col" argument to
     //       GetAttr() and move these lines into the loop below
@@ -2421,6 +2417,12 @@ bool wxListMainWindow::HighlightLine( size_t line, bool highlight )
 
 void wxListMainWindow::RefreshLine( size_t line )
 {
+    size_t visibleFrom, visibleTo;
+    GetVisibleLinesRange(&visibleFrom, &visibleTo);
+
+    if ( line < visibleFrom || line > visibleTo )
+        return;
+
     wxRect rect = GetLineRect(line);
 
     CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y );
@@ -2555,7 +2557,7 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
             GetLine(line)->DrawInReportMode( &dc,
                                              rectLine,
                                              GetLineHighlightRect(line),
-                                             IsHighlighted(line) );
+                                             m_hasFocus && IsHighlighted(line) );
         }
 
         if ( HasFlag(wxLC_HRULES) )
@@ -2612,15 +2614,18 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
         }
     }
 
-    if ( HasCurrent() && m_hasFocus )
+    if ( HasCurrent() )
     {
+        // don't draw rect outline under Max if we already have the background
+        // color
 #ifdef __WXMAC__
-        // no rect outline, we already have the background color
-#else
-        dc.SetPen( *wxBLACK_PEN );
-        dc.SetBrush( *wxTRANSPARENT_BRUSH );
-        dc.DrawRectangle( GetLineHighlightRect(m_current) );
-#endif
+        if ( !m_hasFocus )
+#endif // !__WXMAC__
+        {
+            dc.SetPen( *wxBLACK_PEN );
+            dc.SetBrush( *wxTRANSPARENT_BRUSH );
+            dc.DrawRectangle( GetLineHighlightRect(m_current) );
+        }
     }
 
     dc.EndDrawing();
@@ -2657,7 +2662,11 @@ void wxListMainWindow::SendNotify( size_t line,
     if ( point != wxDefaultPosition )
         le.m_pointDrag = point;
 
-    if ( command != wxEVT_COMMAND_LIST_DELETE_ITEM )
+    // don't try to get the line info for virtual list controls: the main
+    // program has it anyhow and if we did it would result in accessing all
+    // the lines, even those which are not visible now and this is precisely
+    // what we're trying to avoid
+    if ( !IsVirtual() && (command != wxEVT_COMMAND_LIST_DELETE_ITEM) )
     {
         GetLine(line)->GetItem( 0, le.m_item );
     }