2. wxTreeCtrl::CollapseAndReset() doesn't destroy the item itself any more
3. wxTreeCtrl::Delete() sends wxEVT_COMMAND_TREE_CHILDREN event (but
DeleteChildren() and DeleteAll() do not!)
4. Sample modified to show the new function too
5. Micro redraw bug fixed (small vertical line was sometimes drawn when it
shouldn't have been)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1224
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// delete this item and associated data if any
void Delete(const wxTreeItemId& item);
// delete this item and associated data if any
void Delete(const wxTreeItemId& item);
+ // delete all children (but don't delete the item itself)
+ // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
+ void DeleteChildren(const wxTreeItemId& item);
// delete all items from the tree
// delete all items from the tree
+ // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
void DeleteAllItems();
// expand this item
void DeleteAllItems();
// expand this item
// delete this item and associated data if any
void Delete(const wxTreeItemId& item);
// delete this item and associated data if any
void Delete(const wxTreeItemId& item);
+ // delete all children (but don't delete the item itself)
+ // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
+ void DeleteChildren(const wxTreeItemId& item);
// delete all items from the tree
// delete all items from the tree
+ // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
void DeleteAllItems();
// expand this item
void DeleteAllItems();
// expand this item
EVT_MENU(TreeTest_Bold, MyFrame::OnSetBold)
EVT_MENU(TreeTest_UnBold, MyFrame::OnClearBold)
EVT_MENU(TreeTest_Delete, MyFrame::OnDelete)
EVT_MENU(TreeTest_Bold, MyFrame::OnSetBold)
EVT_MENU(TreeTest_UnBold, MyFrame::OnClearBold)
EVT_MENU(TreeTest_Delete, MyFrame::OnDelete)
+ EVT_MENU(TreeTest_DeleteChildren, MyFrame::OnDeleteChildren)
EVT_MENU(TreeTest_DeleteAll, MyFrame::OnDeleteAll)
EVT_MENU(TreeTest_Recreate, MyFrame::OnRecreate)
END_EVENT_TABLE()
EVT_MENU(TreeTest_DeleteAll, MyFrame::OnDeleteAll)
EVT_MENU(TreeTest_Recreate, MyFrame::OnRecreate)
END_EVENT_TABLE()
wxMenu *file_menu = new wxMenu;
file_menu->Append(TreeTest_Dump, "D&ump tree items");
wxMenu *file_menu = new wxMenu;
file_menu->Append(TreeTest_Dump, "D&ump tree items");
+ file_menu->Append(TreeTest_Recreate, "&Recreate the tree");
+ file_menu->AppendSeparator();
file_menu->Append(TreeTest_Delete, "&Delete this item");
file_menu->Append(TreeTest_Delete, "&Delete this item");
+ file_menu->Append(TreeTest_DeleteChildren, "Delete &children");
file_menu->Append(TreeTest_DeleteAll, "Delete &all items");
file_menu->Append(TreeTest_DeleteAll, "Delete &all items");
- file_menu->Append(TreeTest_Recreate, "&Recreate the tree");
file_menu->AppendSeparator();
file_menu->Append(TreeTest_Bold, "Make item &bold");
file_menu->Append(TreeTest_UnBold, "Make item ¬ bold");
file_menu->AppendSeparator();
file_menu->Append(TreeTest_Bold, "Make item &bold");
file_menu->Append(TreeTest_UnBold, "Make item ¬ bold");
m_treeCtrl->Delete(item);
}
m_treeCtrl->Delete(item);
}
+void MyFrame::OnDeleteChildren(wxCommandEvent& WXUNUSED(event))
+{
+ wxTreeItemId item = m_treeCtrl->GetSelection();
+ m_treeCtrl->DeleteChildren(item);
+}
+
void MyFrame::OnDeleteAll(wxCommandEvent& WXUNUSED(event))
{
m_treeCtrl->DeleteAllItems();
void MyFrame::OnDeleteAll(wxCommandEvent& WXUNUSED(event))
{
m_treeCtrl->DeleteAllItems();
void OnAbout(wxCommandEvent& event);
void OnDump(wxCommandEvent& event);
void OnDelete(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 OnDeleteAll(wxCommandEvent& event);
void OnRecreate(wxCommandEvent& event);
TreeTest_Bold,
TreeTest_UnBold,
TreeTest_Delete,
TreeTest_Bold,
TreeTest_UnBold,
TreeTest_Delete,
+ TreeTest_DeleteChildren,
TreeTest_DeleteAll,
TreeTest_Recreate,
TreeTest_Ctrl = 100
TreeTest_DeleteAll,
TreeTest_Recreate,
TreeTest_Ctrl = 100
wxGenericTreeItem *GetParent() const { return m_parent; }
// operations
wxGenericTreeItem *GetParent() const { return m_parent; }
// operations
void Reset();
// get count of all children (and grand children if 'recursively')
void Reset();
// get count of all children (and grand children if 'recursively')
+ DeleteChildren();
+}
+
+void wxGenericTreeItem::DeleteChildren()
+{
size_t count = m_children.Count();
for ( size_t n = 0; n < count; n++ )
delete m_children[n];
size_t count = m_children.Count();
for ( size_t n = 0; n < count; n++ )
delete m_children[n];
}
void wxGenericTreeItem::SetText( const wxString &text, wxDC& dc )
}
void wxGenericTreeItem::SetText( const wxString &text, wxDC& dc )
m_isCollapsed = TRUE;
m_parent = (wxGenericTreeItem *)NULL;
m_isCollapsed = TRUE;
m_parent = (wxGenericTreeItem *)NULL;
image, selImage, data);
}
image, selImage, data);
}
+void wxTreeCtrl::DeleteChildren(const wxTreeItemId& itemId)
+{
+ wxGenericTreeItem *item = itemId.m_pItem;
+ item->DeleteChildren();
+
+ m_dirty = TRUE;
+}
+
void wxTreeCtrl::Delete(const wxTreeItemId& itemId)
{
wxGenericTreeItem *item = itemId.m_pItem;
wxGenericTreeItem *parent = item->GetParent();
void wxTreeCtrl::Delete(const wxTreeItemId& itemId)
{
wxGenericTreeItem *item = itemId.m_pItem;
wxGenericTreeItem *parent = item->GetParent();
+ // notify the parent...
+ wxTreeEvent event( wxEVT_COMMAND_TREE_DELETE_ITEM, GetId() );
+ event.m_item = item;
+ event.SetEventObject( this );
+ ProcessEvent( event );
+
if ( parent )
{
parent->GetChildren().Remove(item);
if ( parent )
{
parent->GetChildren().Remove(item);
void wxTreeCtrl::CollapseAndReset(const wxTreeItemId& item)
{
Collapse(item);
void wxTreeCtrl::CollapseAndReset(const wxTreeItemId& item)
{
Collapse(item);
}
void wxTreeCtrl::Toggle(const wxTreeItemId& itemId)
}
void wxTreeCtrl::Toggle(const wxTreeItemId& itemId)
- if ( !item->IsExpanded() )
- return;
+ if ( item->IsExpanded() )
+ {
+ int semiOldY = y;
+ wxArrayTreeItems& children = item->GetChildren();
+ size_t count = children.Count();
+ for ( size_t n = 0; n < count; n++ )
+ {
+ y += m_lineHeight;
+ semiOldY = y;
- wxArrayTreeItems& children = item->GetChildren();
- size_t count = children.Count();
- for ( size_t n = 0; n < count; n++ )
- {
- y += m_lineHeight;
- semiOldY = y;
+ PaintLevel( children[n], dc, level+1, y );
+ }
- PaintLevel( children[n], dc, level+1, y );
+ // it may happen that the item is expanded but has no items (when you
+ // delete all its children for example) - don't draw the vertical line
+ // in this case
+ if ( count > 0 )
+ dc.DrawLine( horizX+15, oldY+5, horizX+15, semiOldY );
-
- dc.DrawLine( horizX+15, oldY+5, horizX+15, semiOldY );
}
// -----------------------------------------------------------------------------
}
// -----------------------------------------------------------------------------