Add the ability to handle bad layouts to BALMLayout.

This commit is contained in:
Alex Wilson
2012-05-03 08:44:45 +12:00
parent 57d93f836d
commit 2bbf8b1fbc
2 changed files with 87 additions and 22 deletions
+19
View File
@@ -102,6 +102,10 @@ public:
bool SaveLayout(BMessage* archive) const;
bool RestoreLayout(const BMessage* archive);
struct BadLayoutPolicy;
void SetBadLayoutPolicy(BadLayoutPolicy* policy);
BadLayoutPolicy* GetBadLayoutPolicy() const;
virtual BSize BaseMinSize();
virtual BSize BaseMaxSize();
@@ -117,6 +121,18 @@ protected:
virtual void LayoutInvalidated(bool children);
virtual void DoLayout();
public:
struct BadLayoutPolicy {
virtual ~BadLayoutPolicy();
/* return false to abandon layout, true to use layout */
virtual bool OnBadLayout(BALMLayout* layout) = 0;
};
struct DefaultPolicy : public BadLayoutPolicy {
virtual ~DefaultPolicy();
virtual bool OnBadLayout(BALMLayout* layout);
};
private:
// FBC padding
@@ -151,6 +167,8 @@ private:
BSize _CalculateMaxSize();
BSize _CalculatePreferredSize();
bool _TrySolve();
LinearProgramming::LinearSpec* fSolver;
LinearProgramming::LinearSpec fOwnSolver;
@@ -175,6 +193,7 @@ private:
RowColumnManager* fRowColumnManager;
BadLayoutPolicy* fBadLayoutPolicy;
uint32 _reserved[5];
};