HitTest test added
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2097 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -46,55 +46,57 @@
 | 
				
			|||||||
                                          wxOK | wxICON_EXCLAMATION,        \
 | 
					                                          wxOK | wxICON_EXCLAMATION,        \
 | 
				
			||||||
                                          this);                            \
 | 
					                                          this);                            \
 | 
				
			||||||
                             return;                                        \
 | 
					                             return;                                        \
 | 
				
			||||||
                           }  
 | 
					                           }
 | 
				
			||||||
                                          
 | 
					
 | 
				
			||||||
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
 | 
					BEGIN_EVENT_TABLE(MyFrame, wxFrame)
 | 
				
			||||||
  EVT_MENU(TreeTest_Quit, MyFrame::OnQuit)
 | 
					    EVT_MENU(TreeTest_Quit, MyFrame::OnQuit)
 | 
				
			||||||
  EVT_MENU(TreeTest_About, MyFrame::OnAbout)
 | 
					    EVT_MENU(TreeTest_About, MyFrame::OnAbout)
 | 
				
			||||||
  EVT_MENU(TreeTest_Dump, MyFrame::OnDump)
 | 
					    EVT_MENU(TreeTest_Dump, MyFrame::OnDump)
 | 
				
			||||||
  EVT_MENU(TreeTest_Rename, MyFrame::OnRename)
 | 
					    EVT_MENU(TreeTest_Rename, MyFrame::OnRename)
 | 
				
			||||||
  EVT_MENU(TreeTest_Sort, MyFrame::OnSort)
 | 
					    EVT_MENU(TreeTest_Sort, MyFrame::OnSort)
 | 
				
			||||||
  EVT_MENU(TreeTest_SortRev, MyFrame::OnSortRev)
 | 
					    EVT_MENU(TreeTest_SortRev, MyFrame::OnSortRev)
 | 
				
			||||||
  EVT_MENU(TreeTest_Bold, MyFrame::OnSetBold)
 | 
					    EVT_MENU(TreeTest_Bold, MyFrame::OnSetBold)
 | 
				
			||||||
  EVT_MENU(TreeTest_UnBold, MyFrame::OnClearBold)
 | 
					    EVT_MENU(TreeTest_UnBold, MyFrame::OnClearBold)
 | 
				
			||||||
  EVT_MENU(TreeTest_Delete, MyFrame::OnDelete)
 | 
					    EVT_MENU(TreeTest_Delete, MyFrame::OnDelete)
 | 
				
			||||||
  EVT_MENU(TreeTest_DeleteChildren, MyFrame::OnDeleteChildren)
 | 
					    EVT_MENU(TreeTest_DeleteChildren, MyFrame::OnDeleteChildren)
 | 
				
			||||||
  EVT_MENU(TreeTest_DeleteAll, MyFrame::OnDeleteAll)
 | 
					    EVT_MENU(TreeTest_DeleteAll, MyFrame::OnDeleteAll)
 | 
				
			||||||
  EVT_MENU(TreeTest_Recreate, MyFrame::OnRecreate)
 | 
					    EVT_MENU(TreeTest_Recreate, MyFrame::OnRecreate)
 | 
				
			||||||
  EVT_MENU(TreeTest_CollapseAndReset, MyFrame::OnCollapseAndReset)
 | 
					    EVT_MENU(TreeTest_CollapseAndReset, MyFrame::OnCollapseAndReset)
 | 
				
			||||||
  EVT_MENU(TreeTest_EnsureVisible, MyFrame::OnEnsureVisible)
 | 
					    EVT_MENU(TreeTest_EnsureVisible, MyFrame::OnEnsureVisible)
 | 
				
			||||||
 | 
					    EVT_MENU(TreeTest_AddItem, MyFrame::OnAddItem)
 | 
				
			||||||
