Add test for BALMLayout's bad layout handling.

This commit is contained in:
Alex Wilson 2012-01-18 16:27:24 +13:00
parent 2bbf8b1fbc
commit 03adc8c767
2 changed files with 103 additions and 0 deletions

View File

@ -0,0 +1,96 @@
/*
* Copyright 2007-2008, Christof Lutteroth, lutteroth@cs.auckland.ac.nz
* Copyright 2007-2008, James Kim, jkim202@ec.auckland.ac.nz
* Copyright 2010, Clemens Zeidler <haiku@clemens-zeidler.de>
* Copyright 2012, Haiku, Inc.
* Distributed under the terms of the MIT License.
*/
#include <Alert.h>
#include <Application.h>
#include <Button.h>
#include <Window.h>
#include <stdio.h>
// include this for ALM
#include "ALMLayout.h"
class BAlertPolicy : public BALMLayout::BadLayoutPolicy {
virtual bool OnBadLayout(BALMLayout* layout)
{
BAlert* alert = new BAlert("layout failure", "layout failed!",
"sure");
alert->Go();
return true;
}
};
class BadLayoutWindow : public BWindow {
public:
BadLayoutWindow(BRect frame)
:
BWindow(frame, "ALM Bad Layout", B_TITLED_WINDOW,
B_QUIT_ON_WINDOW_CLOSE)
{
button1 = new BButton("Bad Layout!");
// create a new BALMLayout and use it for this window
fLayout = new BALMLayout();
SetLayout(fLayout);
// add an area containing the button
// use the borders of the layout as the borders for the area
fLayout->AddView(button1, fLayout->Left(), fLayout->Top(),
fLayout->Right(), fLayout->Bottom());
button1->SetExplicitMinSize(BSize(50, 50));
button1->SetExplicitMaxSize(BSize(500, 500));
button1->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH,
B_ALIGN_USE_FULL_HEIGHT));
BButton* button2 = new BButton("can't fit!");
fLayout->AddView(button2, fLayout->RightOf(button1), fLayout->Top(),
fLayout->Right(), fLayout->Bottom());
button2->SetExplicitMinSize(BSize(50, 50));
fLayout->SetBadLayoutPolicy(new BAlertPolicy());
// test size limits
BSize min = fLayout->MinSize();
BSize max = fLayout->MaxSize();
SetSizeLimits(min.Width(), max.Width(), min.Height(), max.Height());
printf("moving to standard BALMLayout BadLayoutPolicy\n");
fLayout->SetBadLayoutPolicy(NULL);
}
private:
BALMLayout* fLayout;
BButton* button1;
};
class BadLayout : public BApplication {
public:
BadLayout()
:
BApplication("application/x-vnd.haiku.BadLayout")
{
BRect frameRect;
frameRect.Set(100, 100, 300, 300);
BadLayoutWindow* window = new BadLayoutWindow(frameRect);
window->Show();
}
};
int
main()
{
BadLayout app;
app.Run();
return 0;
}

View File

@ -51,3 +51,10 @@ Application ALMComplexButtons :
:
be libalm.so $(TARGET_LIBSTDC++)
;
Application ALMBadLayout :
BadLayout.cpp
:
be liblpsolve55.so libalm.so $(TARGET_LIBSTDC++)
;