From e5ea208d71e38620c934043f072a68b3edd45ff4 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 17 Jul 2010 02:04:32 +0000 Subject: [PATCH] Patch by Alex Wilson: * Added archiving/unarchiving support. * Coding style cleanup (some by myself). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37549 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/ViewLayoutItem.cpp | 105 +++++++++++++++++++++----- src/kits/interface/ViewLayoutItem.h | 8 +- 2 files changed, 93 insertions(+), 20 deletions(-) diff --git a/src/kits/interface/ViewLayoutItem.cpp b/src/kits/interface/ViewLayoutItem.cpp index 47ed990790..8ce7696355 100644 --- a/src/kits/interface/ViewLayoutItem.cpp +++ b/src/kits/interface/ViewLayoutItem.cpp @@ -1,88 +1,109 @@ /* + * Copyright 2010, Haiku, Inc. * Copyright 2006, Ingo Weinhold . * All rights reserved. Distributed under the terms of the MIT License. */ + #include "ViewLayoutItem.h" +#include + +#include #include -// constructor +namespace { + const char* kViewField = "ViewLayoutItem:view"; +} + + BViewLayoutItem::BViewLayoutItem(BView* view) - : fView(view) + : + fView(view) { } -// destructor + +BViewLayoutItem::BViewLayoutItem(BMessage* from) + : + BLayoutItem(BUnarchiver::PrepareArchive(from)), + fView(NULL) +{ + BUnarchiver unarchiver(from); + unarchiver.Finish(unarchiver.FindObject(kViewField, 0, + BUnarchiver::B_DONT_ASSUME_OWNERSHIP, fView)); +} + + BViewLayoutItem::~BViewLayoutItem() { } -// MinSize + BSize BViewLayoutItem::MinSize() { return fView->MinSize(); } -// MaxSize + BSize BViewLayoutItem::MaxSize() { return fView->MaxSize(); } -// PreferredSize + BSize BViewLayoutItem::PreferredSize() { return fView->PreferredSize(); } -// Alignment + BAlignment BViewLayoutItem::Alignment() { return fView->LayoutAlignment(); } -// SetExplicitMinSize + void BViewLayoutItem::SetExplicitMinSize(BSize size) { fView->SetExplicitMinSize(size); } -// SetExplicitMaxSize + void BViewLayoutItem::SetExplicitMaxSize(BSize size) { fView->SetExplicitMaxSize(size); } -// SetExplicitPreferredSize + void BViewLayoutItem::SetExplicitPreferredSize(BSize size) { fView->SetExplicitPreferredSize(size); } -// SetExplicitAlignment + void BViewLayoutItem::SetExplicitAlignment(BAlignment alignment) { fView->SetExplicitAlignment(alignment); } -// IsVisible + bool BViewLayoutItem::IsVisible() { return !fView->IsHidden(fView); } -// SetVisible + void BViewLayoutItem::SetVisible(bool visible) { @@ -94,14 +115,14 @@ BViewLayoutItem::SetVisible(bool visible) } } -// Frame + BRect BViewLayoutItem::Frame() { return fView->Frame(); } -// SetFrame + void BViewLayoutItem::SetFrame(BRect frame) { @@ -109,14 +130,14 @@ BViewLayoutItem::SetFrame(BRect frame) fView->ResizeTo(frame.Width(), frame.Height()); } -// HasHeightForWidth + bool BViewLayoutItem::HasHeightForWidth() { return fView->HasHeightForWidth(); } -// GetHeightForWidth + void BViewLayoutItem::GetHeightForWidth(float width, float* min, float* max, float* preferred) @@ -124,16 +145,62 @@ BViewLayoutItem::GetHeightForWidth(float width, float* min, float* max, fView->GetHeightForWidth(width, min, max, preferred); } -// View + BView* BViewLayoutItem::View() { return fView; } -// InvalidateLayout + void BViewLayoutItem::InvalidateLayout() { fView->InvalidateLayout(); } + + +status_t +BViewLayoutItem::Archive(BMessage* into, bool deep) const +{ + BArchiver archiver(into); + status_t err = BLayoutItem::Archive(into, deep); + + return archiver.Finish(err); +} + + +status_t +BViewLayoutItem::AllArchived(BMessage* into) const +{ + BArchiver archiver(into); + status_t err = BLayoutItem::AllArchived(into); + + if (err == B_OK) { + if (archiver.IsArchived(fView)) + err = archiver.AddArchivable(kViewField, fView); + else + err = B_NAME_NOT_FOUND; + } + + return err; +} + + +status_t +BViewLayoutItem::AllUnarchived(const BMessage* from) +{ + if (!fView) + return B_ERROR; + + return BLayoutItem::AllUnarchived(from); +} + + +BArchivable* +BViewLayoutItem::Instantiate(BMessage* from) +{ + if (validate_instantiation(from, "BViewLayoutItem")) + return new(std::nothrow) BViewLayoutItem(from); + return NULL; +} diff --git a/src/kits/interface/ViewLayoutItem.h b/src/kits/interface/ViewLayoutItem.h index 0fe78ff937..ee32b63d1d 100644 --- a/src/kits/interface/ViewLayoutItem.h +++ b/src/kits/interface/ViewLayoutItem.h @@ -1,5 +1,5 @@ /* - * Copyright 2006, Haiku Inc. + * Copyright 2006-2010, Haiku Inc. * Distributed under the terms of the MIT License. */ #ifndef _VIEW_LAYOUT_ITEM_H @@ -11,6 +11,7 @@ class BViewLayoutItem : public BLayoutItem { public: BViewLayoutItem(BView* view); + BViewLayoutItem(BMessage* from); virtual ~BViewLayoutItem(); virtual BSize MinSize(); @@ -37,6 +38,11 @@ public: virtual void InvalidateLayout(); + virtual status_t Archive(BMessage* into, bool deep = true) const; + virtual status_t AllArchived(BMessage* into) const; + virtual status_t AllUnarchived(const BMessage* from); + static BArchivable* Instantiate(BMessage* from); + private: BView* fView; };