1/*
2 * Copyright 2006-2010, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef	_GROUP_LAYOUT_H
6#define	_GROUP_LAYOUT_H
7
8#include <TwoDimensionalLayout.h>
9
10class BGroupLayout : public BTwoDimensionalLayout {
11public:
12								BGroupLayout(orientation orientation,
13									float spacing = B_USE_DEFAULT_SPACING);
14								BGroupLayout(BMessage* from);
15	virtual						~BGroupLayout();
16
17			float				Spacing() const;
18			void				SetSpacing(float spacing);
19
20			orientation			Orientation() const;
21			void				SetOrientation(orientation orientation);
22
23			float				ItemWeight(int32 index) const;
24			void				SetItemWeight(int32 index, float weight);
25
26	virtual	BLayoutItem*		AddView(BView* child);
27	virtual	BLayoutItem*		AddView(int32 index, BView* child);
28	virtual	BLayoutItem*		AddView(BView* child, float weight);
29	virtual	BLayoutItem*		AddView(int32 index, BView* child,
30									float weight);
31
32	virtual	bool				AddItem(BLayoutItem* item);
33	virtual	bool				AddItem(int32 index, BLayoutItem* item);
34	virtual	bool				AddItem(BLayoutItem* item, float weight);
35	virtual	bool				AddItem(int32 index, BLayoutItem* item,
36									float weight);
37
38	virtual status_t			Archive(BMessage* into, bool deep = true) const;
39	static	BArchivable*		Instantiate(BMessage* from);
40
41	virtual	status_t			Perform(perform_code d, void* arg);
42
43protected:
44	virtual status_t			AllArchived(BMessage* into) const;
45	virtual	status_t			AllUnarchived(const BMessage* from);
46	virtual status_t			ItemArchived(BMessage* into, BLayoutItem* item,
47									int32 index) const;
48	virtual	status_t			ItemUnarchived(const BMessage* from,
49									BLayoutItem* item, int32 index);
50
51	virtual	bool				ItemAdded(BLayoutItem* item, int32 atIndex);
52	virtual	void				ItemRemoved(BLayoutItem* item, int32 fromIndex);
53
54	virtual	void				PrepareItems(orientation orientation);
55
56	virtual	int32				InternalCountColumns();
57	virtual	int32				InternalCountRows();
58	virtual	void				GetColumnRowConstraints(
59									orientation orientation,
60									int32 index,
61									ColumnRowConstraints* constraints);
62	virtual	void				GetItemDimensions(BLayoutItem* item,
63									Dimensions* dimensions);
64
65private:
66
67	// FBC padding
68	virtual	void				_ReservedGroupLayout1();
69	virtual	void				_ReservedGroupLayout2();
70	virtual	void				_ReservedGroupLayout3();
71	virtual	void				_ReservedGroupLayout4();
72	virtual	void				_ReservedGroupLayout5();
73	virtual	void				_ReservedGroupLayout6();
74	virtual	void				_ReservedGroupLayout7();
75	virtual	void				_ReservedGroupLayout8();
76	virtual	void				_ReservedGroupLayout9();
77	virtual	void				_ReservedGroupLayout10();
78
79	// forbidden methods
80								BGroupLayout(const BGroupLayout&);
81			void				operator =(const BGroupLayout&);
82
83			struct ItemLayoutData;
84
85			ItemLayoutData*		_LayoutDataForItem(BLayoutItem* item) const;
86
87			orientation			fOrientation;
88			BList				fVisibleItems;
89
90			uint32				_reserved[5];
91};
92
93#endif	// _GROUP_LAYOUT_H
94