root/src/tests/libs/alm/OperatorLayout.cpp
/*
 * Copyright 2010, Clemens Zeidler <haiku@clemens-zeidler.de>
 * Distributed under the terms of the MIT License.
 */


#include <Application.h>
#include <Button.h>
#include <ControlLook.h>
#include <SpaceLayoutItem.h>
#include <Window.h>

#include "ALMLayout.h"
#include "ALMGroup.h"


class OperatorWindow : public BWindow {
public:
        OperatorWindow(BRect frame) 
                :
                BWindow(frame, "ALM Operator", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE)
        {
                BButton* button1 = new BButton("1");
                BButton* button2 = new BButton("2");
                BButton* button3 = new BButton("3");
                BButton* button4 = new BButton("4");
                BButton* button5 = new BButton("5");

                button1->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED));
                button2->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED));
                button3->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED));
                button4->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED));
                button5->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED));

                // create a new BALMLayout and use  it for this window
                float spacing = be_control_look->DefaultItemSpacing();
                BALMLayout* layout = new BALMLayout(spacing);
                SetLayout(layout);
                layout->SetInsets(spacing);

                (ALMGroup(button1) | (ALMGroup(button2)
                / (ALMGroup(button3) | ALMGroup(BSpaceLayoutItem::CreateGlue())
                        | ALMGroup(button4))
                / ALMGroup(button5))).BuildLayout(layout);

                // test size limits
                BSize min = layout->MinSize();
                BSize max = layout->MaxSize();
                SetSizeLimits(min.Width(), max.Width(), min.Height(), max.Height());
        }

};


int
main()
{
        BApplication app("application/x-vnd.haiku.ALMOperator");

        OperatorWindow* window = new OperatorWindow(BRect(100, 100, 300, 300));
        window->Show();
                
        app.Run();
        return 0;
}