Make BALMLayout::BadLayoutPolicy archivable.
This commit is contained in:
parent
35bf0b5c1c
commit
015e5f06d8
@ -140,17 +140,26 @@ protected:
|
||||
virtual void DoLayout();
|
||||
|
||||
public:
|
||||
struct BadLayoutPolicy {
|
||||
virtual ~BadLayoutPolicy();
|
||||
struct BadLayoutPolicy : public BArchivable {
|
||||
BadLayoutPolicy();
|
||||
BadLayoutPolicy(BMessage* archive);
|
||||
virtual ~BadLayoutPolicy();
|
||||
/* return false to abandon layout, true to use layout */
|
||||
virtual bool OnBadLayout(BALMLayout* layout,
|
||||
LinearProgramming::ResultType result, BLayoutContext* context) = 0;
|
||||
virtual bool OnBadLayout(BALMLayout* layout,
|
||||
LinearProgramming::ResultType result,
|
||||
BLayoutContext* context) = 0;
|
||||
};
|
||||
|
||||
struct DefaultPolicy : public BadLayoutPolicy {
|
||||
virtual ~DefaultPolicy();
|
||||
virtual bool OnBadLayout(BALMLayout* layout,
|
||||
LinearProgramming::ResultType result, BLayoutContext* context);
|
||||
DefaultPolicy();
|
||||
DefaultPolicy(BMessage* archive);
|
||||
virtual ~DefaultPolicy();
|
||||
virtual bool OnBadLayout(BALMLayout* layout,
|
||||
LinearProgramming::ResultType result,
|
||||
BLayoutContext* context);
|
||||
virtual status_t Archive(BMessage* message,
|
||||
bool deep = false) const;
|
||||
static BArchivable* Instantiate(BMessage* message);
|
||||
};
|
||||
|
||||
private:
|
||||
|
@ -29,6 +29,7 @@ const BSize kUnsetSize(B_SIZE_UNSET, B_SIZE_UNSET);
|
||||
namespace {
|
||||
|
||||
const char* kFriendField = "BALMLayout:friends";
|
||||
const char* kBadLayoutPolicyField = "BALMLayout:policy";
|
||||
const char* kXTabsField = "BALMLayout:xtabs";
|
||||
const char* kYTabsField = "BALMLayout:ytabs";
|
||||
const char* kTabsField = "BALMLayout:item:tabs";
|
||||
@ -113,11 +114,35 @@ BALMLayout::TabAddTransaction<YTab>::_TabList()
|
||||
}; // end namespace BALM
|
||||
|
||||
|
||||
BALM::BALMLayout::BadLayoutPolicy::BadLayoutPolicy()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BALM::BALMLayout::BadLayoutPolicy::BadLayoutPolicy(BMessage* archive)
|
||||
:
|
||||
BArchivable(archive)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BALM::BALMLayout::BadLayoutPolicy::~BadLayoutPolicy()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BALM::BALMLayout::DefaultPolicy::DefaultPolicy()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BALM::BALMLayout::DefaultPolicy::DefaultPolicy(BMessage* archive)
|
||||
:
|
||||
BadLayoutPolicy(archive)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BALM::BALMLayout::DefaultPolicy::~DefaultPolicy()
|
||||
{
|
||||
}
|
||||
@ -138,6 +163,22 @@ BALM::BALMLayout::DefaultPolicy::OnBadLayout(BALMLayout* layout,
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
BALM::BALMLayout::DefaultPolicy::Archive(BMessage* archive, bool deep) const
|
||||
{
|
||||
return BadLayoutPolicy::Archive(archive, deep);
|
||||
}
|
||||
|
||||
|
||||
BArchivable*
|
||||
BALM::BALMLayout::DefaultPolicy::Instantiate(BMessage* archive)
|
||||
{
|
||||
if (validate_instantiation(archive, "BALM::BALMLayout::DefaultPolicy"))
|
||||
return new DefaultPolicy(archive);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* Constructor.
|
||||
* Creates new layout engine.
|
||||
@ -225,6 +266,9 @@ BALMLayout::BALMLayout(BMessage* archive)
|
||||
for (int32 i = 0; i < tabCount && err == B_OK; i++)
|
||||
err = unarchiver.EnsureUnarchived(kYTabsField, i);
|
||||
|
||||
if (err == B_OK && archive->GetInfo(kBadLayoutPolicyField, NULL) == B_OK)
|
||||
err = unarchiver.EnsureUnarchived(kBadLayoutPolicyField);
|
||||
|
||||
unarchiver.Finish(err);
|
||||
}
|
||||
|
||||
@ -1013,6 +1057,8 @@ BALMLayout::Archive(BMessage* into, bool deep) const
|
||||
|
||||
for (int32 i = CountYTabs() - 1; i >= 0 && err == B_OK; i--)
|
||||
err = archiver.AddArchivable(kYTabsField, YTabAt(i));
|
||||
|
||||
err = archiver.AddArchivable(kBadLayoutPolicyField, fBadLayoutPolicy);
|
||||
}
|
||||
|
||||
if (err == B_OK)
|
||||
@ -1111,6 +1157,16 @@ BALMLayout::AllUnarchived(const BMessage* archive)
|
||||
}
|
||||
}
|
||||
|
||||
if (err != B_OK)
|
||||
return err;
|
||||
|
||||
if (archive->GetInfo(kBadLayoutPolicyField, NULL) == B_OK) {
|
||||
BadLayoutPolicy* policy;
|
||||
err = unarchiver.FindObject(kBadLayoutPolicyField, policy);
|
||||
if (err == B_OK)
|
||||
SetBadLayoutPolicy(policy);
|
||||
}
|
||||
|
||||
LinearSpec* spec = Solver();
|
||||
int32 tabCount = 0;
|
||||
archive->GetInfo(kXTabsField, NULL, &tabCount);
|
||||
|
Loading…
x
Reference in New Issue
Block a user