Cleaned up/Fixed wxGrid{Cell,RowOrCol}AttrData::SetAttr, adding some comments.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54277 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -92,6 +92,17 @@ struct wxGridCellWithAttr
|
||||
return *this;
|
||||
}
|
||||
|
||||
void ChangeAttr(wxGridCellAttr* new_attr)
|
||||
{
|
||||
if (attr != new_attr)
|
||||
{
|
||||
// "Delete" (i.e. DecRef) the old attribute.
|
||||
attr->DecRef();
|
||||
attr = new_attr;
|
||||
// Take ownership of the new attribute, i.e. no IncRef.
|
||||
}
|
||||
}
|
||||
|
||||
~wxGridCellWithAttr()
|
||||
{
|
||||
attr->DecRef();
|
||||
@@ -2603,6 +2614,9 @@ wxGridCellEditor* wxGridCellAttr::GetEditor(const wxGrid* grid, int row, int col
|
||||
|
||||
void wxGridCellAttrData::SetAttr(wxGridCellAttr *attr, int row, int col)
|
||||
{
|
||||
// Note: contrary to wxGridRowOrColAttrData::SetAttr, we must not
|
||||
// touch attribute's reference counting explicitly, since this
|
||||
// is managed by class wxGridCellWithAttr
|
||||
int n = FindIndex(row, col);
|
||||
if ( n == wxNOT_FOUND )
|
||||
{
|
||||
@@ -2618,7 +2632,7 @@ void wxGridCellAttrData::SetAttr(wxGridCellAttr *attr, int row, int col)
|
||||
if ( attr )
|
||||
{
|
||||
// change the attribute
|
||||
m_attrs[(size_t)n].attr = attr;
|
||||
m_attrs[(size_t)n].ChangeAttr(attr);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2759,7 +2773,8 @@ void wxGridRowOrColAttrData::SetAttr(wxGridCellAttr *attr, int rowOrCol)
|
||||
{
|
||||
if ( attr )
|
||||
{
|
||||
// add the attribute
|
||||
// add the attribute - no need to do anything to reference count
|
||||
// since we take ownership of the attribute.
|
||||
m_rowsOrCols.Add(rowOrCol);
|
||||
m_attrs.Add(attr);
|
||||
}
|
||||
@@ -2773,13 +2788,14 @@ void wxGridRowOrColAttrData::SetAttr(wxGridCellAttr *attr, int rowOrCol)
|
||||
return;
|
||||
if ( attr )
|
||||
{
|
||||
// change the attribute
|
||||
// change the attribute, handling reference count manually,
|
||||
// taking ownership of the new attribute.
|
||||
m_attrs[n]->DecRef();
|
||||
m_attrs[n] = attr;
|
||||
}
|
||||
else
|
||||
{
|
||||
// remove this attribute
|
||||
// remove this attribute, handling reference count manually
|
||||
m_attrs[n]->DecRef();
|
||||
m_rowsOrCols.RemoveAt(n);
|
||||
m_attrs.RemoveAt(n);
|
||||
|
Reference in New Issue
Block a user