]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/listctrl.cpp
Correct deafult GUI font is now found when querying
[wxWidgets.git] / src / generic / listctrl.cpp
index 8194d9692571ca5482834de73073546088a0909b..8558840d6aa3eb7b33ca30c810faade574139019 100644 (file)
@@ -295,7 +295,7 @@ void wxListLineData::CalculateSize( wxDC *dc, int spacing )
             {
                 wxListItemData *item = (wxListItemData*)node->Data();
                 wxString s = item->GetText();
-                long lw,lh;
+                wxCoord lw,lh;
                 dc->GetTextExtent( s, &lw, &lh );
                 if (lw > m_spacing) m_bound_all.width = lw;
             }
@@ -308,14 +308,14 @@ void wxListLineData::CalculateSize( wxDC *dc, int spacing )
             {
                 wxListItemData *item = (wxListItemData*)node->Data();
                 wxString s = item->GetText();
-                long lw,lh;
+                wxCoord lw,lh;
                 dc->GetTextExtent( s, &lw, &lh );
                 m_bound_all.width = lw;
                 m_bound_all.height = lh;
                 if (item->HasImage())
                 {
-                    int w = 0;
-                    int h = 0;
+                    wxCoord w = 0;
+                    wxCoord h = 0;
                     m_owner->GetImageSize( item->GetImage(), w, h );
                     m_bound_all.width += 4 + w;
                     if (h > m_bound_all.height) m_bound_all.height = h;
@@ -334,7 +334,7 @@ void wxListLineData::CalculateSize( wxDC *dc, int spacing )
                 wxString s;
                 item->GetText( s );
                 if (s.IsNull()) s = "H";
-                long lw,lh;
+                wxCoord lw,lh;
                 dc->GetTextExtent( s, &lw, &lh );
                 item->SetSize( item->GetWidth(), lh );
                 m_bound_all.width += lw;
@@ -384,7 +384,7 @@ void wxListLineData::SetPosition( wxDC *dc, int x, int y, int window_width )
                 {
                     wxString s;
                     item->GetText( s );
-                    long lw,lh;
+                    wxCoord lw,lh;
                     dc->GetTextExtent( s, &lw, &lh );
                     if (m_bound_all.width > m_spacing)
                         m_bound_label.x = m_bound_all.x;
@@ -432,7 +432,7 @@ void wxListLineData::SetPosition( wxDC *dc, int x, int y, int window_width )
         }
         case wxLC_REPORT:
         {
-            long lw,lh;
+            wxCoord lw,lh;
             dc->GetTextExtent( "H", &lw, &lh );
             m_bound_all.x = 0;
             m_bound_all.y -= 0;
@@ -448,7 +448,7 @@ void wxListLineData::SetPosition( wxDC *dc, int x, int y, int window_width )
                 wxString s;
                 item->GetText( s );
                 if (s.IsEmpty()) s = wxT("H");
-                long lw,lh;
+                wxCoord lw,lh;
                 dc->GetTextExtent( s, &lw, &lh );
                 m_bound_label.width = lw;
                 m_bound_label.height = lh;
@@ -586,9 +586,13 @@ int wxListLineData::GetImage( int index )
 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());
     }
@@ -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();
-    SetAttributes(dc, attr, colText, font);
+    SetAttributes(dc, attr, colText, font, hilight);
 
     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;
+    m_hilighted = on;
     if (on)
         m_owner->SelectLine( this );
     else
         m_owner->DeselectLine( this );
-    m_hilighted = on;
 }
 
 void wxListLineData::ReverseHilight( void )
@@ -867,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))
-                cw = dc.DeviceToLogicalX(w)-x-1;
+            cw = dc.DeviceToLogicalX(w)-x-1;
 #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 );
 
@@ -1253,8 +1258,8 @@ void wxListMainWindow::SendNotify( wxListLineData *line, wxEventType command )
     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) )
@@ -1823,8 +1828,8 @@ void wxListMainWindow::GetImageSize( int index, int &width, int &height )
 int wxListMainWindow::GetTextLength( wxString &s )
 {
     wxClientDC dc( this );
-    long lw = 0;
-    long lh = 0;
+    wxCoord lw = 0;
+    wxCoord lh = 0;
     dc.GetTextExtent( s, &lw, &lh );
     return lw + 6;
 }
@@ -1904,7 +1909,7 @@ void wxListMainWindow::SetColumnWidth( int col, int width )
             {
                 wxListItemData *item = (wxListItemData*)n->Data();
                 int current = 0, ix = 0, iy = 0;
-                long lx = 0, ly = 0;
+                wxCoord lx = 0, ly = 0;
                 if (item->HasImage())
                 {
                     GetImageSize( item->GetImage(), ix, iy );
@@ -2575,6 +2580,29 @@ wxListItem::wxListItem()
     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
 // -------------------------------------------------------------------------------------