150cc24b3SAlex Wilson /* 250cc24b3SAlex Wilson * Copyright 2012, Haiku, Inc. All rights reserved. 350cc24b3SAlex Wilson * Distributed under the terms of the MIT License. 450cc24b3SAlex Wilson */ 550cc24b3SAlex Wilson #ifndef ALM_LAYOUT_BUILDER_H 650cc24b3SAlex Wilson #define ALM_LAYOUT_BUILDER_H 750cc24b3SAlex Wilson 850cc24b3SAlex Wilson 950cc24b3SAlex Wilson #include "ALMLayout.h" 1050cc24b3SAlex Wilson 1150cc24b3SAlex Wilson 12*a25ffa4fSAlex Wilson class BLayoutItem; 13*a25ffa4fSAlex Wilson class BView; 1450cc24b3SAlex Wilson class BWindow; 1550cc24b3SAlex Wilson 1650cc24b3SAlex Wilson 1750cc24b3SAlex Wilson namespace BALM { 1850cc24b3SAlex Wilson 1950cc24b3SAlex Wilson 2050cc24b3SAlex Wilson class BALMLayoutBuilder { 2150cc24b3SAlex Wilson public: 2250cc24b3SAlex Wilson BALMLayoutBuilder(BView* view, float hSpacing, 2350cc24b3SAlex Wilson float vSpacing, 2450cc24b3SAlex Wilson BALMLayout* friendLayout = NULL); 2550cc24b3SAlex Wilson BALMLayoutBuilder(BView* view, 2650cc24b3SAlex Wilson BALMLayout* layout); 2750cc24b3SAlex Wilson BALMLayoutBuilder(BWindow* window, 2850cc24b3SAlex Wilson float hSpacing, float vSpacing, 2950cc24b3SAlex Wilson BALMLayout* friendLayout = NULL); 3050cc24b3SAlex Wilson BALMLayoutBuilder(BWindow* window, 3150cc24b3SAlex Wilson BALMLayout* layout); 3250cc24b3SAlex Wilson BALMLayoutBuilder(BALMLayout* layout); 3350cc24b3SAlex Wilson 3450cc24b3SAlex Wilson BALMLayoutBuilder& Add(BView* view, XTab* left, YTab* top, 3550cc24b3SAlex Wilson XTab* right = NULL, YTab* bottom = NULL); 3650cc24b3SAlex Wilson BALMLayoutBuilder& Add(BView* view, Row* row, Column* column); 3750cc24b3SAlex Wilson 3850cc24b3SAlex Wilson BALMLayoutBuilder& Add(BLayoutItem* item, XTab* left, 3950cc24b3SAlex Wilson YTab* top, XTab* right = NULL, 4050cc24b3SAlex Wilson YTab* bottom = NULL); 4150cc24b3SAlex Wilson BALMLayoutBuilder& Add(BLayoutItem* item, Row* row, 4250cc24b3SAlex Wilson Column* column); 4350cc24b3SAlex Wilson 4450cc24b3SAlex Wilson BALMLayoutBuilder& SetInsets(float insets); 4550cc24b3SAlex Wilson BALMLayoutBuilder& SetInsets(float horizontal, float vertical); 4650cc24b3SAlex Wilson BALMLayoutBuilder& SetInsets(float left, float top, float right, 4750cc24b3SAlex Wilson float bottom); 4850cc24b3SAlex Wilson 4950cc24b3SAlex Wilson BALMLayoutBuilder& SetSpacing(float horizontal, float vertical); 5050cc24b3SAlex Wilson 5150cc24b3SAlex Wilson struct Snake; 5250cc24b3SAlex Wilson 5350cc24b3SAlex Wilson // context setters 5450cc24b3SAlex Wilson Snake StartingAt(BView* view); 5550cc24b3SAlex Wilson Snake StartingAt(BLayoutItem* item); 5650cc24b3SAlex Wilson 5750cc24b3SAlex Wilson struct Snake { 5850cc24b3SAlex Wilson BALMLayoutBuilder::Snake& AddToLeft(BView* view, 5950cc24b3SAlex Wilson XTab* left = NULL, YTab* top = NULL, 6050cc24b3SAlex Wilson YTab* bottom = NULL); 6150cc24b3SAlex Wilson BALMLayoutBuilder::Snake& AddToRight(BView* view, 6250cc24b3SAlex Wilson XTab* right = NULL, YTab* top = NULL, 6350cc24b3SAlex Wilson YTab* bottom = NULL); 6450cc24b3SAlex Wilson BALMLayoutBuilder::Snake& AddAbove(BView* view, 6550cc24b3SAlex Wilson YTab* top = NULL, XTab* left = NULL, 6650cc24b3SAlex Wilson XTab* right = NULL); 6750cc24b3SAlex Wilson BALMLayoutBuilder::Snake& AddBelow(BView* view, YTab* bottom = NULL, 6850cc24b3SAlex Wilson XTab* left = NULL, XTab* right = NULL); 6950cc24b3SAlex Wilson 7050cc24b3SAlex Wilson BALMLayoutBuilder::Snake& AddToLeft(BLayoutItem* item, 7150cc24b3SAlex Wilson XTab* left = NULL, YTab* top = NULL, 7250cc24b3SAlex Wilson YTab* bottom = NULL); 7350cc24b3SAlex Wilson BALMLayoutBuilder::Snake& AddToRight(BLayoutItem* item, 7450cc24b3SAlex Wilson XTab* right = NULL, YTab* top = NULL, 7550cc24b3SAlex Wilson YTab* bottom = NULL); 7650cc24b3SAlex Wilson BALMLayoutBuilder::Snake& AddAbove(BLayoutItem* item, 7750cc24b3SAlex Wilson YTab* top = NULL, XTab* left = NULL, 7850cc24b3SAlex Wilson XTab* right = NULL); 7950cc24b3SAlex Wilson BALMLayoutBuilder::Snake& AddBelow(BLayoutItem* item, 8050cc24b3SAlex Wilson YTab* bottom = NULL, XTab* left = NULL, 8150cc24b3SAlex Wilson XTab* right = NULL); 8250cc24b3SAlex Wilson 8350cc24b3SAlex Wilson 8450cc24b3SAlex Wilson // these methods throw away the stack 8550cc24b3SAlex Wilson Snake StartingAt(BView* view); 8650cc24b3SAlex Wilson Snake StartingAt(BLayoutItem* item); 8750cc24b3SAlex Wilson 8850cc24b3SAlex Wilson Snake Push(); 8950cc24b3SAlex Wilson Snake& Pop(); 9050cc24b3SAlex Wilson 9150cc24b3SAlex Wilson BALMLayoutBuilder& End(); 9250cc24b3SAlex Wilson 9350cc24b3SAlex Wilson private: 9450cc24b3SAlex Wilson friend class BALMLayoutBuilder; 9550cc24b3SAlex Wilson 9650cc24b3SAlex Wilson Snake(Area* area, BALMLayoutBuilder* root); 9750cc24b3SAlex Wilson Snake(Area* area, Snake* previous); 9850cc24b3SAlex Wilson 9950cc24b3SAlex Wilson BALMLayout* _Layout(); 10050cc24b3SAlex Wilson Area* _AddToLayout(BView* view, XTab* left, YTab* top, 10150cc24b3SAlex Wilson XTab* right, YTab* bottom); 10250cc24b3SAlex Wilson Area* _AddToLayout(BLayoutItem* item, XTab* left, 10350cc24b3SAlex Wilson YTab* top, XTab* right, YTab* bottom); 10450cc24b3SAlex Wilson 10550cc24b3SAlex Wilson BALMLayoutBuilder* fRootBuilder; 10650cc24b3SAlex Wilson Snake* fPreviousSnake; 10750cc24b3SAlex Wilson Area* fCurrentArea; 10850cc24b3SAlex Wilson }; 10950cc24b3SAlex Wilson 11050cc24b3SAlex Wilson 11150cc24b3SAlex Wilson private: 11250cc24b3SAlex Wilson friend struct Snake; 11350cc24b3SAlex Wilson 11450cc24b3SAlex Wilson BALMLayout* fLayout; 11550cc24b3SAlex Wilson }; 11650cc24b3SAlex Wilson 11750cc24b3SAlex Wilson 11850cc24b3SAlex Wilson }; 11950cc24b3SAlex Wilson 12050cc24b3SAlex Wilson 12150cc24b3SAlex Wilson #endif 122