From 709172a02dc508c50435ab891ed4d11c7323fe47 Mon Sep 17 00:00:00 2001 From: John Scipione Date: Mon, 2 Sep 2013 13:17:35 -0400 Subject: [PATCH] ScreenSaver: Convert to layout APIs This allows the ScreenSaver window grow and shrink based on your font size and translations. Minimum is 446 px x 325 px so that there is enough space to accommodate screen savers designed for BeOS. Should fix #7369 and help #7332 a bit. Margins go right to the edge now which prevents the tab view from looking as liney. Password window has also been converted to use the layout APIs, also, the window now pops up in the center of the main ScreenSaver window. The fade translations will have to be redone unfortunately, but it should be easy as it is the concatenation of the previous strings. --- .../screensaver/PasswordWindow.cpp | 140 +-- src/preferences/screensaver/PreviewView.cpp | 7 + .../screensaver/ScreenSaverWindow.cpp | 841 ++++++++---------- .../screensaver/ScreenSaverWindow.h | 32 +- 4 files changed, 461 insertions(+), 559 deletions(-) diff --git a/src/preferences/screensaver/PasswordWindow.cpp b/src/preferences/screensaver/PasswordWindow.cpp index b511aa545f..46b43c2597 100644 --- a/src/preferences/screensaver/PasswordWindow.cpp +++ b/src/preferences/screensaver/PasswordWindow.cpp @@ -16,112 +16,118 @@ #include #include #include +#include +#include +#include #include #include +#include #include #include +#include "ScreenSaverSettings.h" + + #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "ScreenSaver" -const uint32 kMsgDone = 'done'; -const uint32 kMsgPasswordTypeChanged = 'pwtp'; + +static const uint32 kPasswordTextWidth = 12; + +static const uint32 kMsgDone = 'done'; +static const uint32 kMsgPasswordTypeChanged = 'pwtp'; PasswordWindow::PasswordWindow(ScreenSaverSettings& settings) - : BWindow(BRect(100, 100, 380, 249), B_TRANSLATE("Password Window"), - B_MODAL_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_ASYNCHRONOUS_CONTROLS - | B_NOT_RESIZABLE), + : + BWindow(BRect(100, 100, 300, 200), B_TRANSLATE("Password Window"), + B_MODAL_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_NOT_RESIZABLE + | B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS), fSettings(settings) { _Setup(); Update(); - - BRect screenFrame = BScreen(B_MAIN_SCREEN_ID).Frame(); - BPoint point; - point.x = (screenFrame.Width() - Bounds().Width()) / 2; - point.y = (screenFrame.Height() - Bounds().Height()) / 2; - - if (screenFrame.Contains(point)) - MoveTo(point); } void PasswordWindow::_Setup() { - BRect bounds = Bounds(); - BView* topView = new BView(bounds, "topView", B_FOLLOW_ALL, B_WILL_DRAW); + float spacing = be_control_look->DefaultItemSpacing(); + + BView* topView = new BView("topView", B_WILL_DRAW); topView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - AddChild(topView); + topView->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED)); - bounds.InsetBy(10.0, 10.0); - fUseNetwork = new BRadioButton(bounds, "useNetwork", + BBox* networkBox = new BBox("networkBox"); + networkBox->SetBorder(B_NO_BORDER); + + fUseNetwork = new BRadioButton("useNetwork", B_TRANSLATE("Use network password"), - new BMessage(kMsgPasswordTypeChanged), B_FOLLOW_NONE); - topView->AddChild(fUseNetwork); - fUseNetwork->ResizeToPreferred(); - fUseNetwork->MoveBy(10.0, 0.0); + new BMessage(kMsgPasswordTypeChanged)); + networkBox->SetLabel(fUseNetwork); - bounds.OffsetBy(0.0, fUseNetwork->Bounds().Height()); - BBox *customBox = new BBox(bounds, "customBox", B_FOLLOW_NONE); - topView->AddChild(customBox); + BBox* customBox = new BBox("customBox"); - fUseCustom = new BRadioButton(BRect(), "useCustom", + fUseCustom = new BRadioButton("useCustom", B_TRANSLATE("Use custom password"), - new BMessage(kMsgPasswordTypeChanged), B_FOLLOW_NONE); + new BMessage(kMsgPasswordTypeChanged)); customBox->SetLabel(fUseCustom); - fUseCustom->ResizeToPreferred(); - fPasswordControl = new BTextControl(bounds, "passwordControl", - B_TRANSLATE("Password:"), - NULL, B_FOLLOW_NONE); - customBox->AddChild(fPasswordControl); - fPasswordControl->ResizeToPreferred(); + fPasswordControl = new BTextControl("passwordTextView", + B_TRANSLATE("Password:"), B_EMPTY_STRING, NULL); fPasswordControl->TextView()->HideTyping(true); fPasswordControl->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); - - bounds.OffsetBy(0.0, fPasswordControl->Bounds().Height() + 5.0); - fConfirmControl = new BTextControl(bounds, "confirmControl", - B_TRANSLATE("Confirm password:"), - "VeryLongPasswordPossible", - B_FOLLOW_NONE); - customBox->AddChild(fConfirmControl); + + BLayoutItem* passwordTextView + = fPasswordControl->CreateTextViewLayoutItem(); + passwordTextView->SetExplicitMinSize(BSize(spacing * kPasswordTextWidth, + B_SIZE_UNSET)); + + fConfirmControl = new BTextControl("confirmTextView", + B_TRANSLATE("Confirm password:"), B_EMPTY_STRING, NULL); + fConfirmControl->SetExplicitMinSize(BSize(spacing * kPasswordTextWidth, + B_SIZE_UNSET)); fConfirmControl->TextView()->HideTyping(true); fConfirmControl->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); - float width, height; - fConfirmControl->GetPreferredSize(&width, &height); - fPasswordControl->ResizeTo(width, height); - fConfirmControl->ResizeTo(width, height); - - float divider = be_plain_font->StringWidth(B_TRANSLATE("Confirm password:")) - + 5.0; - fConfirmControl->SetDivider(divider); - fPasswordControl->SetDivider(divider); - - customBox->ResizeTo(fConfirmControl->Frame().right + 10.0, - fConfirmControl->Frame().bottom + 10.0); - - BButton* button = new BButton(BRect(), "done", B_TRANSLATE("Done"), + BLayoutItem* confirmTextView = fConfirmControl->CreateTextViewLayoutItem(); + confirmTextView->SetExplicitMinSize(BSize(spacing * kPasswordTextWidth, + B_SIZE_UNSET)); + + customBox->AddChild(BLayoutBuilder::Group<>(B_VERTICAL) + .SetInsets(B_USE_SMALL_SPACING) + .AddGrid(B_USE_DEFAULT_SPACING, B_USE_SMALL_SPACING) + .Add(fPasswordControl->CreateLabelLayoutItem(), 0, 0) + .Add(passwordTextView, 1, 0) + .Add(fConfirmControl->CreateLabelLayoutItem(), 0, 1) + .Add(confirmTextView, 1, 1) + .End() + .View()); + + BButton* doneButton = new BButton("done", B_TRANSLATE("Done"), new BMessage(kMsgDone)); - topView->AddChild(button); - button->ResizeToPreferred(); - BRect frame = customBox->Frame(); - button->MoveTo(frame.right - button->Bounds().Width(), frame.bottom + 10.0); - - frame = button->Frame(); - button->MakeDefault(true); - - button = new BButton(frame, "cancel", B_TRANSLATE("Cancel"), + BButton* cancelButton = new BButton("cancel", B_TRANSLATE("Cancel"), new BMessage(B_CANCEL)); - topView->AddChild(button); - button->ResizeToPreferred(); - button->MoveBy(-(button->Bounds().Width() + 10.0), 0.0); - ResizeTo(customBox->Frame().right + 10.0, frame.bottom + 10.0); + BLayoutBuilder::Group<>(topView, B_VERTICAL, 0) + .SetInsets(B_USE_DEFAULT_SPACING) + .Add(networkBox) + .Add(customBox) + .AddStrut(B_USE_DEFAULT_SPACING) + .AddGroup(B_HORIZONTAL) + .AddGlue() + .Add(cancelButton) + .Add(doneButton) + .End() + .End(); + + doneButton->MakeDefault(true); + + SetLayout(new BGroupLayout(B_VERTICAL)); + GetLayout()->AddView(topView); } diff --git a/src/preferences/screensaver/PreviewView.cpp b/src/preferences/screensaver/PreviewView.cpp index 5544475212..971151c53a 100644 --- a/src/preferences/screensaver/PreviewView.cpp +++ b/src/preferences/screensaver/PreviewView.cpp @@ -48,6 +48,13 @@ PreviewView::PreviewView(const char* name) fSaverView(NULL) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + + float aspectRatio = 4.0f / 3.0f; + // 4:3 monitor + float previewWidth = 160.0f; + float previewHeight = ceil(previewWidth / aspectRatio); + + SetExplicitSize(BSize(previewWidth, previewHeight)); } diff --git a/src/preferences/screensaver/ScreenSaverWindow.cpp b/src/preferences/screensaver/ScreenSaverWindow.cpp index d8c22c75c8..5b3b672809 100644 --- a/src/preferences/screensaver/ScreenSaverWindow.cpp +++ b/src/preferences/screensaver/ScreenSaverWindow.cpp @@ -12,24 +12,32 @@ #include "ScreenSaverWindow.h" +#include + // for std::max and std::min + #include +#include #include #include #include #include +#include #include #include #include #include #include #include +#include +#include #include #include #include #include #include #include +#include #include #include #include @@ -71,12 +79,11 @@ const int32 kMsgNeverFadeCornerChanged = 'nfcc'; class TimeSlider : public BSlider { public: - TimeSlider(BRect frame, const char* name, + TimeSlider(const char* name, uint32 changedMessage, uint32 updateMessage); virtual ~TimeSlider(); - virtual void AttachedToWindow(); virtual void SetValue(int32 value); void SetTime(bigtime_t useconds); @@ -90,16 +97,38 @@ private: class FadeView : public BView { public: - FadeView(BRect frame, const char* name, + FadeView(const char* name, ScreenSaverSettings& settings); virtual void AttachedToWindow(); + virtual void MessageReceived(BMessage* message); + + void UpdateTurnOffScreen(); + void UpdateStatus(); + +private: + ScreenSaverSettings& fSettings; + uint32 fTurnOffScreenFlags; + + BCheckBox* fEnableCheckBox; + TimeSlider* fRunSlider; + + BTextView* fTurnOffNotSupported; + BCheckBox* fTurnOffCheckBox; + TimeSlider* fTurnOffSlider; + + BCheckBox* fPasswordCheckBox; + TimeSlider* fPasswordSlider; + BButton* fPasswordButton; + + ScreenCornerSelector* fFadeNow; + ScreenCornerSelector* fFadeNever; }; class ModulesView : public BView { public: - ModulesView(BRect frame, const char* name, + ModulesView(const char* name, ScreenSaverSettings& settings); virtual ~ModulesView(); @@ -121,11 +150,11 @@ private: private: BFilePanel* fFilePanel; - BListView* fListView; + BListView* fScreenSaversListView; BButton* fTestButton; BButton* fAddButton; - ScreenSaverSettings& fSettings; + ScreenSaverSettings& fSettings; ScreenSaverRunner* fSaverRunner; BString fCurrentName; @@ -157,12 +186,11 @@ static const int32 kTimeUnitCount = sizeof(kTimeInUnits) / sizeof(kTimeInUnits[0]); -TimeSlider::TimeSlider(BRect frame, const char* name, uint32 changedMessage, - uint32 updateMessage) +TimeSlider::TimeSlider(const char* name, uint32 changedMessage, + uint32 updateMessage) : - BSlider(frame, name, B_TRANSLATE("30 seconds"), - new BMessage(changedMessage), - 0, kTimeUnitCount - 1, B_TRIANGLE_THUMB, B_FOLLOW_LEFT_RIGHT) + BSlider(name, B_TRANSLATE("30 seconds"), new BMessage(changedMessage), + 0, kTimeUnitCount - 1, B_HORIZONTAL, B_TRIANGLE_THUMB) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); SetModificationMessage(new BMessage(updateMessage)); @@ -175,14 +203,6 @@ TimeSlider::~TimeSlider() } -void -TimeSlider::AttachedToWindow() -{ - BSlider::AttachedToWindow(); - SetTarget(Window()); -} - - void TimeSlider::SetValue(int32 value) { @@ -227,32 +247,275 @@ TimeSlider::_TimeToString(bigtime_t useconds, BString& string) // #pragma mark - FadeView -FadeView::FadeView(BRect rect, const char* name, ScreenSaverSettings& settings) +FadeView::FadeView(const char* name, ScreenSaverSettings& settings) : - BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW) + BView(name, B_WILL_DRAW), + fSettings(settings) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + + font_height fontHeight; + be_plain_font->GetHeight(&fontHeight); + float textHeight = ceilf(fontHeight.ascent + fontHeight.descent); + + fEnableCheckBox = new BCheckBox("EnableCheckBox", + B_TRANSLATE("Enable screensaver"), + new BMessage(kMsgEnableScreenSaverBox)); + + BBox* box = new BBox("EnableScreenSaverBox"); + box->SetLabel(fEnableCheckBox); + + // Start Screensaver + BStringView* startScreenSaver = new BStringView("startScreenSaver", + B_TRANSLATE("Start screensaver")); + startScreenSaver->SetAlignment(B_ALIGN_RIGHT); + + fRunSlider = new TimeSlider("RunSlider", kMsgRunSliderChanged, + kMsgRunSliderUpdate); + + // Turn Off + rgb_color textColor = tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), + B_DISABLED_LABEL_TINT); + fTurnOffNotSupported = new BTextView("not_supported", be_plain_font, + &textColor, B_WILL_DRAW); + fTurnOffNotSupported->SetExplicitMinSize(BSize(B_SIZE_UNSET, + textHeight * 3)); + fTurnOffNotSupported->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + fTurnOffNotSupported->MakeEditable(false); + fTurnOffNotSupported->MakeSelectable(false); + fTurnOffNotSupported->SetText( + B_TRANSLATE("Display Power Management Signaling not available")); + + fTurnOffCheckBox = new BCheckBox("TurnOffScreenCheckBox", + B_TRANSLATE("Turn off screen"), new BMessage(kMsgTurnOffCheckBox)); + fTurnOffCheckBox->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, + B_ALIGN_VERTICAL_CENTER)); + + fTurnOffSlider = new TimeSlider("TurnOffSlider", kMsgTurnOffSliderChanged, + kMsgTurnOffSliderUpdate); + + // Password + fPasswordCheckBox = new BCheckBox("PasswordCheckbox", + B_TRANSLATE("Password lock"), new BMessage(kMsgPasswordCheckBox)); + fPasswordCheckBox->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, + B_ALIGN_VERTICAL_CENTER)); + + fPasswordSlider = new TimeSlider("PasswordSlider", + kMsgPasswordSliderChanged, kMsgPasswordSliderUpdate); + + fPasswordButton = new BButton("PasswordButton", + B_TRANSLATE("Password" B_UTF8_ELLIPSIS), + new BMessage(kMsgChangePassword)); + + // Bottom + float monitorHeight = 10 + textHeight * 3; + float aspectRatio = 4.0f / 3.0f; + float monitorWidth = monitorHeight * aspectRatio; + BRect monitorRect = BRect(0, 0, monitorWidth, monitorHeight); + + fFadeNow = new ScreenCornerSelector(monitorRect, "FadeNow", + new BMessage(kMsgFadeCornerChanged), B_FOLLOW_NONE); + BTextView* fadeNowText = new BTextView("FadeNowText", B_WILL_DRAW); + fadeNowText->SetExplicitMinSize(BSize(B_SIZE_UNSET, textHeight * 3)); + fadeNowText->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + fadeNowText->MakeEditable(false); + fadeNowText->MakeSelectable(false); + fadeNowText->SetText(B_TRANSLATE("Fade now when mouse is here")); + + fFadeNever = new ScreenCornerSelector(monitorRect, "FadeNever", + new BMessage(kMsgNeverFadeCornerChanged), B_FOLLOW_NONE); + BTextView* fadeNeverText = new BTextView("FadeNeverText", B_WILL_DRAW); + fadeNeverText->SetExplicitMinSize(BSize(B_SIZE_UNSET, textHeight * 3)); + fadeNeverText->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + fadeNeverText->MakeEditable(false); + fadeNeverText->MakeSelectable(false); + fadeNeverText->SetText(B_TRANSLATE("Don't fade when mouse is here")); + + box->AddChild(BLayoutBuilder::Group<>(B_VERTICAL) + .SetInsets(B_USE_DEFAULT_SPACING, 0, B_USE_DEFAULT_SPACING, + B_USE_DEFAULT_SPACING) + .AddGrid(B_USE_DEFAULT_SPACING, B_USE_SMALL_SPACING) + .Add(startScreenSaver, 0, 0) + .Add(fRunSlider, 1, 0) + .Add(fTurnOffCheckBox, 0, 1) + .Add(BLayoutBuilder::Group<>(B_VERTICAL) + .Add(fTurnOffNotSupported) + .Add(fTurnOffSlider) + .View(), 1, 1) + .Add(fPasswordCheckBox, 0, 2) + .Add(fPasswordSlider, 1, 2) + .End() + .AddGroup(B_HORIZONTAL) + .AddGlue() + .Add(fPasswordButton) + .End() + .AddGlue() + .AddGroup(B_HORIZONTAL) + .Add(fFadeNow) + .AddGroup(B_VERTICAL, 0) + .Add(fadeNowText) + .AddGlue() + .End() + .Add(fFadeNever) + .AddGroup(B_VERTICAL, 0) + .Add(fadeNeverText) + .AddGlue() + .End() + .End() + .AddGlue() + .View()); + + BLayoutBuilder::Group<>(this, B_HORIZONTAL) + .SetInsets(B_USE_SMALL_SPACING) + .Add(box) + .End(); } void FadeView::AttachedToWindow() { - if (Parent() != NULL) { - // We adopt the size of our parent view (in case the window - // was resized during our absence (BTabView...) - ResizeTo(Parent()->Bounds().Width(), Parent()->Bounds().Height()); + fEnableCheckBox->SetTarget(this); + fRunSlider->SetTarget(this); + fTurnOffSlider->SetTarget(this); + fFadeNow->SetTarget(this); + fFadeNever->SetTarget(this); + fPasswordCheckBox->SetTarget(this); + fPasswordSlider->SetTarget(this); + + fEnableCheckBox->SetValue( + fSettings.TimeFlags() & ENABLE_SAVER ? B_CONTROL_ON : B_CONTROL_OFF); + fRunSlider->SetTime(fSettings.BlankTime()); + fTurnOffSlider->SetTime(fSettings.OffTime() + fSettings.BlankTime()); + fFadeNow->SetCorner(fSettings.BlankCorner()); + fFadeNever->SetCorner(fSettings.NeverBlankCorner()); + fPasswordCheckBox->SetValue(fSettings.LockEnable()); + fPasswordSlider->SetTime(fSettings.PasswordTime()); + + UpdateTurnOffScreen(); + UpdateStatus(); +} + + +void +FadeView::MessageReceived(BMessage *message) +{ + switch (message->what) { + case kMsgRunSliderChanged: + case kMsgRunSliderUpdate: + if (fRunSlider->Value() > fTurnOffSlider->Value()) + fTurnOffSlider->SetValue(fRunSlider->Value()); + + if (fRunSlider->Value() > fPasswordSlider->Value()) + fPasswordSlider->SetValue(fRunSlider->Value()); + break; + + case kMsgTurnOffSliderChanged: + case kMsgTurnOffSliderUpdate: + if (fRunSlider->Value() > fTurnOffSlider->Value()) + fRunSlider->SetValue(fTurnOffSlider->Value()); + break; + + case kMsgPasswordSliderChanged: + case kMsgPasswordSliderUpdate: + if (fPasswordSlider->Value() < fRunSlider->Value()) + fRunSlider->SetValue(fPasswordSlider->Value()); + break; + + case kMsgTurnOffCheckBox: + fTurnOffSlider->SetEnabled( + fTurnOffCheckBox->Value() == B_CONTROL_ON); + break; + } + + switch (message->what) { + case kMsgRunSliderChanged: + case kMsgTurnOffSliderChanged: + case kMsgPasswordSliderChanged: + case kMsgPasswordCheckBox: + case kMsgEnableScreenSaverBox: + case kMsgFadeCornerChanged: + case kMsgNeverFadeCornerChanged: + UpdateStatus(); + fSettings.Save(); + break; + + default: + BView::MessageReceived(message); } } -// #pragma mark - +void +FadeView::UpdateTurnOffScreen() +{ + bool enabled = (fSettings.TimeFlags() & ENABLE_DPMS_MASK) != 0; + + BScreen screen(Window()); + uint32 dpmsCapabilities = screen.DPMSCapabilites(); + + fTurnOffScreenFlags = 0; + if (dpmsCapabilities & B_DPMS_OFF) + fTurnOffScreenFlags |= ENABLE_DPMS_OFF; + if (dpmsCapabilities & B_DPMS_STAND_BY) + fTurnOffScreenFlags |= ENABLE_DPMS_STAND_BY; + if (dpmsCapabilities & B_DPMS_SUSPEND) + fTurnOffScreenFlags |= ENABLE_DPMS_SUSPEND; + + fTurnOffCheckBox->SetValue(enabled && fTurnOffScreenFlags != 0 + ? B_CONTROL_ON : B_CONTROL_OFF); + + enabled = fEnableCheckBox->Value() == B_CONTROL_ON; + fTurnOffCheckBox->SetEnabled(enabled && fTurnOffScreenFlags != 0); + if (fTurnOffScreenFlags != 0) { + fTurnOffNotSupported->Hide(); + fTurnOffSlider->Show(); + } else { + fTurnOffSlider->Hide(); + fTurnOffNotSupported->Show(); + } +} -ModulesView::ModulesView(BRect rect, const char* name, - ScreenSaverSettings& settings) +void +FadeView::UpdateStatus() +{ + Window()->DisableUpdates(); + + bool enabled = fEnableCheckBox->Value() == B_CONTROL_ON; + fPasswordCheckBox->SetEnabled(enabled); + fTurnOffCheckBox->SetEnabled(enabled && fTurnOffScreenFlags != 0); + fRunSlider->SetEnabled(enabled); + fTurnOffSlider->SetEnabled(enabled && fTurnOffCheckBox->Value()); + fPasswordSlider->SetEnabled(enabled && fPasswordCheckBox->Value()); + fPasswordButton->SetEnabled(enabled && fPasswordCheckBox->Value()); + + Window()->EnableUpdates(); + + // Update the saved preferences + fSettings.SetWindowFrame(Frame()); + fSettings.SetTimeFlags((enabled ? ENABLE_SAVER : 0) + | (fTurnOffCheckBox->Value() ? fTurnOffScreenFlags : 0)); + fSettings.SetBlankTime(fRunSlider->Time()); + bigtime_t offTime = fTurnOffSlider->Time() - fSettings.BlankTime(); + fSettings.SetOffTime(offTime); + fSettings.SetSuspendTime(offTime); + fSettings.SetStandByTime(offTime); + fSettings.SetBlankCorner(fFadeNow->Corner()); + fSettings.SetNeverBlankCorner(fFadeNever->Corner()); + fSettings.SetLockEnable(fPasswordCheckBox->Value()); + fSettings.SetPasswordTime(fPasswordSlider->Time()); + + // TODO - Tell the password window to update its stuff +} + + +// #pragma mark - ModulesView + + +ModulesView::ModulesView(const char* name, ScreenSaverSettings& settings) : - BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW), + BView(name, B_WILL_DRAW), fSettings(settings), fSaverRunner(NULL), fSettingsView(NULL), @@ -260,48 +523,40 @@ ModulesView::ModulesView(BRect rect, const char* name, { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - fTestButton = new BButton(rect, "TestButton", B_TRANSLATE("Test"), - new BMessage(kMsgTestSaver), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM); - float width, height; - fTestButton->GetPreferredSize(&width, &height); - fTestButton->ResizeTo(width + 16, height); - fTestButton->MoveTo(8, rect.bottom - 8 - height); - AddChild(fTestButton); + fTestButton = new BButton("TestButton", B_TRANSLATE("Test"), + new BMessage(kMsgTestSaver)); - rect = fTestButton->Frame(); - rect.OffsetBy(fTestButton->Bounds().Width() + 8, 0); - fAddButton = new BButton(rect, "AddButton", - B_TRANSLATE("Add" B_UTF8_ELLIPSIS), new BMessage(kMsgAddSaver), - B_FOLLOW_LEFT | B_FOLLOW_BOTTOM); - AddChild(fAddButton); + fAddButton = new BButton("AddButton", + B_TRANSLATE("Add" B_UTF8_ELLIPSIS), new BMessage(kMsgAddSaver)); - rect = Bounds().InsetByCopy(8 + kPreviewMonitorGap, 12); - rect.right = fAddButton->Frame().right - kPreviewMonitorGap; - rect.bottom = rect.top + 3 * rect.Width() / 4; - // 4:3 monitor + fPreviewView = new PreviewView("preview"); - fPreviewView = new PreviewView(rect, "preview"); - AddChild(fPreviewView); + fScreenSaversListView = new BListView("SaversListView", + B_SINGLE_SELECTION_LIST); + fScreenSaversListView->SetSelectionMessage( + new BMessage(kMsgSaverSelected)); + BScrollView* saversListScrollView = new BScrollView("scroll_list", + fScreenSaversListView, 0, false, true); - rect.left = 8; - rect.right -= B_V_SCROLL_BAR_WIDTH + 2 - kPreviewMonitorGap; - // scroll view border - rect.top = rect.bottom + 14; - rect.bottom = fTestButton->Frame().top - 10; - fListView = new BListView(rect, "SaversListView", B_SINGLE_SELECTION_LIST, - B_FOLLOW_LEFT | B_FOLLOW_TOP_BOTTOM); - fListView->SetSelectionMessage(new BMessage(kMsgSaverSelected)); - AddChild(new BScrollView("scroll_list", fListView, - B_FOLLOW_LEFT | B_FOLLOW_TOP_BOTTOM, 0, false, true)); - - rect = Bounds().InsetByCopy(8, 8); - rect.left = fAddButton->Frame().right + 8; - AddChild(fSettingsBox = new BBox(rect, "SettingsBox", B_FOLLOW_ALL, - B_WILL_DRAW)); + fSettingsBox = new BBox("SettingsBox"); fSettingsBox->SetLabel(B_TRANSLATE("Screensaver settings")); - PopulateScreenSaverList(); fFilePanel = new BFilePanel(); + + BLayoutBuilder::Group<>(this, B_HORIZONTAL) + .SetInsets(B_USE_DEFAULT_SPACING) + .AddGroup(B_VERTICAL) + .Add(fPreviewView) + .Add(saversListScrollView) + .AddGroup(B_HORIZONTAL) + .Add(fTestButton) + .Add(fAddButton) + .End() + .End() + .Add(fSettingsBox) + .End(); + + PopulateScreenSaverList(); } @@ -322,15 +577,9 @@ ModulesView::DetachedFromWindow() void ModulesView::AttachedToWindow() { - if (Parent() != NULL) { - // We adopt the size of our parent view (in case the window - // was resized during our absence (BTabView...) - ResizeTo(Parent()->Bounds().Width(), Parent()->Bounds().Height()); - } - _OpenSaver(); - fListView->SetTarget(this); + fScreenSaversListView->SetTarget(this); fTestButton->SetTarget(this); fAddButton->SetTarget(this); } @@ -340,7 +589,7 @@ void ModulesView::AllAttached() { // This only works after the view has been attached - fListView->ScrollToSelection(); + fScreenSaversListView->ScrollToSelection(); } @@ -350,16 +599,16 @@ ModulesView::MessageReceived(BMessage* message) switch (message->what) { case kMsgSaverSelected: { - int selection = fListView->CurrentSelection(); + int selection = fScreenSaversListView->CurrentSelection(); if (selection < 0) break; ScreenSaverItem* item - = (ScreenSaverItem*)fListView->ItemAt(selection); + = (ScreenSaverItem*)fScreenSaversListView->ItemAt(selection); if (item == NULL) break; - if (!strcmp(item->Text(), B_TRANSLATE("Blackness"))) + if (strcmp(item->Text(), B_TRANSLATE("Blackness")) == 0) fSettings.SetModuleName(""); else fSettings.SetModuleName(item->Text()); @@ -439,14 +688,15 @@ ModulesView::SaveState() void ModulesView::PopulateScreenSaverList() { - fListView->DeselectAll(); + fScreenSaversListView->DeselectAll(); while (ScreenSaverItem* item - = (ScreenSaverItem*)fListView->RemoveItem((int32)0)) { + = (ScreenSaverItem*)fScreenSaversListView->RemoveItem((int32)0)) { delete item; } // Blackness is a built-in screen saver - fListView->AddItem(new ScreenSaverItem(B_TRANSLATE("Blackness"), "")); + fScreenSaversListView->AddItem( + new ScreenSaverItem(B_TRANSLATE("Blackness"), "")); // Iterate over add-on directories, and add their files to the list view @@ -473,19 +723,20 @@ ModulesView::PopulateScreenSaverList() path.Append(name); ScreenSaverItem* item = new ScreenSaverItem(name, path.Path()); - fListView->AddItem(item); + fScreenSaversListView->AddItem(item); - if (!strcmp(fSettings.ModuleName(), item->Text()) - || (!strcmp(fSettings.ModuleName(), "") - && !strcmp(item->Text(), B_TRANSLATE("Blackness")))) + if (strcmp(fSettings.ModuleName(), item->Text()) != 0 + || (strcmp(fSettings.ModuleName(), "") != 0 + && strcmp(item->Text(), B_TRANSLATE("Blackness")) != 0)) { selectItem = item; + } } } - fListView->SortItems(_CompareScreenSaverItems); + fScreenSaversListView->SortItems(_CompareScreenSaverItems); - fListView->Select(fListView->IndexOf(selectItem)); - fListView->ScrollToSelection(); + fScreenSaversListView->Select(fScreenSaversListView->IndexOf(selectItem)); + fScreenSaversListView->ScrollToSelection(); } @@ -572,53 +823,6 @@ ModulesView::_OpenSaver() ? B_TRANSLATE("No options available") : B_TRANSLATE("Could not load screen saver")); } - - ScreenSaverWindow* window = dynamic_cast(Window()); - if (window == NULL) - return; - - // find the minimal size of the settings view - - float right = 0, bottom = 0; - int32 i = 0; - while ((view = fSettingsView->ChildAt(i++)) != NULL) { - // very simple heuristic... - float viewRight = view->Frame().right; - if ((view->ResizingMode() & _rule_(0, 0xf, 0, 0xf)) - == B_FOLLOW_LEFT_RIGHT) { - float width, height; - view->GetPreferredSize(&width, &height); - viewRight = view->Frame().left + width / 2; - } else if ((view->ResizingMode() & _rule_(0, 0xf, 0, 0xf)) - == B_FOLLOW_RIGHT) - viewRight = 8 + view->Frame().Width(); - - float viewBottom = view->Frame().bottom; - if ((view->ResizingMode() & _rule_(0xf, 0, 0xf, 0)) - == B_FOLLOW_TOP_BOTTOM) { - float width, height; - view->GetPreferredSize(&width, &height); - viewBottom = view->Frame().top + height; - } else if ((view->ResizingMode() & _rule_(0xf, 0, 0xf, 0)) - == B_FOLLOW_BOTTOM) - viewBottom = 8 + view->Frame().Height(); - - if (viewRight > right) - right = viewRight; - if (viewBottom > bottom) - bottom = viewBottom; - } - - if (right < kMinSettingsWidth) - right = kMinSettingsWidth; - if (bottom < kMinSettingsHeight) - bottom = kMinSettingsHeight; - - BPoint leftTop = fSettingsView->LeftTop(); - fSettingsView->ConvertToScreen(&leftTop); - window->ConvertFromScreen(&leftTop); - window->SetMinimalSizeLimit(leftTop.x + right + 16, - leftTop.y + bottom + 16); } @@ -628,60 +832,61 @@ ModulesView::_OpenSaver() ScreenSaverWindow::ScreenSaverWindow() : BWindow(BRect(50, 50, 496, 375), B_TRANSLATE_SYSTEM_NAME("ScreenSaver"), - B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS) + B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS) { fSettings.Load(); - BRect rect = Bounds(); - fMinWidth = 430; - fMinHeight = 325; + float spacing = be_control_look->DefaultItemSpacing(); - // Create a background view - BView *background = new BView(rect, "background", B_FOLLOW_ALL, 0); - background->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - AddChild(background); - - // Add the tab view to the background - rect.top += 4; - fTabView = new BTabView(rect, "tab_view"); - - // Create the controls inside the tabs - rect = fTabView->ContainerView()->Bounds(); - _SetupFadeTab(rect); - fModulesView = new ModulesView(rect, B_TRANSLATE("Screensavers"), fSettings); - - fTabView->AddTab(fFadeView); - fTabView->AddTab(fModulesView); - background->AddChild(fTabView); + fMinWidth = ceilf(std::max(446.0f, spacing * 44.6f)); + fMinHeight = ceilf(std::max(325.0f, spacing * 32.5f)); // Create the password editing window fPasswordWindow = new PasswordWindow(fSettings); fPasswordWindow->Run(); - SetMinimalSizeLimit(fMinWidth, fMinHeight); - MoveTo(fSettings.WindowFrame().left, fSettings.WindowFrame().top); - ResizeTo(fSettings.WindowFrame().Width(), fSettings.WindowFrame().Height()); + // Create the tab view + fTabView = new BTabView("tab_view", B_WIDTH_FROM_LABEL); - fEnableCheckBox->SetValue( - fSettings.TimeFlags() & ENABLE_SAVER ? B_CONTROL_ON : B_CONTROL_OFF); - fRunSlider->SetTime(fSettings.BlankTime()); - fTurnOffSlider->SetTime(fSettings.OffTime() + fSettings.BlankTime()); - fFadeNow->SetCorner(fSettings.BlankCorner()); - fFadeNever->SetCorner(fSettings.NeverBlankCorner()); - fPasswordCheckBox->SetValue(fSettings.LockEnable()); - fPasswordSlider->SetTime(fSettings.PasswordTime()); + // Create the controls inside the tabs + fFadeView = new FadeView(B_TRANSLATE("General"), fSettings); + fModulesView = new ModulesView(B_TRANSLATE("Screensavers"), fSettings); + + fTabView->AddTab(fFadeView); + fTabView->AddTab(fModulesView); + + // Create the topmost background view + BView* topView = new BView("topView", B_WILL_DRAW); + topView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + topView->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH, + B_ALIGN_USE_FULL_HEIGHT)); + topView->SetExplicitMinSize(BSize(fMinWidth, fMinHeight)); + BLayoutBuilder::Group<>(topView, B_VERTICAL) + .SetInsets(-1, B_USE_SMALL_SPACING, -1, -1) + .Add(fTabView) + .End(); + + SetLayout(new BGroupLayout(B_VERTICAL)); + GetLayout()->AddView(topView); fTabView->Select(fSettings.WindowTab()); - _UpdateTurnOffScreen(); - _UpdateStatus(); + if (fSettings.WindowFrame().left > 0 && fSettings.WindowFrame().top > 0) + MoveTo(fSettings.WindowFrame().left, fSettings.WindowFrame().top); + + if (fSettings.WindowFrame().Width() > 0 + && fSettings.WindowFrame().Height() > 0) { + ResizeTo(fSettings.WindowFrame().Width(), + fSettings.WindowFrame().Height()); + } } ScreenSaverWindow::~ScreenSaverWindow() { Hide(); - _UpdateStatus(); + fFadeView->UpdateStatus(); + fSettings.SetWindowTab(fTabView->Selection()); delete fTabView->RemoveTab(1); // We delete this here in order to make sure the module view saves its @@ -691,313 +896,21 @@ ScreenSaverWindow::~ScreenSaverWindow() } -//! Create the controls for the "General" tab void -ScreenSaverWindow::_SetupFadeTab(BRect rect) +ScreenSaverWindow::MessageReceived(BMessage *message) { - fFadeView = new FadeView(rect, B_TRANSLATE("General"), fSettings); - - float StringWidth1 = be_plain_font->StringWidth(B_TRANSLATE - ("Start screensaver")); - float StringWidth2 = be_plain_font->StringWidth(B_TRANSLATE - ("Turn off screen")); - float StringWidth3 = be_plain_font->StringWidth(B_TRANSLATE - ("Password lock")); - - float labelWidth = StringWidth1; - if (labelWidth < StringWidth2) - labelWidth = StringWidth2; - if (labelWidth < StringWidth3) - labelWidth = StringWidth3; - - labelWidth += 20.0f; - - font_height fontHeight; - be_plain_font->GetHeight(&fontHeight); - float textHeight = ceilf(fontHeight.ascent + fontHeight.descent); - - // taken from BRadioButton: - float radioButtonOffset = 2 * floorf(textHeight / 2 - 2) - + floorf(textHeight / 2); - - fEnableCheckBox = new BCheckBox(BRect(0, 0, 1, 1), "EnableCheckBox", - B_TRANSLATE("Enable screensaver"), - new BMessage(kMsgEnableScreenSaverBox)); - fEnableCheckBox->ResizeToPreferred(); - - rect.InsetBy(8, 8); - BBox* box = new BBox(rect, "EnableScreenSaverBox", B_FOLLOW_ALL); - box->SetLabel(fEnableCheckBox); - fFadeView->AddChild(box); - - // Start Screensaver - rect.left += radioButtonOffset + 6; - rect.top = fEnableCheckBox->Bounds().bottom + 8.0f; - rect.right = box->Bounds().right - 8; - BStringView* stringView = new BStringView(rect, NULL, - B_TRANSLATE("Start screensaver")); - stringView->ResizeToPreferred(); - box->AddChild(stringView); - - rect.left += labelWidth - 4; - fRunSlider = new TimeSlider(rect, "RunSlider", kMsgRunSliderChanged, - kMsgRunSliderUpdate); - float width, height; - fRunSlider->GetPreferredSize(&width, &height); - fRunSlider->ResizeTo(fRunSlider->Bounds().Width(), height); - box->AddChild(fRunSlider); - - // Turn Off - rect.left = 10; - rect.OffsetBy(0, fRunSlider->Bounds().Height() + 4.0f); - fTurnOffCheckBox = new BCheckBox(rect, "TurnOffScreenCheckBox", - B_TRANSLATE("Turn off screen"), new BMessage(kMsgTurnOffCheckBox)); - fTurnOffCheckBox->ResizeToPreferred(); - box->AddChild(fTurnOffCheckBox); - - rect.top += 3; - rect.left += radioButtonOffset + labelWidth; - fTurnOffSlider = new TimeSlider(rect, "TurnOffSlider", - kMsgTurnOffSliderChanged, kMsgTurnOffSliderUpdate); - fTurnOffSlider->ResizeTo(fTurnOffSlider->Bounds().Width(), height); - box->AddChild(fTurnOffSlider); - - rgb_color textColor = tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), - B_DISABLED_LABEL_TINT); - BRect textRect(0, 0, fTurnOffSlider->Bounds().Width(), height); - textRect.InsetBy(0, 3); - fTurnOffNotSupported = new BTextView(rect, "not_supported", - textRect, be_plain_font, &textColor, B_FOLLOW_ALL, B_WILL_DRAW); - fTurnOffNotSupported->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - fTurnOffNotSupported->MakeEditable(false); - fTurnOffNotSupported->MakeSelectable(false); - fTurnOffNotSupported->SetText( - B_TRANSLATE("Display Power Management Signaling not available")); - - fTurnOffNotSupported->ResizeTo(fTurnOffSlider->Bounds().Width(), height); - box->AddChild(fTurnOffNotSupported); - - // Password - rect.left = 10; - rect.OffsetBy(0, fTurnOffSlider->Bounds().Height() + 4.0f); - fPasswordCheckBox = new BCheckBox(rect, "PasswordCheckbox", - B_TRANSLATE("Password lock"), new BMessage(kMsgPasswordCheckBox)); - fPasswordCheckBox->ResizeToPreferred(); - box->AddChild(fPasswordCheckBox); - - rect.top += 3; - rect.left += radioButtonOffset + labelWidth; - fPasswordSlider = new TimeSlider(rect, "PasswordSlider", - kMsgPasswordSliderChanged, kMsgPasswordSliderUpdate); - fPasswordSlider->ResizeTo(fPasswordSlider->Bounds().Width(), height); - box->AddChild(fPasswordSlider); - - rect.OffsetBy(0, fTurnOffSlider->Bounds().Height() + 4.0f); - rect.left = rect.right; - fPasswordButton = new BButton(rect, "PasswordButton", - B_TRANSLATE("Password" B_UTF8_ELLIPSIS), - new BMessage(kMsgChangePassword), B_FOLLOW_TOP | B_FOLLOW_RIGHT); - fPasswordButton->ResizeToPreferred(); - fPasswordButton->MoveBy(-fPasswordButton->Bounds().Width(), 0); - box->AddChild(fPasswordButton); - - // Bottom - - float monitorHeight = 10 + textHeight * 3; - float monitorWidth = monitorHeight * 4 / 3; - rect.left = 11; - rect.top = box->Bounds().Height() - 15 - monitorHeight; - rect.right = rect.left + monitorWidth; - rect.bottom = rect.top + monitorHeight; - box->AddChild(fFadeNow = new ScreenCornerSelector(rect, "FadeNow", - new BMessage(kMsgFadeCornerChanged), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM)); - - rect.OffsetBy(monitorWidth + 10, 0); - stringView = new BStringView(rect, NULL, B_TRANSLATE("Fade now when"), - B_FOLLOW_LEFT | B_FOLLOW_BOTTOM); - stringView->ResizeToPreferred(); - float maxWidth = stringView->Bounds().Width(); - box->AddChild(stringView); - - rect.OffsetBy(0, stringView->Bounds().Height()); - stringView = new BStringView(rect, NULL, B_TRANSLATE("mouse is here"), - B_FOLLOW_LEFT | B_FOLLOW_BOTTOM); - stringView->ResizeToPreferred(); - if (maxWidth < stringView->Bounds().Width()) - maxWidth = stringView->Bounds().Width(); - box->AddChild(stringView); - - rect.left += maxWidth + 20; - rect.top = box->Bounds().Height() - 15 - monitorHeight; - rect.right = rect.left + monitorWidth; - rect.bottom = rect.top + monitorHeight; - box->AddChild(fFadeNever = new ScreenCornerSelector(rect, "FadeNever", - new BMessage(kMsgNeverFadeCornerChanged), - B_FOLLOW_LEFT | B_FOLLOW_BOTTOM)); - - rect.OffsetBy(monitorWidth + 10, 0); - stringView = new BStringView(rect, NULL,B_TRANSLATE("Don't fade when"), - B_FOLLOW_LEFT | B_FOLLOW_BOTTOM); - stringView->ResizeToPreferred(); - if (maxWidth < stringView->Bounds().Width()) - maxWidth = stringView->Bounds().Width(); - box->AddChild(stringView); - - rect.OffsetBy(0, stringView->Bounds().Height()); - stringView = new BStringView(rect, NULL, B_TRANSLATE("mouse is here"), - B_FOLLOW_LEFT | B_FOLLOW_BOTTOM); - stringView->ResizeToPreferred(); - if (maxWidth < stringView->Bounds().Width()) - maxWidth = stringView->Bounds().Width(); - box->AddChild(stringView); - - float size = rect.left + maxWidth + 40; - if (fMinWidth < size) - fMinWidth = size; - size = fPasswordButton->Frame().bottom + box->Frame().top - + monitorHeight + 40 + textHeight * 2; - if (fMinHeight < size) - fMinHeight = size; -} - - -void -ScreenSaverWindow::_UpdateTurnOffScreen() -{ - bool enabled = (fSettings.TimeFlags() & ENABLE_DPMS_MASK) != 0; - - BScreen screen(this); - uint32 dpmsCapabilities = screen.DPMSCapabilites(); - - fTurnOffScreenFlags = 0; - if (dpmsCapabilities & B_DPMS_OFF) - fTurnOffScreenFlags |= ENABLE_DPMS_OFF; - if (dpmsCapabilities & B_DPMS_STAND_BY) - fTurnOffScreenFlags |= ENABLE_DPMS_STAND_BY; - if (dpmsCapabilities & B_DPMS_SUSPEND) - fTurnOffScreenFlags |= ENABLE_DPMS_SUSPEND; - - fTurnOffCheckBox->SetValue(enabled && fTurnOffScreenFlags != 0 - ? B_CONTROL_ON : B_CONTROL_OFF); - - enabled = fEnableCheckBox->Value() == B_CONTROL_ON; - fTurnOffCheckBox->SetEnabled(enabled && fTurnOffScreenFlags != 0); - if (fTurnOffScreenFlags != 0) { - fTurnOffNotSupported->Hide(); - fTurnOffSlider->Show(); - } else { - fTurnOffSlider->Hide(); - fTurnOffNotSupported->Show(); - } -} - - -void -ScreenSaverWindow::_UpdateStatus() -{ - DisableUpdates(); - - bool enabled = fEnableCheckBox->Value() == B_CONTROL_ON; - fPasswordCheckBox->SetEnabled(enabled); - fTurnOffCheckBox->SetEnabled(enabled && fTurnOffScreenFlags != 0); - fRunSlider->SetEnabled(enabled); - fTurnOffSlider->SetEnabled(enabled && fTurnOffCheckBox->Value()); - fPasswordSlider->SetEnabled(enabled && fPasswordCheckBox->Value()); - fPasswordButton->SetEnabled(enabled && fPasswordCheckBox->Value()); - - EnableUpdates(); - - // Update the saved preferences - fSettings.SetWindowFrame(Frame()); - fSettings.SetWindowTab(fTabView->Selection()); - fSettings.SetTimeFlags((enabled ? ENABLE_SAVER : 0) - | (fTurnOffCheckBox->Value() ? fTurnOffScreenFlags : 0)); - fSettings.SetBlankTime(fRunSlider->Time()); - bigtime_t offTime = fTurnOffSlider->Time() - fSettings.BlankTime(); - fSettings.SetOffTime(offTime); - fSettings.SetSuspendTime(offTime); - fSettings.SetStandByTime(offTime); - fSettings.SetBlankCorner(fFadeNow->Corner()); - fSettings.SetNeverBlankCorner(fFadeNever->Corner()); - fSettings.SetLockEnable(fPasswordCheckBox->Value()); - fSettings.SetPasswordTime(fPasswordSlider->Time()); - - // TODO - Tell the password window to update its stuff -} - - -void -ScreenSaverWindow::SetMinimalSizeLimit(float width, float height) -{ - if (width < fMinWidth) - width = fMinWidth; - if (height < fMinHeight) - height = fMinHeight; - - SetSizeLimits(width, 32767, height, 32767); -} - - -void -ScreenSaverWindow::MessageReceived(BMessage *msg) -{ - // "Settings" tab, slider updates - - switch (msg->what) { - case kMsgRunSliderChanged: - case kMsgRunSliderUpdate: - if (fRunSlider->Value() > fTurnOffSlider->Value()) - fTurnOffSlider->SetValue(fRunSlider->Value()); - - if (fRunSlider->Value() > fPasswordSlider->Value()) - fPasswordSlider->SetValue(fRunSlider->Value()); - break; - - case kMsgTurnOffSliderChanged: - case kMsgTurnOffSliderUpdate: - if (fRunSlider->Value() > fTurnOffSlider->Value()) - fRunSlider->SetValue(fTurnOffSlider->Value()); - break; - - case kMsgPasswordSliderChanged: - case kMsgPasswordSliderUpdate: - if (fPasswordSlider->Value() < fRunSlider->Value()) - fRunSlider->SetValue(fPasswordSlider->Value()); - break; - } - - switch (msg->what) { - // "General" tab - - case kMsgTurnOffCheckBox: - fTurnOffSlider->SetEnabled( - fTurnOffCheckBox->Value() == B_CONTROL_ON); - break; - - case kMsgRunSliderChanged: - case kMsgTurnOffSliderChanged: - case kMsgPasswordSliderChanged: - case kMsgPasswordCheckBox: - case kMsgEnableScreenSaverBox: - case kMsgFadeCornerChanged: - case kMsgNeverFadeCornerChanged: - _UpdateStatus(); - fSettings.Save(); - break; - + switch (message->what) { case kMsgChangePassword: + fPasswordWindow->CenterIn(Frame()); fPasswordWindow->Show(); break; - // "Screensavers" tab - case kMsgUpdateList: fModulesView->PopulateScreenSaverList(); break; default: - BWindow::MessageReceived(msg); - break; + BWindow::MessageReceived(message); } } @@ -1005,7 +918,7 @@ ScreenSaverWindow::MessageReceived(BMessage *msg) void ScreenSaverWindow::ScreenChanged(BRect frame, color_space colorSpace) { - _UpdateTurnOffScreen(); + fFadeView->UpdateTurnOffScreen(); } diff --git a/src/preferences/screensaver/ScreenSaverWindow.h b/src/preferences/screensaver/ScreenSaverWindow.h index ead2a0a5af..5fa36239b6 100644 --- a/src/preferences/screensaver/ScreenSaverWindow.h +++ b/src/preferences/screensaver/ScreenSaverWindow.h @@ -25,12 +25,9 @@ class BButton; class BTabView; -class BTextView; +class FadeView; class ModulesView; -class ScreenCornerSelector; -class ScreenSaverRunner; -class TimeSlider; class ScreenSaverWindow : public BWindow { @@ -43,37 +40,16 @@ public: virtual bool QuitRequested(); void LoadSettings(); - void SetMinimalSizeLimit(float width, float height); - -private: - void _SetupFadeTab(BRect frame); - void _UpdateTurnOffScreen(); - void _UpdateStatus(); private: float fMinWidth; float fMinHeight; ScreenSaverSettings fSettings; - uint32 fTurnOffScreenFlags; - - BView* fFadeView; - ModulesView* fModulesView; - BTabView* fTabView; - - BCheckBox* fEnableCheckBox; - TimeSlider* fRunSlider; - - BCheckBox* fTurnOffCheckBox; - TimeSlider* fTurnOffSlider; - BTextView* fTurnOffNotSupported; - - BCheckBox* fPasswordCheckBox; - TimeSlider* fPasswordSlider; - BButton* fPasswordButton; PasswordWindow* fPasswordWindow; - ScreenCornerSelector* fFadeNow; - ScreenCornerSelector* fFadeNever; + FadeView* fFadeView; + ModulesView* fModulesView; + BTabView* fTabView; };