]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/listctrl.cpp
another GradientFillLinear fix
[wxWidgets.git] / src / generic / listctrl.cpp
index 4f76d244cbc4511ed01cff2c1e3564db6b24a451..fd4300b5793a81afcd2745575110603ea3484321 100644 (file)
     #include "wx/mac/private.h"
 #endif
 
-#ifdef __WXGTK__
-    #include "wx/gtk/private.h"
-    #include "wx/gtk/win_gtk.h"
-#endif
-
-
 
 // NOTE: If using the wxListBox visual attributes works everywhere then this can
 // be removed, as well as the #else case below.
@@ -697,7 +691,7 @@ public:
 
     // send out a wxListEvent
     void SendNotify( size_t line,
-                     wxEventType command,
+                     wxEventType command, 
                      const wxPoint& point = wxDefaultPosition );
 
     // override base class virtual to reset m_lineHeight when the font changes
@@ -1448,7 +1442,7 @@ void wxListLineData::Draw( wxDC *dc )
     wxListItemAttr *attr = GetAttr();
 
     if ( SetAttributes(dc, attr, highlighted) )
-#ifndef __WXGTK__
+#ifndef __WXGTK20__
     {
         dc->DrawRectangle( m_gi->m_rectHighlight );
     }
@@ -1456,17 +1450,11 @@ void wxListLineData::Draw( wxDC *dc )
     {
         if (highlighted)
         {
-            wxRect rect2( m_gi->m_rectHighlight );
-            m_owner->CalcScrolledPosition( rect2.x, rect2.y, &rect2.x, &rect2.y );
-        
-            gtk_paint_flat_box( m_owner->m_widget->style, 
-                            GTK_PIZZA(m_owner->m_wxwindow)->bin_window,
-                                       GTK_STATE_SELECTED,
-                            GTK_SHADOW_NONE,
-                            NULL,
-                            m_owner->m_wxwindow,
-                            "cell_even",
-                            rect2.x, rect2.y, rect2.width, rect2.height );
+            int flags = wxCONTROL_SELECTED;
+            if (m_owner->HasFocus())
+                flags |= wxCONTROL_FOCUSED;
+            wxRendererNative::Get().DrawItemSelectionRect( m_owner, *dc, m_gi->m_rectHighlight, flags );
+            
         }
         else
         {
@@ -1513,7 +1501,7 @@ void wxListLineData::DrawInReportMode( wxDC *dc,
     //       GetAttr() and move these lines into the loop below
     wxListItemAttr *attr = GetAttr();
     if ( SetAttributes(dc, attr, highlighted) )
-#ifndef __WXGTK__
+#ifndef __WXGTK20__
     {
         dc->DrawRectangle( rectHL );
     }
@@ -1521,17 +1509,10 @@ void wxListLineData::DrawInReportMode( wxDC *dc,
     {
         if (highlighted)
         {
-            wxRect rect2( rectHL );
-            m_owner->CalcScrolledPosition( rect2.x, rect2.y, &rect2.x, &rect2.y );
-        
-            gtk_paint_flat_box( m_owner->m_widget->style, 
-                            GTK_PIZZA(m_owner->m_wxwindow)->bin_window,
-                                       GTK_STATE_SELECTED,
-                            GTK_SHADOW_NONE,
-                            NULL,
-                            m_owner->m_wxwindow,
-                            "cell_even",
-                            rect2.x, rect2.y, rect2.width, rect2.height );
+            int flags = wxCONTROL_SELECTED;
+            if (m_owner->HasFocus())
+                flags |= wxCONTROL_FOCUSED;
+            wxRendererNative::Get().DrawItemSelectionRect( m_owner, *dc, rectHL, flags );
         }
         else
         {
@@ -2796,20 +2777,12 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
         if ( m_hasFocus )
         {
             wxRect rect( GetLineHighlightRect( m_current ) );
-#ifndef __WXGTK__
+#ifndef __WXGTK20__
             dc.SetPen( *wxBLACK_PEN );
             dc.SetBrush( *wxTRANSPARENT_BRUSH );
             dc.DrawRectangle( rect );
 #else
-            CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y );
-        
-            gtk_paint_focus( m_widget->style, 
-                             GTK_PIZZA(m_wxwindow)->bin_window,
-                             GTK_STATE_SELECTED,
-                             NULL,
-                             m_wxwindow,
-                             "treeview",
-                             rect.x, rect.y, rect.width, rect.height );
+            wxRendererNative::Get().DrawItemSelectionRect( this, dc, rect, wxCONTROL_CURRENT|wxCONTROL_FOCUSED );
             
 #endif
         }
@@ -2842,6 +2815,7 @@ void wxListMainWindow::SendNotify( size_t line,
 {
     wxListEvent le( command, GetParent()->GetId() );
     le.SetEventObject( GetParent() );
+    
     le.m_itemIndex = line;
 
     // set only for events which have position
@@ -2852,7 +2826,7 @@ void wxListMainWindow::SendNotify( size_t line,
     // 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) )
+    if ( !IsVirtual() )
     {
         if ( line != (size_t)-1 )
         {
@@ -4332,11 +4306,11 @@ void wxListMainWindow::DeleteItem( long lindex )
         if ( m_current != index || m_current == count - 1 )
             m_current--;
     }
-
     if ( InReportView() )
     {
-    //  mark the Column Max Width cache as dirty if the items in the line
-    //  we're deleting contain the Max Column Width
+        //  mark the Column Max Width cache as dirty if the items in the line
+        //  we're deleting contain the Max Column Width
         wxListLineData * const line = GetLine(index);
         wxListItemDataList::compatibility_iterator n;
         wxListItemData *itemData;
@@ -4358,6 +4332,8 @@ void wxListMainWindow::DeleteItem( long lindex )
         ResetVisibleLinesRange();
     }
 
+    SendNotify( index, wxEVT_COMMAND_LIST_DELETE_ITEM, wxDefaultPosition );
+
     if ( IsVirtual() )
     {
         m_countVirt--;
@@ -4371,8 +4347,6 @@ void wxListMainWindow::DeleteItem( long lindex )
     // we need to refresh the (vert) scrollbar as the number of items changed
     m_dirty = true;
 
-    SendNotify( index, wxEVT_COMMAND_LIST_DELETE_ITEM );
-
     RefreshAfter(index);
 }