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 = 0.0f, 14 float vertical = 0.0f); 15 BGridLayout(BMessage* from); 16 virtual ~BGridLayout(); 17 18 int32 CountColumns() const; 19 int32 CountRows() const; 20 21 float HorizontalSpacing() const; 22 float VerticalSpacing() const; 23 24 void SetHorizontalSpacing(float spacing); 25 void SetVerticalSpacing(float spacing); 26 void SetSpacing(float horizontal, float vertical); 27 28 float ColumnWeight(int32 column) const; 29 void SetColumnWeight(int32 column, float weight); 30 31 float MinColumnWidth(int32 column) const; 32 void SetMinColumnWidth(int32 column, float width); 33 34 float MaxColumnWidth(int32 column) const; 35 void SetMaxColumnWidth(int32 column, float width); 36 37 float RowWeight(int32 row) const; 38 void SetRowWeight(int32 row, float weight); 39 40 float MinRowHeight(int row) const; 41 void SetMinRowHeight(int32 row, float height); 42 43 float MaxRowHeight(int32 row) const; 44 void SetMaxRowHeight(int32 row, float height); 45 46 virtual BLayoutItem* AddView(BView* child); 47 virtual BLayoutItem* AddView(int32 index, BView* child); 48 virtual BLayoutItem* AddView(BView* child, int32 column, int32 row, 49 int32 columnCount = 1, int32 rowCount = 1); 50 51 virtual bool AddItem(BLayoutItem* item); 52 virtual bool AddItem(int32 index, BLayoutItem* item); 53 virtual bool AddItem(BLayoutItem* item, int32 column, 54 int32 row, int32 columnCount = 1, 55 int32 rowCount = 1); 56 57 virtual status_t Archive(BMessage* into, bool deep = true) const; 58 static BArchivable* Instantiate(BMessage* from); 59 60 virtual status_t ItemArchived(BMessage* into, 61 BLayoutItem* item, int32 index) const; 62 virtual status_t ItemUnarchived(const BMessage* from, 63 BLayoutItem* item, int32 index); 64 65 protected: 66 virtual bool ItemAdded(BLayoutItem* item, int32 atIndex); 67 virtual void ItemRemoved(BLayoutItem* item, int32 fromIndex); 68 69 virtual bool HasMultiColumnItems(); 70 virtual bool HasMultiRowItems(); 71 72 virtual int32 InternalCountColumns(); 73 virtual int32 InternalCountRows(); 74 virtual void GetColumnRowConstraints( 75 enum orientation orientation, 76 int32 index, 77 ColumnRowConstraints* constraints); 78 virtual void GetItemDimensions(BLayoutItem* item, 79 Dimensions* dimensions); 80 81 private: 82 class DummyLayoutItem; 83 class RowInfoArray; 84 struct ItemLayoutData; 85 86 bool _IsGridCellEmpty(int32 column, int32 row); 87 bool _AreGridCellsEmpty(int32 column, int32 row, 88 int32 columnCount, int32 rowCount); 89 90 bool _InsertItemIntoGrid(BLayoutItem* item); 91 bool _ResizeGrid(int32 columnCount, int32 rowCount); 92 93 ItemLayoutData* _LayoutDataForItem(BLayoutItem* item) const; 94 95 private: 96 BLayoutItem*** fGrid; 97 int32 fColumnCount; 98 int32 fRowCount; 99 100 RowInfoArray* fRowInfos; 101 RowInfoArray* fColumnInfos; 102 103 int32 fMultiColumnItems; 104 int32 fMultiRowItems; 105 }; 106 107 #endif // _GRID_LAYOUT_H 108