diff --git a/src/tests/kits/interface/layout/widget_layout_test/ButtonTest.cpp b/src/tests/kits/interface/layout/widget_layout_test/ButtonTest.cpp new file mode 100644 index 0000000000..04aa7b0fe4 --- /dev/null +++ b/src/tests/kits/interface/layout/widget_layout_test/ButtonTest.cpp @@ -0,0 +1,93 @@ +/* + * Copyright 2007, Ingo Weinhold . + * All rights reserved. Distributed under the terms of the MIT License. + */ + +#include "ButtonTest.h" + +#include + +#include +#include + +#include "CheckBox.h" +#include "GroupView.h" +#include "StringView.h" + + +enum { + MSG_CHANGE_BUTTON_TEXT = 'lgbt' +}; + + +// constructor +ButtonTest::ButtonTest() + : Test("Button", NULL), + fButton(new BButton(BRect(0, 0, 9, 9), "test button", "", + (BMessage*)NULL, B_FOLLOW_NONE)), + fLongTextCheckBox(NULL) + +{ + _SetButtonText(false); + SetView(fButton); +} + + +// destructor +ButtonTest::~ButtonTest() +{ +} + + +// ActivateTest +void +ButtonTest::ActivateTest(View* controls) +{ + GroupView* group = new GroupView(B_VERTICAL); + group->SetFrame(controls->Bounds()); + controls->AddChild(group); + + GroupView* longTextGroup = new GroupView(B_HORIZONTAL); + group->AddChild(longTextGroup); + fLongTextCheckBox = new CheckBox(new BMessage(MSG_CHANGE_BUTTON_TEXT), + this); + longTextGroup->AddChild(fLongTextCheckBox); + longTextGroup->AddChild(new StringView(" Long Button Text")); + + group->AddChild(new Glue()); + + _SetButtonText(false); +} + + +// DectivateTest +void +ButtonTest::DectivateTest() +{ +} + + +// MessageReceived +void +ButtonTest::MessageReceived(BMessage* message) +{ + switch (message->what) { + case MSG_CHANGE_BUTTON_TEXT: + _SetButtonText(fLongTextCheckBox->IsSelected()); + break; + default: + Test::MessageReceived(message); + break; + } +} + + +// _SetButtonText +void +ButtonTest::_SetButtonText(bool longText) +{ + if (fLongTextCheckBox) + fLongTextCheckBox->SetSelected(longText); + fButton->SetLabel(longText ? "very long text for a simple button" + : "Ooh, press me!"); +} diff --git a/src/tests/kits/interface/layout/widget_layout_test/ButtonTest.h b/src/tests/kits/interface/layout/widget_layout_test/ButtonTest.h new file mode 100644 index 0000000000..df730695d6 --- /dev/null +++ b/src/tests/kits/interface/layout/widget_layout_test/ButtonTest.h @@ -0,0 +1,36 @@ +/* + * Copyright 2007, Ingo Weinhold . + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef WIDGET_LAYOUT_TEST_BUTTON_TEST_H +#define WIDGET_LAYOUT_TEST_BUTTON_TEST_H + + +#include "Test.h" + + +class BButton; +class CheckBox; +class View; + + +class ButtonTest : public Test { +public: + ButtonTest(); + virtual ~ButtonTest(); + + virtual void ActivateTest(View* controls); + virtual void DectivateTest(); + + virtual void MessageReceived(BMessage* message); + +private: + void _SetButtonText(bool longText); + +private: + BButton* fButton; + CheckBox* fLongTextCheckBox; +}; + + +#endif // WIDGET_LAYOUT_TEST_BUTTON_TEST_H diff --git a/src/tests/kits/interface/layout/widget_layout_test/GroupView.cpp b/src/tests/kits/interface/layout/widget_layout_test/GroupView.cpp index 4a9767fec8..67dcd709be 100644 --- a/src/tests/kits/interface/layout/widget_layout_test/GroupView.cpp +++ b/src/tests/kits/interface/layout/widget_layout_test/GroupView.cpp @@ -5,6 +5,8 @@ #include "GroupView.h" +#include + #include @@ -36,7 +38,7 @@ struct GroupView::LayoutInfo { void Normalize() { - if (max > min) + if (max < min) max = min; if (preferred < min) preferred = min; @@ -126,9 +128,18 @@ GroupView::Alignment() } +void +GroupView::InvalidateLayout() +{ + fMinMaxValid = false; + View::InvalidateLayout(); +} + + void GroupView::Layout() { +//printf("%p->GroupView::Layout()\n", this); _ValidateMinMax(); // actually a little late already @@ -162,6 +173,7 @@ GroupView::Layout() location.x += columnInfo.size + fColumnSpacing; } +//printf("%p->GroupView::Layout() done\n", this); } @@ -171,6 +183,7 @@ GroupView::_ValidateMinMax() if (fMinMaxValid) return; +//printf("%p->GroupView::_ValidateMinMax()\n", this); delete fColumnInfos; delete fRowInfos; @@ -215,6 +228,7 @@ GroupView::_ValidateMinMax() fColumnInfos[column].max); fPreferredWidth = BLayoutUtils::AddSizesInt32(fPreferredWidth, fColumnInfos[column].preferred); +//printf(" column %ld: min: %ld, max: %ld, preferred: %ld\n", column, fColumnInfos[column].min, fColumnInfos[column].max, fColumnInfos[column].preferred); } for (int32 row = 0; row < fRowCount; row++) { @@ -225,9 +239,11 @@ GroupView::_ValidateMinMax() fRowInfos[row].max); fPreferredHeight = BLayoutUtils::AddSizesInt32(fPreferredHeight, fRowInfos[row].preferred); +//printf(" row %ld: min: %ld, max: %ld, preferred: %ld\n", row, fRowInfos[row].min, fRowInfos[row].max, fRowInfos[row].preferred); } fMinMaxValid = true; +//printf("%p->GroupView::_ValidateMinMax() done\n", this); } diff --git a/src/tests/kits/interface/layout/widget_layout_test/GroupView.h b/src/tests/kits/interface/layout/widget_layout_test/GroupView.h index 09a2aa3a01..4684f7dc89 100644 --- a/src/tests/kits/interface/layout/widget_layout_test/GroupView.h +++ b/src/tests/kits/interface/layout/widget_layout_test/GroupView.h @@ -25,6 +25,7 @@ public: virtual BSize PreferredSize(); virtual BAlignment Alignment(); + virtual void InvalidateLayout(); virtual void Layout(); private: diff --git a/src/tests/kits/interface/layout/widget_layout_test/Jamfile b/src/tests/kits/interface/layout/widget_layout_test/Jamfile index 30835bd4b1..e5d5bbe59c 100644 --- a/src/tests/kits/interface/layout/widget_layout_test/Jamfile +++ b/src/tests/kits/interface/layout/widget_layout_test/Jamfile @@ -5,9 +5,11 @@ SetSubDirSupportedPlatforms haiku libbe_test ; SimpleTest WidgetLayoutTest : WidgetLayoutTest.cpp + ButtonTest.cpp CheckBox.cpp GroupView.cpp StringView.cpp + Test.cpp TwoDimensionalSliderView.cpp View.cpp ViewContainer.cpp diff --git a/src/tests/kits/interface/layout/widget_layout_test/Test.cpp b/src/tests/kits/interface/layout/widget_layout_test/Test.cpp new file mode 100644 index 0000000000..16eb7f31d5 --- /dev/null +++ b/src/tests/kits/interface/layout/widget_layout_test/Test.cpp @@ -0,0 +1,59 @@ +/* + * Copyright 2007, Ingo Weinhold . + * All rights reserved. Distributed under the terms of the MIT License. + */ + +#include "Test.h" + + +Test::Test(const char* name, const char* description, BView* view) + : fName(name), + fDescription(description), + fView(view) +{ +} + + +Test::~Test() +{ +} + + +const char* +Test::Name() const +{ + return fName.String(); +} + + +const char* +Test::Description() const +{ + return fDescription.String(); +} + + +BView* +Test::GetView() const +{ + return fView; +} + + +void +Test::SetView(BView* view) +{ + fView = view; +} + + +void +Test::ActivateTest(View* controls) +{ +} + + +void +Test::DectivateTest() +{ +} diff --git a/src/tests/kits/interface/layout/widget_layout_test/Test.h b/src/tests/kits/interface/layout/widget_layout_test/Test.h new file mode 100644 index 0000000000..8c20c9c955 --- /dev/null +++ b/src/tests/kits/interface/layout/widget_layout_test/Test.h @@ -0,0 +1,39 @@ +/* + * Copyright 2007, Ingo Weinhold . + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef WIDGET_LAYOUT_TEST_TEST_H +#define WIDGET_LAYOUT_TEST_TEST_H + + +#include +#include + + +class BView; +class View; + + +class Test : public BHandler { +public: + Test(const char* name, const char* description, + BView* view = NULL); + virtual ~Test(); + + const char* Name() const; + const char* Description() const; + + virtual BView* GetView() const; + void SetView(BView* view); + + virtual void ActivateTest(View* controls); + virtual void DectivateTest(); + +private: + BString fName; + BString fDescription; + BView* fView; +}; + + +#endif // WIDGET_LAYOUT_TEST_TEST_H diff --git a/src/tests/kits/interface/layout/widget_layout_test/View.cpp b/src/tests/kits/interface/layout/widget_layout_test/View.cpp index 9d522cf448..6bbdb0e38d 100644 --- a/src/tests/kits/interface/layout/widget_layout_test/View.cpp +++ b/src/tests/kits/interface/layout/widget_layout_test/View.cpp @@ -320,6 +320,7 @@ View::Invalidate() void View::InvalidateLayout() { +//printf("%p->View::InvalidateLayout(): %d\n", this, fLayoutValid); if (fLayoutValid) { fLayoutValid = false; if (fParent) diff --git a/src/tests/kits/interface/layout/widget_layout_test/WidgetLayoutTest.cpp b/src/tests/kits/interface/layout/widget_layout_test/WidgetLayoutTest.cpp index c567d1f51a..08ac08a27b 100644 --- a/src/tests/kits/interface/layout/widget_layout_test/WidgetLayoutTest.cpp +++ b/src/tests/kits/interface/layout/widget_layout_test/WidgetLayoutTest.cpp @@ -6,12 +6,13 @@ #include #include -#include #include +#include "ButtonTest.h" #include "CheckBox.h" #include "GroupView.h" #include "StringView.h" +#include "Test.h" #include "TwoDimensionalSliderView.h" #include "View.h" #include "ViewContainer.h" @@ -36,25 +37,29 @@ operator+(const BPoint& p, const BSize& size) // TestWindow class TestWindow : public BWindow { public: - TestWindow() - : BWindow(BRect(100, 100, 700, 500), "Widget Layout", + TestWindow(Test* test) + : BWindow(BRect(50, 50, 750, 550), "Widget Layout", B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE | B_NOT_RESIZABLE - | B_NOT_ZOOMABLE) + | B_NOT_ZOOMABLE), + fTest(test) { fViewContainer = new ViewContainer(Bounds()); fViewContainer->View::SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); AddChild(fViewContainer); - BRect rect(10, 10, 400, 300); + // container view for the tested BView + BRect rect(10, 10, 400, 400); View* view = new View(rect); fViewContainer->View::AddChild(view); view->SetViewColor((rgb_color){200, 200, 240, 255}); + // container for the test's controls + fTestControlsView = new View(BRect(410, 10, 690, 400)); + fViewContainer->View::AddChild(fTestControlsView); + // wrapper view - fWrapperView = new WrapperView( - new BButton(BRect(0, 0, 9, 9), "test button", "Ooh, press me!", - (BMessage*)NULL, B_FOLLOW_NONE)); + fWrapperView = new WrapperView(fTest->GetView()); fWrapperView->SetLocation(BPoint(10, 10)); view->AddChild(fWrapperView); fWrapperView->SetSize(fWrapperView->PreferredSize()); @@ -98,6 +103,10 @@ public: sizeViewsGroup->PreferredSize())); _UpdateSizeViews(); + + // activate test + AddHandler(fTest); + fTest->ActivateTest(fTestControlsView); } virtual void DispatchMessage(BMessage* message, BHandler* handler) @@ -231,7 +240,9 @@ private: } private: + Test* fTest; ViewContainer* fViewContainer; + View* fTestControlsView; WrapperView* fWrapperView; TwoDimensionalSliderView* fSliderView; StringView* fMinWidthView; @@ -251,7 +262,9 @@ main() { BApplication app("application/x-vnd.haiku.widget-layout-test"); - BWindow* window = new TestWindow; + Test* test = new ButtonTest; + + BWindow* window = new TestWindow(test); window->Show(); app.Run();