From 12463fa89116e2ec05efad4cb913e529c95f5b8b Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Tue, 20 Jul 2010 08:24:19 +0000 Subject: [PATCH] Patch by Alex Wilson: Added archiving/unarchiving support to BSplitView. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37612 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/interface/SplitView.h | 7 +++++- src/kits/interface/SplitView.cpp | 41 ++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/headers/os/interface/SplitView.h b/headers/os/interface/SplitView.h index 2db9067cf4..b72b2ba012 100644 --- a/headers/os/interface/SplitView.h +++ b/headers/os/interface/SplitView.h @@ -1,5 +1,5 @@ /* - * Copyright 2006, Haiku, Inc. All rights reserved. + * Copyright 2006-2010, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _SPLIT_VIEW_H @@ -16,6 +16,7 @@ public: enum orientation orientation = B_HORIZONTAL, float spacing = 0.0f); + BSplitView(BMessage* from); virtual ~BSplitView(); void SetInsets(float left, float top, float right, @@ -59,6 +60,10 @@ public: virtual void SetLayout(BLayout* layout); // overridden to avoid use + virtual status_t Archive(BMessage* into, bool deep = true) const; + virtual status_t AllUnarchived(const BMessage* from); + static BArchivable* Instantiate(BMessage* from); + protected: virtual void DrawSplitter(BRect frame, const BRect& updateRect, diff --git a/src/kits/interface/SplitView.cpp b/src/kits/interface/SplitView.cpp index 06f99dcc4b..77eb6f0edb 100644 --- a/src/kits/interface/SplitView.cpp +++ b/src/kits/interface/SplitView.cpp @@ -7,6 +7,7 @@ #include +#include #include #include @@ -23,6 +24,15 @@ BSplitView::BSplitView(enum orientation orientation, float spacing) } +BSplitView::BSplitView(BMessage* from) + : + BView(BUnarchiver::PrepareArchive(from)), + fSplitLayout(NULL) +{ + BUnarchiver(from).Finish(); +} + + BSplitView::~BSplitView() { } @@ -216,6 +226,37 @@ BSplitView::SetLayout(BLayout* layout) } +status_t +BSplitView::Archive(BMessage* into, bool deep) const +{ + return BView::Archive(into, deep); +} + + +status_t +BSplitView::AllUnarchived(const BMessage* from) +{ + status_t err = BView::AllUnarchived(from); + if (err == B_OK) { + fSplitLayout = dynamic_cast(GetLayout()); + if (!fSplitLayout && GetLayout()) + return B_BAD_TYPE; + else if (!fSplitLayout) + return B_ERROR; + } + return err; +} + + +BArchivable* +BSplitView::Instantiate(BMessage* from) +{ + if (validate_instantiation(from, "BSplitView")) + return new BSplitView(from); + return NULL; +} + + void BSplitView::DrawSplitter(BRect frame, const BRect& updateRect, enum orientation orientation, bool pressed)