xref: /haiku/src/tests/libs/alm/Views.cpp (revision 25a7b01d15612846f332751841da3579db313082)
170e20761SClemens Zeidler /*
270e20761SClemens Zeidler  * Copyright 2007-2008, Christof Lutteroth, lutteroth@cs.auckland.ac.nz
370e20761SClemens Zeidler  * Copyright 2007-2008, James Kim, jkim202@ec.auckland.ac.nz
470e20761SClemens Zeidler  * Copyright 2010, Clemens Zeidler <haiku@clemens-zeidler.de>
570e20761SClemens Zeidler  * Distributed under the terms of the MIT License.
670e20761SClemens Zeidler  */
770e20761SClemens Zeidler 
870e20761SClemens Zeidler 
970e20761SClemens Zeidler #include <Application.h>
1070e20761SClemens Zeidler #include <Button.h>
1170e20761SClemens Zeidler #include <MenuField.h>
1270e20761SClemens Zeidler #include <PopUpMenu.h>
1370e20761SClemens Zeidler #include <RadioButton.h>
1470e20761SClemens Zeidler #include <SpaceLayoutItem.h>
1570e20761SClemens Zeidler #include <StatusBar.h>
1670e20761SClemens Zeidler #include <StringView.h>
1770e20761SClemens Zeidler #include <TextView.h>
1870e20761SClemens Zeidler #include <Window.h>
1970e20761SClemens Zeidler 
2070e20761SClemens Zeidler #include "ALMLayout.h"
212bf5ded1SAlex Wilson #include "ALMLayoutBuilder.h"
2270e20761SClemens Zeidler 
2370e20761SClemens Zeidler 
24b1f9962bSClemens Zeidler using namespace LinearProgramming;
25b1f9962bSClemens Zeidler 
26b1f9962bSClemens Zeidler 
2770e20761SClemens Zeidler class ViewsWindow : public BWindow {
2870e20761SClemens Zeidler public:
ViewsWindow(BRect frame)2970e20761SClemens Zeidler 	ViewsWindow(BRect frame)
3070e20761SClemens Zeidler 		:
3137344020SClemens Zeidler 		BWindow(frame, "ALM Views", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE)
3270e20761SClemens Zeidler 	{
3370e20761SClemens Zeidler 		BButton* button1 = new BButton("BButton");
3470e20761SClemens Zeidler 		BRadioButton* radioButton = new BRadioButton("BRadioButton", NULL);
3570e20761SClemens Zeidler 		BButton* button3 = new BButton("3");
3670e20761SClemens Zeidler 		BButton* button4 = new BButton("4");
3770e20761SClemens Zeidler 		button4->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT,
3870e20761SClemens Zeidler 			B_ALIGN_VERTICAL_CENTER));
3970e20761SClemens Zeidler 		BButton* button5 = new BButton("5");
4070e20761SClemens Zeidler 		BButton* button6 = new BButton("6");
4170e20761SClemens Zeidler 		BTextView* textView1 = new BTextView("textView1");
4270e20761SClemens Zeidler 		textView1->SetText("BTextView");
4370e20761SClemens Zeidler 		BStatusBar* statusBar = new BStatusBar("BStatusBar", "label",
4470e20761SClemens Zeidler 			"trailing label");
4570e20761SClemens Zeidler 		statusBar->Update(50);
4670e20761SClemens Zeidler 
4770e20761SClemens Zeidler 		BMenu* menu = new BMenu("Menu 1");
4870e20761SClemens Zeidler 		BMenuField* menu1 = new BMenuField("MenuField 1", menu);
4970e20761SClemens Zeidler 		menu->AddItem(new BPopUpMenu("Menu 1"));
5070e20761SClemens Zeidler 		BStringView* stringView1 = new BStringView("string 1", "string 1");
5170e20761SClemens Zeidler 
5270e20761SClemens Zeidler 		menu = new BMenu("Menu 2  + long text");
5370e20761SClemens Zeidler 		BMenuField* menu2 = new BMenuField("MenuField 2", menu);
5470e20761SClemens Zeidler 		menu->AddItem(new BPopUpMenu("Menu 2"));
5570e20761SClemens Zeidler 		BStringView* stringView2 = new BStringView("string 2", "string 2");
5670e20761SClemens Zeidler 
572bf5ded1SAlex Wilson 		BALM::BALMLayout* layout = new BALMLayout(10, 10);
582bf5ded1SAlex Wilson 		BALM::BALMLayoutBuilder(this, layout)
592bf5ded1SAlex Wilson 			.SetInsets(10)
602bf5ded1SAlex Wilson 			.Add(button1, layout->Left(), layout->Top())
612bf5ded1SAlex Wilson 			.StartingAt(button1)
622bf5ded1SAlex Wilson 				.AddToRight(radioButton)
632bf5ded1SAlex Wilson 				.AddToRight(BSpaceLayoutItem::CreateGlue())
642bf5ded1SAlex Wilson 				.AddToRight(button3)
652bf5ded1SAlex Wilson 			.StartingAt(radioButton)
662bf5ded1SAlex Wilson 				.AddBelow(textView1, NULL, NULL, layout->RightOf(button3))
672bf5ded1SAlex Wilson 				.AddBelow(button4)
682bf5ded1SAlex Wilson 				.AddToRight(button5, layout->Right())
692bf5ded1SAlex Wilson 				.AddBelow(button6)
702bf5ded1SAlex Wilson 				.AddBelow(menu1, layout->AddYTab(), layout->Left(),
712bf5ded1SAlex Wilson 					layout->AddXTab())
722bf5ded1SAlex Wilson 				.AddToRight(stringView1)
732bf5ded1SAlex Wilson 				.AddToRight(BSpaceLayoutItem::CreateGlue(), layout->Right())
74*6457a651SAlex Wilson 				.AddBelow(statusBar, NULL, layout->Left(), layout->Right());
75*6457a651SAlex Wilson 
76*6457a651SAlex Wilson 		// start over so that layout->RightOf() can return accurate results
77*6457a651SAlex Wilson 		BALM::BALMLayoutBuilder(layout)
782bf5ded1SAlex Wilson 			.StartingAt(statusBar)
792bf5ded1SAlex Wilson 				.AddBelow(menu2, layout->Bottom(), layout->Left(),
802bf5ded1SAlex Wilson 					layout->RightOf(menu1))
812bf5ded1SAlex Wilson 				.AddToRight(stringView2)
822bf5ded1SAlex Wilson 				.AddToRight(BSpaceLayoutItem::CreateGlue(), layout->Right());
832bf5ded1SAlex Wilson 
8470e20761SClemens Zeidler 		layout->Solver()->AddConstraint(2, layout->TopOf(menu1), -1,
85b1f9962bSClemens Zeidler 			layout->Bottom(), OperatorType(kEQ), 0);
8670e20761SClemens Zeidler 
8770e20761SClemens Zeidler 		// test size limits
8870e20761SClemens Zeidler 		BSize min = layout->MinSize();
8970e20761SClemens Zeidler 		BSize max = layout->MaxSize();
9070e20761SClemens Zeidler 		SetSizeLimits(min.Width(), max.Width(), min.Height(), max.Height());
9170e20761SClemens Zeidler 	}
9270e20761SClemens Zeidler 
9370e20761SClemens Zeidler };
9470e20761SClemens Zeidler 
9570e20761SClemens Zeidler 
9670e20761SClemens Zeidler class Views : public BApplication {
9770e20761SClemens Zeidler public:
Views()9870e20761SClemens Zeidler 	Views()
9970e20761SClemens Zeidler 		:
10070e20761SClemens Zeidler 		BApplication("application/x-vnd.haiku.Views")
10170e20761SClemens Zeidler 	{
10270e20761SClemens Zeidler 		BRect frameRect;
10370e20761SClemens Zeidler 		frameRect.Set(100, 100, 300, 300);
10470e20761SClemens Zeidler 		ViewsWindow* window = new ViewsWindow(frameRect);
10570e20761SClemens Zeidler 		window->Show();
10670e20761SClemens Zeidler 	}
10770e20761SClemens Zeidler };
10870e20761SClemens Zeidler 
10970e20761SClemens Zeidler 
11070e20761SClemens Zeidler int
main()11170e20761SClemens Zeidler main()
11270e20761SClemens Zeidler {
11370e20761SClemens Zeidler 	Views app;
11470e20761SClemens Zeidler 	app.Run();
11570e20761SClemens Zeidler 	return 0;
11670e20761SClemens Zeidler }
11770e20761SClemens Zeidler 
118