Add wxDataViewTreeStore with sample
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49168 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
a3261ffb75
commit
e94d0c1e66
@ -77,6 +77,10 @@ public:
|
|||||||
void* GetID() const { return m_id; }
|
void* GetID() const { return m_id; }
|
||||||
operator const void* () const { return m_id; }
|
operator const void* () const { return m_id; }
|
||||||
|
|
||||||
|
#ifdef __WXDEBUG__
|
||||||
|
void Print( const wxString &text ) const { wxPrintf( "item %s: %d\n", text, (int) m_id ); }
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void* m_id;
|
void* m_id;
|
||||||
};
|
};
|
||||||
@ -225,33 +229,6 @@ private:
|
|||||||
unsigned int m_lastIndex;
|
unsigned int m_lastIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDataViewTreeStore
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
class wxDataViewTreeStore: public wxDataViewModel
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
wxDataViewTreeStore();
|
|
||||||
~wxDataViewTreeStore();
|
|
||||||
|
|
||||||
void AddColumn( const wxString &variant_type );
|
|
||||||
|
|
||||||
wxDataViewItem AddItem( const wxDataViewItem& parent, const wxVariant &value );
|
|
||||||
wxDataViewItem AddContainer( const wxDataViewItem& parent, const wxVariant &value );
|
|
||||||
|
|
||||||
// implement base methods
|
|
||||||
|
|
||||||
virtual void GetValue( wxVariant &variant,
|
|
||||||
const wxDataViewItem &item, unsigned int col ) const;
|
|
||||||
virtual bool SetValue( const wxVariant &variant,
|
|
||||||
const wxDataViewItem &item, unsigned int col );
|
|
||||||
virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const;
|
|
||||||
virtual bool IsContainer( const wxDataViewItem &item ) const;
|
|
||||||
virtual unsigned int GetChildren( const wxDataViewItem &item, wxDataViewItemArray &children ) const;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxDataViewEditorCtrlEvtHandler
|
// wxDataViewEditorCtrlEvtHandler
|
||||||
@ -482,11 +459,11 @@ public:
|
|||||||
// short cuts
|
// short cuts
|
||||||
wxDataViewColumn *AppendTextColumn( const wxString &label, unsigned int model_column,
|
wxDataViewColumn *AppendTextColumn( const wxString &label, unsigned int model_column,
|
||||||
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
|
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
|
||||||
wxAlignment align = wxALIGN_CENTER,
|
wxAlignment align = wxALIGN_LEFT,
|
||||||
int flags = wxDATAVIEW_COL_RESIZABLE );
|
int flags = wxDATAVIEW_COL_RESIZABLE );
|
||||||
wxDataViewColumn *AppendIconTextColumn( const wxString &label, unsigned int model_column,
|
wxDataViewColumn *AppendIconTextColumn( const wxString &label, unsigned int model_column,
|
||||||
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
|
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
|
||||||
wxAlignment align = wxALIGN_CENTER,
|
wxAlignment align = wxALIGN_LEFT,
|
||||||
int flags = wxDATAVIEW_COL_RESIZABLE );
|
int flags = wxDATAVIEW_COL_RESIZABLE );
|
||||||
wxDataViewColumn *AppendToggleColumn( const wxString &label, unsigned int model_column,
|
wxDataViewColumn *AppendToggleColumn( const wxString &label, unsigned int model_column,
|
||||||
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
|
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
|
||||||
@ -498,7 +475,7 @@ public:
|
|||||||
int flags = wxDATAVIEW_COL_RESIZABLE );
|
int flags = wxDATAVIEW_COL_RESIZABLE );
|
||||||
wxDataViewColumn *AppendDateColumn( const wxString &label, unsigned int model_column,
|
wxDataViewColumn *AppendDateColumn( const wxString &label, unsigned int model_column,
|
||||||
wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
|
wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
|
||||||
wxAlignment align = wxALIGN_CENTER,
|
wxAlignment align = wxALIGN_LEFT,
|
||||||
int flags = wxDATAVIEW_COL_RESIZABLE );
|
int flags = wxDATAVIEW_COL_RESIZABLE );
|
||||||
wxDataViewColumn *AppendBitmapColumn( const wxString &label, unsigned int model_column,
|
wxDataViewColumn *AppendBitmapColumn( const wxString &label, unsigned int model_column,
|
||||||
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
|
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
|
||||||
@ -506,11 +483,11 @@ public:
|
|||||||
int flags = wxDATAVIEW_COL_RESIZABLE );
|
int flags = wxDATAVIEW_COL_RESIZABLE );
|
||||||
wxDataViewColumn *AppendTextColumn( const wxBitmap &label, unsigned int model_column,
|
wxDataViewColumn *AppendTextColumn( const wxBitmap &label, unsigned int model_column,
|
||||||
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
|
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
|
||||||
wxAlignment align = wxALIGN_CENTER,
|
wxAlignment align = wxALIGN_LEFT,
|
||||||
int flags = wxDATAVIEW_COL_RESIZABLE );
|
int flags = wxDATAVIEW_COL_RESIZABLE );
|
||||||
wxDataViewColumn *AppendIconTextColumn( const wxBitmap &label, unsigned int model_column,
|
wxDataViewColumn *AppendIconTextColumn( const wxBitmap &label, unsigned int model_column,
|
||||||
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
|
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
|
||||||
wxAlignment align = wxALIGN_CENTER,
|
wxAlignment align = wxALIGN_LEFT,
|
||||||
int flags = wxDATAVIEW_COL_RESIZABLE );
|
int flags = wxDATAVIEW_COL_RESIZABLE );
|
||||||
wxDataViewColumn *AppendToggleColumn( const wxBitmap &label, unsigned int model_column,
|
wxDataViewColumn *AppendToggleColumn( const wxBitmap &label, unsigned int model_column,
|
||||||
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
|
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
|
||||||
@ -522,7 +499,7 @@ public:
|
|||||||
int flags = wxDATAVIEW_COL_RESIZABLE );
|
int flags = wxDATAVIEW_COL_RESIZABLE );
|
||||||
wxDataViewColumn *AppendDateColumn( const wxBitmap &label, unsigned int model_column,
|
wxDataViewColumn *AppendDateColumn( const wxBitmap &label, unsigned int model_column,
|
||||||
wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
|
wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
|
||||||
wxAlignment align = wxALIGN_CENTER,
|
wxAlignment align = wxALIGN_LEFT,
|
||||||
int flags = wxDATAVIEW_COL_RESIZABLE );
|
int flags = wxDATAVIEW_COL_RESIZABLE );
|
||||||
|
|
||||||
wxDataViewColumn *AppendBitmapColumn( const wxBitmap &label, unsigned int model_column,
|
wxDataViewColumn *AppendBitmapColumn( const wxBitmap &label, unsigned int model_column,
|
||||||
@ -686,6 +663,169 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&);
|
|||||||
#include "wx/generic/dataview.h"
|
#include "wx/generic/dataview.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// wxDataViewTreeStore
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_ADV wxDataViewTreeStoreNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxDataViewTreeStoreNode( wxDataViewTreeStoreNode *parent,
|
||||||
|
const wxString &text, const wxIcon &icon = wxNullIcon, wxClientData *data = NULL );
|
||||||
|
virtual ~wxDataViewTreeStoreNode();
|
||||||
|
|
||||||
|
void SetText( const wxString &text )
|
||||||
|
{ m_text = text; }
|
||||||
|
wxString GetText() const
|
||||||
|
{ return m_text; }
|
||||||
|
void SetIcon( const wxIcon &icon )
|
||||||
|
{ m_icon = icon; }
|
||||||
|
const wxIcon &GetIcon() const
|
||||||
|
{ return m_icon; }
|
||||||
|
void SetData( wxClientData *data )
|
||||||
|
{ if (m_data) delete m_data; m_data = data; }
|
||||||
|
wxClientData *GetData() const
|
||||||
|
{ return m_data; }
|
||||||
|
|
||||||
|
wxDataViewItem GetItem() const
|
||||||
|
{ return wxDataViewItem( (void*) this ); }
|
||||||
|
|
||||||
|
virtual bool IsContainer()
|
||||||
|
{ return false; }
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNode *GetParent()
|
||||||
|
{ return m_parent; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxDataViewTreeStoreNode *m_parent;
|
||||||
|
wxString m_text;
|
||||||
|
wxIcon m_icon;
|
||||||
|
wxClientData *m_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
WX_DECLARE_LIST_WITH_DECL(wxDataViewTreeStoreNode, wxDataViewTreeStoreNodeList,
|
||||||
|
class WXDLLIMPEXP_ADV);
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_ADV wxDataViewTreeStoreContainerNode: public wxDataViewTreeStoreNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxDataViewTreeStoreContainerNode( wxDataViewTreeStoreNode *parent,
|
||||||
|
const wxString &text, const wxIcon &icon = wxNullIcon, const wxIcon &expanded = wxNullIcon,
|
||||||
|
wxClientData *data = NULL );
|
||||||
|
virtual ~wxDataViewTreeStoreContainerNode();
|
||||||
|
|
||||||
|
const wxDataViewTreeStoreNodeList &GetChildren() const
|
||||||
|
{ return m_children; }
|
||||||
|
wxDataViewTreeStoreNodeList &GetChildren()
|
||||||
|
{ return m_children; }
|
||||||
|
|
||||||
|
void SetExpandedIcon( const wxIcon &icon )
|
||||||
|
{ m_iconExpanded = icon; }
|
||||||
|
const wxIcon &GetExpandedIcon() const
|
||||||
|
{ return m_iconExpanded; }
|
||||||
|
|
||||||
|
virtual bool IsContainer()
|
||||||
|
{ return true; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxDataViewTreeStoreNodeList m_children;
|
||||||
|
wxIcon m_iconExpanded;
|
||||||
|
};
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_ADV wxDataViewTreeStore: public wxDataViewModel
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxDataViewTreeStore();
|
||||||
|
~wxDataViewTreeStore();
|
||||||
|
|
||||||
|
wxDataViewItem AppendItem( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, const wxIcon &icon = wxNullIcon, wxClientData *data = NULL );
|
||||||
|
wxDataViewItem PrependItem( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, const wxIcon &icon = wxNullIcon, wxClientData *data = NULL );
|
||||||
|
wxDataViewItem InsertItem( const wxDataViewItem& parent, const wxDataViewItem& previous,
|
||||||
|
const wxString &text, const wxIcon &icon = wxNullIcon, wxClientData *data = NULL );
|
||||||
|
|
||||||
|
wxDataViewItem PrependContainer( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, const wxIcon &icon = wxNullIcon, const wxIcon &expanded = wxNullIcon,
|
||||||
|
wxClientData *data = NULL );
|
||||||
|
wxDataViewItem AppendContainer( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, const wxIcon &icon = wxNullIcon, const wxIcon &expanded = wxNullIcon,
|
||||||
|
wxClientData *data = NULL );
|
||||||
|
wxDataViewItem InsertContainer( const wxDataViewItem& parent, const wxDataViewItem& previous,
|
||||||
|
const wxString &text, const wxIcon &icon = wxNullIcon, const wxIcon &expanded = wxNullIcon,
|
||||||
|
wxClientData *data = NULL );
|
||||||
|
|
||||||
|
wxDataViewItem GetNthChild( const wxDataViewItem& parent, unsigned int pos ) const;
|
||||||
|
int GetChildCount( const wxDataViewItem& parent ) const;
|
||||||
|
|
||||||
|
void SetItemText( const wxDataViewItem& item, const wxString &text );
|
||||||
|
wxString GetItemText( const wxDataViewItem& item ) const;
|
||||||
|
void SetItemIcon( const wxDataViewItem& item, const wxIcon &icon );
|
||||||
|
const wxIcon &GetItemIcon( const wxDataViewItem& item ) const;
|
||||||
|
void SetItemExpandedIcon( const wxDataViewItem& item, const wxIcon &icon );
|
||||||
|
const wxIcon &GetItemExpandedIcon( const wxDataViewItem& item ) const;
|
||||||
|
void SetItemData( const wxDataViewItem& item, wxClientData *data );
|
||||||
|
wxClientData *GetItemData( const wxDataViewItem& item ) const;
|
||||||
|
|
||||||
|
void DeleteItem( const wxDataViewItem& item );
|
||||||
|
void DeleteChildren( const wxDataViewItem& item );
|
||||||
|
void DeleteAllItems();
|
||||||
|
|
||||||
|
// implement base methods
|
||||||
|
|
||||||
|
virtual void GetValue( wxVariant &variant,
|
||||||
|
const wxDataViewItem &item, unsigned int col ) const;
|
||||||
|
virtual bool SetValue( const wxVariant &variant,
|
||||||
|
const wxDataViewItem &item, unsigned int col );
|
||||||
|
virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const;
|
||||||
|
virtual bool IsContainer( const wxDataViewItem &item ) const;
|
||||||
|
virtual unsigned int GetChildren( const wxDataViewItem &item, wxDataViewItemArray &children ) const;
|
||||||
|
|
||||||
|
virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2,
|
||||||
|
unsigned int column, bool ascending );
|
||||||
|
|
||||||
|
virtual bool HasDefaultCompare() const
|
||||||
|
{ return true; }
|
||||||
|
virtual unsigned int GetColumnCount() const
|
||||||
|
{ return 1; };
|
||||||
|
virtual wxString GetColumnType( unsigned int WXUNUSED(col) ) const
|
||||||
|
{ return "wxDataViewIconText"; }
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNode *FindNode( const wxDataViewItem &item ) const;
|
||||||
|
wxDataViewTreeStoreContainerNode *FindContainerNode( const wxDataViewItem &item ) const;
|
||||||
|
wxDataViewTreeStoreNode *GetRoot() const { return m_root; }
|
||||||
|
|
||||||
|
public:
|
||||||
|
wxDataViewTreeStoreNode *m_root;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
class WXDLLIMPEXP_ADV wxDataViewTreeCtrl: public wxDataViewCtrl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxDataViewCtrl( wxWindow *parent, wxWindowID id,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize, long style = wxDV_NO_HEADER,
|
||||||
|
const wxValidator& validator = wxDefaultValidator );
|
||||||
|
|
||||||
|
bool Create( wxWindow *parent, wxWindowID id,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize, long style = wxDV_NO_HEADER,
|
||||||
|
const wxValidator& validator = wxDefaultValidator );
|
||||||
|
|
||||||
|
wxDataViewTreeStore *GetStore()
|
||||||
|
{ return (wxDataViewTreeStore*) GetModel(); }
|
||||||
|
|
||||||
|
void OnExpand( wxDataViewCtrl &event );
|
||||||
|
void OnCollapse( wxDataViewCtrl &event );
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDataViewTreeCtrl)
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // wxUSE_DATAVIEWCTRL
|
#endif // wxUSE_DATAVIEWCTRL
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -487,12 +487,14 @@ public:
|
|||||||
class MyFrame : public wxFrame
|
class MyFrame : public wxFrame
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h);
|
MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int h);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void OnQuit(wxCommandEvent& event);
|
void OnQuit(wxCommandEvent& event);
|
||||||
void OnAbout(wxCommandEvent& event);
|
void OnAbout(wxCommandEvent& event);
|
||||||
|
|
||||||
|
void OnTestTreeCtrl(wxCommandEvent& event);
|
||||||
|
|
||||||
void OnAddMozart(wxCommandEvent& event);
|
void OnAddMozart(wxCommandEvent& event);
|
||||||
void OnDeleteMusic(wxCommandEvent& event);
|
void OnDeleteMusic(wxCommandEvent& event);
|
||||||
|
|
||||||
@ -570,6 +572,8 @@ enum
|
|||||||
ID_ABOUT = wxID_ABOUT,
|
ID_ABOUT = wxID_ABOUT,
|
||||||
ID_EXIT = wxID_EXIT,
|
ID_EXIT = wxID_EXIT,
|
||||||
|
|
||||||
|
ID_TEST_TREECTRL = 40,
|
||||||
|
|
||||||
ID_MUSIC_CTRL = 50,
|
ID_MUSIC_CTRL = 50,
|
||||||
|
|
||||||
ID_ADD_MOZART = 100,
|
ID_ADD_MOZART = 100,
|
||||||
@ -582,6 +586,7 @@ enum
|
|||||||
|
|
||||||
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
||||||
EVT_MENU( ID_ABOUT, MyFrame::OnAbout )
|
EVT_MENU( ID_ABOUT, MyFrame::OnAbout )
|
||||||
|
EVT_MENU( ID_TEST_TREECTRL, MyFrame::OnTestTreeCtrl )
|
||||||
EVT_MENU( ID_EXIT, MyFrame::OnQuit )
|
EVT_MENU( ID_EXIT, MyFrame::OnQuit )
|
||||||
EVT_BUTTON( ID_ADD_MOZART, MyFrame::OnAddMozart )
|
EVT_BUTTON( ID_ADD_MOZART, MyFrame::OnAddMozart )
|
||||||
EVT_BUTTON( ID_DELETE_MUSIC, MyFrame::OnDeleteMusic )
|
EVT_BUTTON( ID_DELETE_MUSIC, MyFrame::OnDeleteMusic )
|
||||||
@ -608,7 +613,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_RIGHT_UP(MyFrame::OnRightClick)
|
EVT_RIGHT_UP(MyFrame::OnRightClick)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
|
MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int h):
|
||||||
wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
|
wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
|
||||||
{
|
{
|
||||||
m_log = NULL;
|
m_log = NULL;
|
||||||
@ -621,6 +626,8 @@ MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
|
|||||||
wxMenu *file_menu = new wxMenu;
|
wxMenu *file_menu = new wxMenu;
|
||||||
file_menu->Append(ID_ABOUT, "&About");
|
file_menu->Append(ID_ABOUT, "&About");
|
||||||
file_menu->AppendSeparator();
|
file_menu->AppendSeparator();
|
||||||
|
file_menu->Append(ID_TEST_TREECTRL, "Test &Treectrl");
|
||||||
|
file_menu->AppendSeparator();
|
||||||
file_menu->Append(ID_EXIT, "E&xit");
|
file_menu->Append(ID_EXIT, "E&xit");
|
||||||
|
|
||||||
wxMenuBar *menu_bar = new wxMenuBar;
|
wxMenuBar *menu_bar = new wxMenuBar;
|
||||||
@ -703,6 +710,69 @@ void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
|
|||||||
Close(true);
|
Close(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* XPM */
|
||||||
|
static char *small1_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 16 6 1",
|
||||||
|
". c Black",
|
||||||
|
"o c #FFFFFF",
|
||||||
|
"X c #000080",
|
||||||
|
"O c #FFFF00",
|
||||||
|
" c None",
|
||||||
|
"+ c #FF0000",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ....... ",
|
||||||
|
" .XXXXX. ",
|
||||||
|
" .oXXXX. ",
|
||||||
|
" .oXXX.......",
|
||||||
|
".....oXXX.OOOOO.",
|
||||||
|
".+++.XXXX.oOOOO.",
|
||||||
|
".o++......oOOOO.",
|
||||||
|
".o++++. .oOOOO.",
|
||||||
|
".o++++. .OOOOO.",
|
||||||
|
".+++++. .......",
|
||||||
|
"....... ",
|
||||||
|
" ",
|
||||||
|
" "
|
||||||
|
};
|
||||||
|
|
||||||
|
void MyFrame::OnTestTreeCtrl(wxCommandEvent& WXUNUSED(event) )
|
||||||
|
{
|
||||||
|
wxDialog dialog( this, -1, "Test wxDataViewTreeStore" );
|
||||||
|
|
||||||
|
wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
wxDataViewCtrl *treectrl = new wxDataViewCtrl( &dialog, -1,
|
||||||
|
wxDefaultPosition, wxSize(300,200), wxDV_NO_HEADER );
|
||||||
|
treectrl->AppendIconTextColumn( "no label", 0 );
|
||||||
|
|
||||||
|
main_sizer->Add( treectrl );
|
||||||
|
|
||||||
|
wxDataViewTreeStore *store = new wxDataViewTreeStore;
|
||||||
|
wxDataViewItem parent = store->AppendContainer( wxDataViewItem(0), "Root 1", wxIcon(small1_xpm) );
|
||||||
|
wxDataViewItem child = store->AppendContainer( parent, "Child 1", wxIcon(small1_xpm) );
|
||||||
|
child = store->AppendContainer( parent, "Child 1", wxIcon(small1_xpm) );
|
||||||
|
child = store->AppendContainer( parent, "Child 2", wxIcon(small1_xpm) );
|
||||||
|
child = store->AppendContainer( parent, "Child 3", wxIcon(small1_xpm) );
|
||||||
|
|
||||||
|
treectrl->AssociateModel( store );
|
||||||
|
|
||||||
|
store->DecRef();
|
||||||
|
|
||||||
|
wxSizer *button_sizer = dialog.CreateButtonSizer( wxOK );
|
||||||
|
if (button_sizer)
|
||||||
|
main_sizer->Add( button_sizer, 0, wxGROW );
|
||||||
|
|
||||||
|
dialog.SetSizer( main_sizer );
|
||||||
|
main_sizer->Fit( &dialog );
|
||||||
|
|
||||||
|
dialog.ShowModal();
|
||||||
|
}
|
||||||
|
|
||||||
void MyFrame::OnAddMozart(wxCommandEvent& WXUNUSED(event) )
|
void MyFrame::OnAddMozart(wxCommandEvent& WXUNUSED(event) )
|
||||||
{
|
{
|
||||||
m_music_model->AddToClassical( "Kleine Nachtmusik", "Wolfgang Mozart", 1787 );
|
m_music_model->AddToClassical( "Kleine Nachtmusik", "Wolfgang Mozart", 1787 );
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
|
#include "wx/icon.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const wxChar wxDataViewCtrlNameStr[] = wxT("dataviewCtrl");
|
const wxChar wxDataViewCtrlNameStr[] = wxT("dataviewCtrl");
|
||||||
@ -830,5 +831,392 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK)
|
|||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED)
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// wxDataViewTreeStore
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNode::wxDataViewTreeStoreNode(
|
||||||
|
wxDataViewTreeStoreNode *parent,
|
||||||
|
const wxString &text, const wxIcon &icon, wxClientData *data )
|
||||||
|
{
|
||||||
|
m_parent = parent;
|
||||||
|
m_text = text;
|
||||||
|
m_icon = icon;
|
||||||
|
m_data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNode::~wxDataViewTreeStoreNode()
|
||||||
|
{
|
||||||
|
if (m_data)
|
||||||
|
delete m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "wx/listimpl.cpp"
|
||||||
|
WX_DEFINE_LIST(wxDataViewTreeStoreNodeList);
|
||||||
|
|
||||||
|
wxDataViewTreeStoreContainerNode::wxDataViewTreeStoreContainerNode(
|
||||||
|
wxDataViewTreeStoreNode *parent, const wxString &text,
|
||||||
|
const wxIcon &icon, const wxIcon &expanded, wxClientData *data ) :
|
||||||
|
wxDataViewTreeStoreNode( parent, text, icon, data )
|
||||||
|
{
|
||||||
|
m_iconExpanded = expanded;
|
||||||
|
m_children.DeleteContents(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewTreeStoreContainerNode::~wxDataViewTreeStoreContainerNode()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxDataViewTreeStore::wxDataViewTreeStore()
|
||||||
|
{
|
||||||
|
m_root = new wxDataViewTreeStoreContainerNode( NULL, wxEmptyString );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewTreeStore::~wxDataViewTreeStore()
|
||||||
|
{
|
||||||
|
delete m_root;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeStore::AppendItem( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, const wxIcon &icon, wxClientData *data )
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreContainerNode *parent_node = FindContainerNode( parent );
|
||||||
|
if (!parent_node) return wxDataViewItem(0);
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNode *node =
|
||||||
|
new wxDataViewTreeStoreNode( parent_node, text, icon, data );
|
||||||
|
parent_node->GetChildren().Append( node );
|
||||||
|
|
||||||
|
// notify control
|
||||||
|
ItemAdded( parent, node->GetItem() );
|
||||||
|
|
||||||
|
return node->GetItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeStore::PrependItem( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, const wxIcon &icon, wxClientData *data )
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreContainerNode *parent_node = FindContainerNode( parent );
|
||||||
|
if (!parent_node) return wxDataViewItem(0);
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNode *node =
|
||||||
|
new wxDataViewTreeStoreNode( parent_node, text, icon, data );
|
||||||
|
parent_node->GetChildren().Insert( node );
|
||||||
|
|
||||||
|
// notify control
|
||||||
|
ItemAdded( parent, node->GetItem() );
|
||||||
|
|
||||||
|
return node->GetItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeStore::InsertItem( const wxDataViewItem& parent, const wxDataViewItem& previous,
|
||||||
|
const wxString &text, const wxIcon &icon, wxClientData *data )
|
||||||
|
{
|
||||||
|
return wxDataViewItem(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeStore::PrependContainer( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, const wxIcon &icon, const wxIcon &expanded,
|
||||||
|
wxClientData *data )
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreContainerNode *parent_node = FindContainerNode( parent );
|
||||||
|
if (!parent_node) return wxDataViewItem(0);
|
||||||
|
|
||||||
|
wxDataViewTreeStoreContainerNode *node =
|
||||||
|
new wxDataViewTreeStoreContainerNode( parent_node, text, icon, expanded, data );
|
||||||
|
parent_node->GetChildren().Insert( node );
|
||||||
|
|
||||||
|
// notify control
|
||||||
|
ItemAdded( parent, node->GetItem() );
|
||||||
|
|
||||||
|
return node->GetItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeStore::AppendContainer( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, const wxIcon &icon, const wxIcon &expanded,
|
||||||
|
wxClientData *data )
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreContainerNode *parent_node = FindContainerNode( parent );
|
||||||
|
if (!parent_node) return wxDataViewItem(0);
|
||||||
|
|
||||||
|
wxDataViewTreeStoreContainerNode *node =
|
||||||
|
new wxDataViewTreeStoreContainerNode( parent_node, text, icon, expanded, data );
|
||||||
|
parent_node->GetChildren().Append( node );
|
||||||
|
|
||||||
|
// notify control
|
||||||
|
ItemAdded( parent, node->GetItem() );
|
||||||
|
|
||||||
|
return node->GetItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeStore::InsertContainer( const wxDataViewItem& parent, const wxDataViewItem& previous,
|
||||||
|
const wxString &text, const wxIcon &icon, const wxIcon &expanded,
|
||||||
|
wxClientData *data )
|
||||||
|
{
|
||||||
|
return wxDataViewItem(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeStore::GetNthChild( const wxDataViewItem& parent, unsigned int pos ) const
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreContainerNode *parent_node = FindContainerNode( parent );
|
||||||
|
if (!parent_node) return wxDataViewItem(0);
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNodeList::compatibility_iterator node = parent_node->GetChildren().Item( pos );
|
||||||
|
if (node)
|
||||||
|
return node->GetData();
|
||||||
|
|
||||||
|
return wxDataViewItem(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxDataViewTreeStore::GetChildCount( const wxDataViewItem& parent ) const
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode *node = FindNode( parent );
|
||||||
|
if (!node) return -1;
|
||||||
|
|
||||||
|
if (!node->IsContainer())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
wxDataViewTreeStoreContainerNode *container_node = (wxDataViewTreeStoreContainerNode*) node;
|
||||||
|
return (int) container_node->GetChildren().GetCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataViewTreeStore::SetItemText( const wxDataViewItem& item, const wxString &text )
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode *node = FindNode( item );
|
||||||
|
if (!node) return;
|
||||||
|
|
||||||
|
node->SetText( text );
|
||||||
|
|
||||||
|
// notify control
|
||||||
|
ValueChanged( item, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxDataViewTreeStore::GetItemText( const wxDataViewItem& item ) const
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode *node = FindNode( item );
|
||||||
|
if (!node) return wxEmptyString;
|
||||||
|
|
||||||
|
return node->GetText();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataViewTreeStore::SetItemIcon( const wxDataViewItem& item, const wxIcon &icon )
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode *node = FindNode( item );
|
||||||
|
if (!node) return;
|
||||||
|
|
||||||
|
node->SetIcon( icon );
|
||||||
|
|
||||||
|
// notify control
|
||||||
|
ValueChanged( item, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
const wxIcon &wxDataViewTreeStore::GetItemIcon( const wxDataViewItem& item ) const
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode *node = FindNode( item );
|
||||||
|
if (!node) return wxNullIcon;
|
||||||
|
|
||||||
|
return node->GetIcon();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataViewTreeStore::SetItemExpandedIcon( const wxDataViewItem& item, const wxIcon &icon )
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreContainerNode *node = FindContainerNode( item );
|
||||||
|
if (!node) return;
|
||||||
|
|
||||||
|
node->SetExpandedIcon( icon );
|
||||||
|
|
||||||
|
// notify control
|
||||||
|
ValueChanged( item, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
const wxIcon &wxDataViewTreeStore::GetItemExpandedIcon( const wxDataViewItem& item ) const
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreContainerNode *node = FindContainerNode( item );
|
||||||
|
if (!node) return wxNullIcon;
|
||||||
|
|
||||||
|
return node->GetExpandedIcon();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataViewTreeStore::SetItemData( const wxDataViewItem& item, wxClientData *data )
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode *node = FindNode( item );
|
||||||
|
if (!node) return;
|
||||||
|
|
||||||
|
node->SetData( data );
|
||||||
|
|
||||||
|
// notify control? only sensible when sorting on client data
|
||||||
|
// ValueChanged( item, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxClientData *wxDataViewTreeStore::GetItemData( const wxDataViewItem& item ) const
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode *node = FindNode( item );
|
||||||
|
if (!node) return NULL;
|
||||||
|
|
||||||
|
return node->GetData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataViewTreeStore::DeleteItem( const wxDataViewItem& item )
|
||||||
|
{
|
||||||
|
if (!item.IsOk()) return;
|
||||||
|
|
||||||
|
wxDataViewItem parent_item = GetParent( item );
|
||||||
|
|
||||||
|
wxDataViewTreeStoreContainerNode *parent_node = FindContainerNode( parent_item );
|
||||||
|
if (!parent_node) return;
|
||||||
|
|
||||||
|
wxDataViewTreeStoreContainerNode *node = FindContainerNode( item );
|
||||||
|
if (!node) return;
|
||||||
|
|
||||||
|
parent_node->GetChildren().DeleteObject( node );
|
||||||
|
|
||||||
|
// notify control
|
||||||
|
ItemDeleted( parent_item, item );
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataViewTreeStore::DeleteChildren( const wxDataViewItem& item )
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreContainerNode *node = FindContainerNode( item );
|
||||||
|
if (!node) return;
|
||||||
|
|
||||||
|
wxDataViewItemArray array;
|
||||||
|
wxDataViewTreeStoreNodeList::iterator iter;
|
||||||
|
for (iter = node->GetChildren().begin(); iter != node->GetChildren().end(); iter++)
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode* child = *iter;
|
||||||
|
array.Add( child->GetItem() );
|
||||||
|
}
|
||||||
|
|
||||||
|
node->GetChildren().clear();
|
||||||
|
|
||||||
|
// notify control
|
||||||
|
ItemsDeleted( item, array );
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataViewTreeStore::DeleteAllItems()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataViewTreeStore::GetValue( wxVariant &variant,
|
||||||
|
const wxDataViewItem &item, unsigned int col ) const
|
||||||
|
{
|
||||||
|
// if (col != 0) return;
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNode *node = FindNode( item );
|
||||||
|
if (!node) return;
|
||||||
|
|
||||||
|
wxDataViewIconText data( node->GetText(), node->GetIcon() );
|
||||||
|
|
||||||
|
variant << data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxDataViewTreeStore::SetValue( const wxVariant &variant,
|
||||||
|
const wxDataViewItem &item, unsigned int col )
|
||||||
|
{
|
||||||
|
// if (col != 0) return false;
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNode *node = FindNode( item );
|
||||||
|
if (!node) return false;
|
||||||
|
|
||||||
|
wxDataViewIconText data;
|
||||||
|
|
||||||
|
data << variant;
|
||||||
|
|
||||||
|
node->SetText( data.GetText() );
|
||||||
|
node->SetIcon( data.GetIcon() );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeStore::GetParent( const wxDataViewItem &item ) const
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode *node = FindNode( item );
|
||||||
|
if (!node) return wxDataViewItem(0);
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNode *parent = node->GetParent();
|
||||||
|
if (!parent) return wxDataViewItem(0);
|
||||||
|
|
||||||
|
if (parent == m_root)
|
||||||
|
return wxDataViewItem(0);
|
||||||
|
|
||||||
|
return parent->GetItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxDataViewTreeStore::IsContainer( const wxDataViewItem &item ) const
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode *node = FindNode( item );
|
||||||
|
if (!node) return false;
|
||||||
|
|
||||||
|
return node->IsContainer();
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int wxDataViewTreeStore::GetChildren( const wxDataViewItem &item, wxDataViewItemArray &children ) const
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreContainerNode *node = FindContainerNode( item );
|
||||||
|
if (!node) return 0;
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNodeList::iterator iter;
|
||||||
|
for (iter = node->GetChildren().begin(); iter != node->GetChildren().end(); iter++)
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode* child = *iter;
|
||||||
|
children.Add( child->GetItem() );
|
||||||
|
}
|
||||||
|
|
||||||
|
return node->GetChildren().GetCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxDataViewTreeStore::Compare( const wxDataViewItem &item1, const wxDataViewItem &item2,
|
||||||
|
unsigned int WXUNUSED(column), bool WXUNUSED(ascending) )
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreNode *node1 = FindNode( item1 );
|
||||||
|
wxDataViewTreeStoreNode *node2 = FindNode( item2 );
|
||||||
|
|
||||||
|
if (!node1 || !node2)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
wxDataViewTreeStoreContainerNode* parent1 =
|
||||||
|
(wxDataViewTreeStoreContainerNode*) node1->GetParent();
|
||||||
|
wxDataViewTreeStoreContainerNode* parent2 =
|
||||||
|
(wxDataViewTreeStoreContainerNode*) node2->GetParent();
|
||||||
|
|
||||||
|
if (parent1 != parent2)
|
||||||
|
{
|
||||||
|
wxLogError( wxT("Comparing items with different parent.") );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node1->IsContainer() && !!node2->IsContainer())
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (node2->IsContainer() && !!node1->IsContainer())
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return parent1->GetChildren().IndexOf( node1 ) - parent1->GetChildren().IndexOf( node2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNode *wxDataViewTreeStore::FindNode( const wxDataViewItem &item ) const
|
||||||
|
{
|
||||||
|
if (!item.IsOk())
|
||||||
|
return m_root;
|
||||||
|
|
||||||
|
return (wxDataViewTreeStoreNode*) item.GetID();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewTreeStoreContainerNode *wxDataViewTreeStore::FindContainerNode( const wxDataViewItem &item ) const
|
||||||
|
{
|
||||||
|
if (!item.IsOk())
|
||||||
|
return (wxDataViewTreeStoreContainerNode*) m_root;
|
||||||
|
|
||||||
|
wxDataViewTreeStoreNode* node = (wxDataViewTreeStoreNode*) item.GetID();
|
||||||
|
|
||||||
|
if (!node->IsContainer())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return (wxDataViewTreeStoreContainerNode*) node;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -467,7 +467,8 @@ wxgtk_tree_model_get_column_type (GtkTreeModel *tree_model,
|
|||||||
gtype = G_TYPE_STRING;
|
gtype = G_TYPE_STRING;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( _T("non-string columns not supported yet") );
|
gtype = G_TYPE_STRING;
|
||||||
|
// wxFAIL_MSG( _T("non-string columns not supported yet") );
|
||||||
}
|
}
|
||||||
|
|
||||||
return gtype;
|
return gtype;
|
||||||
@ -2606,6 +2607,7 @@ gboolean wxDataViewCtrlInternal::iter_children( GtkTreeIter *iter, GtkTreeIter *
|
|||||||
gboolean wxDataViewCtrlInternal::iter_has_child( GtkTreeIter *iter )
|
gboolean wxDataViewCtrlInternal::iter_has_child( GtkTreeIter *iter )
|
||||||
{
|
{
|
||||||
wxDataViewItem item( (void*) iter->user_data );
|
wxDataViewItem item( (void*) iter->user_data );
|
||||||
|
|
||||||
bool is_container = m_wx_model->IsContainer( item );
|
bool is_container = m_wx_model->IsContainer( item );
|
||||||
|
|
||||||
if (!is_container)
|
if (!is_container)
|
||||||
@ -2673,6 +2675,7 @@ wxDataViewCtrlInternal_FindNode( wxDataViewModel * model, wxGtkTreeModelNode *tr
|
|||||||
ItemList list;
|
ItemList list;
|
||||||
list.DeleteContents( true );
|
list.DeleteContents( true );
|
||||||
wxDataViewItem it( item );
|
wxDataViewItem it( item );
|
||||||
|
|
||||||
while( it.IsOk() )
|
while( it.IsOk() )
|
||||||
{
|
{
|
||||||
wxDataViewItem * pItem = new wxDataViewItem( it );
|
wxDataViewItem * pItem = new wxDataViewItem( it );
|
||||||
|
Loading…
Reference in New Issue
Block a user