1/*
2 * Copyright 2010, Haiku, Inc.
3 * Copyright 2006, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
4 * All rights reserved. Distributed under the terms of the MIT License.
5 */
6
7
8#include <AbstractLayoutItem.h>
9
10#include <LayoutUtils.h>
11#include <Message.h>
12
13
14namespace {
15	const char* const kSizesField = "BAbstractLayoutItem:sizes";
16		// kSizesField == {min, max, preferred}
17	const char* const kAlignmentField = "BAbstractLayoutItem:alignment";
18}
19
20
21BAbstractLayoutItem::BAbstractLayoutItem()
22	:
23	fMinSize(),
24	fMaxSize(),
25	fPreferredSize(),
26	fAlignment()
27{
28}
29
30
31BAbstractLayoutItem::BAbstractLayoutItem(BMessage* from)
32	:
33	BLayoutItem(from),
34	fMinSize(),
35	fMaxSize(),
36	fPreferredSize(),
37	fAlignment()
38{
39	from->FindSize(kSizesField, 0, &fMinSize);
40	from->FindSize(kSizesField, 1, &fMaxSize);
41	from->FindSize(kSizesField, 2, &fPreferredSize);
42	from->FindAlignment(kAlignmentField, &fAlignment);
43}
44
45
46BAbstractLayoutItem::~BAbstractLayoutItem()
47{
48}
49
50
51BSize
52BAbstractLayoutItem::MinSize()
53{
54	return BLayoutUtils::ComposeSize(fMinSize, BaseMinSize());
55}
56
57
58BSize
59BAbstractLayoutItem::MaxSize()
60{
61	return BLayoutUtils::ComposeSize(fMaxSize, BaseMaxSize());
62}
63
64
65BSize
66BAbstractLayoutItem::PreferredSize()
67{
68	return BLayoutUtils::ComposeSize(fMaxSize, BasePreferredSize());
69}
70
71
72BAlignment
73BAbstractLayoutItem::Alignment()
74{
75	return BLayoutUtils::ComposeAlignment(fAlignment, BaseAlignment());
76}
77
78
79void
80BAbstractLayoutItem::SetExplicitMinSize(BSize size)
81{
82	fMinSize = size;
83}
84
85
86void
87BAbstractLayoutItem::SetExplicitMaxSize(BSize size)
88{
89	fMaxSize = size;
90}
91
92
93void
94BAbstractLayoutItem::SetExplicitPreferredSize(BSize size)
95{
96	fPreferredSize = size;
97}
98
99
100void
101BAbstractLayoutItem::SetExplicitAlignment(BAlignment alignment)
102{
103	fAlignment = alignment;
104}
105
106
107BSize
108BAbstractLayoutItem::BaseMinSize()
109{
110	return BSize(0, 0);
111}
112
113
114BSize
115BAbstractLayoutItem::BaseMaxSize()
116{
117	return BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED);
118}
119
120
121BSize
122BAbstractLayoutItem::BasePreferredSize()
123{
124	return BSize(0, 0);
125}
126
127
128BAlignment
129BAbstractLayoutItem::BaseAlignment()
130{
131	return BAlignment(B_ALIGN_HORIZONTAL_CENTER, B_ALIGN_VERTICAL_CENTER);
132}
133
134
135status_t
136BAbstractLayoutItem::Archive(BMessage* into, bool deep) const
137{
138	BArchiver archiver(into);
139	status_t err = BLayoutItem::Archive(into, deep);
140
141	if (err == B_OK)
142		err = into->AddSize(kSizesField, fMinSize);
143
144	if (err == B_OK)
145		err = into->AddSize(kSizesField, fMaxSize);
146
147	if (err == B_OK)
148		err = into->AddSize(kSizesField, fPreferredSize);
149
150	if (err == B_OK)
151		err = into->AddAlignment(kAlignmentField, fAlignment);
152
153	return archiver.Finish(err);
154}
155
156
157status_t
158BAbstractLayoutItem::AllUnarchived(const BMessage* archive)
159{
160	return BLayoutItem::AllUnarchived(archive);
161}
162
163
164status_t
165BAbstractLayoutItem::AllArchived(BMessage* archive) const
166{
167	return BLayoutItem::AllArchived(archive);
168}
169
170
171void
172BAbstractLayoutItem::LayoutInvalidated(bool children)
173{
174	BLayoutItem::LayoutInvalidated(children);
175}
176
177
178void
179BAbstractLayoutItem::AttachedToLayout()
180{
181	BLayoutItem::AttachedToLayout();
182}
183
184
185void
186BAbstractLayoutItem::DetachedFromLayout(BLayout* layout)
187{
188	BLayoutItem::DetachedFromLayout(layout);
189}
190
191
192void
193BAbstractLayoutItem::AncestorVisibilityChanged(bool shown)
194{
195	BLayoutItem::AncestorVisibilityChanged(shown);
196}
197
198
199status_t
200BAbstractLayoutItem::Perform(perform_code d, void* arg)
201{
202	return BLayoutItem::Perform(d, arg);
203}
204
205
206void BAbstractLayoutItem::_ReservedAbstractLayoutItem1() {}
207void BAbstractLayoutItem::_ReservedAbstractLayoutItem2() {}
208void BAbstractLayoutItem::_ReservedAbstractLayoutItem3() {}
209void BAbstractLayoutItem::_ReservedAbstractLayoutItem4() {}
210void BAbstractLayoutItem::_ReservedAbstractLayoutItem5() {}
211void BAbstractLayoutItem::_ReservedAbstractLayoutItem6() {}
212void BAbstractLayoutItem::_ReservedAbstractLayoutItem7() {}
213void BAbstractLayoutItem::_ReservedAbstractLayoutItem8() {}
214void BAbstractLayoutItem::_ReservedAbstractLayoutItem9() {}
215void BAbstractLayoutItem::_ReservedAbstractLayoutItem10() {}
216
217