status_t BListView::Archive(BMessage* archive, bool deep) const { status_t status = BView::Archive(archive, deep); if (status < B_OK) return status; status = archive->AddInt32("_lv_type", fListType); if (status == B_OK && deep) { BListItem* item; int32 i = 0; while ((item = ItemAt(i++))) { BMessage subData; status = item->Archive(&subData, true); if (status >= B_OK) status = archive->AddMessage("_l_items", &subData); if (status < B_OK) break; } } if (status >= B_OK && InvocationMessage() != NULL) status = archive->AddMessage("_msg", InvocationMessage()); if (status == B_OK && fSelectMessage != NULL) status = archive->AddMessage("_2nd_msg", fSelectMessage); return status; }
status_t BOutlineListView::Archive(BMessage* archive, bool deep) const { // Note: We can't call the BListView Archive function here, as we are also // interested in subitems BOutlineListView can have. They are even stored // with a different field name (_l_full_items vs. _l_items). status_t status = BView::Archive(archive, deep); if (status != B_OK) return status; status = archive->AddInt32("_lv_type", fListType); if (status == B_OK && deep) { int32 i = 0; BListItem* item = NULL; while ((item = static_cast<BListItem*>(fFullList.ItemAt(i++)))) { BMessage subData; status = item->Archive(&subData, true); if (status >= B_OK) status = archive->AddMessage("_l_full_items", &subData); if (status < B_OK) break; } } if (status >= B_OK && InvocationMessage() != NULL) status = archive->AddMessage("_msg", InvocationMessage()); if (status == B_OK && fSelectMessage != NULL) status = archive->AddMessage("_2nd_msg", fSelectMessage); return status; }