1/*
2 * Copyright 2010, Clemens Zeidler <haiku@clemens-zeidler.de>
3 * Distributed under the terms of the MIT License.
4 */
5
6#include <stdio.h>
7
8#include <Application.h>
9#include <Button.h>
10#include <List.h>
11#include <Window.h>
12
13// include this for ALM
14#include "ALMLayout.h"
15#include "ALMLayoutBuilder.h"
16
17
18class ComplexButtonsWindow : public BWindow {
19public:
20	ComplexButtonsWindow(BRect frame)
21		:
22		BWindow(frame, "ALM Complex Buttons", B_TITLED_WINDOW,
23			B_QUIT_ON_WINDOW_CLOSE)
24	{
25		BButton* button1 = new BButton("A");
26		BButton* button2 = new BButton("B");
27		BButton* button3 = new BButton("GHIJ");
28
29		BButton* button4 = new BButton("abcdefghijklmnop");
30		BButton* button5 = new BButton("Foo");
31
32		const int32 kOffset = 80;
33
34		button1->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH,
35			B_ALIGN_USE_FULL_HEIGHT));
36		button1->SetExplicitMaxSize(BSize(500, 500));
37		button1->SetExplicitPreferredSize(BSize(10 + kOffset, B_SIZE_UNSET));
38
39		button2->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH,
40			B_ALIGN_USE_FULL_HEIGHT));
41		button2->SetExplicitMaxSize(BSize(500, 500));
42		button2->SetExplicitPreferredSize(BSize(10 + kOffset, B_SIZE_UNSET));
43
44		button3->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH,
45			B_ALIGN_USE_FULL_HEIGHT));
46		button3->SetExplicitMaxSize(BSize(500, 500));
47		button3->SetExplicitPreferredSize(BSize(40 + kOffset, B_SIZE_UNSET));
48
49		button4->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH,
50			B_ALIGN_USE_FULL_HEIGHT));
51		button4->SetExplicitMaxSize(BSize(500, 500));
52		button4->SetExplicitPreferredSize(BSize(160 + kOffset, B_SIZE_UNSET));
53
54		button5->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH,
55			B_ALIGN_USE_FULL_HEIGHT));
56		button5->SetExplicitMaxSize(BSize(500, 500));
57		button5->SetExplicitPreferredSize(BSize(30 + kOffset, B_SIZE_UNSET));
58
59		BALMLayout* fLayout = new BALMLayout(10, 10);
60		BALM::BALMLayoutBuilder(this, fLayout)
61			.Add(button1, fLayout->Left(), fLayout->Top())
62			.StartingAt(button1)
63				.AddToRight(button2)
64				.AddToRight(button3, fLayout->Right())
65			.AddBelow(button4, fLayout->Bottom(), fLayout->Left(),
66				fLayout->AddXTab())
67			.AddToRight(button5, fLayout->Right());
68
69		// test size limits
70		BSize min = fLayout->MinSize();
71		BSize max = fLayout->MaxSize();
72		SetSizeLimits(min.Width(), max.Width(), min.Height(), max.Height());
73	}
74
75private:
76	BALMLayout* fLayout;
77
78};
79
80
81int
82main()
83{
84	BApplication app("application/x-vnd.haiku.ComplexButtons");
85
86	BRect frameRect;
87	frameRect.Set(100, 100, 600, 300);
88	ComplexButtonsWindow* window = new ComplexButtonsWindow(frameRect);
89	window->Show();
90
91	app.Run();
92	return 0;
93}
94