END_EVENT_TABLE()
 | 
					END_EVENT_TABLE()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BEGIN_EVENT_TABLE(MyTreeCtrl, wxTreeCtrl)
 | 
					BEGIN_EVENT_TABLE(MyTreeCtrl, wxTreeCtrl)
 | 
				
			||||||
  EVT_TREE_BEGIN_DRAG(TreeTest_Ctrl, MyTreeCtrl::OnBeginDrag)
 | 
					    EVT_TREE_BEGIN_DRAG(TreeTest_Ctrl, MyTreeCtrl::OnBeginDrag)
 | 
				
			||||||
  EVT_TREE_BEGIN_RDRAG(TreeTest_Ctrl, MyTreeCtrl::OnBeginRDrag)
 | 
					    EVT_TREE_BEGIN_RDRAG(TreeTest_Ctrl, MyTreeCtrl::OnBeginRDrag)
 | 
				
			||||||
  EVT_TREE_BEGIN_LABEL_EDIT(TreeTest_Ctrl, MyTreeCtrl::OnBeginLabelEdit)
 | 
					    EVT_TREE_BEGIN_LABEL_EDIT(TreeTest_Ctrl, MyTreeCtrl::OnBeginLabelEdit)
 | 
				
			||||||
  EVT_TREE_END_LABEL_EDIT(TreeTest_Ctrl, MyTreeCtrl::OnEndLabelEdit)
 | 
					    EVT_TREE_END_LABEL_EDIT(TreeTest_Ctrl, MyTreeCtrl::OnEndLabelEdit)
 | 
				
			||||||
  EVT_TREE_DELETE_ITEM(TreeTest_Ctrl, MyTreeCtrl::OnDeleteItem)
 | 
					    EVT_TREE_DELETE_ITEM(TreeTest_Ctrl, MyTreeCtrl::OnDeleteItem)
 | 
				
			||||||
  EVT_TREE_GET_INFO(TreeTest_Ctrl, MyTreeCtrl::OnGetInfo)
 | 
					    EVT_TREE_GET_INFO(TreeTest_Ctrl, MyTreeCtrl::OnGetInfo)
 | 
				
			||||||
  EVT_TREE_SET_INFO(TreeTest_Ctrl, MyTreeCtrl::OnSetInfo)
 | 
					    EVT_TREE_SET_INFO(TreeTest_Ctrl, MyTreeCtrl::OnSetInfo)
 | 
				
			||||||
  EVT_TREE_ITEM_EXPANDED(TreeTest_Ctrl, MyTreeCtrl::OnItemExpanded)
 | 
					    EVT_TREE_ITEM_EXPANDED(TreeTest_Ctrl, MyTreeCtrl::OnItemExpanded)
 | 
				
			||||||
  EVT_TREE_ITEM_EXPANDING(TreeTest_Ctrl, MyTreeCtrl::OnItemExpanding)
 | 
					    EVT_TREE_ITEM_EXPANDING(TreeTest_Ctrl, MyTreeCtrl::OnItemExpanding)
 | 
				
			||||||
  EVT_TREE_ITEM_COLLAPSED(TreeTest_Ctrl, MyTreeCtrl::OnItemCollapsed)
 | 
					    EVT_TREE_ITEM_COLLAPSED(TreeTest_Ctrl, MyTreeCtrl::OnItemCollapsed)
 | 
				
			||||||
  EVT_TREE_ITEM_COLLAPSING(TreeTest_Ctrl, MyTreeCtrl::OnItemCollapsing)
 | 
					    EVT_TREE_ITEM_COLLAPSING(TreeTest_Ctrl, MyTreeCtrl::OnItemCollapsing)
 | 
				
			||||||
  EVT_TREE_SEL_CHANGED(TreeTest_Ctrl, MyTreeCtrl::OnSelChanged)
 | 
					    EVT_TREE_SEL_CHANGED(TreeTest_Ctrl, MyTreeCtrl::OnSelChanged)
 | 
				
			||||||
  EVT_TREE_SEL_CHANGING(TreeTest_Ctrl, MyTreeCtrl::OnSelChanging)
 | 
					    EVT_TREE_SEL_CHANGING(TreeTest_Ctrl, MyTreeCtrl::OnSelChanging)
 | 
				
			||||||
  EVT_TREE_KEY_DOWN(TreeTest_Ctrl, MyTreeCtrl::OnTreeKeyDown)
 | 
					    EVT_TREE_KEY_DOWN(TreeTest_Ctrl, MyTreeCtrl::OnTreeKeyDown)
 | 
				
			||||||
  EVT_TREE_ITEM_ACTIVATED(TreeTest_Ctrl, MyTreeCtrl::OnItemActivated)
 | 
					    EVT_TREE_ITEM_ACTIVATED(TreeTest_Ctrl, MyTreeCtrl::OnItemActivated)
 | 
				
			||||||
 | 
					    EVT_RIGHT_DCLICK(MyTreeCtrl::OnRMouseDClick)
 | 
				
			||||||
