+// Necessary for drawing hrules and vrules, if specified
+void wxListCtrl::OnPaint(wxPaintEvent& event)
+{
+ wxPaintDC dc(this);
+
+ wxControl::OnPaint(event);
+
+ // Reset the device origin since it may have been set
+ dc.SetDeviceOrigin(0, 0);
+
+ bool drawHRules = ((GetWindowStyle() & wxLC_HRULES) != 0);
+ bool drawVRules = ((GetWindowStyle() & wxLC_VRULES) != 0);
+
+ if (!drawHRules && !drawVRules)
+ return;
+ if ((GetWindowStyle() & wxLC_REPORT) == 0)
+ return;
+
+ wxPen pen(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DLIGHT), 1, wxSOLID);
+ dc.SetPen(pen);
+ dc.SetBrush(* wxTRANSPARENT_BRUSH);
+
+ wxSize clientSize = GetClientSize();
+ wxRect itemRect;
+ int cy=0;
+
+ int itemCount = GetItemCount();
+ int i;
+ for (i = 0; i < itemCount; i++)
+ {
+ if (GetItemRect(i, itemRect))
+ {
+ cy = itemRect.GetTop();
+ if (i != 0) // Don't draw the first one
+ {
+ dc.DrawLine(0, cy, clientSize.x, cy);
+ }
+ // Draw last line
+ if (i == (GetItemCount() - 1))
+ {
+ cy = itemRect.GetBottom();
+ dc.DrawLine(0, cy, clientSize.x, cy);
+ }
+ }
+ }
+ i = (GetItemCount() - 1);
+ if (drawVRules && (i > -1))
+ {
+ wxRect firstItemRect;
+ GetItemRect(0, firstItemRect);
+
+ if (GetItemRect(i, itemRect))
+ {
+ int col;
+ int x = itemRect.GetX();
+ for (col = 0; col < GetColumnCount(); col++)
+ {
+ int colWidth = GetColumnWidth(col);
+ x += colWidth ;
+ dc.DrawLine(x, firstItemRect.GetY() - 2, x, itemRect.GetBottom());
+ }
+ }
+ }
+}
+