Added wxDataViewTreeCtrl

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50404 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2007-12-01 19:01:47 +00:00
parent 380740af5d
commit a75124d0da
6 changed files with 489 additions and 71 deletions

View File

@@ -34,6 +34,36 @@
#include "null.xpm"
/* XPM */
static const 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.",
".+++++. .......",
"....... ",
" ",
" "
};
#define DEFAULT_ALIGN wxALIGN_LEFT
#define DATAVIEW_DEFAULT_STYLE (wxDV_MULTIPLE|wxDV_HORIZ_RULES|wxDV_VERT_RULES)
@@ -327,7 +357,11 @@ class MyListModel: public wxDataViewIndexListModel
{
public:
MyListModel() :
wxDataViewIndexListModel( 100 )
#ifdef __WXMAC__
wxDataViewIndexListModel( 1000 )
#else
wxDataViewIndexListModel( 100000 )
#endif
{
unsigned int i;
for (i = 0; i < 100; i++)
@@ -380,7 +414,16 @@ public:
{
if (col==0)
{
variant = m_array[ row ];
if (row >= m_array.GetCount())
{
wxString str;
str.Printf( "row %d", row );
variant = str;
}
else
{
variant = m_array[ row ];
}
} else
if (col==1)
{
@@ -414,6 +457,9 @@ public:
{
if (col == 0)
{
if (row >= m_array.GetCount())
return false;
m_array[row] = variant.GetString();
return true;
}
@@ -449,8 +495,6 @@ public:
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
void OnTestTreeCtrl(wxCommandEvent& event);
void OnAddMozart(wxCommandEvent& event);
void OnDeleteMusic(wxCommandEvent& event);
void OnDeleteYear(wxCommandEvent& event);
@@ -529,8 +573,6 @@ enum
ID_ABOUT = wxID_ABOUT,
ID_EXIT = wxID_EXIT,
ID_TEST_TREECTRL = 40,
ID_MUSIC_CTRL = 50,
ID_ADD_MOZART = 100,
@@ -544,7 +586,6 @@ enum
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU( ID_ABOUT, MyFrame::OnAbout )
EVT_MENU( ID_TEST_TREECTRL, MyFrame::OnTestTreeCtrl )
EVT_MENU( ID_EXIT, MyFrame::OnQuit )
EVT_BUTTON( ID_ADD_MOZART, MyFrame::OnAddMozart )
EVT_BUTTON( ID_DELETE_MUSIC, MyFrame::OnDeleteMusic )
@@ -585,8 +626,6 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int
wxMenu *file_menu = new wxMenu;
file_menu->Append(ID_ABOUT, "&About");
file_menu->AppendSeparator();
file_menu->Append(ID_TEST_TREECTRL, "Test &Treectrl");
file_menu->AppendSeparator();
file_menu->Append(ID_EXIT, "E&xit");
wxMenuBar *menu_bar = new wxMenuBar;
@@ -603,7 +642,7 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int
m_musicCtrl = new wxDataViewCtrl( this, ID_MUSIC_CTRL, wxDefaultPosition,
wxDefaultSize, wxDV_MULTIPLE );
m_music_model = new MyMusicModel;
m_musicCtrl->AssociateModel( m_music_model.get() );
@@ -658,58 +697,18 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int
button_sizer->Add( new wxButton( this, ID_GOTO, "Goto 50"), 0, wxALL, 10 );
main_sizer->Add( button_sizer, 0, wxGROW, 0 );
wxBoxSizer *bottom_sizer = new wxBoxSizer( wxHORIZONTAL );
m_log = new wxTextCtrl( this, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
m_logOld = wxLog::SetActiveTarget(new wxLogTextCtrl(m_log));
wxLogMessage("This is the log window");
main_sizer->Add( m_log, 1, wxGROW );
SetSizer( main_sizer );
}
bottom_sizer->Add( m_log, 1, wxGROW );
// wxDataViewTreeStore
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
{
Close(true);
}
/* XPM */
static const 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, wxString(wxT("Test wxDataViewTreeStore")));
wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
wxDataViewCtrl *treectrl = new wxDataViewCtrl( &dialog, -1,
wxDataViewCtrl *treectrl = new wxDataViewCtrl( this, -1,
wxDefaultPosition, wxSize(300,200), wxDV_NO_HEADER );
wxDataViewTreeStore *store = new wxDataViewTreeStore;
@@ -722,17 +721,30 @@ void MyFrame::OnTestTreeCtrl(wxCommandEvent& WXUNUSED(event) )
treectrl->AppendIconTextColumn( "no label", 0, wxDATAVIEW_CELL_INERT, 200 );
main_sizer->Add( treectrl, 1, wxGROW );
bottom_sizer->Add( treectrl );
wxSizer *button_sizer = dialog.CreateButtonSizer( wxOK );
if (button_sizer)
main_sizer->Add( button_sizer, 0, wxGROW|wxALL, 10 );
dialog.SetSizer( main_sizer );
main_sizer->Fit( &dialog );
// wxDataViewTreeCtrl
wxDataViewTreeCtrl *treectrl2 = new wxDataViewTreeCtrl( this, -1, wxDefaultPosition, wxSize(300,200) );
wxImageList *ilist = new wxImageList;
ilist->Add( wxIcon(small1_xpm) );
parent = treectrl2->AppendContainer( wxDataViewItem(0), "Root 1", 0 );
child = treectrl2->AppendItem( parent, "Child 1", 0 );
child = treectrl2->AppendItem( parent, "Child 2", 0 );
child = treectrl2->AppendItem( parent, "Child 3", 0 );
dialog.ShowModal();
bottom_sizer->Add( treectrl2 );
// main sizer
main_sizer->Add( bottom_sizer, 0, wxGROW );
SetSizer( main_sizer );
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
{
Close(true);
}
void MyFrame::OnAddMozart(wxCommandEvent& WXUNUSED(event) )