2 * Copyright 2012, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
5 #ifndef _SHARED_SOLVER_H
6 #define _SHARED_SOLVER_H
11 #include <Archivable.h>
12 #include <LayoutContext.h>
13 #include <ObjectList.h>
14 #include <Referenceable.h>
16 #include "LinearSpec.h"
26 using BALM::BALMLayout
;
33 class SharedSolver
: BLayoutContextListener
, public BReferenceable
,
36 SharedSolver(BMessage
* archive
);
40 void Invalidate(bool children
);
42 LinearSpec
* Solver() const;
45 void RegisterLayout(BALMLayout
* layout
);
46 void LayoutLeaving(const BALMLayout
* layout
);
48 ResultType
ValidateMinSize();
49 ResultType
ValidateMaxSize();
50 ResultType
ValidatePreferredSize();
51 ResultType
ValidateLayout(BLayoutContext
* context
);
53 status_t
AddFriendReferences(const BALMLayout
* layout
,
54 BMessage
* archive
, const char* field
);
56 status_t
Archive(BMessage
* archive
, bool deep
) const;
57 status_t
AllArchived(BMessage
* archive
) const;
58 status_t
AllUnarchived(const BMessage
* archive
);
60 static BArchivable
* Instantiate(BMessage
* archive
);
63 struct MinSizeValidator
;
64 struct MaxSizeValidator
;
65 struct PreferredSizeValidator
;
67 friend struct MinSizeValidator
;
68 friend struct MaxSizeValidator
;
69 friend struct PreferredSizeValidator
;
72 static void _AddConstraintsToSet(Area
* area
,
73 std::set
<const Constraint
*>& constraints
);
74 static status_t
_AddConstraintToArchive(Constraint
* constraint
,
76 status_t
_InstantiateConstraint(const void* rawData
,
77 ssize_t numBytes
, BUnarchiver
& unarchiver
);
79 void SetMaxSize(BALM::BALMLayout
* layout
,
81 void SetMinSize(BALM::BALMLayout
* layout
,
83 void SetPreferredSize(BALM::BALMLayout
* layout
,
84 const BSize
& preferred
);
86 virtual void LayoutContextLeft(BLayoutContext
* context
);
88 void _UpdateConstraints();
89 void _SetContext(BLayoutContext
* context
);
92 void _ValidateConstraints();
94 template <class Validator
>
95 void _Validate(bool& isValid
, ResultType
& result
);
98 bool fConstraintsValid
;
101 bool fPreferredValid
;
104 BLayoutContext
* fLayoutContext
;
105 BObjectList
<BALM::BALMLayout
> fLayouts
;
106 LinearSpec fLinearSpec
;
108 ResultType fMinResult
;
109 ResultType fMaxResult
;
110 ResultType fPreferredResult
;
111 ResultType fLayoutResult
;
118 using BPrivate::SharedSolver
;