END_EVENT_TABLE()
 | 
					END_EVENT_TABLE()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IMPLEMENT_APP(MyApp)
 | 
					IMPLEMENT_APP(MyApp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool MyApp::OnInit()
 | 
					bool MyApp::OnInit()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  // Create the main frame window
 | 
					    // Create the main frame window
 | 
				
			||||||
  MyFrame *frame = new MyFrame("wxTreeCtrl Test", 50, 50, 450, 340);
 | 
					    MyFrame *frame = new MyFrame("wxTreeCtrl Test", 50, 50, 450, 340);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Show the frame
 | 
					    // Show the frame
 | 
				
			||||||
  frame->Show(TRUE);
 | 
					    frame->Show(TRUE);
 | 
				
			||||||
  SetTopWindow(frame);
 | 
					    SetTopWindow(frame);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return TRUE;
 | 
					    return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -102,174 +104,179 @@ bool MyApp::OnInit()
 | 
				
			|||||||
MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h)
 | 
					MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h)
 | 
				
			||||||
       : wxFrame((wxFrame *)NULL, -1, title, wxPoint(x, y), wxSize(w, h))
 | 
					       : wxFrame((wxFrame *)NULL, -1, title, wxPoint(x, y), wxSize(w, h))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  // This reduces flicker effects - even better would be to define
 | 
					    // This reduces flicker effects - even better would be to define
 | 
				
			||||||
  // OnEraseBackground to do nothing. When the tree control's scrollbars are
 | 
					    // OnEraseBackground to do nothing. When the tree control's scrollbars are
 | 
				
			||||||
  // show or hidden, the frame is sent a background erase event.
 | 
					    // show or hidden, the frame is sent a background erase event.
 | 
				
			||||||
  SetBackgroundColour(wxColour(255, 255, 255));
 | 
					    SetBackgroundColour(wxColour(255, 255, 255));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Give it an icon
 | 
					    // Give it an icon
 | 
				
			||||||
  SetIcon(wxICON(mondrian));
 | 
					    SetIcon(wxICON(mondrian));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Make a menubar
 | 
					    // Make a menubar
 | 
				
			||||||
  wxMenu *file_menu = new wxMenu,
 | 
					    wxMenu *file_menu = new wxMenu,
 | 
				
			||||||
         *tree_menu = new wxMenu;
 | 
					           *tree_menu = new wxMenu,
 | 
				
			||||||
 | 
					           *item_menu = new wxMenu;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  file_menu->Append(TreeTest_About, "&About...");
 | 
					    file_menu->Append(TreeTest_About, "&About...");
 | 
				
			||||||
  file_menu->AppendSeparator();
 | 
					    file_menu->AppendSeparator();
 | 
				
			||||||
  file_menu->Append(TreeTest_Quit, "E&xit");
 | 
					    file_menu->Append(TreeTest_Quit, "E&xit");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  tree_menu->Append(TreeTest_Dump, "D&ump tree items");
 | 
					    tree_menu->Append(TreeTest_Recreate, "&Recreate the tree");
 | 
				
			||||||
  tree_menu->Append(TreeTest_Recreate, "&Recreate the tree");
 | 
					    tree_menu->Append(TreeTest_CollapseAndReset, "C&ollapse and reset");
 | 
				
			||||||
  tree_menu->Append(TreeTest_CollapseAndReset, "C&ollapse and reset");
 | 
					    tree_menu->AppendSeparator();
 | 
				
			||||||
  tree_menu->AppendSeparator();
 | 
					    tree_menu->Append(TreeTest_AddItem, "Append a &new item");
 | 
				
			||||||
  tree_menu->Append(TreeTest_Delete, "&Delete this item");
 | 
					    tree_menu->Append(TreeTest_Delete, "&Delete this item");
 | 
				
			||||||
  tree_menu->Append(TreeTest_DeleteChildren, "Delete &children");
 | 
					    tree_menu->Append(TreeTest_DeleteChildren, "Delete &children");
 | 
				
			||||||
  tree_menu->Append(TreeTest_DeleteAll, "Delete &all items");
 | 
					    tree_menu->Append(TreeTest_DeleteAll, "Delete &all items");
 | 
				
			||||||
  tree_menu->AppendSeparator();
 | 
					    tree_menu->AppendSeparator();
 | 
				
			||||||
  tree_menu->Append(TreeTest_Sort, "Sort children of current item");
 | 
					    tree_menu->Append(TreeTest_Sort, "Sort children of current item");
 | 
				
			||||||
  tree_menu->Append(TreeTest_SortRev, "Sort in reversed order");
 | 
					    tree_menu->Append(TreeTest_SortRev, "Sort in reversed order");
 | 
				
			||||||
  tree_menu->Append(TreeTest_Rename, "Rename item...");
 | 
					    tree_menu->AppendSeparator();
 | 
				
			||||||
  tree_menu->AppendSeparator();
 | 
					    tree_menu->Append(TreeTest_EnsureVisible, "Make the last item &visible");
 | 
				
			||||||
  tree_menu->Append(TreeTest_Bold, "Make item &bold");
 | 
					 | 
				
			||||||
  tree_menu->Append(TreeTest_UnBold, "Make item ¬ bold");
 | 
					 | 
				
			||||||
  tree_menu->AppendSeparator();
 | 
					 | 
				
			||||||
  tree_menu->Append(TreeTest_EnsureVisible, "Make the last item &visible");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  wxMenuBar *menu_bar = new wxMenuBar;
 | 
					    item_menu->Append(TreeTest_Dump, "&Dump item children");
 | 
				
			||||||
  menu_bar->Append(file_menu, "&File");
 | 
					    item_menu->AppendSeparator();
 | 
				
			||||||
  menu_bar->Append(tree_menu, "&Tree");
 | 
					    item_menu->Append(TreeTest_Rename, "&Rename item...");
 | 
				
			||||||
  SetMenuBar(menu_bar);
 | 
					    item_menu->AppendSeparator();
 | 
				
			||||||
 | 
					    item_menu->Append(TreeTest_Bold, "Make item &bold");
 | 
				
			||||||
 | 
					    item_menu->Append(TreeTest_UnBold, "Make item ¬ bold");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  m_treeCtrl = new MyTreeCtrl(this, TreeTest_Ctrl,
 | 
					    wxMenuBar *menu_bar = new wxMenuBar;
 | 
				
			||||||
                              wxDefaultPosition, wxDefaultSize,
 | 
					    menu_bar->Append(file_menu, "&File");
 | 
				
			||||||
                              wxTR_HAS_BUTTONS | wxSUNKEN_BORDER);
 | 
					    menu_bar->Append(tree_menu, "&Tree");
 | 
				
			||||||
  wxTextCtrl *textCtrl = new wxTextCtrl(this, -1, "",
 | 
					    menu_bar->Append(item_menu, "&Item");
 | 
				
			||||||
                                        wxDefaultPosition, wxDefaultSize,
 | 
					    SetMenuBar(menu_bar);
 | 
				
			||||||
                                        wxTE_MULTILINE | wxSUNKEN_BORDER);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  wxLayoutConstraints *c = new wxLayoutConstraints;
 | 
					    m_treeCtrl = new MyTreeCtrl(this, TreeTest_Ctrl,
 | 
				
			||||||
  c->top.SameAs(this, wxTop);
 | 
					                                wxDefaultPosition, wxDefaultSize,
 | 
				
			||||||
  c->left.SameAs(this, wxLeft);
 | 
					                                wxTR_HAS_BUTTONS | wxSUNKEN_BORDER);
 | 
				
			||||||
  c->right.SameAs(this, wxRight);
 | 
					    wxTextCtrl *textCtrl = new wxTextCtrl(this, -1, "",
 | 
				
			||||||
  c->height.PercentOf(this, wxHeight, 66);
 | 
					                                wxDefaultPosition, wxDefaultSize,
 | 
				
			||||||
  m_treeCtrl->SetConstraints(c);
 | 
					                                wxTE_MULTILINE | wxSUNKEN_BORDER);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  c = new wxLayoutConstraints;
 | 
					    wxLayoutConstraints *c = new wxLayoutConstraints;
 | 
				
			||||||
  c->top.Below(m_treeCtrl);
 | 
					    c->top.SameAs(this, wxTop);
 | 
				
			||||||
  c->left.SameAs(this, wxLeft);
 | 
					    c->left.SameAs(this, wxLeft);
 | 
				
			||||||
  c->right.SameAs(this, wxRight);
 | 
					    c->right.SameAs(this, wxRight);
 | 
				
			||||||
  c->bottom.SameAs(this, wxBottom);
 | 
					    c->height.PercentOf(this, wxHeight, 66);
 | 
				
			||||||
  textCtrl->SetConstraints(c);
 | 
					    m_treeCtrl->SetConstraints(c);
 | 
				
			||||||
  SetAutoLayout(TRUE);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // create a status bar with 3 panes
 | 
					    c = new wxLayoutConstraints;
 | 
				
			||||||
  CreateStatusBar(3);
 | 
					    c->top.Below(m_treeCtrl);
 | 
				
			||||||
  SetStatusText("", 0);
 | 
					    c->left.SameAs(this, wxLeft);
 | 
				
			||||||
 | 
					    c->right.SameAs(this, wxRight);
 | 
				
			||||||
 | 
					    c->bottom.SameAs(this, wxBottom);
 | 
				
			||||||
 | 
					    textCtrl->SetConstraints(c);
 | 
				
			||||||
 | 
					    SetAutoLayout(TRUE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // create a status bar with 3 panes
 | 
				
			||||||
 | 
					    CreateStatusBar(3);
 | 
				
			||||||
 | 
					    SetStatusText("", 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __WXMOTIF__
 | 
					#ifdef __WXMOTIF__
 | 
				
			||||||
  // For some reason, we get a memcpy crash in wxLogStream::DoLogStream
 | 
					    // For some reason, we get a memcpy crash in wxLogStream::DoLogStream
 | 
				
			||||||
  // on gcc/wxMotif, if we use wxLogTextCtl. Maybe it's just gcc?
 | 
					    // on gcc/wxMotif, if we use wxLogTextCtl. Maybe it's just gcc?
 | 
				
			||||||
  delete wxLog::SetActiveTarget(new wxLogStderr);
 | 
					    delete wxLog::SetActiveTarget(new wxLogStderr);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
  // set our text control as the log target
 | 
					    // set our text control as the log target
 | 
				
			||||||
  wxLogTextCtrl *logWindow = new wxLogTextCtrl(textCtrl);
 | 
					    wxLogTextCtrl *logWindow = new wxLogTextCtrl(textCtrl);
 | 
				
			||||||
  delete wxLog::SetActiveTarget(logWindow);
 | 
					    delete wxLog::SetActiveTarget(logWindow);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MyFrame::~MyFrame()
 | 
					MyFrame::~MyFrame()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  delete wxLog::SetActiveTarget(NULL);
 | 
					    delete wxLog::SetActiveTarget(NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 | 
					void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  Close(TRUE);
 | 
					    Close(TRUE);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 | 
					void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxMessageBox("Tree test sample\n"
 | 
					    wxMessageBox("Tree test sample\n"
 | 
				
			||||||
               "Julian Smart (c) 1997,\n"
 | 
					                 "Julian Smart (c) 1997,\n"
 | 
				
			||||||
               "Vadim Zeitlin (c) 1998",
 | 
					                 "Vadim Zeitlin (c) 1998",
 | 
				
			||||||
               "About tree test",
 | 
					                 "About tree test",
 | 
				
			||||||
               wxOK | wxICON_INFORMATION, this);
 | 
					                 wxOK | wxICON_INFORMATION, this);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::OnRename(wxCommandEvent& WXUNUSED(event))
 | 
					void MyFrame::OnRename(wxCommandEvent& WXUNUSED(event))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxTreeItemId item = m_treeCtrl->GetSelection();
 | 
					    wxTreeItemId item = m_treeCtrl->GetSelection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CHECK_ITEM( item );
 | 
					    CHECK_ITEM( item );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static wxString s_text;
 | 
					    static wxString s_text;
 | 
				
			||||||
  s_text = wxGetTextFromUser("New name: ", "Tree sample question",
 | 
					    s_text = wxGetTextFromUser("New name: ", "Tree sample question",
 | 
				
			||||||
                             s_text, this);
 | 
					            s_text, this);
 | 
				
			||||||
  if ( !s_text.IsEmpty() )
 | 
					    if ( !s_text.IsEmpty() )
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
    m_treeCtrl->SetItemText(item, s_text);
 | 
					        m_treeCtrl->SetItemText(item, s_text);
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::DoSort(bool reverse)
 | 
					void MyFrame::DoSort(bool reverse)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxTreeItemId item = m_treeCtrl->GetSelection();
 | 
					    wxTreeItemId item = m_treeCtrl->GetSelection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CHECK_ITEM( item );
 | 
					    CHECK_ITEM( item );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  m_treeCtrl->DoSortChildren(item, reverse);
 | 
					    m_treeCtrl->DoSortChildren(item, reverse);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::OnDump(wxCommandEvent& WXUNUSED(event))
 | 
					void MyFrame::OnDump(wxCommandEvent& WXUNUSED(event))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxTreeItemId root = m_treeCtrl->GetSelection();
 | 
					    wxTreeItemId root = m_treeCtrl->GetSelection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CHECK_ITEM( root );
 | 
					    CHECK_ITEM( root );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  m_treeCtrl->GetItemsRecursively(root, -1);
 | 
					    m_treeCtrl->GetItemsRecursively(root, -1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::DoSetBold(bool bold)
 | 
					void MyFrame::DoSetBold(bool bold)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxTreeItemId item = m_treeCtrl->GetSelection();
 | 
					    wxTreeItemId item = m_treeCtrl->GetSelection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CHECK_ITEM( item );
 | 
					    CHECK_ITEM( item );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  m_treeCtrl->SetItemBold(item, bold);
 | 
					    m_treeCtrl->SetItemBold(item, bold);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event))
 | 
					void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxTreeItemId item = m_treeCtrl->GetSelection();
 | 
					    wxTreeItemId item = m_treeCtrl->GetSelection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CHECK_ITEM( item );
 | 
					    CHECK_ITEM( item );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  m_treeCtrl->Delete(item);
 | 
					    m_treeCtrl->Delete(item);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::OnDeleteChildren(wxCommandEvent& WXUNUSED(event))
 | 
					void MyFrame::OnDeleteChildren(wxCommandEvent& WXUNUSED(event))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxTreeItemId item = m_treeCtrl->GetSelection();
 | 
					    wxTreeItemId item = m_treeCtrl->GetSelection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CHECK_ITEM( item );
 | 
					    CHECK_ITEM( item );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  m_treeCtrl->DeleteChildren(item);
 | 
					    m_treeCtrl->DeleteChildren(item);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::OnDeleteAll(wxCommandEvent& WXUNUSED(event))
 | 
					void MyFrame::OnDeleteAll(wxCommandEvent& WXUNUSED(event))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  m_treeCtrl->DeleteAllItems();
 | 
					    m_treeCtrl->DeleteAllItems();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::OnRecreate(wxCommandEvent& event)
 | 
					void MyFrame::OnRecreate(wxCommandEvent& event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  OnDeleteAll(event);
 | 
					    OnDeleteAll(event);
 | 
				
			||||||
  m_treeCtrl->AddTestItemsToTree(3, 2);
 | 
					    m_treeCtrl->AddTestItemsToTree(3, 2);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::OnCollapseAndReset(wxCommandEvent& event)
 | 
					void MyFrame::OnCollapseAndReset(wxCommandEvent& event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  m_treeCtrl->CollapseAndReset(m_treeCtrl->GetRootItem());  
 | 
					    m_treeCtrl->CollapseAndReset(m_treeCtrl->GetRootItem());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyFrame::OnEnsureVisible(wxCommandEvent& event)
 | 
					void MyFrame::OnEnsureVisible(wxCommandEvent& event)
 | 
				
			||||||
@@ -277,6 +284,18 @@ void MyFrame::OnEnsureVisible(wxCommandEvent& event)
 | 
				
			|||||||
    m_treeCtrl->DoEnsureVisible();
 | 
					    m_treeCtrl->DoEnsureVisible();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void MyFrame::OnAddItem(wxCommandEvent& WXUNUSED(event))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    static int s_num = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxString text;
 | 
				
			||||||
 | 
					    text.Printf("Item #%d", ++s_num);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    m_treeCtrl->AppendItem(m_treeCtrl->GetRootItem(),
 | 
				
			||||||
 | 
					                           text,
 | 
				
			||||||
 | 
					                           MyTreeCtrl::TreeCtrlIcon_File);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MyTreeCtrl implementation
 | 
					// MyTreeCtrl implementation
 | 
				
			||||||
IMPLEMENT_DYNAMIC_CLASS(MyTreeCtrl, wxTreeCtrl)
 | 
					IMPLEMENT_DYNAMIC_CLASS(MyTreeCtrl, wxTreeCtrl)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -285,45 +304,45 @@ MyTreeCtrl::MyTreeCtrl(wxWindow *parent, const wxWindowID id,
 | 
				
			|||||||
                       long style)
 | 
					                       long style)
 | 
				
			||||||
          : wxTreeCtrl(parent, id, pos, size, style)
 | 
					          : wxTreeCtrl(parent, id, pos, size, style)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  m_reverseSort = FALSE;
 | 
					    m_reverseSort = FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Make an image list containing small icons
 | 
					    // Make an image list containing small icons
 | 
				
			||||||
  m_imageListNormal = new wxImageList(16, 16, TRUE);
 | 
					    m_imageListNormal = new wxImageList(16, 16, TRUE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // should correspond to TreeCtrlIcon_xxx enum
 | 
					    // should correspond to TreeCtrlIcon_xxx enum
 | 
				
			||||||
#if defined(__WXMSW__) && defined(__WIN16__)
 | 
					#if defined(__WXMSW__) && defined(__WIN16__)
 | 
				
			||||||
  // This is required in 16-bit Windows mode only because we can't load a specific (16x16)
 | 
					    // This is required in 16-bit Windows mode only because we can't load a specific (16x16)
 | 
				
			||||||
  // icon image, so it comes out stretched
 | 
					    // icon image, so it comes out stretched
 | 
				
			||||||
  m_imageListNormal->Add(wxBitmap("bitmap1", wxBITMAP_TYPE_BMP_RESOURCE));
 | 
					    m_imageListNormal->Add(wxBitmap("bitmap1", wxBITMAP_TYPE_BMP_RESOURCE));
 | 
				
			||||||
  m_imageListNormal->Add(wxBitmap("bitmap2", wxBITMAP_TYPE_BMP_RESOURCE));
 | 
					    m_imageListNormal->Add(wxBitmap("bitmap2", wxBITMAP_TYPE_BMP_RESOURCE));
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
  m_imageListNormal->Add(wxICON(icon1));
 | 
					    m_imageListNormal->Add(wxICON(icon1));
 | 
				
			||||||
  m_imageListNormal->Add(wxICON(icon2));
 | 
					    m_imageListNormal->Add(wxICON(icon2));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SetImageList(m_imageListNormal);
 | 
					    SetImageList(m_imageListNormal);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Add some items to the tree
 | 
					    // Add some items to the tree
 | 
				
			||||||
  AddTestItemsToTree(3, 2);
 | 
					    AddTestItemsToTree(3, 2);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MyTreeCtrl::~MyTreeCtrl()
 | 
					MyTreeCtrl::~MyTreeCtrl()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  delete m_imageListNormal;
 | 
					    delete m_imageListNormal;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int MyTreeCtrl::OnCompareItems(const wxTreeItemId& item1,
 | 
					int MyTreeCtrl::OnCompareItems(const wxTreeItemId& item1,
 | 
				
			||||||
                               const wxTreeItemId& item2)
 | 
					                               const wxTreeItemId& item2)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ( m_reverseSort )
 | 
					    if ( m_reverseSort )
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
    // just exchange 1st and 2nd items
 | 
					        // just exchange 1st and 2nd items
 | 
				
			||||||
    return wxTreeCtrl::OnCompareItems(item2, item1);
 | 
					        return wxTreeCtrl::OnCompareItems(item2, item1);
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
  else
 | 
					    else
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
    return wxTreeCtrl::OnCompareItems(item1, item2);
 | 
					        return wxTreeCtrl::OnCompareItems(item1, item2);
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent,
 | 
					void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent,
 | 
				
			||||||
@@ -361,41 +380,41 @@ void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent,
 | 
				
			|||||||
void MyTreeCtrl::AddTestItemsToTree(size_t numChildren,
 | 
					void MyTreeCtrl::AddTestItemsToTree(size_t numChildren,
 | 
				
			||||||
                                    size_t depth)
 | 
					                                    size_t depth)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxTreeItemId rootId = AddRoot("Root",
 | 
					    wxTreeItemId rootId = AddRoot("Root",
 | 
				
			||||||
                        TreeCtrlIcon_Folder, TreeCtrlIcon_Folder,
 | 
					                                  TreeCtrlIcon_Folder, TreeCtrlIcon_Folder,
 | 
				
			||||||
                        new MyTreeItemData("Root item"));
 | 
					                                  new MyTreeItemData("Root item"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  AddItemsRecursively(rootId, numChildren, depth, 0);
 | 
					    AddItemsRecursively(rootId, numChildren, depth, 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyTreeCtrl::GetItemsRecursively(const wxTreeItemId& idParent, long cookie)
 | 
					void MyTreeCtrl::GetItemsRecursively(const wxTreeItemId& idParent, long cookie)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxTreeItemId id;
 | 
					    wxTreeItemId id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if( cookie == -1 )
 | 
					    if( cookie == -1 )
 | 
				
			||||||
    id = GetFirstChild(idParent, cookie);
 | 
					        id = GetFirstChild(idParent, cookie);
 | 
				
			||||||
  else
 | 
					    else
 | 
				
			||||||
    id = GetNextChild(idParent, cookie);
 | 
					        id = GetNextChild(idParent, cookie);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(id <= 0)
 | 
					    if(id <= 0)
 | 
				
			||||||
    return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  wxString text=GetItemText(id);
 | 
					    wxString text=GetItemText(id);
 | 
				
			||||||
  wxLogMessage(text);
 | 
					    wxLogMessage(text);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (ItemHasChildren(id))
 | 
					    if (ItemHasChildren(id))
 | 
				
			||||||
    GetItemsRecursively(id,-1);
 | 
					        GetItemsRecursively(id,-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  GetItemsRecursively(idParent, cookie);
 | 
					    GetItemsRecursively(idParent, cookie);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// avoid repetition
 | 
					// avoid repetition
 | 
				
			||||||
#define TREE_EVENT_HANDLER(name)                                \
 | 
					#define TREE_EVENT_HANDLER(name)                            \
 | 
				
			||||||
    void MyTreeCtrl::name(wxTreeEvent& WXUNUSED(event))         \
 | 
					void MyTreeCtrl::name(wxTreeEvent& WXUNUSED(event))         \
 | 
				
			||||||
    {                                                           \
 | 
					{                                                           \
 | 
				
			||||||
      wxLogMessage(#name);                                      \
 | 
					    wxLogMessage(#name);                                    \
 | 
				
			||||||
    }
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TREE_EVENT_HANDLER(OnBeginDrag)
 | 
					TREE_EVENT_HANDLER(OnBeginDrag)
 | 
				
			||||||
TREE_EVENT_HANDLER(OnBeginRDrag)
 | 
					TREE_EVENT_HANDLER(OnBeginRDrag)
 | 
				
			||||||
@@ -414,50 +433,63 @@ TREE_EVENT_HANDLER(OnSelChanging)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void MyTreeCtrl::OnItemCollapsing(wxTreeEvent& event)
 | 
					void MyTreeCtrl::OnItemCollapsing(wxTreeEvent& event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxLogMessage("OnItemCollapsing");
 | 
					    wxLogMessage("OnItemCollapsing");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // for testing, prevent the user from collapsing the first child folder
 | 
					    // for testing, prevent the user from collapsing the first child folder
 | 
				
			||||||
  wxTreeItemId itemId = event.GetItem();
 | 
					    wxTreeItemId itemId = event.GetItem();
 | 
				
			||||||
  if ( GetParent(itemId) == GetRootItem() && !GetPrevSibling(itemId) )
 | 
					    if ( GetParent(itemId) == GetRootItem() && !GetPrevSibling(itemId) )
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
    wxMessageBox("You can't collapse this item.");
 | 
					        wxMessageBox("You can't collapse this item.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    event.Veto();
 | 
					        event.Veto();
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyTreeCtrl::OnTreeKeyDown(wxTreeEvent&WXUNUSED(event))
 | 
					void MyTreeCtrl::OnTreeKeyDown(wxTreeEvent&WXUNUSED(event))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxLogMessage("OnTreeKeyDown");
 | 
					    wxLogMessage("OnTreeKeyDown");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyTreeCtrl::OnItemActivated(wxTreeEvent&WXUNUSED(event))
 | 
					void MyTreeCtrl::OnItemActivated(wxTreeEvent&WXUNUSED(event))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  // show some info about this item
 | 
					    // show some info about this item
 | 
				
			||||||
  wxTreeItemId itemId = GetSelection();
 | 
					    wxTreeItemId itemId = GetSelection();
 | 
				
			||||||
  MyTreeItemData *item = (MyTreeItemData *)GetItemData(itemId);
 | 
					    MyTreeItemData *item = (MyTreeItemData *)GetItemData(itemId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if ( item != NULL )
 | 
					    if ( item != NULL )
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
    item->ShowInfo(this);
 | 
					        item->ShowInfo(this);
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  wxLogMessage("OnItemActivated");
 | 
					    wxLogMessage("OnItemActivated");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void MyTreeCtrl::OnRMouseDClick(wxMouseEvent& event)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxTreeItemId id = HitTest(event.GetPosition());
 | 
				
			||||||
 | 
					    if ( !id )
 | 
				
			||||||
 | 
					        wxLogMessage("No item under mouse");
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        MyTreeItemData *item = (MyTreeItemData *)GetItemData(id);
 | 
				
			||||||
 | 
					        if ( item )
 | 
				
			||||||
 | 
					            wxLogMessage("Item '%s' under mouse", item->GetDesc());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline const char *Bool2String(bool b)
 | 
					static inline const char *Bool2String(bool b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  return b ? "" : "not ";
 | 
					    return b ? "" : "not ";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MyTreeItemData::ShowInfo(wxTreeCtrl *tree)
 | 
					void MyTreeItemData::ShowInfo(wxTreeCtrl *tree)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxLogMessage("Item '%s': %sselected, %sexpanded, %sbold,\n"
 | 
					    wxLogMessage("Item '%s': %sselected, %sexpanded, %sbold,\n"
 | 
				
			||||||
               "%u children (%u immediately under this item).",
 | 
					                 "%u children (%u immediately under this item).",
 | 
				
			||||||
               m_desc.c_str(),
 | 
					                 m_desc.c_str(),
 | 
				
			||||||
               Bool2String(tree->IsSelected(GetId())),
 | 
					                 Bool2String(tree->IsSelected(GetId())),
 | 
				
			||||||
               Bool2String(tree->IsExpanded(GetId())),
 | 
					                 Bool2String(tree->IsExpanded(GetId())),
 | 
				
			||||||
               Bool2String(tree->IsBold(GetId())),
 | 
					                 Bool2String(tree->IsBold(GetId())),
 | 
				
			||||||
               tree->GetChildrenCount(GetId()),
 | 
					                 tree->GetChildrenCount(GetId()),
 | 
				
			||||||
               tree->GetChildrenCount(GetId(), FALSE));
 | 
					                 tree->GetChildrenCount(GetId(), FALSE));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,135 +13,139 @@
 | 
				
			|||||||
class MyApp : public wxApp
 | 
					class MyApp : public wxApp
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  bool OnInit();
 | 
					    bool OnInit();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MyTreeItemData : public wxTreeItemData
 | 
					class MyTreeItemData : public wxTreeItemData
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  MyTreeItemData(const wxString& desc) : m_desc(desc) { }
 | 
					    MyTreeItemData(const wxString& desc) : m_desc(desc) { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void ShowInfo(wxTreeCtrl *tree);
 | 
					    void ShowInfo(wxTreeCtrl *tree);
 | 
				
			||||||
 | 
					    const char *GetDesc() const { return m_desc.c_str(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  wxString m_desc;
 | 
					    wxString m_desc;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MyTreeCtrl : public wxTreeCtrl
 | 
					class MyTreeCtrl : public wxTreeCtrl
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  enum
 | 
					    enum
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
    TreeCtrlIcon_File,
 | 
					        TreeCtrlIcon_File,
 | 
				
			||||||
    TreeCtrlIcon_Folder
 | 
					        TreeCtrlIcon_Folder
 | 
				
			||||||
  };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MyTreeCtrl() { }
 | 
					    MyTreeCtrl() { }
 | 
				
			||||||
  MyTreeCtrl(wxWindow *parent, const wxWindowID id,
 | 
					    MyTreeCtrl(wxWindow *parent, const wxWindowID id,
 | 
				
			||||||
             const wxPoint& pos, const wxSize& size,
 | 
					               const wxPoint& pos, const wxSize& size,
 | 
				
			||||||
             long style);
 | 
					               long style);
 | 
				
			||||||
  virtual ~MyTreeCtrl();
 | 
					    virtual ~MyTreeCtrl();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void OnBeginDrag(wxTreeEvent& event);
 | 
					    void OnBeginDrag(wxTreeEvent& event);
 | 
				
			||||||
  void OnBeginRDrag(wxTreeEvent& event);
 | 
					    void OnBeginRDrag(wxTreeEvent& event);
 | 
				
			||||||
  void OnBeginLabelEdit(wxTreeEvent& event);
 | 
					    void OnBeginLabelEdit(wxTreeEvent& event);
 | 
				
			||||||
  void OnEndLabelEdit(wxTreeEvent& event);
 | 
					    void OnEndLabelEdit(wxTreeEvent& event);
 | 
				
			||||||
  void OnDeleteItem(wxTreeEvent& event);
 | 
					    void OnDeleteItem(wxTreeEvent& event);
 | 
				
			||||||
  void OnGetInfo(wxTreeEvent& event);
 | 
					    void OnGetInfo(wxTreeEvent& event);
 | 
				
			||||||
  void OnSetInfo(wxTreeEvent& event);
 | 
					    void OnSetInfo(wxTreeEvent& event);
 | 
				
			||||||
  void OnItemExpanded(wxTreeEvent& event);
 | 
					    void OnItemExpanded(wxTreeEvent& event);
 | 
				
			||||||
  void OnItemExpanding(wxTreeEvent& event);
 | 
					    void OnItemExpanding(wxTreeEvent& event);
 | 
				
			||||||
  void OnItemCollapsed(wxTreeEvent& event);
 | 
					    void OnItemCollapsed(wxTreeEvent& event);
 | 
				
			||||||
  void OnItemCollapsing(wxTreeEvent& event);
 | 
					    void OnItemCollapsing(wxTreeEvent& event);
 | 
				
			||||||
  void OnSelChanged(wxTreeEvent& event);
 | 
					    void OnSelChanged(wxTreeEvent& event);
 | 
				
			||||||
  void OnSelChanging(wxTreeEvent& event);
 | 
					    void OnSelChanging(wxTreeEvent& event);
 | 
				
			||||||
  void OnTreeKeyDown(wxTreeEvent& event);
 | 
					    void OnTreeKeyDown(wxTreeEvent& event);
 | 
				
			||||||
  void OnItemActivated(wxTreeEvent& event);
 | 
					    void OnItemActivated(wxTreeEvent& event);
 | 
				
			||||||
 | 
					    void OnRMouseDClick(wxMouseEvent& event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void GetItemsRecursively(const wxTreeItemId& idParent, long cookie);
 | 
					    void GetItemsRecursively(const wxTreeItemId& idParent, long cookie);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void AddTestItemsToTree(size_t numChildren,
 | 
					    void AddTestItemsToTree(size_t numChildren, size_t depth);
 | 
				
			||||||
                          size_t depth);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void DoSortChildren(const wxTreeItemId& item, bool reverse = FALSE)
 | 
					    void DoSortChildren(const wxTreeItemId& item, bool reverse = FALSE)
 | 
				
			||||||
    { m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }
 | 
					    { m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }
 | 
				
			||||||
  void DoEnsureVisible() { EnsureVisible(m_lastItem); }
 | 
					    void DoEnsureVisible() { EnsureVisible(m_lastItem); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  virtual int OnCompareItems(const wxTreeItemId& item1,
 | 
					    virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2);
 | 
				
			||||||
                             const wxTreeItemId& item2);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  void AddItemsRecursively(const wxTreeItemId& idParent,
 | 
					    void AddItemsRecursively(const wxTreeItemId& idParent,
 | 
				
			||||||
                           size_t nChildren,
 | 
					                             size_t nChildren,
 | 
				
			||||||
                           size_t depth,
 | 
					                             size_t depth,
 | 
				
			||||||
                           size_t folder);
 | 
					                             size_t folder);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  wxImageList *m_imageListNormal;
 | 
					    wxImageList *m_imageListNormal;
 | 
				
			||||||
  bool         m_reverseSort;           // flag for OnCompareItems
 | 
					    bool         m_reverseSort;           // flag for OnCompareItems
 | 
				
			||||||
  wxTreeItemId m_lastItem;              // for OnEnsureVisible()
 | 
					    wxTreeItemId m_lastItem;              // for OnEnsureVisible()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS()
 | 
					    // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS()
 | 
				
			||||||
  //     if you want your overloaded OnCompareItems() to be called.
 | 
					    //     if you want your overloaded OnCompareItems() to be called.
 | 
				
			||||||
  //     OTOH, if you don't want it you may omit the next line - this will
 | 
					    //     OTOH, if you don't want it you may omit the next line - this will
 | 
				
			||||||
  //     make default (alphabetical) sorting much faster under wxMSW.
 | 
					    //     make default (alphabetical) sorting much faster under wxMSW.
 | 
				
			||||||
  DECLARE_DYNAMIC_CLASS(MyTreeCtrl)
 | 
					    DECLARE_DYNAMIC_CLASS(MyTreeCtrl)
 | 
				
			||||||
  DECLARE_EVENT_TABLE()
 | 
					    DECLARE_EVENT_TABLE()
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Define a new frame type
 | 
					// Define a new frame type
 | 
				
			||||||
class MyFrame: public wxFrame
 | 
					class MyFrame: public wxFrame
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  // ctor and dtor
 | 
					    // ctor and dtor
 | 
				
			||||||
  MyFrame(const wxString& title, int x, int y, int w, int h);
 | 
					    MyFrame(const wxString& title, int x, int y, int w, int h);
 | 
				
			||||||
  virtual ~MyFrame();
 | 
					    virtual ~MyFrame();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // menu callbacks
 | 
					    // menu callbacks
 | 
				
			||||||
  void OnQuit(wxCommandEvent& event);
 | 
					    void OnQuit(wxCommandEvent& event);
 | 
				
			||||||
  void OnAbout(wxCommandEvent& event);
 | 
					    void OnAbout(wxCommandEvent& event);
 | 
				
			||||||
  void OnDump(wxCommandEvent& event);
 | 
					 | 
				
			||||||
  void OnDelete(wxCommandEvent& event);
 | 
					 | 
				
			||||||
  void OnDeleteChildren(wxCommandEvent& event);
 | 
					 | 
				
			||||||
  void OnDeleteAll(wxCommandEvent& event);
 | 
					 | 
				
			||||||
  void OnRecreate(wxCommandEvent& event);
 | 
					 | 
				
			||||||
  void OnCollapseAndReset(wxCommandEvent& event);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void OnSetBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(TRUE); }
 | 
					    void OnDump(wxCommandEvent& event);
 | 
				
			||||||
  void OnClearBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(FALSE); }
 | 
					    void OnDelete(wxCommandEvent& event);
 | 
				
			||||||
 | 
					    void OnDeleteChildren(wxCommandEvent& event);
 | 
				
			||||||
 | 
					    void OnDeleteAll(wxCommandEvent& event);
 | 
				
			||||||
 | 
					    void OnRecreate(wxCommandEvent& event);
 | 
				
			||||||
 | 
					    void OnCollapseAndReset(wxCommandEvent& event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void OnEnsureVisible(wxCommandEvent& event);
 | 
					    void OnSetBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(TRUE); }
 | 
				
			||||||
 | 
					    void OnClearBold(wxCommandEvent& WXUNUSED(event)) { DoSetBold(FALSE); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void OnRename(wxCommandEvent& event);
 | 
					    void OnEnsureVisible(wxCommandEvent& event);
 | 
				
			||||||
  void OnSort(wxCommandEvent& event) { DoSort(); }
 | 
					
 | 
				
			||||||
  void OnSortRev(wxCommandEvent& event) { DoSort(TRUE); }
 | 
					    void OnRename(wxCommandEvent& event);
 | 
				
			||||||
 | 
					    void OnSort(wxCommandEvent& event) { DoSort(); }
 | 
				
			||||||
 | 
					    void OnSortRev(wxCommandEvent& event) { DoSort(TRUE); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void OnAddItem(wxCommandEvent& event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  void DoSort(bool reverse = FALSE);
 | 
					    void DoSort(bool reverse = FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MyTreeCtrl *m_treeCtrl;
 | 
					    MyTreeCtrl *m_treeCtrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void DoSetBold(bool bold = TRUE);
 | 
					    void DoSetBold(bool bold = TRUE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  DECLARE_EVENT_TABLE()
 | 
					    DECLARE_EVENT_TABLE()
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// menu and control ids
 | 
					// menu and control ids
 | 
				
			||||||
enum
 | 
					enum
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  TreeTest_Quit,
 | 
					    TreeTest_Quit,
 | 
				
			||||||
  TreeTest_About,
 | 
					    TreeTest_About,
 | 
				
			||||||
  TreeTest_Dump,
 | 
					    TreeTest_Dump,
 | 
				
			||||||
  TreeTest_Sort,
 | 
					    TreeTest_Sort,
 | 
				
			||||||
  TreeTest_SortRev,
 | 
					    TreeTest_SortRev,
 | 
				
			||||||
  TreeTest_Bold,
 | 
					    TreeTest_Bold,
 | 
				
			||||||
  TreeTest_UnBold,
 | 
					    TreeTest_UnBold,
 | 
				
			||||||
  TreeTest_Rename,
 | 
					    TreeTest_Rename,
 | 
				
			||||||
  TreeTest_Delete,
 | 
					    TreeTest_Delete,
 | 
				
			||||||
  TreeTest_DeleteChildren,
 | 
					    TreeTest_DeleteChildren,
 | 
				
			||||||
  TreeTest_DeleteAll,
 | 
					    TreeTest_DeleteAll,
 | 
				
			||||||
  TreeTest_Recreate,
 | 
					    TreeTest_Recreate,
 | 
				
			||||||
  TreeTest_CollapseAndReset,
 | 
					    TreeTest_CollapseAndReset,
 | 
				
			||||||
  TreeTest_EnsureVisible,
 | 
					    TreeTest_EnsureVisible,
 | 
				
			||||||
  TreeTest_Ctrl = 100
 | 
					    TreeTest_AddItem,
 | 
				
			||||||
 | 
					    TreeTest_Ctrl = 100
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user