Add wxObjectDataPtr::release()
This makes it possible to use wxObjectDataPtr inside functions returning raw pointers owned by the caller, such as custom GetAttr() in the grid sample.
This commit is contained in:
@@ -313,6 +313,13 @@ public:
|
|||||||
m_ptr = ptr;
|
m_ptr = ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
T* release()
|
||||||
|
{
|
||||||
|
T* const ptr = m_ptr;
|
||||||
|
m_ptr = NULL;
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
wxObjectDataPtr& operator=(const wxObjectDataPtr &tocopy)
|
wxObjectDataPtr& operator=(const wxObjectDataPtr &tocopy)
|
||||||
{
|
{
|
||||||
if (m_ptr)
|
if (m_ptr)
|
||||||
|
@@ -608,6 +608,21 @@ public:
|
|||||||
*/
|
*/
|
||||||
void reset(T *ptr);
|
void reset(T *ptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Release the owned pointer, making caller responsible for decrementing
|
||||||
|
its reference count.
|
||||||
|
|
||||||
|
This method should be used only for interoperating with the existing
|
||||||
|
code working with raw pointers, typically when returning a raw pointer
|
||||||
|
from a function.
|
||||||
|
|
||||||
|
After calling this function, this object becomes invalid, i.e. it
|
||||||
|
doesn't hold any valid pointer value any more.
|
||||||
|
|
||||||
|
@since 3.1.4
|
||||||
|
*/
|
||||||
|
T* release();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Conversion to a boolean expression (in a variant which is not
|
Conversion to a boolean expression (in a variant which is not
|
||||||
convertable to anything but a boolean expression).
|
convertable to anything but a boolean expression).
|
||||||
|
@@ -1596,41 +1596,34 @@ void GridFrame::OnBugsTable(wxCommandEvent& )
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
MyGridCellAttrProvider::MyGridCellAttrProvider()
|
MyGridCellAttrProvider::MyGridCellAttrProvider()
|
||||||
|
: m_attrForOddRows(new wxGridCellAttr)
|
||||||
{
|
{
|
||||||
m_attrForOddRows = new wxGridCellAttr;
|
|
||||||
m_attrForOddRows->SetBackgroundColour(*wxLIGHT_GREY);
|
m_attrForOddRows->SetBackgroundColour(*wxLIGHT_GREY);
|
||||||
}
|
}
|
||||||
|
|
||||||
MyGridCellAttrProvider::~MyGridCellAttrProvider()
|
|
||||||
{
|
|
||||||
m_attrForOddRows->DecRef();
|
|
||||||
}
|
|
||||||
|
|
||||||
wxGridCellAttr *MyGridCellAttrProvider::GetAttr(int row, int col,
|
wxGridCellAttr *MyGridCellAttrProvider::GetAttr(int row, int col,
|
||||||
wxGridCellAttr::wxAttrKind kind /* = wxGridCellAttr::Any */) const
|
wxGridCellAttr::wxAttrKind kind /* = wxGridCellAttr::Any */) const
|
||||||
{
|
{
|
||||||
wxGridCellAttr *attr = wxGridCellAttrProvider::GetAttr(row, col, kind);
|
wxObjectDataPtr<wxGridCellAttr>
|
||||||
|
attr(wxGridCellAttrProvider::GetAttr(row, col, kind));
|
||||||
|
|
||||||
if ( row % 2 )
|
if ( row % 2 )
|
||||||
{
|
{
|
||||||
if ( !attr )
|
if ( !attr )
|
||||||
{
|
{
|
||||||
attr = m_attrForOddRows;
|
attr = m_attrForOddRows;
|
||||||
attr->IncRef();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( !attr->HasBackgroundColour() )
|
if ( !attr->HasBackgroundColour() )
|
||||||
{
|
{
|
||||||
wxGridCellAttr *attrNew = attr->Clone();
|
attr = attr->Clone();
|
||||||
attr->DecRef();
|
|
||||||
attr = attrNew;
|
|
||||||
attr->SetBackgroundColour(*wxLIGHT_GREY);
|
attr->SetBackgroundColour(*wxLIGHT_GREY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return attr;
|
return attr.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridFrame::OnVTable(wxCommandEvent& )
|
void GridFrame::OnVTable(wxCommandEvent& )
|
||||||
|
@@ -296,13 +296,12 @@ class MyGridCellAttrProvider : public wxGridCellAttrProvider
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MyGridCellAttrProvider();
|
MyGridCellAttrProvider();
|
||||||
virtual ~MyGridCellAttrProvider();
|
|
||||||
|
|
||||||
virtual wxGridCellAttr *GetAttr(int row, int col,
|
virtual wxGridCellAttr *GetAttr(int row, int col,
|
||||||
wxGridCellAttr::wxAttrKind kind) const wxOVERRIDE;
|
wxGridCellAttr::wxAttrKind kind) const wxOVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxGridCellAttr *m_attrForOddRows;
|
wxObjectDataPtr<wxGridCellAttr> m_attrForOddRows;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user