diff --git a/src/preferences/screensaver/Jamfile b/src/preferences/screensaver/Jamfile index 88698e0f51..715065b3d3 100644 --- a/src/preferences/screensaver/Jamfile +++ b/src/preferences/screensaver/Jamfile @@ -30,5 +30,6 @@ DoCatalogs ScreenSaver : x-vnd.Haiku-ScreenSaver : PasswordWindow.cpp + PreviewView.cpp ScreenSaverWindow.cpp ; diff --git a/src/preferences/screensaver/PreviewView.cpp b/src/preferences/screensaver/PreviewView.cpp index c12881e029..fe4b09dfb4 100644 --- a/src/preferences/screensaver/PreviewView.cpp +++ b/src/preferences/screensaver/PreviewView.cpp @@ -9,17 +9,21 @@ #include "PreviewView.h" -#include "Utility.h" - -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include + +#include "Utility.h" + + +#undef B_TRANSLATION_CONTEXT +#define B_TRANSLATION_CONTEXT "PreviewView" + static float sampleX[] = { 0, 0.05, 0.15, 0.7, 0.725, 0.8, 0.825, 0.85, 0.950, 1.0 }; @@ -41,10 +45,14 @@ scale2(int x1, int x2, int y1, int y2, BRect area) } +// #pragma mark - PreviewView + + PreviewView::PreviewView(const char* name) : BView(name, B_WILL_DRAW), - fSaverView(NULL) + fSaverView(NULL), + fNoPreview(NULL) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); @@ -96,13 +104,30 @@ PreviewView::Draw(BRect updateRect) BView* PreviewView::AddPreview() { - BRect rect = scale2(1, 8, 1, 2, Bounds()); - fSaverView = new BView(rect.InsetBySelf(1, 1), "preview", B_FOLLOW_NONE, - B_WILL_DRAW); + BRect rect(scale2(1, 8, 1, 2, Bounds()).InsetBySelf(1.0f, 1.0f)); + fSaverView = new BView(rect, "preview", B_FOLLOW_NONE, B_WILL_DRAW); fSaverView->SetViewColor(0, 0, 0); fSaverView->SetLowColor(0, 0, 0); AddChild(fSaverView); + BRect textRect(rect); + textRect.OffsetTo(-7.0f, 0.0f); + textRect.InsetBy(15.0f, 20.0f); + fNoPreview = new BTextView(rect, "no preview", textRect, B_FOLLOW_NONE, + B_WILL_DRAW); + fNoPreview->SetViewColor(0, 0, 0); + fNoPreview->SetLowColor(0, 0, 0); + fNoPreview->SetFontAndColor(be_plain_font, B_FONT_ALL, + &(rgb_color){ 255, 255, 255 }); + fNoPreview->SetText(B_TRANSLATE("No preview available")); + fNoPreview->SetAlignment(B_ALIGN_CENTER); + fNoPreview->MakeEditable(false); + fNoPreview->MakeResizable(false); + fNoPreview->MakeSelectable(false); + + fNoPreview->Hide(); + fSaverView->AddChild(fNoPreview); + return fSaverView; } @@ -124,3 +149,17 @@ PreviewView::SaverView() { return fSaverView; } + + +void +PreviewView::ShowNoPreview() const +{ + fNoPreview->Show(); +} + + +void +PreviewView::HideNoPreview() const +{ + fNoPreview->Hide(); +} diff --git a/src/preferences/screensaver/PreviewView.h b/src/preferences/screensaver/PreviewView.h index b42a37691a..f062f9c233 100644 --- a/src/preferences/screensaver/PreviewView.h +++ b/src/preferences/screensaver/PreviewView.h @@ -10,11 +10,11 @@ #define PREVIEW_VIEW_H -#include -#include #include +class BTextView; + class PreviewView : public BView { public: PreviewView(const char* name); @@ -26,8 +26,12 @@ public: BView* RemovePreview(); BView* SaverView(); + void ShowNoPreview() const; + void HideNoPreview() const; + private: BView* fSaverView; + BTextView* fNoPreview; }; diff --git a/src/preferences/screensaver/ScreenSaverWindow.cpp b/src/preferences/screensaver/ScreenSaverWindow.cpp index f700cc96f2..fc3734a93b 100644 --- a/src/preferences/screensaver/ScreenSaverWindow.cpp +++ b/src/preferences/screensaver/ScreenSaverWindow.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -818,6 +819,8 @@ ModulesView::_OpenSaver() saver->StartConfig(fSettingsView); if (saver->StartSaver(view, true) == B_OK) fSaverRunner->Run(); + else + fPreviewView->ShowNoPreview(); } if (fSettingsView->ChildAt(0) == NULL) {