From 0acae24ee78e8c7595edb2626e46b30e2fb3b370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sat, 29 Mar 2014 23:10:46 +0100 Subject: [PATCH] Added simple Alert test application. --- src/tests/kits/interface/AlertTest.cpp | 210 +++++++++++++++++++++++++ src/tests/kits/interface/Jamfile | 5 + 2 files changed, 215 insertions(+) create mode 100644 src/tests/kits/interface/AlertTest.cpp diff --git a/src/tests/kits/interface/AlertTest.cpp b/src/tests/kits/interface/AlertTest.cpp new file mode 100644 index 0000000000..d0850b4946 --- /dev/null +++ b/src/tests/kits/interface/AlertTest.cpp @@ -0,0 +1,210 @@ +/* + * Copyright 2014, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Distributed under the terms of the MIT License. + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + + +const uint32 kMsgShowAlert = 'shAl'; + + +// #pragma mark - + + +class Window : public BWindow { +public: + Window(); + + virtual void MessageReceived(BMessage* message); + virtual bool QuitRequested(); + +private: + button_width _ButtonWidth(); + button_spacing _ButtonSpacing(); + alert_type _AlertType(); + +private: + BMenuField* fSizeField; + BMenuField* fTypeField; + BMenuField* fSpacingField; + BSlider* fCountSlider; + BStringView* fLastStringView; +}; + + +Window::Window() + : + BWindow(BRect(100, 100, 620, 200), "Alert-Test", B_TITLED_WINDOW, + B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS) +{ + BMenu* sizeMenu = new BMenu("Button size"); + sizeMenu->SetLabelFromMarked(true); + sizeMenu->SetRadioMode(true); + sizeMenu->AddItem(new BMenuItem("As usual", NULL)); + sizeMenu->AddItem(new BMenuItem("From widest", NULL)); + sizeMenu->AddItem(new BMenuItem("From label", NULL)); + sizeMenu->ItemAt(0)->SetMarked(true); + fSizeField = new BMenuField("Button size", sizeMenu); + + BMenu* typeMenu = new BMenu("Alert type"); + typeMenu->SetLabelFromMarked(true); + typeMenu->SetRadioMode(true); + typeMenu->AddItem(new BMenuItem("Empty", NULL)); + typeMenu->AddItem(new BMenuItem("Info", NULL)); + typeMenu->AddItem(new BMenuItem("Idea", NULL)); + typeMenu->AddItem(new BMenuItem("Warning", NULL)); + typeMenu->AddItem(new BMenuItem("Stop", NULL)); + typeMenu->ItemAt(0)->SetMarked(true); + fTypeField = new BMenuField("Alert type", typeMenu); + + BMenu* spacingMenu = new BMenu("Button spacing"); + spacingMenu->SetLabelFromMarked(true); + spacingMenu->SetRadioMode(true); + spacingMenu->AddItem(new BMenuItem("Even", NULL)); + spacingMenu->AddItem(new BMenuItem("Offset", NULL)); + spacingMenu->ItemAt(0)->SetMarked(true); + fSpacingField = new BMenuField("Button spacing", spacingMenu); + + fCountSlider = new BSlider("count", "Button count", NULL, 1, 3, + B_HORIZONTAL); + fCountSlider->SetValue(3); + fCountSlider->SetLimitLabels("1", "3"); + fCountSlider->SetHashMarkCount(3); + fCountSlider->SetHashMarks(B_HASH_MARKS_BOTTOM); + + fLastStringView = new BStringView("last pressed", ""); + fLastStringView->SetAlignment(B_ALIGN_CENTER); + + BButton* button = new BButton("Show alert", new BMessage(kMsgShowAlert)); + + BLayoutBuilder::Group<>(this, B_VERTICAL) + .Add(fSizeField) + .Add(fTypeField) + .Add(fSpacingField) + .Add(fCountSlider) + .AddGlue() + .Add(fLastStringView) + .Add(button) + .SetInsets(B_USE_DEFAULT_SPACING); + + CenterOnScreen(); + SetFlags(Flags() | B_CLOSE_ON_ESCAPE); +} + + +void +Window::MessageReceived(BMessage* message) +{ + switch (message->what) { + case kMsgShowAlert: + { + int32 count = fCountSlider->Value(); + + BAlert* alert = new BAlert("Test title", "Lorem ipsum dolor sit " + "amet, consectetur adipiscing elit. Suspendisse vel iaculis " + "quam. Donec faucibus erat nunc, ac ullamcorper justo sodales.", + "short 1", count > 1 ? "a bit longer 2" : NULL, + count > 2 ? "very very long button 3" : NULL, + _ButtonWidth(), _ButtonSpacing(), _AlertType()); + alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); + int result = alert->Go(); + if (result < 0) { + fLastStringView->SetText("Canceled alert"); + } else { + fLastStringView->SetText(BString().SetToFormat( + "Pressed button %d", result + 1).String()); + } + break; + } + default: + BWindow::MessageReceived(message); + } +} + + +bool +Window::QuitRequested() +{ + be_app->PostMessage(B_QUIT_REQUESTED); + return true; +} + + +button_width +Window::_ButtonWidth() +{ + switch (fSizeField->Menu()->FindMarkedIndex()) { + case 0: + default: + return B_WIDTH_AS_USUAL; + case 1: + return B_WIDTH_FROM_WIDEST; + case 2: + return B_WIDTH_FROM_LABEL; + } +} + + +button_spacing +Window::_ButtonSpacing() +{ + return (button_spacing)fSpacingField->Menu()->FindMarkedIndex(); +} + + +alert_type +Window::_AlertType() +{ + return (alert_type)fTypeField->Menu()->FindMarkedIndex(); +} + + +// #pragma mark - + + +class Application : public BApplication { +public: + Application(); + + virtual void ReadyToRun(); +}; + + +Application::Application() + : + BApplication("application/x-vnd.haiku-AlertTest") +{ +} + + +void +Application::ReadyToRun(void) +{ + BWindow* window = new Window(); + window->Show(); +} + + +// #pragma mark - + + +int +main(int argc, char** argv) +{ + Application app; + + app.Run(); + return 0; +} diff --git a/src/tests/kits/interface/Jamfile b/src/tests/kits/interface/Jamfile index e44c088d19..57f1a5ef02 100644 --- a/src/tests/kits/interface/Jamfile +++ b/src/tests/kits/interface/Jamfile @@ -68,6 +68,11 @@ SimpleTest ScrollViewTest : : be $(TARGET_LIBSUPC++) ; +SimpleTest AlertTest : + AlertTest.cpp + : be $(TARGET_LIBSUPC++) +; + SimpleTest ChannelSliderTest : ChannelSliderTest.cpp ChannelSlider.cpp