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:
@@ -1096,6 +1096,8 @@ enum wxStretch
|
|||||||
/*
|
/*
|
||||||
* wxListCtrl flags
|
* wxListCtrl flags
|
||||||
*/
|
*/
|
||||||
|
#define wxLC_VRULES 0x0001
|
||||||
|
#define wxLC_HRULES 0x0002
|
||||||
#define wxLC_ICON 0x0004
|
#define wxLC_ICON 0x0004
|
||||||
#define wxLC_SMALL_ICON 0x0008
|
#define wxLC_SMALL_ICON 0x0008
|
||||||
#define wxLC_LIST 0x0010
|
#define wxLC_LIST 0x0010
|
||||||
|
@@ -329,6 +329,11 @@ public:
|
|||||||
// still exist across 3 callbacks.
|
// still exist across 3 callbacks.
|
||||||
wxChar *AddPool(const wxString& str);
|
wxChar *AddPool(const wxString& str);
|
||||||
|
|
||||||
|
// Event handlers
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Necessary for drawing hrules and vrules, if specified
|
||||||
|
void OnPaint(wxPaintEvent& event);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// common part of all ctors
|
// common part of all ctors
|
||||||
void Init();
|
void Init();
|
||||||
@@ -356,6 +361,7 @@ private:
|
|||||||
bool DoCreateControl(int x, int y, int w, int h);
|
bool DoCreateControl(int x, int y, int w, int h);
|
||||||
|
|
||||||
DECLARE_DYNAMIC_CLASS(wxListCtrl)
|
DECLARE_DYNAMIC_CLASS(wxListCtrl)
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -78,6 +78,10 @@ static void wxConvertFromMSWListItem(const wxListCtrl *ctrl, wxListItem& info, L
|
|||||||
IMPLEMENT_DYNAMIC_CLASS(wxListCtrl, wxControl)
|
IMPLEMENT_DYNAMIC_CLASS(wxListCtrl, wxControl)
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxListItem, wxObject)
|
IMPLEMENT_DYNAMIC_CLASS(wxListItem, wxObject)
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(wxListCtrl, wxControl)
|
||||||
|
EVT_PAINT(wxListCtrl::OnPaint)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -632,10 +636,14 @@ bool wxListCtrl::SetItem(wxListItem& info)
|
|||||||
// check whether it has any custom attributes
|
// check whether it has any custom attributes
|
||||||
if ( info.HasAttributes() )
|
if ( info.HasAttributes() )
|
||||||
{
|
{
|
||||||
|
|
||||||
wxListItemAttr *attr;
|
wxListItemAttr *attr;
|
||||||
attr = (wxListItemAttr*) m_attrs.Get(item.iItem);
|
attr = (wxListItemAttr*) m_attrs.Get(item.iItem);
|
||||||
|
|
||||||
if (attr == NULL)
|
if (attr == NULL)
|
||||||
|
|
||||||
m_attrs.Put(item.iItem, (wxObject *)new wxListItemAttr(*info.GetAttributes()));
|
m_attrs.Put(item.iItem, (wxObject *)new wxListItemAttr(*info.GetAttributes()));
|
||||||
|
|
||||||
else *attr = *info.GetAttributes();
|
else *attr = *info.GetAttributes();
|
||||||
|
|
||||||
m_hasAnyAttr = TRUE;
|
m_hasAnyAttr = TRUE;
|
||||||
@@ -1128,10 +1136,14 @@ long wxListCtrl::InsertItem(wxListItem& info)
|
|||||||
// check whether it has any custom attributes
|
// check whether it has any custom attributes
|
||||||
if ( info.HasAttributes() )
|
if ( info.HasAttributes() )
|
||||||
{
|
{
|
||||||
|
|
||||||
wxListItemAttr *attr;
|
wxListItemAttr *attr;
|
||||||
attr = (wxListItemAttr*) m_attrs.Get(item.iItem);
|
attr = (wxListItemAttr*) m_attrs.Get(item.iItem);
|
||||||
|
|
||||||
if (attr == NULL)
|
if (attr == NULL)
|
||||||
|
|
||||||
m_attrs.Put(item.iItem, (wxObject *)new wxListItemAttr(*info.GetAttributes()));
|
m_attrs.Put(item.iItem, (wxObject *)new wxListItemAttr(*info.GetAttributes()));
|
||||||
|
|
||||||
else *attr = *info.GetAttributes();
|
else *attr = *info.GetAttributes();
|
||||||
|
|
||||||
m_hasAnyAttr = TRUE;
|
m_hasAnyAttr = TRUE;
|
||||||
@@ -1674,6 +1686,73 @@ wxChar *wxListCtrl::AddPool(const wxString& str)
|
|||||||
return (wxChar *)node->Data();
|
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
|
// wxListItem
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user