From f5e1f2163fde79d4eb3bbbd17182db9ad7d93787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 2 Dec 2005 11:37:31 +0000 Subject: [PATCH] The feel can now be changed on the fly as well (only in the test app, of course, the app_server is still dumb about it). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15281 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../servers/app/look_and_feel/LookAndFeel.cpp | 85 +++++++++++++++---- 1 file changed, 68 insertions(+), 17 deletions(-) diff --git a/src/tests/servers/app/look_and_feel/LookAndFeel.cpp b/src/tests/servers/app/look_and_feel/LookAndFeel.cpp index 42d9c8cdf2..120471cc5f 100644 --- a/src/tests/servers/app/look_and_feel/LookAndFeel.cpp +++ b/src/tests/servers/app/look_and_feel/LookAndFeel.cpp @@ -21,6 +21,7 @@ const uint32 kMsgUpdateLook = 'uplk'; +const uint32 kMsgUpdateFeel = 'upfe'; const uint32 kMsgUpdateFlags = 'upfl'; const uint32 kMsgAddWindow = 'adwn'; @@ -40,7 +41,7 @@ class Window : public BWindow { private: BMessage* AddWindowMessage(window_look look, window_feel feel); - const char* TitleForFeel(window_feel feel); + BString TitleForFeel(window_feel feel); void _UpdateFlagsMenuLabel(); BMenuField* fFlagsField; @@ -48,7 +49,7 @@ class Window : public BWindow { Window::Window(BRect frame, window_look look, window_feel feel) - : BWindow(frame, NULL, look, feel, + : BWindow(frame, TitleForFeel(feel).String(), look, feel, B_ASYNCHRONOUS_CONTROLS) { BRect rect(Bounds()); @@ -56,13 +57,11 @@ Window::Window(BRect frame, window_look look, window_feel feel) view->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); AddChild(view); - BString title = "Look&Feel - "; - title += TitleForFeel(feel); - SetTitle(title.String()); - if (!IsModal() && !IsFloating()) gNormalWindowCount++; + float labelWidth = view->StringWidth("Flags:") + 5.f; + BPopUpMenu* menu = new BPopUpMenu("looks"); const struct { const char* name; int32 look; } looks[] = { {"Titled", B_TITLED_WINDOW_LOOK}, {"Document", B_DOCUMENT_WINDOW_LOOK}, @@ -82,7 +81,33 @@ Window::Window(BRect frame, window_look look, window_feel feel) rect.InsetBy(10, 10); BMenuField* menuField = new BMenuField(rect, "look", "Look:", menu); menuField->ResizeToPreferred(); - menuField->SetDivider(menuField->StringWidth(menuField->Label()) + 5.0f); + menuField->SetDivider(labelWidth); + view->AddChild(menuField); + + menu = new BPopUpMenu("feels"); + const struct { const char* name; int32 feel; } feels[] = { + {"Normal", B_NORMAL_WINDOW_FEEL}, + {"Modal Subset", B_MODAL_SUBSET_WINDOW_FEEL}, + {"App Modal", B_MODAL_APP_WINDOW_FEEL}, + {"All Modal", B_MODAL_ALL_WINDOW_FEEL}, + {"Floating Subset", B_FLOATING_SUBSET_WINDOW_FEEL}, + {"App Floating", B_FLOATING_APP_WINDOW_FEEL}, + {"All Floating", B_FLOATING_ALL_WINDOW_FEEL}, + }; + for (uint32 i = 0; i < sizeof(feels) / sizeof(feels[0]); i++) { + BMessage* message = new BMessage(kMsgUpdateFeel); + message->AddInt32("feel", feels[i].feel); + BMenuItem* item = new BMenuItem(feels[i].name, message); + if (feels[i].feel == (int32)Feel()) + item->SetMarked(true); + + menu->AddItem(item); + } + + rect.OffsetBy(0, menuField->Bounds().Height() + 10); + menuField = new BMenuField(rect, "feel", "Feel:", menu); + menuField->ResizeToPreferred(); + menuField->SetDivider(labelWidth); view->AddChild(menuField); menu = new BPopUpMenu("none", false, false); @@ -107,7 +132,7 @@ Window::Window(BRect frame, window_look look, window_feel feel) rect.OffsetBy(0, menuField->Bounds().Height() + 10); fFlagsField = new BMenuField(rect, "flags", "Flags:", menu); fFlagsField->ResizeToPreferred(); - fFlagsField->SetDivider(fFlagsField->StringWidth(fFlagsField->Label()) + 5.0f); + fFlagsField->SetDivider(labelWidth); view->AddChild(fFlagsField); // normal @@ -203,6 +228,23 @@ Window::MessageReceived(BMessage* message) break; } + case kMsgUpdateFeel: + { + int32 feel; + if (message->FindInt32("feel", &feel) != B_OK) + break; + + if (!IsModal() && !IsFloating()) + gNormalWindowCount--; + + SetFeel((window_feel)feel); + SetTitle(TitleForFeel((window_feel)feel).String()); + + if (!IsModal() && !IsFloating()) + gNormalWindowCount++; + break; + } + case kMsgUpdateFlags: { uint32 flag; @@ -289,29 +331,38 @@ Window::AddWindowMessage(window_look look, window_feel feel) } -const char* +BString Window::TitleForFeel(window_feel feel) { + BString title = "Look&Feel - "; + switch (feel) { case B_NORMAL_WINDOW_FEEL: - return "Normal"; + title += "Normal"; + break; case B_MODAL_SUBSET_WINDOW_FEEL: - return "Modal Subset"; + title += "Modal Subset"; + break; case B_MODAL_APP_WINDOW_FEEL: - return "Application Modal"; + title += "Application Modal"; + break; case B_MODAL_ALL_WINDOW_FEEL: - return "All Modal"; + title += "All Modal"; + break; case B_FLOATING_SUBSET_WINDOW_FEEL: - return "Floating Subset"; + title += "Floating Subset"; + break; case B_FLOATING_APP_WINDOW_FEEL: - return "Application Floating"; + title += "Application Floating"; + break; case B_FLOATING_ALL_WINDOW_FEEL: - return "All Floating"; + title += "All Floating"; + break; } - return NULL; + return title; }