/* * Copyright 2010, Clemens Zeidler * Distributed under the terms of the MIT License. */ #include #include #include #include #include // include this for ALM #include "ALMLayout.h" class ComplexButtonsWindow : public BWindow { public: ComplexButtonsWindow(BRect frame) : BWindow(frame, "ALM Complex Buttons", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) { BButton* button1 = new BButton("A"); BButton* button2 = new BButton("B"); BButton* button3 = new BButton("GHIJ"); BButton* button4 = new BButton("abcdefghijklmnop"); BButton* button5 = new BButton("Foo"); const int32 kOffset = 80; button1->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH, B_ALIGN_USE_FULL_HEIGHT)); button1->SetExplicitMaxSize(BSize(500, 500)); button1->SetExplicitPreferredSize(BSize(10 + kOffset, B_SIZE_UNSET)); button2->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH, B_ALIGN_USE_FULL_HEIGHT)); button2->SetExplicitMaxSize(BSize(500, 500)); button2->SetExplicitPreferredSize(BSize(10 + kOffset, B_SIZE_UNSET)); button3->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH, B_ALIGN_USE_FULL_HEIGHT)); button3->SetExplicitMaxSize(BSize(500, 500)); button3->SetExplicitPreferredSize(BSize(40 + kOffset, B_SIZE_UNSET)); button4->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH, B_ALIGN_USE_FULL_HEIGHT)); button4->SetExplicitMaxSize(BSize(500, 500)); button4->SetExplicitPreferredSize(BSize(160 + kOffset, B_SIZE_UNSET)); button5->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH, B_ALIGN_USE_FULL_HEIGHT)); button5->SetExplicitMaxSize(BSize(500, 500)); button5->SetExplicitPreferredSize(BSize(30 + kOffset, B_SIZE_UNSET)); // create a new BALMLayout and use it for this window fLayout = new BALMLayout(); SetLayout(fLayout); fLayout->AddView(button1, fLayout->Left(), fLayout->Top(), NULL, NULL); fLayout->AddViewToRight(button2); fLayout->AddViewToRight(button3, fLayout->Right()); fLayout->AddView(button4, fLayout->Left(), fLayout->BottomOf(button1), NULL, fLayout->Bottom()); fLayout->AddViewToRight(button5, fLayout->Right()); // test size limits BSize min = fLayout->MinSize(); BSize max = fLayout->MaxSize(); SetSizeLimits(min.Width(), max.Width(), min.Height(), max.Height()); } private: BALMLayout* fLayout; }; int main() { BApplication app("application/x-vnd.haiku.ComplexButtons"); BRect frameRect; frameRect.Set(100, 100, 600, 300); ComplexButtonsWindow* window = new ComplexButtonsWindow(frameRect); window->Show(); app.Run(); return 0; }