xref: /haiku/headers/os/interface/GridLayout.h (revision 675ffabd70492a962f8c0288a32208c22ce5de18)
1 /*
2  * Copyright 2006-2010, Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef	_GRID_LAYOUT_H
6 #define	_GRID_LAYOUT_H
7 
8 #include <TwoDimensionalLayout.h>
9 
10 
11 class BGridLayout : public BTwoDimensionalLayout {
12 public:
13 								BGridLayout(float horizontal
14 										= B_USE_DEFAULT_SPACING,
15 									float vertical = B_USE_DEFAULT_SPACING);
16 								BGridLayout(BMessage* from);
17 	virtual						~BGridLayout();
18 
19 			int32				CountColumns() const;
20 			int32				CountRows() const;
21 
22 			float				HorizontalSpacing() const;
23 			float				VerticalSpacing() const;
24 
25 			void				SetHorizontalSpacing(float spacing);
26 			void				SetVerticalSpacing(float spacing);
27 			void				SetSpacing(float horizontal, float vertical);
28 
29 			float				ColumnWeight(int32 column) const;
30 			void				SetColumnWeight(int32 column, float weight);
31 
32 			float				MinColumnWidth(int32 column) const;
33 			void				SetMinColumnWidth(int32 column, float width);
34 
35 			float				MaxColumnWidth(int32 column) const;
36 			void				SetMaxColumnWidth(int32 column, float width);
37 
38 			float				RowWeight(int32 row) const;
39 			void				SetRowWeight(int32 row, float weight);
40 
41 			float				MinRowHeight(int row) const;
42 			void				SetMinRowHeight(int32 row, float height);
43 
44 			float				MaxRowHeight(int32 row) const;
45 			void				SetMaxRowHeight(int32 row, float height);
46 
47 	virtual	BLayoutItem*		AddView(BView* child);
48 	virtual	BLayoutItem*		AddView(int32 index, BView* child);
49 	virtual	BLayoutItem*		AddView(BView* child, int32 column, int32 row,
50 									int32 columnCount = 1, int32 rowCount = 1);
51 
52 	virtual	bool				AddItem(BLayoutItem* item);
53 	virtual	bool				AddItem(int32 index, BLayoutItem* item);
54 	virtual	bool				AddItem(BLayoutItem* item, int32 column,
55 									int32 row, int32 columnCount = 1,
56 									int32 rowCount = 1);
57 
58 	virtual	status_t			Archive(BMessage* into, bool deep = true) const;
59 	static	BArchivable*		Instantiate(BMessage* from);
60 
61 	virtual status_t			ItemArchived(BMessage* into,
62 									BLayoutItem* item, int32 index) const;
63 	virtual status_t			ItemUnarchived(const BMessage* from,
64 									BLayoutItem* item, int32 index);
65 
66 protected:
67 	virtual	bool				ItemAdded(BLayoutItem* item, int32 atIndex);
68 	virtual	void				ItemRemoved(BLayoutItem* item, int32 fromIndex);
69 
70 	virtual	bool				HasMultiColumnItems();
71 	virtual	bool				HasMultiRowItems();
72 
73 	virtual	int32				InternalCountColumns();
74 	virtual	int32				InternalCountRows();
75 	virtual	void				GetColumnRowConstraints(
76 									enum orientation orientation,
77 									int32 index,
78 									ColumnRowConstraints* constraints);
79 	virtual	void				GetItemDimensions(BLayoutItem* item,
80 									Dimensions* dimensions);
81 
82 private:
83 			class DummyLayoutItem;
84 			class RowInfoArray;
85 			struct ItemLayoutData;
86 
87 			bool				_IsGridCellEmpty(int32 column, int32 row);
88 			bool				_AreGridCellsEmpty(int32 column, int32 row,
89 									int32 columnCount, int32 rowCount);
90 
91 			bool				_InsertItemIntoGrid(BLayoutItem* item);
92 			bool				_ResizeGrid(int32 columnCount, int32 rowCount);
93 
94 			ItemLayoutData*		_LayoutDataForItem(BLayoutItem* item) const;
95 
96 private:
97 			BLayoutItem***		fGrid;
98 			int32				fColumnCount;
99 			int32				fRowCount;
100 
101 			RowInfoArray*		fRowInfos;
102 			RowInfoArray*		fColumnInfos;
103 
104 			int32				fMultiColumnItems;
105 			int32				fMultiRowItems;
106 };
107 
108 #endif	// _GRID_LAYOUT_H
109