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
This commit is contained in:
Ingo Weinhold 2010-07-17 02:04:32 +00:00
parent 4b20c303bd
commit e5ea208d71
2 changed files with 93 additions and 20 deletions

View File

@ -1,88 +1,109 @@
/*
* Copyright 2010, Haiku, Inc.
* Copyright 2006, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
* All rights reserved. Distributed under the terms of the MIT License.
*/
#include "ViewLayoutItem.h"
#include <new>
#include <Layout.h>
#include <View.h>
// 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<BView>(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;
}

View File

@ -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;
};