int Safe::totalNumItems(const SafeGroup *group, int type) const { // c++ didn't like this at toplevel if(group == NULL) { group = this; } SafeGroup::Iterator it(group); int count = 0; while(it.current()) { SafeItem *item = *it; if(item->rtti() == type) { count++; } if(item->rtti() == SafeGroup::RTTI) { count += totalNumItems(dynamic_cast<const SafeGroup *>(item), type); } ++it; } return count; }
/** Saves a group and all of its children to a stream. */ Safe::Error PlainTextLizer::saveGroup(QTextStream &file, const SafeGroup *group, const QString &group_name) { Safe::Error ret = Safe::Success; SafeGroup::Iterator it(group); while(it.current()) { SafeItem *item = it.current(); if(item->rtti() == SafeEntry::RTTI) { DBGOUT("item"); ret = saveEntry(file, (SafeEntry *)item, group_name); } else if(item->rtti() == SafeGroup::RTTI) { QString next_group_name(group_name); next_group_name = next_group_name + "/" + escapeGroup(((SafeGroup *)item)->name()); DBGOUT("Group: " << next_group_name); ret = saveGroup(file, (SafeGroup *)item, next_group_name); } if(ret != Safe::Success) break; ++it; } return ret; }
void SafeListView::populate(SafeGroup *group, SafeListViewGroup *view) { if(group) { DBGOUT("populate"); SafeGroup::Iterator iter(group); while(iter.current()) { SafeItem *item = iter.current(); if(item->rtti() == SafeEntry::RTTI) { DBGOUT("Adding item: " << ((SafeEntry *)item)->name()); if(view == NULL) (void)new SafeListViewEntry(this, (SafeEntry *)item); else (void)new SafeListViewEntry(view, (SafeEntry *)item); } else if(item->rtti() == SafeGroup::RTTI) { SafeListViewGroup *g = NULL; DBGOUT("Adding group: " << ((SafeGroup *)item)->name()); if(view == NULL) g = new SafeListViewGroup(this, (SafeGroup *)item); else g = new SafeListViewGroup(view, (SafeGroup *)item); populate((SafeGroup *)item, g); } else { DBGOUT("Unknown item"); } ++iter; } } }