1/*
2 * Copyright 2006-2010, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef	_GROUP_LAYOUT_BUILDER_H
6#define	_GROUP_LAYOUT_BUILDER_H
7
8#include <GroupLayout.h>
9#include <GroupView.h>
10#include <List.h>
11
12class BGroupLayoutBuilder {
13public:
14								BGroupLayoutBuilder(
15									orientation orientation = B_HORIZONTAL,
16									float spacing = B_USE_DEFAULT_SPACING);
17								BGroupLayoutBuilder(BGroupLayout* layout);
18								BGroupLayoutBuilder(BGroupView* view);
19
20			BGroupLayout*		RootLayout() const;
21			BGroupLayout*		TopLayout() const;
22			BGroupLayoutBuilder& GetTopLayout(BGroupLayout** _layout);
23			BView*				TopView() const;
24			BGroupLayoutBuilder& GetTopView(BView** _view);
25
26			BGroupLayoutBuilder& Add(BView* view);
27			BGroupLayoutBuilder& Add(BView* view, float weight);
28			BGroupLayoutBuilder& Add(BLayoutItem* item);
29			BGroupLayoutBuilder& Add(BLayoutItem* item, float weight);
30
31			BGroupLayoutBuilder& AddGroup(orientation orientation,
32									float spacing = B_USE_DEFAULT_SPACING,
33									float weight = 1.0f);
34			BGroupLayoutBuilder& End();
35
36			BGroupLayoutBuilder& AddGlue(float weight = 1.0f);
37			BGroupLayoutBuilder& AddStrut(float size);
38
39			BGroupLayoutBuilder& SetInsets(float left, float top, float right,
40									float bottom);
41
42								operator BGroupLayout*();
43
44private:
45			bool				_PushLayout(BGroupLayout* layout);
46			void				_PopLayout();
47
48private:
49			BGroupLayout*		fRootLayout;
50			BList				fLayoutStack;
51};
52
53#endif	// _GROUP_LAYOUT_BUILDER_H
54