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