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; };