1/*
2 * Copyright 2007, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5#ifndef WIDGET_LAYOUT_TEST_GROUP_VIEW_H
6#define WIDGET_LAYOUT_TEST_GROUP_VIEW_H
7
8
9#include "View.h"
10
11
12// GroupView
13class GroupView : public View {
14public:
15								GroupView(enum orientation orientation,
16									int32 lineCount = 1);
17	virtual						~GroupView();
18
19			void				SetSpacing(float horizontal, float vertical);
20			void				SetInsets(float left, float top, float right,
21									float bottom);
22
23	virtual	BSize 				MinSize();
24	virtual	BSize 				MaxSize();
25	virtual	BSize 				PreferredSize();
26	virtual	BAlignment			Alignment();
27
28	virtual	void				InvalidateLayout();
29	virtual	void				Layout();
30
31private:
32	struct LayoutInfo;
33
34private:
35			void				_ValidateMinMax();
36			void				_LayoutLine(int32 size, LayoutInfo* infos,
37									int32 infoCount);
38
39			BSize				_AddInsetsAndSpacing(BSize size);
40			BSize				_SubtractInsetsAndSpacing(BSize size);
41
42			int32				_RowCount() const;
43			int32				_ColumnCount() const;
44			View*				_ChildAt(int32 column, int32 row) const;
45
46private:
47			enum orientation	fOrientation;
48			int32				fLineCount;
49			float				fColumnSpacing;
50			float				fRowSpacing;
51			BRect				fInsets;
52			bool				fMinMaxValid;
53			int32				fMinWidth;
54			int32				fMinHeight;
55			int32				fMaxWidth;
56			int32				fMaxHeight;
57			int32				fPreferredWidth;
58			int32				fPreferredHeight;
59			LayoutInfo*			fColumnInfos;
60			LayoutInfo*			fRowInfos;
61			int32				fColumnCount;
62			int32				fRowCount;
63};
64
65
66// Glue
67class Glue : public View {
68public:
69								Glue();
70};
71
72
73// Strut
74class Strut : public View {
75public:
76								Strut(float pixelWidth, float pixelHeight);
77
78	virtual	BSize				MinSize();
79	virtual	BSize				MaxSize();
80
81private:
82			BSize				fSize;
83};
84
85
86// HStrut
87class HStrut : public Strut {
88public:
89								HStrut(float width);
90};
91
92
93// VStrut
94class VStrut : public Strut {
95public:
96								VStrut(float height);
97};
98
99
100#endif	// WIDGET_LAYOUT_TEST_GROUP_VIEW_H
101