void DocHistory::AddChildren(int parent_pos, const doc_id& di, const doc_id& sel_doc, const Catalyst& catalyst) { wxASSERT(di.IsDocument()); const int childCount = catalyst.GetChildCount(di); for (int i = 0; i < childCount; ++i) { const doc_id child = catalyst.GetChildID(di, i); item new_item; new_item.doc = child; new_item.date = catalyst.GetDocDate(child); new_item.parent = parent_pos; // Find the insert pos size_t n; for (n = parent_pos+1; n < m_items.size(); ++n) { if (new_item.date < m_items[n].date) { m_items.insert(m_items.begin()+n, new_item); // The indexes under the insertion has moved, so // we also have to update any references to this range if (m_selectedNode >= (int)n) ++m_selectedNode; for (size_t n2 = n+1; n2 < m_items.size(); ++n2) { int& parent = m_items[n2].parent; if (parent >= (int)n) ++parent; } break; } } if (n == m_items.size()) { m_items.push_back(new_item); } // Check if this is the selected node if (child.IsDocument()) { if (child == sel_doc) m_selectedNode = n; AddChildren(n, child, sel_doc, catalyst); } else if (child.SameDoc(sel_doc)) m_selectedNode = n; } }