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:
@@ -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
|
||||
// ----------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user