bool DoRememberExpandedNodes(wxTreeCtrl* tree, const wxTreeItemId& parent, wxArrayString& nodePaths, wxString& path) { // remember expanded tree nodes of this tree if (!tree || !parent.IsOk()) return false; wxString originalPath = path; bool found = false; wxTreeItemIdValue cookie = nullptr; wxTreeItemId child = tree->GetFirstChild(parent, cookie); while (child.IsOk()) { if (tree->ItemHasChildren(child) && tree->IsExpanded(child)) { found = true; path << _T("/") << tree->GetItemText(child); DoRememberExpandedNodes(tree, child, nodePaths, path); nodePaths.Add(path); path = originalPath; } child = tree->GetNextChild(parent, cookie); } return found; }
void SaveTreeState(wxTreeCtrl* tree, const wxTreeItemId& parent, wxArrayString& nodePaths) { nodePaths.Clear(); if (!parent.IsOk() || !tree || !tree->ItemHasChildren(parent) || !tree->IsExpanded(parent)) return; wxString tmp; if (!DoRememberExpandedNodes(tree, parent, nodePaths, tmp)) nodePaths.Add(tmp); // just the tree root }