]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/listctrl.cpp
a fix for the last fix
[wxWidgets.git] / src / generic / listctrl.cpp
index 761e8f4d9dcdeca680a0311fbc73d36c98b08e5e..2f69514f230d433407e9efd33c63942c2042be17 100644 (file)
 #define wxUSE_GENERIC_LIST_EXTENSIONS 1
 #endif
 
+// ----------------------------------------------------------------------------
+// events
+// ----------------------------------------------------------------------------
+
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_BEGIN_DRAG)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_BEGIN_RDRAG)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_END_LABEL_EDIT)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_DELETE_ITEM)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_GET_INFO)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_SET_INFO)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_SELECTED)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_DESELECTED)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_KEY_DOWN)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_INSERT_ITEM)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_CLICK)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_ACTIVATED)
+
 // ============================================================================
 // private classes
 // ============================================================================
@@ -1249,7 +1270,12 @@ void wxListHeaderWindow::AdjustDC(wxDC& dc)
 
 void wxListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
 {
+#ifdef __WXGTK__
+    wxClientDC dc( this );
+#else
     wxPaintDC dc( this );
+#endif
+
     PrepareDC( dc );
     AdjustDC( dc );
 
@@ -1669,6 +1695,10 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
     wxPaintDC dc( this );
     PrepareDC( dc );
 
+    int dev_x = 0;
+    int dev_y = 0;
+    CalcScrolledPosition( 0, 0, &dev_x, &dev_y );
+
     if (m_dirty) return;
 
     if (m_lines.GetCount() == 0) return;
@@ -1680,9 +1710,6 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
     if (m_mode & wxLC_REPORT)
     {
         wxPen pen(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DLIGHT), 1, wxSOLID);
-        dc.SetPen(pen);
-        dc.SetBrush(* wxTRANSPARENT_BRUSH);
-
         wxSize clientSize = GetClientSize();
 
         int lineSpacing = 0;
@@ -1701,12 +1728,20 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
             m_lines[i].Draw( &dc );
             // Draw horizontal rule if required
             if (GetWindowStyle() & wxLC_HRULES)
-                dc.DrawLine(0, i*lineSpacing, clientSize.x, i*lineSpacing);
+            {
+                dc.SetPen(pen);
+                dc.SetBrush(* wxTRANSPARENT_BRUSH);
+                dc.DrawLine(0 - dev_x , i*lineSpacing , clientSize.x - dev_x , i*lineSpacing );
+           }
         }
 
         // Draw last horizontal rule
         if ((i > (size_t) (y_s / lineSpacing)) && (GetWindowStyle() & wxLC_HRULES))
-            dc.DrawLine(0, i*lineSpacing, clientSize.x, i*lineSpacing);
+        {
+            dc.SetPen(pen);
+            dc.SetBrush(* wxTRANSPARENT_BRUSH);
+            dc.DrawLine(0 - dev_x , i*lineSpacing , clientSize.x - dev_x , i*lineSpacing );
+       }
 
         // Draw vertical rules if required
         if ((GetWindowStyle() & wxLC_VRULES) && (GetItemCount() > 0))
@@ -1717,11 +1752,13 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
             GetItemRect(0, firstItemRect);
             GetItemRect(GetItemCount() - 1, lastItemRect);
             int x = firstItemRect.GetX();
+            dc.SetPen(pen);
+            dc.SetBrush(* wxTRANSPARENT_BRUSH);
             for (col = 0; col < GetColumnCount(); col++)
             {
                 int colWidth = GetColumnWidth(col);
                 x += colWidth ;
-                dc.DrawLine(x, firstItemRect.GetY() - 1, x, lastItemRect.GetBottom() + 1);
+                dc.DrawLine(x - dev_x, firstItemRect.GetY() - 1 - dev_y, x - dev_x, lastItemRect.GetBottom() + 1 - dev_y);
             }
         }
     }
@@ -2056,8 +2093,8 @@ void wxListMainWindow::MoveToFocus()
 
     if (m_mode & wxLC_REPORT)
     {
-        if (item_y-5 < view_y )
-            Scroll( -1, (item_y-5)/m_yScroll );
+        if (item_y < view_y )
+            Scroll( -1, (item_y)/m_yScroll );
         if (item_y+item_h+5 > view_y+client_h)
             Scroll( -1, (item_y+item_h-client_h+15)/m_yScroll );
     }
@@ -2642,7 +2679,7 @@ int wxListMainWindow::GetItemState( long item, long stateMask )
         if (item >= 0 && (size_t)item < m_lines.GetCount())
         {
             wxListLineData *line = &m_lines[(size_t)item];
-            if (line->IsHilighted()) ret |= wxLIST_STATE_FOCUSED;
+            if (line->IsHilighted()) ret |= wxLIST_STATE_SELECTED;
         }
     }
     return ret;
@@ -2761,6 +2798,9 @@ void wxListMainWindow::CalculatePositions()
 
     if (m_mode & wxLC_REPORT)
     {
+         // scroll one line per step
+         m_yScroll = lineSpacing;
+         
         int x = 4;
         int y = 1;
         int entireHeight = m_lines.GetCount() * lineSpacing + 2;
@@ -2768,7 +2808,7 @@ void wxListMainWindow::CalculatePositions()
 #if wxUSE_GENERIC_LIST_EXTENSIONS
         int x_scroll_pos = GetScrollPos( wxHORIZONTAL );
 #else
-        SetScrollbars( m_xScroll, m_yScroll, 0, (entireHeight+15) / m_yScroll, 0, scroll_pos, TRUE );
+        SetScrollbars( m_xScroll, m_yScroll, 0, entireHeight/m_yScroll +1, 0, scroll_pos, TRUE );
 #endif
         GetClientSize( &clientWidth, &clientHeight );
 
@@ -2790,9 +2830,9 @@ void wxListMainWindow::CalculatePositions()
 #endif
             y += lineSpacing;  // one pixel blank line between items
         }
-                m_visibleLines = clientHeight / lineSpacing;
+        m_visibleLines = clientHeight / lineSpacing;
 #if wxUSE_GENERIC_LIST_EXTENSIONS
-                SetScrollbars( m_xScroll, m_yScroll, entireWidth / m_xScroll , (entireHeight+15) / m_yScroll, x_scroll_pos  , scroll_pos, TRUE );
+        SetScrollbars( m_xScroll, m_yScroll, entireWidth/m_xScroll +1, entireHeight/m_yScroll +1, x_scroll_pos  , scroll_pos, TRUE );
 #endif
     }
     else