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:
Alex Wilson
2012-05-03 08:45:43 +12:00
parent d10cb215dc
commit 5f4e71ba4c
2 changed files with 200 additions and 255 deletions
+21 -40
View File
@@ -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*);
};