Create model and column in wxDataViewTreeCtrl::Create(), not ctor.

Old code created the tree model and its unique built-in column only in
wxDataViewTreeCtrl ctor but not in Create(), meaning that the behaviour was
very different depending on whether you used base class ctor call or Create()
in a derived class. This was confusing and completely inconsistent with wx API
in which using the default ctor and Create() is supposed to always have
exactly the same effect as using non-default ctor so change this to create the
model in Create() so that it's always done.

Slightly update the documentation and also add wxDataViewTreeCtrl::Init() for
consistency.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62498 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-10-24 21:41:44 +00:00
parent bf68a18d3c
commit 43c64cc6c9
3 changed files with 66 additions and 56 deletions

View File

@@ -1327,17 +1327,27 @@ public:
class WXDLLIMPEXP_ADV wxDataViewTreeCtrl: public wxDataViewCtrl
{
public:
wxDataViewTreeCtrl();
wxDataViewTreeCtrl( wxWindow *parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = wxDV_NO_HEADER | wxDV_ROW_LINES,
const wxValidator& validator = wxDefaultValidator );
~wxDataViewTreeCtrl();
wxDataViewTreeCtrl() { Init(); }
wxDataViewTreeCtrl(wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDV_NO_HEADER | wxDV_ROW_LINES,
const wxValidator& validator = wxDefaultValidator)
{
Init();
bool Create( wxWindow *parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = wxDV_NO_HEADER | wxDV_ROW_LINES,
const wxValidator& validator = wxDefaultValidator );
Create(parent, id, pos, size, style, validator);
}
virtual ~wxDataViewTreeCtrl();
bool Create(wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDV_NO_HEADER | wxDV_ROW_LINES,
const wxValidator& validator = wxDefaultValidator);
wxDataViewTreeStore *GetStore()
{ return (wxDataViewTreeStore*) GetModel(); }
@@ -1392,7 +1402,12 @@ public:
void OnSize( wxSizeEvent &event );
private:
wxImageList *m_imageList;
void Init()
{
m_imageList = NULL;
}
wxImageList *m_imageList;
private:
DECLARE_EVENT_TABLE()

View File

@@ -1832,8 +1832,8 @@ public:
and forwards most of its API to that class.
Additionally, it uses a wxImageList to store a list of icons.
The main purpose of this class is to represent a possible replacement for
wxTreeCtrl.
The main purpose of this class is to provide a simple upgrade path for code
using wxTreeCtrl.
@beginStyleTable
See wxDataViewCtrl for the list of supported styles.
@@ -1856,12 +1856,14 @@ public:
wxDataViewTreeCtrl();
/**
Constructor. Calls Create().
Constructor.
Calls Create().
*/
wxDataViewTreeCtrl(wxWindow* parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDV_NO_HEADER,
long style = wxDV_NO_HEADER | wxDV_ROW_LINES,
const wxValidator& validator = wxDefaultValidator);
/**
@@ -1888,11 +1890,14 @@ public:
/**
Creates the control and a wxDataViewTreeStore as its internal model.
The default tree column created by this method is an editable column
using wxDataViewIconTextRenderer as its renderer.
*/
bool Create(wxWindow* parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDV_NO_HEADER,
long style = wxDV_NO_HEADER | wxDV_ROW_LINES,
const wxValidator& validator = wxDefaultValidator);
/**

View File

@@ -2011,40 +2011,30 @@ BEGIN_EVENT_TABLE(wxDataViewTreeCtrl,wxDataViewCtrl)
EVT_SIZE( wxDataViewTreeCtrl::OnSize )
END_EVENT_TABLE()
wxDataViewTreeCtrl::wxDataViewTreeCtrl()
{
m_imageList = NULL;
}
wxDataViewTreeCtrl::wxDataViewTreeCtrl( wxWindow *parent, wxWindowID id,
const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator )
{
m_imageList = NULL;
Create( parent, id, pos, size, style, validator );
wxDataViewTreeStore *store = new wxDataViewTreeStore;
AssociateModel( store );
store->DecRef();
AppendIconTextColumn(wxString(),0,wxDATAVIEW_CELL_INERT,-1);
}
wxDataViewTreeCtrl::~wxDataViewTreeCtrl()
{
if (m_imageList)
delete m_imageList;
delete m_imageList;
}
bool wxDataViewTreeCtrl::Create( wxWindow *parent, wxWindowID id,
const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator )
{
return wxDataViewCtrl::Create( parent, id, pos, size, style, validator );
if ( !wxDataViewCtrl::Create( parent, id, pos, size, style, validator ) )
return false;
// create the standard model and a column in the tree
wxDataViewTreeStore *store = new wxDataViewTreeStore;
AssociateModel( store );
store->DecRef();
AppendIconTextColumn(wxString(),0,wxDATAVIEW_CELL_EDITABLE,-1);
return true;
}
void wxDataViewTreeCtrl::SetImageList( wxImageList *imagelist )
{
if (m_imageList)
delete m_imageList;
delete m_imageList;
m_imageList = imagelist;
}