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