* Fixed broken archive functionality, before we would not archive subitems
and store the archived items in the wrong message field. Verified on R5. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26278 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -46,6 +46,17 @@ BOutlineListView::BOutlineListView(BRect frame, const char* name,
|
|||||||
BOutlineListView::BOutlineListView(BMessage* archive)
|
BOutlineListView::BOutlineListView(BMessage* archive)
|
||||||
: BListView(archive)
|
: BListView(archive)
|
||||||
{
|
{
|
||||||
|
int32 i = 0;
|
||||||
|
BMessage subData;
|
||||||
|
while (archive->FindMessage("_l_full_items", i++, &subData) == B_OK) {
|
||||||
|
BArchivable *object = instantiate_object(&subData);
|
||||||
|
if (!object)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
BListItem *item = dynamic_cast<BListItem*>(object);
|
||||||
|
if (item)
|
||||||
|
AddItem(item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -68,7 +79,36 @@ BOutlineListView::Instantiate(BMessage* archive)
|
|||||||
status_t
|
status_t
|
||||||
BOutlineListView::Archive(BMessage* archive, bool deep) const
|
BOutlineListView::Archive(BMessage* archive, bool deep) const
|
||||||
{
|
{
|
||||||
return BListView::Archive(archive, deep);
|
// 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user