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;