From c566b0927df4d8a754b8033bbd43e3df91b406f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Fri, 29 Jul 2005 07:41:58 +0000 Subject: [PATCH] added license headers changed the way prefs is stored, so that we have default settings general cleanup time sliders are now linked together as on R5 password window is centered onscreen git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13849 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../private/screen_saver/ScreenSaverPrefs.h | 129 ++++++----- .../private/screen_saver/ScreenSaverThread.h | 5 + src/kits/screensaver/ScreenSaverPrefs.cpp | 126 ++++++++-- src/kits/screensaver/ScreenSaverThread.cpp | 5 + src/preferences/screensaver/Constants.h | 30 +-- .../screensaver/PasswordWindow.cpp | 12 +- src/preferences/screensaver/ScreenSaverItem.h | 35 +++ .../screensaver/ScreenSaverWindow.cpp | 215 +++++++++--------- .../screensaver/ScreenSaverWindow.h | 3 +- 9 files changed, 347 insertions(+), 213 deletions(-) create mode 100644 src/preferences/screensaver/ScreenSaverItem.h diff --git a/headers/private/screen_saver/ScreenSaverPrefs.h b/headers/private/screen_saver/ScreenSaverPrefs.h index 05693d1413..80b0bce74b 100644 --- a/headers/private/screen_saver/ScreenSaverPrefs.h +++ b/headers/private/screen_saver/ScreenSaverPrefs.h @@ -1,83 +1,82 @@ +/* + * Copyright 2003, Michael Phipps. All rights reserved. + * Distributed under the terms of the MIT License. + */ + #ifndef SCREEN_SAVER_PREFS_H #define SCREEN_SAVER_PREFS_H -#include "Message.h" -#include "Path.h" -#include +#include +#include +#include -enum arrowDirection {NONE=-1,UPLEFT,UPRIGHT,DOWNRIGHT,DOWNLEFT,CENTER}; +enum arrowDirection { + NONE = -1, + UPLEFT, + UPRIGHT, + DOWNRIGHT, + DOWNLEFT, + CENTER +}; class ScreenSaverPrefs { public: - ScreenSaverPrefs(void); - bool LoadSettings(void); + ScreenSaverPrefs(); + bool LoadSettings(); + void Defaults(); - BRect WindowFrame(void) {return getRect("windowframe");} - int WindowTab(void) {return getInt("windowtab");} - int TimeFlags(void) {return getInt("timeflags");} - int BlankTime(void) {return getInt("timefade");} - int StandbyTime(void) {return getInt("timestandby");} - int SuspendTime(void) {return getInt("timesuspend");} - int OffTime(void) {return getInt("timeoff");} - arrowDirection GetBlankCorner(void) {return (arrowDirection)(getInt("cornernow"));} - arrowDirection GetNeverBlankCorner(void) {return (arrowDirection)(getInt("cornerNever"));} - bool LockEnable(void) {return getBool("lockenable");} - int PasswordTime(void) {return getInt("lockdelay");} - const char *Password(void); - bool IsNetworkPassword(void) {return (0==strcmp("custom",getString("lockmethod")));} - const char *ModuleName(void) { - const char *name=getString("modulename"); - return ((name)?name:"Blackness"); - } + BRect WindowFrame() {return fWindowFrame;} + int32 WindowTab() {return fWindowTab;} + int32 TimeFlags() {return fTimeFlags;} + bigtime_t BlankTime() {return fBlankTime;} + bigtime_t StandbyTime() {return fStandByTime;} + bigtime_t SuspendTime() {return fSuspendTime;} + bigtime_t OffTime() {return fOffTime;} + arrowDirection GetBlankCorner() {return fBlankCorner;} + arrowDirection GetNeverBlankCorner() {return fNeverBlankCorner;} + bool LockEnable() {return fLockEnabled;} + bigtime_t PasswordTime() {return fPasswordTime;} + const char *Password() { return fPassword.String(); } + bool IsNetworkPassword() {return fIsNetworkPassword;} + const char *ModuleName() {return fModuleName.String();} BMessage *GetState(const char *name); - BMessage *GetSettings(void) {return ¤tMessage;} - void SetWindowFrame(const BRect &fr) {setRect("windowframe",fr);} - void SetWindowTab(int tab) {setInt("windowtab",tab);} - void SetTimeFlags(int tf) {setInt("timeflags",tf);} - void SetBlankTime(int bt) {setInt("timefade",bt);} - void SetStandbyTime(int time) {setInt("timestandby",time);} - void SetSuspendTime(int time) {setInt("timesuspend",time);} - void SetOffTime(int intime) {setInt("timeoff",intime);} - void SetBlankCorner(arrowDirection in) {setInt("cornernow",(int)in);} - void SetNeverBlankCorner(arrowDirection in){setInt("cornernever",(int)in);} - void SetLockEnable(bool en) {setBool("lockenable",en);} - void SetPasswordTime(int pt) {setInt("lockdelay",pt);} - void SetPassword(char *pw){setString("lockpassword",pw);} // Can not set network password from here. - void SetModuleName(const char *mn) {setString("modulename",mn);} + void SetWindowFrame(const BRect &fr) { fWindowFrame = fr;} + void SetWindowTab(int32 tab) { fWindowTab = tab;} + void SetTimeFlags(int32 tf) {fTimeFlags = tf;} + void SetBlankTime(bigtime_t bt) {fBlankTime = bt;} + void SetStandbyTime(bigtime_t time) {fStandByTime = time;} + void SetSuspendTime(bigtime_t time) {fSuspendTime = time;} + void SetOffTime(bigtime_t intime) {fOffTime = intime;} + void SetBlankCorner(arrowDirection in) {fBlankCorner = in;} + void SetNeverBlankCorner(arrowDirection in) {fNeverBlankCorner = in;} + void SetLockEnable(bool en) {fLockEnabled = en;} + void SetPasswordTime(bigtime_t pt) {fPasswordTime = pt;} + void SetPassword(char *pw) {fPassword = pw;} // Can not set network password from here. + void SetModuleName(const char *mn) {fModuleName = mn;} void SetState(const char *name,BMessage *in); - void SaveSettings (void); + void SaveSettings(); + BMessage * GetSettings(); private: - bool parseSettings(BMessage *newSSMessage); + BRect fWindowFrame; + int32 fWindowTab; + int32 fTimeFlags; + bigtime_t fBlankTime; + bigtime_t fStandByTime; + bigtime_t fSuspendTime; + bigtime_t fOffTime; + arrowDirection fBlankCorner; + arrowDirection fNeverBlankCorner; + bool fLockEnabled; + bigtime_t fPasswordTime; + BString fPassword; + BString fModuleName; + BString fLockMethod; - bool getBool(const char *name) {bool b;currentMessage.FindBool(name,&b);return b;} - int32 getInt(const char *name){int32 b;currentMessage.FindInt32(name,&b);return b;} - const char *getString(const char *name){const char *b;currentMessage.FindString(name,&b);return b;} - BRect getRect(const char *name){BRect b;currentMessage.FindRect(name,&b);return b;} + bool fIsNetworkPassword; - void setBool(const char *name,bool value) { - if (B_NAME_NOT_FOUND == currentMessage.ReplaceBool(name,value)) - currentMessage.AddBool(name,value); - } - - void setInt(const char *name,int value) { - if (B_NAME_NOT_FOUND == currentMessage.ReplaceInt32(name,value)) - currentMessage.AddInt32(name,value); - } - - void setString(const char *name,const char *value) { - if (B_NAME_NOT_FOUND == currentMessage.ReplaceString(name,value)) - currentMessage.AddString(name,value); - } - - void setRect(const char *name,BRect value) { - if (B_NAME_NOT_FOUND == currentMessage.ReplaceRect(name,value)) - currentMessage.AddRect(name,value); - } - - BMessage currentMessage,stateMsg; + BMessage stateMsg, currentMessage; BPath ssPath,networkPath; - char password[512]; }; diff --git a/headers/private/screen_saver/ScreenSaverThread.h b/headers/private/screen_saver/ScreenSaverThread.h index 42bcc26492..0e586bc1e5 100644 --- a/headers/private/screen_saver/ScreenSaverThread.h +++ b/headers/private/screen_saver/ScreenSaverThread.h @@ -1,3 +1,8 @@ +/* + * Copyright 2003, Michael Phipps. All rights reserved. + * Distributed under the terms of the MIT License. + */ + #ifndef SCREEN_SAVER_THREAD_H #define SCREEN_SAVER_THREAD_H #include diff --git a/src/kits/screensaver/ScreenSaverPrefs.cpp b/src/kits/screensaver/ScreenSaverPrefs.cpp index c832252a67..6140a29954 100755 --- a/src/kits/screensaver/ScreenSaverPrefs.cpp +++ b/src/kits/screensaver/ScreenSaverPrefs.cpp @@ -1,3 +1,8 @@ +/* + * Copyright 2003, Michael Phipps. All rights reserved. + * Distributed under the terms of the MIT License. + */ + #include #include #include @@ -8,12 +13,14 @@ #include "ScreenSaverPrefs.h" -ScreenSaverPrefs::ScreenSaverPrefs() +ScreenSaverPrefs::ScreenSaverPrefs() { find_directory(B_USER_SETTINGS_DIRECTORY,&ssPath); find_directory(B_USER_SETTINGS_DIRECTORY,&networkPath); ssPath.Append("ScreenSaver_settings",true); networkPath.Append("network",true); + + Defaults(); } @@ -24,47 +31,120 @@ ScreenSaverPrefs::LoadSettings() BFile ssSettings(ssPath.Path(),B_READ_ONLY); if (B_OK==ssSettings.InitCheck()) { // File exists. Unflatten the message and call the settings parser. BMessage settings; - settings.Unflatten(&ssSettings); - return true; + if (settings.Unflatten(&ssSettings)!=B_OK) + return false; + + settings.PrintToStream(); + + settings.FindRect("windowframe", &fWindowFrame); + settings.FindInt32("windowtab", &fWindowTab); + settings.FindInt32("timeflags", &fTimeFlags); + + int32 blank_time, standByTime, suspendTime, offTime, passwordTime; + if (settings.FindInt32("timefade", &blank_time) == B_OK) + fBlankTime = blank_time * 1000000; + if (settings.FindInt32("timestandby", &standByTime) == B_OK) + fStandByTime = standByTime * 1000000; + if (settings.FindInt32("timesuspend", &suspendTime) == B_OK) + fSuspendTime = suspendTime * 1000000; + if (settings.FindInt32("timeoff", &offTime) == B_OK) + fOffTime = offTime * 1000000; + settings.FindInt32("cornernow", (int32*)&fBlankCorner); + settings.FindInt32("cornernever", (int32*)&fNeverBlankCorner); + settings.FindBool("lockenable", &fLockEnabled); + if (settings.FindInt32("lockdelay", &passwordTime) == B_OK) + fPasswordTime = passwordTime * 1000000; + settings.FindString("lockpassword", &fPassword); + settings.FindString("lockmethod", &fLockMethod); + settings.FindString("modulename", &fModuleName); + + if (IsNetworkPassword()) { + FILE *networkFile=NULL; + char buffer[512],*start; + // This ugly piece opens the networking file and reads the password, if it exists. + if ((networkFile=fopen(networkPath.Path(),"r"))) + while (buffer==fgets(buffer,512,networkFile)) + if ((start=strstr(buffer,"PASSWORD ="))) { + char password[12]; + strncpy(password, start+10,strlen(start-11)); + fPassword = password; + } + } } return false; } -const char * -ScreenSaverPrefs::Password() { - if (IsNetworkPassword()) { - FILE *networkFile=NULL; - char buffer[512],*start; - // This ugly piece opens the networking file and reads the password, if it exists. - if ((networkFile=fopen(networkPath.Path(),"r"))) - while (buffer==fgets(buffer,512,networkFile)) - if ((start=strstr(buffer,"PASSWORD ="))) { - strncpy(password, start+10,strlen(start-11)); - return password; - } - } - return getString("lockpassword"); + +void +ScreenSaverPrefs::Defaults() +{ + fWindowFrame = BRect(96.5, 77.0, 542.5, 402); + fWindowTab = 0; + fTimeFlags = 0; + fBlankTime = 120; + fStandByTime = 120; + fSuspendTime = 120; + fOffTime = 120; + fBlankCorner = NONE; + fNeverBlankCorner = NONE; + fLockEnabled = false; + fPasswordTime = 120; + fPassword = ""; + fLockMethod = "custom"; + fModuleName = ""; } + BMessage * -ScreenSaverPrefs::GetState(const char *name) { +ScreenSaverPrefs::GetSettings() +{ + BMessage *msg = new BMessage(); + msg->AddRect("windowframe", fWindowFrame); + msg->AddInt32("windowtab", fWindowTab); + msg->AddInt32("timeflags", fTimeFlags); + msg->AddInt32("timefade", fBlankTime/1000000); + msg->AddInt32("timestandby", fStandByTime/1000000); + msg->AddInt32("timesuspend", fSuspendTime/1000000); + msg->AddInt32("timeoff", fOffTime/1000000); + msg->AddInt32("cornernow", fBlankCorner); + msg->AddInt32("cornernever", fNeverBlankCorner); + msg->AddBool("lockenable", fLockEnabled); + msg->AddInt32("lockdelay", fPasswordTime/1000000); + msg->AddString("lockpassword", fPassword); + msg->AddString("lockmethod", fLockMethod); + msg->AddString("modulename", fModuleName); + + return msg; +} + + +BMessage * +ScreenSaverPrefs::GetState(const char *name) +{ BString stateMsgName("modulesettings_"); stateMsgName+=name; currentMessage.FindMessage(stateMsgName.String(),&stateMsg); return &stateMsg; } + void -ScreenSaverPrefs::SetState(const char *name,BMessage *msg) { +ScreenSaverPrefs::SetState(const char *name,BMessage *msg) +{ BString stateMsgName("modulesettings_"); stateMsgName+=name; if (B_NAME_NOT_FOUND == currentMessage.ReplaceMessage(stateMsgName.String(),msg)) currentMessage.AddMessage(stateMsgName.String(),msg); } + void -ScreenSaverPrefs::SaveSettings (void) { - BFile file(ssPath.Path(),B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE); - if ((file.InitCheck()!=B_OK) || (currentMessage.Flatten(&file)!=B_OK)) - printf ("Problem with saving preferences file!\n"); +ScreenSaverPrefs::SaveSettings() +{ + BMessage *settings = GetSettings(); + settings->PrintToStream(); + BFile file(ssPath.Path(), B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE); + if ((file.InitCheck()!=B_OK) || (settings->Flatten(&file)!=B_OK)) + fprintf(stderr, "Problem while saving screensaver preferences file!\n"); + delete settings; } diff --git a/src/kits/screensaver/ScreenSaverThread.cpp b/src/kits/screensaver/ScreenSaverThread.cpp index 0c8895dbdc..811a2aec2a 100755 --- a/src/kits/screensaver/ScreenSaverThread.cpp +++ b/src/kits/screensaver/ScreenSaverThread.cpp @@ -1,3 +1,8 @@ +/* + * Copyright 2003, Michael Phipps. All rights reserved. + * Distributed under the terms of the MIT License. + */ + #include #include #include diff --git a/src/preferences/screensaver/Constants.h b/src/preferences/screensaver/Constants.h index 656ca09b86..38b0888da0 100644 --- a/src/preferences/screensaver/Constants.h +++ b/src/preferences/screensaver/Constants.h @@ -43,19 +43,23 @@ scale3(int x, int y,BRect area,bool invertX,bool invertY) -const int kTab1_chg ='TAB1'; -const int kTab2_chg ='TAB2'; -const int kPwbutton ='PWBT'; -const int kDone_clicked ='DONE'; -const int kCancel_clicked ='CNCL'; -const int kButton_changed ='BTNC'; -const int kShow ='SHOW'; -const int kPopulate ='POPU'; -const int kUtilize ='UTIL'; -const int kSaver_sel ='SSEL'; -const int kTest_btn ='TEST'; -const int kAdd_btn ='ADD '; -const int kUpdatelist ='UPDL'; +const int32 kTab1_chg ='TAB1'; +const int32 kTab2_chg ='TAB2'; +const int32 kPwbutton ='PWBT'; +const int32 kDone_clicked ='DONE'; +const int32 kCancel_clicked ='CNCL'; +const int32 kButton_changed ='BTNC'; +const int32 kShow ='SHOW'; +const int32 kPopulate ='POPU'; +const int32 kUtilize ='UTIL'; +const int32 kSaver_sel ='SSEL'; +const int32 kTest_btn ='TEST'; +const int32 kAdd_btn ='ADD '; +const int32 kUpdatelist ='UPDL'; +const int32 kPasswordCheckbox = 'PWCB'; +const int32 kRunSliderChanged = 'RSCG'; +const int32 kPasswordSliderChanged = 'PWCG'; +const int32 kTurnOffSliderChanged = 'TUCG'; const rgb_color kBlack = {0,0,0,0}; const rgb_color kDarkGrey = {150,150,150,0}; diff --git a/src/preferences/screensaver/PasswordWindow.cpp b/src/preferences/screensaver/PasswordWindow.cpp index f157be711d..be7a115f6f 100644 --- a/src/preferences/screensaver/PasswordWindow.cpp +++ b/src/preferences/screensaver/PasswordWindow.cpp @@ -5,14 +5,22 @@ #include "PasswordWindow.h" #include -#include #include +#include +#include PasswordWindow::PasswordWindow() : BWindow(BRect(100,100,380,250),"",B_MODAL_WINDOW_LOOK,B_MODAL_APP_WINDOW_FEEL,B_NOT_RESIZABLE) { Setup(); + 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); } @@ -105,7 +113,7 @@ PasswordWindow::MessageReceived(BMessage *message) break; } default: - BWindow::MessageReceived(message); + BWindow::MessageReceived(message); break; } } diff --git a/src/preferences/screensaver/ScreenSaverItem.h b/src/preferences/screensaver/ScreenSaverItem.h new file mode 100644 index 0000000000..14b4e7d6a1 --- /dev/null +++ b/src/preferences/screensaver/ScreenSaverItem.h @@ -0,0 +1,35 @@ +// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ +// +// Copyright (c) 2005, Haiku +// +// This software is part of the Haiku distribution and is covered +// by the Haiku license. +// +// +// File: ScreenSaverItem.h +// Author: Jérôme Duval +// Description: ScreenSaver Preferences +// Created : July 28, 2005 +// +// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ + +#ifndef __SCREENSAVERITEM_H__ +#define __SCREENSAVERITEM_H__ + +#include +#include +#include + + +class ScreenSaverItem : public BStringItem { +public: + ScreenSaverItem(const char* event_name,const char* path) + : BStringItem(event_name), fPath(path) { + + } + + const char* Path() const { return fPath.String();} +private: + BString fPath; +}; +#endif diff --git a/src/preferences/screensaver/ScreenSaverWindow.cpp b/src/preferences/screensaver/ScreenSaverWindow.cpp index 6f33e9ed8c..9c9911ded4 100644 --- a/src/preferences/screensaver/ScreenSaverWindow.cpp +++ b/src/preferences/screensaver/ScreenSaverWindow.cpp @@ -22,9 +22,13 @@ #include #include "ScreenSaverWindow.h" +#include "ScreenSaverItem.h" #include "MouseAreaView.h" #include "PreviewView.h" +#include +#define CALLED() PRINT(("%s\n", __PRETTY_FUNCTION__)) + static const char *kTimes[]={"30 seconds", "1 minute", "1 minute 30 seconds", "2 minutes", "2 minutes 30 seconds", "3 minutes", "4 minutes", "5 minutes", "6 minutes", @@ -35,7 +39,7 @@ static const char *kTimes[]={"30 seconds", "1 minute", "1 minute 30 "2 hours", "2 hours 30 minutes", "3 hours", "4 hours", "5 hours"}; -static const int kTimeInSeconds[]={ 30, 60, 90, +static const int32 kTimeInUnits[]={ 30, 60, 90, 120, 150, 180, 240, 300, 360, 420, 480, 540, @@ -45,53 +49,35 @@ static const int kTimeInSeconds[]={ 30, 60, 90, 7200, 9000, 10800, 14400, 18000}; -const int32 zero=0; +const int32 PASSWORD_CHECKBOX = 'psCB'; void drawPositionalMonitor(BView *view,BRect areaToDrawIn,int state); BView *drawSampleMonitor(BView *view, BRect area); - -int -secondsToSlider(int val) +int32 +UnitsToSlider(bigtime_t val) { - int count=sizeof(kTimeInSeconds)/sizeof(int); - for (int t=0;tCurrentSelection()>=0) { - SSListItem* listItem; if (fPreviewDisplay->ScreenSaver()) fPreviewDisplay->ScreenSaver()->StopConfig(); - listItem = reinterpret_cast(fAddonList->ItemAt(fListView1->CurrentSelection())); - BString settingsMsgName(listItem->fileName); + ScreenSaverItem* item = reinterpret_cast(fListView1->ItemAt(fListView1->CurrentSelection())); + BString settingsMsgName(item->Path()); fPreviewDisplay->SetScreenSaver(settingsMsgName); if (fSettingsArea) { fModuleSettingsBox->RemoveChild(fSettingsArea); delete fSettingsArea; } - BRect bnds=fModuleSettingsBox->Bounds(); + BRect bnds = fModuleSettingsBox->Bounds(); bnds.InsetBy(5,10); - fSettingsArea=new BView(bnds,"settingsArea",B_FOLLOW_NONE,B_WILL_DRAW); + fSettingsArea = new BView(bnds,"settingsArea",B_FOLLOW_NONE,B_WILL_DRAW); fSettingsArea->SetViewColor(216,216,216); fModuleSettingsBox->AddChild(fSettingsArea); @@ -133,9 +120,31 @@ void ScreenSaverWin::MessageReceived(BMessage *msg) { switch(msg->what) { + case kPasswordCheckbox: + fPasswordSlider->SetEnabled(fPasswordCheckbox->Value()==B_CONTROL_ON); + break; + case kRunSliderChanged: + fRunSlider->SetLabel(kTimes[fRunSlider->Value()]); + if (fRunSlider->Value()>fPasswordSlider->Value()) { + fTurnOffSlider->SetValue(fRunSlider->Value()); + fTurnOffSlider->SetLabel(kTimes[fTurnOffSlider->Value()]); + fPasswordSlider->SetValue(fRunSlider->Value()); + fPasswordSlider->SetLabel(kTimes[fPasswordSlider->Value()]); + } + break; + case kTurnOffSliderChanged: + fTurnOffSlider->SetLabel(kTimes[fTurnOffSlider->Value()]); + break; + case kPasswordSliderChanged: + fPasswordSlider->SetLabel(kTimes[fPasswordSlider->Value()]); + if (fPasswordSlider->Value()Value()) { + fRunSlider->SetValue(fPasswordSlider->Value()); + fRunSlider->SetLabel(kTimes[fRunSlider->Value()]); + } + break; case kPwbutton: fPwMessenger->SendMessage(kShow); - break; + break; case B_QUIT_REQUESTED: be_app->PostMessage(B_QUIT_REQUESTED); break; @@ -143,8 +152,12 @@ ScreenSaverWin::MessageReceived(BMessage *msg) SaverSelected(); break; case kTest_btn: - be_roster->Launch("application/x-vnd.OBOS-ScreenSaverApp",fPrefs.GetSettings()); + { + BMessage *settings = fPrefs.GetSettings(); + be_roster->Launch("application/x-vnd.haiku-ScreenSaverApp", settings); + delete settings; break; + } case kAdd_btn: fFilePanel->Show(); break; @@ -152,7 +165,6 @@ ScreenSaverWin::MessageReceived(BMessage *msg) PopulateScreenSaverList(); break; } - UpdateStatus(); // This could get called sometimes when it doesn't need to. Shouldn't hurt BWindow::MessageReceived(msg); } @@ -161,6 +173,7 @@ bool ScreenSaverWin::QuitRequested() { UpdateStatus(); + fPrefs.SaveSettings(); be_app->PostMessage(B_QUIT_REQUESTED); return(true); } @@ -188,22 +201,24 @@ ScreenSaverWin::UpdateStatus(void) fPrefs.SetWindowFrame(Frame()); fPrefs.SetWindowTab(fTabView->Selection()); fPrefs.SetTimeFlags(fEnableCheckbox->Value()); - fPrefs.SetBlankTime(kTimeInSeconds[fRunSlider->Value()]); - fPrefs.SetOffTime(kTimeInSeconds[fTurnOffSlider->Value()]); - fPrefs.SetSuspendTime(kTimeInSeconds[fTurnOffSlider->Value()]); - fPrefs.SetStandbyTime(kTimeInSeconds[fTurnOffSlider->Value()]); + fPrefs.SetBlankTime(1000000LL* kTimeInUnits[fRunSlider->Value()]); + fPrefs.SetOffTime(1000000LL* kTimeInUnits[fTurnOffSlider->Value()]); + fPrefs.SetSuspendTime(1000000LL* kTimeInUnits[fTurnOffSlider->Value()]); + fPrefs.SetStandbyTime(1000000LL* kTimeInUnits[fTurnOffSlider->Value()]); fPrefs.SetBlankCorner(fFadeNow->getDirection()); fPrefs.SetNeverBlankCorner(fFadeNever->getDirection()); fPrefs.SetLockEnable(fPasswordCheckbox->Value()); - fPrefs.SetPasswordTime(kTimeInSeconds[fPasswordSlider->Value()]); - int selection=fListView1->CurrentSelection(0); - if (selection>=0) - fPrefs.SetModuleName(((BStringItem *)(fListView1->ItemAt(selection)))->Text()); + fPrefs.SetPasswordTime(1000000LL* kTimeInUnits[fPasswordSlider->Value()]); + int selection = fListView1->CurrentSelection(); + if (selection >= 0) { + fPrefs.SetModuleName(((ScreenSaverItem *)(fListView1->ItemAt(selection)))->Text()); + if (strcmp(fPrefs.ModuleName(), "Blackness") == 0) + fPrefs.SetModuleName(""); + } // TODO - Tell the password window to update its stuff BMessage ssState; if ((fPreviewDisplay->ScreenSaver()) && (fPreviewDisplay->ScreenSaver()->SaveState(&ssState)==B_OK)) fPrefs.SetState(fPrefs.ModuleName(), &ssState); - fPrefs.SaveSettings(); }; @@ -221,7 +236,7 @@ ScreenSaverWin::SetupForm() AddChild(background); // Add the tab view to the background - r.InsetBy(0,3); + r.top += 4; fTabView = new BTabView(r, "tab_view"); fTabView->SetViewColor(216,216,216,0); r = fTabView->Bounds(); @@ -232,11 +247,13 @@ ScreenSaverWin::SetupForm() fPrefs.LoadSettings(); tab = new BTab(); - fTabView->AddTab(fTab2=new BView(r,"Fade",B_FOLLOW_NONE,0), tab); + fTab2 = new BView(r,"Fade",B_FOLLOW_NONE,0); + fTabView->AddTab(fTab2, tab); tab->SetLabel("Fade"); tab = new BTab(); - fTabView->AddTab(fTab1=new BView(r,"Modules",B_FOLLOW_NONE,0), tab); + fTab1 = new BView(r,"Modules",B_FOLLOW_NONE,0); + fTabView->AddTab(fTab1, tab); tab->SetLabel("Modules"); background->AddChild(fTabView); @@ -253,22 +270,24 @@ ScreenSaverWin::SetupForm() //ResizeTo(fPrefs.WindowFrame().right-fPrefs.WindowFrame().left,fPrefs.WindowFrame().bottom-fPrefs.WindowFrame().top); fTabView->Select(fPrefs.WindowTab()); fEnableCheckbox->SetValue(fPrefs.TimeFlags()); - fRunSlider->SetValue(secondsToSlider(fPrefs.BlankTime())); - fTurnOffSlider->SetValue(secondsToSlider(fPrefs.OffTime())); + fRunSlider->SetValue(UnitsToSlider(fPrefs.BlankTime())); + fTurnOffSlider->SetValue(UnitsToSlider(fPrefs.OffTime())); fFadeNow->setDirection(fPrefs.GetBlankCorner()); fFadeNever->setDirection(fPrefs.GetNeverBlankCorner()); fPasswordCheckbox->SetValue(fPrefs.LockEnable()); - fPasswordSlider->SetValue(secondsToSlider(fPrefs.PasswordTime())); - const BStringItem **ptr = (const BStringItem **)(fListView1->Items()); - long count=fListView1->CountItems(); - if (fPrefs.ModuleName() && ptr) - for ( long i = 0; i < count; i++ ) { - if (BString(fPrefs.ModuleName())==((*ptr++)->Text())) { - fListView1->Select(count=i); // Clever bit here - intentional assignment. - SaverSelected(); - fListView1->ScrollToSelection(); - } + fPasswordSlider->SetValue(UnitsToSlider(fPrefs.PasswordTime())); + int32 count = fListView1->CountItems(); + for (int32 i=0; i(fListView1->ItemAt(i)); + printf("modulename %s-%s\n", fPrefs.ModuleName(), item->Text()); + if ((strcmp(fPrefs.ModuleName(), item->Text()) == 0) + || (strcmp(fPrefs.ModuleName(),"") == 0 && strcmp(item->Text(), "Blackness") ==0)) { + fListView1->Select(i); + SaverSelected(); + fListView1->ScrollToSelection(); + break; } + } UpdateStatus(); } @@ -304,69 +323,49 @@ commonLookAndFeel(BView *widget,bool isSlider,bool isControl) // Iterate over a directory, adding the directories files to the list void -addScreenSaversToList (directory_which dir, BList *list) +addScreenSaversToList (directory_which dir, BListView *list) { BPath path; find_directory(dir,&path); path.Append("Screen Savers",true); - const char* pathName = path.Path(); - - BDirectory ssDir(pathName); + BDirectory ssDir(path.Path()); BEntry thisSS; char thisName[B_FILE_NAME_LENGTH]; while (B_OK==ssDir.GetNextEntry(&thisSS,true)) { thisSS.GetName(thisName); - SSListItem* tempListItem = new SSListItem; - tempListItem->fileName = pathName; - tempListItem->fileName += "/"; - tempListItem->fileName += thisName; - tempListItem->displayName = thisName; - - list->AddItem(tempListItem); + BString pathname = path.Path(); + pathname += "/"; + pathname += thisName; + list->AddItem(new ScreenSaverItem(thisName, pathname.String())); } } -// sorting function for SSListItems +// sorting function for ScreenSaverItems int -ScreenSaverWin::CompareSSListItems(const void* left, const void* right) +ScreenSaverWin::CompareScreenSaverItems(const void* left, const void* right) { - SSListItem* leftItem = *(SSListItem **)left; - SSListItem* rightItem = *(SSListItem **)right; + ScreenSaverItem* leftItem = *(ScreenSaverItem **)left; + ScreenSaverItem* rightItem = *(ScreenSaverItem **)right; - return leftItem->displayName.Compare(rightItem->displayName); + return strcmp(leftItem->Text(),rightItem->Text()); } void ScreenSaverWin::PopulateScreenSaverList(void) { - if (!fAddonList) - fAddonList = new BList; - else - for (void *i=fAddonList->RemoveItem(zero);i;i=fAddonList->RemoveItem(zero)) - delete ((SSListItem *)i); - - SSListItem* tempListItem = new SSListItem; - tempListItem->fileName = ""; - tempListItem->displayName = "Blackness"; - fAddonList->AddItem(tempListItem); - addScreenSaversToList( B_BEOS_ADDONS_DIRECTORY, fAddonList ); - addScreenSaversToList( B_USER_ADDONS_DIRECTORY, fAddonList ); - fAddonList->SortItems(CompareSSListItems); - -// Add the strings in the BList to a BListView fListView1->DeselectAll(); - for (void *i=fListView1->RemoveItem(zero);i;i=fListView1->RemoveItem(zero)) - delete ((BStringItem *)i); + while (void *i=fListView1->RemoveItem((int32)0)) + delete ((ScreenSaverItem *)i); - int numItems = fAddonList->CountItems(); - for( int i = 0; i < numItems; ++i ) { - SSListItem* item = (SSListItem*)(fAddonList->ItemAt(i)); - fListView1->AddItem( new BStringItem(item->displayName.String()) ); - } + fListView1->AddItem(new ScreenSaverItem("Blackness", "")); + addScreenSaversToList(B_BEOS_ADDONS_DIRECTORY, fListView1); + addScreenSaversToList(B_USER_ADDONS_DIRECTORY, fListView1); + + fListView1->SortItems(CompareScreenSaverItems); } @@ -413,7 +412,7 @@ ScreenSaverWin::SetupTab2() int stringHeight=(int)(stdFontHt.ascent+stdFontHt.descent),sliderHeight=30; int topEdge; {rgb_color clr = {216,216,216,255}; fTab2->SetViewColor(clr);} - fTab2->AddChild( fEnableScreenSaverBox = new BBox(BRect(11,13,437,280),"EnableScreenSaverBox")); + fTab2->AddChild( fEnableScreenSaverBox = new BBox(BRect(8,6,436,280),"EnableScreenSaverBox")); commonLookAndFeel(fEnableScreenSaverBox,false,false); fEnableCheckbox = new BCheckBox(BRect(0,0,90,stringHeight),"EnableCheckBox","Enable Screen Saver", new BMessage (kTab2_chg)); @@ -427,8 +426,8 @@ ScreenSaverWin::SetupTab2() fStringView1->SetText("Run module"); fStringView1->SetAlignment(B_ALIGN_LEFT); - fEnableScreenSaverBox->AddChild( fRunSlider = new BSlider(BRect(132,topEdge,415,topEdge+sliderHeight),"RunSlider","minutes", new BMessage(kTab2_chg), 0, 25)); - fRunSlider->SetModificationMessage(new BMessage(kTab2_chg)); + fEnableScreenSaverBox->AddChild( fRunSlider = new BSlider(BRect(132,topEdge,415,topEdge+sliderHeight),"RunSlider","minutes", new BMessage(kRunSliderChanged), 0, 25)); + fRunSlider->SetModificationMessage(new BMessage(kRunSliderChanged)); commonLookAndFeel(fRunSlider,true,true); float w,h; fRunSlider->GetPreferredSize(&w,&h); @@ -441,18 +440,18 @@ ScreenSaverWin::SetupTab2() fTurnOffScreenCheckBox->SetLabel("Turn off screen"); fTurnOffScreenCheckBox->SetResizingMode(B_FOLLOW_NONE); - fEnableScreenSaverBox->AddChild( fTurnOffSlider = new BSlider(BRect(132,topEdge,415,topEdge+sliderHeight),"TurnOffSlider","", new BMessage(kTab2_chg), 0, 25)); - fTurnOffSlider->SetModificationMessage(new BMessage(kTab2_chg)); + fEnableScreenSaverBox->AddChild( fTurnOffSlider = new BSlider(BRect(132,topEdge,415,topEdge+sliderHeight),"TurnOffSlider","", new BMessage(kTurnOffSliderChanged), 0, 25)); + fTurnOffSlider->SetModificationMessage(new BMessage(kTurnOffSliderChanged)); commonLookAndFeel(fTurnOffSlider,true,true); // Password topEdge+=sliderHeight; - fEnableScreenSaverBox->AddChild( fPasswordCheckbox = new BCheckBox(BRect(9,topEdge,108,topEdge+stringHeight),"PasswordCheckbox","Password lock", new BMessage (kTab2_chg))); + fEnableScreenSaverBox->AddChild( fPasswordCheckbox = new BCheckBox(BRect(9,topEdge,108,topEdge+stringHeight),"PasswordCheckbox","Password lock", new BMessage (kPasswordCheckbox))); commonLookAndFeel(fPasswordCheckbox,false,true); fPasswordCheckbox->SetLabel("Password lock"); - fEnableScreenSaverBox->AddChild( fPasswordSlider = new BSlider(BRect(132,topEdge,415,topEdge+sliderHeight),"PasswordSlider","", new BMessage(kTab2_chg), 0, 25)); - fPasswordSlider->SetModificationMessage(new BMessage(kTab2_chg)); + fEnableScreenSaverBox->AddChild( fPasswordSlider = new BSlider(BRect(132,topEdge,415,topEdge+sliderHeight),"PasswordSlider","", new BMessage(kPasswordSliderChanged), 0, 25)); + fPasswordSlider->SetModificationMessage(new BMessage(kPasswordSliderChanged)); commonLookAndFeel(fPasswordSlider,true,true); topEdge+=sliderHeight; diff --git a/src/preferences/screensaver/ScreenSaverWindow.h b/src/preferences/screensaver/ScreenSaverWindow.h index 206919ec3b..51a9408664 100644 --- a/src/preferences/screensaver/ScreenSaverWindow.h +++ b/src/preferences/screensaver/ScreenSaverWindow.h @@ -29,7 +29,7 @@ private: void UpdateStatus(); void SaverSelected(); - static int CompareSSListItems(const void* left, const void* right); + static int CompareScreenSaverItems(const void* left, const void* right); ScreenSaverPrefs fPrefs; int fFadeState,fNoFadeState; @@ -41,7 +41,6 @@ private: PreviewView *fPreviewDisplay; BListView *fListView1; - BList *fAddonList; BString fSelectedAddonFileName; image_id fCurrentAddon;