root/headers/os/interface/GroupLayoutBuilder.h
/*
 * Copyright 2006-2010, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _GROUP_LAYOUT_BUILDER_H
#define _GROUP_LAYOUT_BUILDER_H

#include <GroupLayout.h>
#include <GroupView.h>
#include <List.h>

class BGroupLayoutBuilder {
public:
                                                                BGroupLayoutBuilder(
                                                                        orientation orientation = B_HORIZONTAL,
                                                                        float spacing = B_USE_DEFAULT_SPACING);
                                                                BGroupLayoutBuilder(BGroupLayout* layout);
                                                                BGroupLayoutBuilder(BGroupView* view);

                        BGroupLayout*           RootLayout() const;
                        BGroupLayout*           TopLayout() const;
                        BGroupLayoutBuilder& GetTopLayout(BGroupLayout** _layout);
                        BView*                          TopView() const;
                        BGroupLayoutBuilder& GetTopView(BView** _view);

                        BGroupLayoutBuilder& Add(BView* view);
                        BGroupLayoutBuilder& Add(BView* view, float weight);
                        BGroupLayoutBuilder& Add(BLayoutItem* item);
                        BGroupLayoutBuilder& Add(BLayoutItem* item, float weight);

                        BGroupLayoutBuilder& AddGroup(orientation orientation,
                                                                        float spacing = B_USE_DEFAULT_SPACING,
                                                                        float weight = 1.0f);
                        BGroupLayoutBuilder& End();

                        BGroupLayoutBuilder& AddGlue(float weight = 1.0f);
                        BGroupLayoutBuilder& AddStrut(float size);

                        BGroupLayoutBuilder& SetInsets(float left, float top, float right,
                                                                        float bottom);

                                                                operator BGroupLayout*();

private:
                        bool                            _PushLayout(BGroupLayout* layout);
                        void                            _PopLayout();

private:
                        BGroupLayout*           fRootLayout;
                        BList                           fLayoutStack;
};

#endif  // _GROUP_LAYOUT_BUILDER_H