Replace BALMLayoutBuilder::Snake class with a stack.
The interface to BALMLayoutBuilder is still pretty much the same, but this simplifies the class a bit.
This commit is contained in:
@@ -8,6 +8,8 @@
|
||||
|
||||
#include "ALMLayout.h"
|
||||
|
||||
#include <ObjectList.h>
|
||||
|
||||
|
||||
class BLayoutItem;
|
||||
class BView;
|
||||
@@ -48,70 +50,49 @@ public:
|
||||
|
||||
BALMLayoutBuilder& SetSpacing(float horizontal, float vertical);
|
||||
|
||||
struct Snake;
|
||||
|
||||
// context setters
|
||||
Snake StartingAt(BView* view);
|
||||
Snake StartingAt(BLayoutItem* item);
|
||||
|
||||
struct Snake {
|
||||
BALMLayoutBuilder::Snake& AddToLeft(BView* view,
|
||||
BALMLayoutBuilder& AddToLeft(BView* view,
|
||||
XTab* left = NULL, YTab* top = NULL,
|
||||
YTab* bottom = NULL);
|
||||
BALMLayoutBuilder::Snake& AddToRight(BView* view,
|
||||
BALMLayoutBuilder& AddToRight(BView* view,
|
||||
XTab* right = NULL, YTab* top = NULL,
|
||||
YTab* bottom = NULL);
|
||||
BALMLayoutBuilder::Snake& AddAbove(BView* view,
|
||||
BALMLayoutBuilder& AddAbove(BView* view,
|
||||
YTab* top = NULL, XTab* left = NULL,
|
||||
XTab* right = NULL);
|
||||
BALMLayoutBuilder::Snake& AddBelow(BView* view, YTab* bottom = NULL,
|
||||
BALMLayoutBuilder& AddBelow(BView* view, YTab* bottom = NULL,
|
||||
XTab* left = NULL, XTab* right = NULL);
|
||||
|
||||
BALMLayoutBuilder::Snake& AddToLeft(BLayoutItem* item,
|
||||
BALMLayoutBuilder& AddToLeft(BLayoutItem* item,
|
||||
XTab* left = NULL, YTab* top = NULL,
|
||||
YTab* bottom = NULL);
|
||||
BALMLayoutBuilder::Snake& AddToRight(BLayoutItem* item,
|
||||
BALMLayoutBuilder& AddToRight(BLayoutItem* item,
|
||||
XTab* right = NULL, YTab* top = NULL,
|
||||
YTab* bottom = NULL);
|
||||
BALMLayoutBuilder::Snake& AddAbove(BLayoutItem* item,
|
||||
BALMLayoutBuilder& AddAbove(BLayoutItem* item,
|
||||
YTab* top = NULL, XTab* left = NULL,
|
||||
XTab* right = NULL);
|
||||
BALMLayoutBuilder::Snake& AddBelow(BLayoutItem* item,
|
||||
BALMLayoutBuilder& AddBelow(BLayoutItem* item,
|
||||
YTab* bottom = NULL, XTab* left = NULL,
|
||||
XTab* right = NULL);
|
||||
|
||||
|
||||
BALMLayoutBuilder& Push();
|
||||
BALMLayoutBuilder& Pop();
|
||||
|
||||
|
||||
// these methods throw away the stack
|
||||
Snake StartingAt(BView* view);
|
||||
Snake StartingAt(BLayoutItem* item);
|
||||
|
||||
Snake Push();
|
||||
Snake& Pop();
|
||||
|
||||
BALMLayoutBuilder& End();
|
||||
|
||||
private:
|
||||
friend class BALMLayoutBuilder;
|
||||
|
||||
Snake(Area* area, BALMLayoutBuilder* root);
|
||||
Snake(Area* area, Snake* previous);
|
||||
|
||||
BALMLayout* _Layout();
|
||||
Area* _AddToLayout(BView* view, XTab* left, YTab* top,
|
||||
XTab* right, YTab* bottom);
|
||||
Area* _AddToLayout(BLayoutItem* item, XTab* left,
|
||||
YTab* top, XTab* right, YTab* bottom);
|
||||
|
||||
BALMLayoutBuilder* fRootBuilder;
|
||||
Snake* fPreviousSnake;
|
||||
Area* fCurrentArea;
|
||||
};
|
||||
BALMLayoutBuilder& StartingAt(BView* view);
|
||||
BALMLayoutBuilder& StartingAt(BLayoutItem* item);
|
||||
|
||||
|
||||
private:
|
||||
friend struct Snake;
|
||||
typedef BObjectList<Area> AreaStack;
|
||||
|
||||
BALMLayout* fLayout;
|
||||
AreaStack fAreaStack;
|
||||
|
||||
Area* _CurrentArea() const;
|
||||
void _SetCurrentArea(Area*);
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user