Added rules to wxListCtrl (MSW now, GTK+ soon)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8254 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2000-09-05 11:39:14 +00:00
parent 3d0c4d2e7b
commit 2702ed5a3d
3 changed files with 87 additions and 0 deletions

View File

@@ -78,6 +78,10 @@ static void wxConvertFromMSWListItem(const wxListCtrl *ctrl, wxListItem& info, L
IMPLEMENT_DYNAMIC_CLASS(wxListCtrl, wxControl)
IMPLEMENT_DYNAMIC_CLASS(wxListItem, wxObject)
BEGIN_EVENT_TABLE(wxListCtrl, wxControl)
EVT_PAINT(wxListCtrl::OnPaint)
END_EVENT_TABLE()
// ============================================================================
// implementation
// ============================================================================
@@ -632,10 +636,14 @@ bool wxListCtrl::SetItem(wxListItem& info)
// check whether it has any custom attributes
if ( info.HasAttributes() )
{
wxListItemAttr *attr;
attr = (wxListItemAttr*) m_attrs.Get(item.iItem);
if (attr == NULL)
m_attrs.Put(item.iItem, (wxObject *)new wxListItemAttr(*info.GetAttributes()));
else *attr = *info.GetAttributes();
m_hasAnyAttr = TRUE;
@@ -1128,10 +1136,14 @@ long wxListCtrl::InsertItem(wxListItem& info)
// check whether it has any custom attributes
if ( info.HasAttributes() )
{
wxListItemAttr *attr;
attr = (wxListItemAttr*) m_attrs.Get(item.iItem);
if (attr == NULL)
m_attrs.Put(item.iItem, (wxObject *)new wxListItemAttr(*info.GetAttributes()));
else *attr = *info.GetAttributes();
m_hasAnyAttr = TRUE;
@@ -1674,6 +1686,73 @@ wxChar *wxListCtrl::AddPool(const wxString& str)
return (wxChar *)node->Data();
}
// 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 lastH = 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());
}
}
}
}
// ----------------------------------------------------------------------------
// wxListItem
// ----------------------------------------------------------------------------