]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/listctrl.cpp
image handlers moved to separate headers (imagbmp.h etc.) This change is backward...
[wxWidgets.git] / src / generic / listctrl.cpp
index bb31a04f6acaa780a4c0a1885aea16c1a1a1568d..30ef6ea2a6c313fd6bced1f13e764bb31f078077 100644 (file)
@@ -586,9 +586,13 @@ int wxListLineData::GetImage( int index )
 void wxListLineData::SetAttributes(wxDC *dc,
                                    const wxListItemAttr *attr,
                                    const wxColour& colText,
 void wxListLineData::SetAttributes(wxDC *dc,
                                    const wxListItemAttr *attr,
                                    const wxColour& colText,
-                                   const wxFont& font)
+                                   const wxFont& font,
+                                   bool hilight)
 {
 {
-    if ( attr && attr->HasTextColour() )
+    // don't use foregroud colour for drawing highlighted items - this might
+    // make them completely invisible (and there is no way to do bit
+    // arithmetics on wxColour, unfortunately)
+    if ( !hilight && attr && attr->HasTextColour() )
     {
         dc->SetTextForeground(attr->GetTextColour());
     }
     {
         dc->SetTextForeground(attr->GetTextColour());
     }
@@ -640,7 +644,7 @@ void wxListLineData::DoDraw( wxDC *dc, bool hilight, bool paintBG )
     //     customize the subitems (in report mode) too.
     wxListItemData *item = (wxListItemData*)m_items.First()->Data();
     wxListItemAttr *attr = item->GetAttributes();
     //     customize the subitems (in report mode) too.
     wxListItemData *item = (wxListItemData*)m_items.First()->Data();
     wxListItemAttr *attr = item->GetAttributes();
-    SetAttributes(dc, attr, colText, font);
+    SetAttributes(dc, attr, colText, font, hilight);
 
     bool hasBgCol = attr && attr->HasBackgroundColour();
     if ( paintBG || hasBgCol )
 
     bool hasBgCol = attr && attr->HasBackgroundColour();
     if ( paintBG || hasBgCol )
@@ -706,11 +710,11 @@ void wxListLineData::DoDraw( wxDC *dc, bool hilight, bool paintBG )
 void wxListLineData::Hilight( bool on )
 {
     if (on == m_hilighted) return;
 void wxListLineData::Hilight( bool on )
 {
     if (on == m_hilighted) return;
+    m_hilighted = on;
     if (on)
         m_owner->SelectLine( this );
     else
         m_owner->DeselectLine( this );
     if (on)
         m_owner->SelectLine( this );
     else
         m_owner->DeselectLine( this );
-    m_hilighted = on;
 }
 
 void wxListLineData::ReverseHilight( void )
 }
 
 void wxListLineData::ReverseHilight( void )
@@ -853,7 +857,9 @@ void wxListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
 
     dc.SetBackgroundMode(wxTRANSPARENT);
     dc.SetTextForeground( *wxBLACK );
 
     dc.SetBackgroundMode(wxTRANSPARENT);
     dc.SetTextForeground( *wxBLACK );
-    if (m_foregroundColour.Ok()) dc.SetTextForeground( m_foregroundColour );
+
+    // do *not* use the listctrl colour for headers - one day we will have a
+    // function to set it separately
 
     x = 1;
     y = 1;
 
     x = 1;
     y = 1;
@@ -865,9 +871,10 @@ void wxListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
         int cw = item.m_width-2;
 #if wxUSE_GENERIC_LIST_EXTENSIONS
         if ((i+1 == numColumns) || ( dc.LogicalToDeviceX(x+item.m_width) > w-5))
         int cw = item.m_width-2;
 #if wxUSE_GENERIC_LIST_EXTENSIONS
         if ((i+1 == numColumns) || ( dc.LogicalToDeviceX(x+item.m_width) > w-5))
-                cw = dc.DeviceToLogicalX(w)-x-1;
+            cw = dc.DeviceToLogicalX(w)-x-1;
 #else
 #else
-        if ((i+1 == numColumns) || (x+item.m_width > w-5)) cw = w-x-1;
+        if ((i+1 == numColumns) || (x+item.m_width > w-5))
+            cw = w-x-1;
 #endif
         dc.SetPen( *wxWHITE_PEN );
 
 #endif
         dc.SetPen( *wxWHITE_PEN );
 
@@ -1251,8 +1258,8 @@ void wxListMainWindow::SendNotify( wxListLineData *line, wxEventType command )
     le.SetEventObject( GetParent() );
     le.m_itemIndex = GetIndexOfLine( line );
     line->GetItem( 0, le.m_item );
     le.SetEventObject( GetParent() );
     le.m_itemIndex = GetIndexOfLine( line );
     line->GetItem( 0, le.m_item );
-//    GetParent()->GetEventHandler()->ProcessEvent( le );
-    GetParent()->GetEventHandler()->AddPendingEvent( le );
+    GetParent()->GetEventHandler()->ProcessEvent( le );
+//    GetParent()->GetEventHandler()->AddPendingEvent( le );
 }
 
 void wxListMainWindow::FocusLine( wxListLineData *WXUNUSED(line) )
 }
 
 void wxListMainWindow::FocusLine( wxListLineData *WXUNUSED(line) )
@@ -2573,6 +2580,29 @@ wxListItem::wxListItem()
     m_attr = NULL;
 }
 
     m_attr = NULL;
 }
 
+void wxListItem::Clear()
+{
+    m_mask = 0;
+    m_itemId = 0;
+    m_col = 0;
+    m_state = 0;
+    m_stateMask = 0;
+    m_image = 0;
+    m_data = 0;
+    m_format = wxLIST_FORMAT_CENTRE;
+    m_width = 0;
+    m_text = wxEmptyString;
+
+    if (m_attr) delete m_attr;
+    m_attr = NULL;
+}
+
+void wxListItem::ClearAttributes()
+{
+    if (m_attr) delete m_attr;
+    m_attr = NULL;
+}
+
 // -------------------------------------------------------------------------------------
 // wxListEvent
 // -------------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------------
 // wxListEvent
 // -------------------------------------------------------------------------------------