From de83ade240ee9bd73480c6e46f75d7f3c73e58df Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Tue, 19 Jun 2007 23:39:10 +0000 Subject: [PATCH] Added test for BMenuField. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21467 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../layout/widget_layout_test/Jamfile | 1 + .../widget_layout_test/WidgetLayoutTest.cpp | 2 + .../tests/MenuFieldTest.cpp | 154 ++++++++++++++++++ .../widget_layout_test/tests/MenuFieldTest.h | 42 +++++ 4 files changed, 199 insertions(+) create mode 100644 src/tests/kits/interface/layout/widget_layout_test/tests/MenuFieldTest.cpp create mode 100644 src/tests/kits/interface/layout/widget_layout_test/tests/MenuFieldTest.h diff --git a/src/tests/kits/interface/layout/widget_layout_test/Jamfile b/src/tests/kits/interface/layout/widget_layout_test/Jamfile index ffa27350c8..f142740a87 100644 --- a/src/tests/kits/interface/layout/widget_layout_test/Jamfile +++ b/src/tests/kits/interface/layout/widget_layout_test/Jamfile @@ -25,6 +25,7 @@ SimpleTest WidgetLayoutTest : ControlTest.cpp ListViewTest.cpp MenuBarTest.cpp + MenuFieldTest.cpp MenuTest.cpp : be 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 bceec6def7..9f85a02f6b 100644 --- a/src/tests/kits/interface/layout/widget_layout_test/WidgetLayoutTest.cpp +++ b/src/tests/kits/interface/layout/widget_layout_test/WidgetLayoutTest.cpp @@ -15,6 +15,7 @@ #include "GroupView.h" #include "ListViewTest.h" #include "MenuBarTest.h" +#include "MenuFieldTest.h" #include "MenuTest.h" #include "StringView.h" #include "Test.h" @@ -43,6 +44,7 @@ const test_info kTestInfos[] = { { "BListView", ListViewTest::CreateTest }, { "BMenu", MenuTest::CreateTest }, { "BMenuBar", MenuBarTest::CreateTest }, + { "BMenuField", MenuFieldTest::CreateTest }, { NULL, NULL } }; diff --git a/src/tests/kits/interface/layout/widget_layout_test/tests/MenuFieldTest.cpp b/src/tests/kits/interface/layout/widget_layout_test/tests/MenuFieldTest.cpp new file mode 100644 index 0000000000..042c80ecfb --- /dev/null +++ b/src/tests/kits/interface/layout/widget_layout_test/tests/MenuFieldTest.cpp @@ -0,0 +1,154 @@ +/* + * Copyright 2007, Ingo Weinhold . + * All rights reserved. Distributed under the terms of the MIT License. + */ + +#include "MenuFieldTest.h" + +#include + +#include +#include +#include + +#include "CheckBox.h" +#include "GroupView.h" + + +enum { + MSG_CHANGE_LABEL_TEXT = 'chlt', + MSG_CHANGE_LABEL_FONT = 'chlf' +}; + + +// constructor +MenuFieldTest::MenuFieldTest() + : ControlTest("MenuField"), + fLongTextCheckBox(NULL), + fBigFontCheckBox(NULL), + fDefaultFont(NULL), + fBigFont(NULL) +{ + BMenu* menu = new BMenu("The Menu"); + + // add a few items + for (int32 i = 0; i < 10; i++) { + BString itemText("Menu item "); + itemText << i; + menu->AddItem(new BMenuItem(itemText.String(), NULL)); + } + + fMenuField = new BMenuField("", menu); + + SetView(fMenuField); +} + + +// destructor +MenuFieldTest::~MenuFieldTest() +{ + delete fDefaultFont; + delete fBigFont; +} + + +// CreateTest +Test* +MenuFieldTest::CreateTest() +{ + return new MenuFieldTest; +} + + +// ActivateTest +void +MenuFieldTest::ActivateTest(View* controls) +{ + GroupView* group = new GroupView(B_VERTICAL); + group->SetFrame(controls->Bounds()); + group->SetSpacing(0, 8); + controls->AddChild(group); + + // BMenuField sets its background color to that of its parent in + // AttachedToWindow(). Override. + rgb_color background = ui_color(B_PANEL_BACKGROUND_COLOR); + fMenuField->SetViewColor(background); + fMenuField->SetLowColor(background); + + // long text + fLongTextCheckBox = new LabeledCheckBox("Long label text", + new BMessage(MSG_CHANGE_LABEL_TEXT), this); + group->AddChild(fLongTextCheckBox); + + // big font + fBigFontCheckBox = new LabeledCheckBox("Big label font", + new BMessage(MSG_CHANGE_LABEL_FONT), this); + group->AddChild(fBigFontCheckBox); + + UpdateLabelText(); + UpdateLabelFont(); + + group->AddChild(new Glue()); +} + + +// DectivateTest +void +MenuFieldTest::DectivateTest() +{ +} + + +// MessageReceived +void +MenuFieldTest::MessageReceived(BMessage* message) +{ + switch (message->what) { + case MSG_CHANGE_LABEL_TEXT: + UpdateLabelText(); + break; + case MSG_CHANGE_LABEL_FONT: + UpdateLabelFont(); + break; + default: + Test::MessageReceived(message); + break; + } +} + + +// UpdateLabelText +void +MenuFieldTest::UpdateLabelText() +{ + if (!fLongTextCheckBox || !fMenuField) + return; + + fMenuField->SetLabel(fLongTextCheckBox->IsSelected() + ? "Pretty long menu field label" + : "Short label"); +} + + +// UpdateLabelFont +void +MenuFieldTest::UpdateLabelFont() +{ + if (!fBigFontCheckBox || !fMenuField || !fMenuField->Window()) + return; + + // get default font lazily + if (!fDefaultFont) { + fDefaultFont = new BFont; + fMenuField->GetFont(fDefaultFont); + + fBigFont = new BFont(fDefaultFont); + fBigFont->SetSize(20); + } + + // set font + fMenuField->SetFont(fBigFontCheckBox->IsSelected() + ? fBigFont : fDefaultFont); + fMenuField->InvalidateLayout(); + fMenuField->Invalidate(); +} diff --git a/src/tests/kits/interface/layout/widget_layout_test/tests/MenuFieldTest.h b/src/tests/kits/interface/layout/widget_layout_test/tests/MenuFieldTest.h new file mode 100644 index 0000000000..4ad377ff5a --- /dev/null +++ b/src/tests/kits/interface/layout/widget_layout_test/tests/MenuFieldTest.h @@ -0,0 +1,42 @@ +/* + * Copyright 2007, Ingo Weinhold . + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef WIDGET_LAYOUT_TEST_MENU_FIELD_TEST_H +#define WIDGET_LAYOUT_TEST_MENU_FIELD_TEST_H + + +#include "ControlTest.h" + + +class BFont; +class BMenuField; +class LabeledCheckBox; + + +class MenuFieldTest : public ControlTest { +public: + MenuFieldTest(); + virtual ~MenuFieldTest(); + + static Test* CreateTest(); + + virtual void ActivateTest(View* controls); + virtual void DectivateTest(); + + virtual void MessageReceived(BMessage* message); + +private: + void UpdateLabelText(); + void UpdateLabelFont(); + +private: + BMenuField* fMenuField; + LabeledCheckBox* fLongTextCheckBox; + LabeledCheckBox* fBigFontCheckBox; + BFont* fDefaultFont; + BFont* fBigFont; +}; + + +#endif // WIDGET_LAYOUT_TEST_MENU_FIELD_TEST_H