grid->SetCellAlignment(7, 1, wxALIGN_CENTRE, wxALIGN_CENTRE);
grid->SetCellValue(7, 1, _T("Big box!"));
+ // this does exactly nothing except testing that SetAttr() handles NULL
+ // attributes and does reference counting correctly
+ grid->SetAttr(11, 11, NULL);
+ grid->SetAttr(11, 11, new wxGridCellAttr);
+ grid->SetAttr(11, 11, NULL);
+
wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL );
topSizer->Add( grid,
1,
wxGridCellWithAttr(int row, int col, wxGridCellAttr *attr_)
: coords(row, col), attr(attr_)
{
+ wxASSERT( attr );
+ }
+
+ wxGridCellWithAttr(const wxGridCellWithAttr& other)
+ : coords(other.coords),
+ attr(other.attr)
+ {
+ attr->IncRef();
+ }
+
+ wxGridCellWithAttr& operator=(const wxGridCellWithAttr& other)
+ {
+ coords = other.coords;
+ attr->DecRef();
+ attr = other.attr;
+ attr->IncRef();
+
+ return *this;
}
~wxGridCellWithAttr()
wxGridCellCoords coords;
wxGridCellAttr *attr;
-
-// Cannot do this:
-// DECLARE_NO_COPY_CLASS(wxGridCellWithAttr)
-// without rewriting the macros, which require a public copy constructor.
};
WX_DECLARE_OBJARRAY_WITH_DECL(wxGridCellWithAttr, wxGridCellWithAttrArray,
}
//else: nothing to do
}
- else
+ else // we already have an attribute for this cell
{
- // free the old attribute
- m_attrs[(size_t)n].attr->DecRef();
-
if ( attr )
{
// change the attribute
else
{
// ...or remove the attribute
- // No need to DecRef the attribute itself since this is
- // done be wxGridCellWithAttr's destructor!
m_attrs.RemoveAt(n);
n--;
count--;
else
{
// ...or remove the attribute
- // No need to DecRef the attribute itself since this is
- // done be wxGridCellWithAttr's destructor!
m_attrs.RemoveAt(n);
n--;
count--;
{
if ( m_attrProvider )
{
- attr->SetKind(wxGridCellAttr::Cell);
+ if ( attr )
+ attr->SetKind(wxGridCellAttr::Cell);
m_attrProvider->SetAttr(attr, row, col);
}
else