From 8f5f3a4503a4f2d9d955c413adf6c83382c580a2 Mon Sep 17 00:00:00 2001 From: gendusoa Date: Sun, 13 Oct 2002 23:05:11 +0000 Subject: [PATCH] Final changes before redesign. Fixed some issues with module preview lifetimes and added initial support for actually saving prefs, but just as likely broke much more. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1506 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/prefs/screensaver/PreviewView.cpp | 33 ++++++++++++++++++--------- src/prefs/screensaver/PreviewView.h | 5 ++-- src/prefs/screensaver/ScreenSaver.cpp | 14 ++++++++---- src/prefs/screensaver/ScreenSaver.h | 1 + 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/prefs/screensaver/PreviewView.cpp b/src/prefs/screensaver/PreviewView.cpp index 8b6f13b723..b8da53768c 100644 --- a/src/prefs/screensaver/PreviewView.cpp +++ b/src/prefs/screensaver/PreviewView.cpp @@ -16,7 +16,7 @@ struct bool stopMe; } previewData; -// viewer thread? +// viewer thread int32 previewThread(void* data) { int cycleNumber = 0; @@ -26,18 +26,30 @@ int32 previewThread(void* data) return 0; } - // TODO: implement lood counting int32 loopOnCount = previewData.saver->LoopOnCount(); + int32 loopOnCounter = 0; int32 loopOffCount = previewData.saver->LoopOffCount(); + int32 loopOffCounter = 0; + if (loopOnCount == 0 && loopOffCount == 0) + { + // TODO: fill in setup for "normal" loop counting here? + } + + snooze( previewData.saver->TickSize() ); while (!previewData.stopMe) { - previewData.previewArea->Window()->Lock(); - previewData.saver->Draw( previewData.previewArea, cycleNumber ); - previewData.previewArea->Window()->Unlock(); - previewData.previewArea->Flush(); + if (previewData.previewArea->Window()->Lock()) + { + if (!previewData.previewArea->IsHidden()) + { + previewData.saver->Draw( previewData.previewArea, cycleNumber ); + } + previewData.previewArea->Window()->Unlock(); + // previewData.previewArea->Flush(); + } snooze( previewData.saver->TickSize() ); - cycleNumber++; + ++cycleNumber; } } // end previewThread() @@ -62,7 +74,6 @@ PreviewView::PreviewView(BRect frame, const char *name) saver (0), settingsBoxPtr (0), configView (0), - messageRunner (0), stopSaver (false), stopConfigView (false), removeConfigView (false), @@ -122,7 +133,7 @@ PreviewView::~PreviewView() previewArea->RemoveSelf(); delete previewArea; } - + } // end PreviewView::~PreviewView() void PreviewView::Draw(BRect update) @@ -145,7 +156,7 @@ void PreviewView::Draw(BRect update) FillRect(scale2(5,6,4,5,Bounds())); } -void PreviewView::LoadNewAddon(const char* addOnFilename) +void PreviewView::LoadNewAddon(const char* addOnFilename, BMessage* settingsMsg) { if (previewData.previewThreadId != 0) { @@ -230,7 +241,7 @@ void PreviewView::LoadNewAddon(const char* addOnFilename) return; } - saver = instantiate(new BMessage, addonImage); + saver = instantiate(settingsMsg, addonImage); if (saver == 0) { std::cout << "Saver not instantiated.\n"; diff --git a/src/prefs/screensaver/PreviewView.h b/src/prefs/screensaver/PreviewView.h index fc5f7507fb..aa010c3d39 100644 --- a/src/prefs/screensaver/PreviewView.h +++ b/src/prefs/screensaver/PreviewView.h @@ -12,18 +12,17 @@ public: PreviewView(BRect frame, const char *name); ~PreviewView(); void Draw(BRect update); - void LoadNewAddon(const char* addOnFilename); + void LoadNewAddon(const char* addOnFilename, BMessage* settingsMsg); void SetSettingsBoxPtr( BBox* settingsBox ) { settingsBoxPtr = settingsBox; } - + private: BView *previewArea; BBox *settingsBoxPtr; BView *configView; image_id addonImage; BScreenSaver* saver; - BMessageRunner* messageRunner; // to keep track of what to tear down bool stopSaver; diff --git a/src/prefs/screensaver/ScreenSaver.cpp b/src/prefs/screensaver/ScreenSaver.cpp index d5f356905d..f1827f8d91 100644 --- a/src/prefs/screensaver/ScreenSaver.cpp +++ b/src/prefs/screensaver/ScreenSaver.cpp @@ -30,6 +30,7 @@ struct SSListItem void ScreenSaver::MessageReceived(BMessage *msg) { + SSListItem* listItem; switch(msg->what) { case TAB1_CHG: @@ -53,8 +54,12 @@ void ScreenSaver::MessageReceived(BMessage *msg) break; case SAVER_SEL: updateStatus(); - SelectedAddonFileName = reinterpret_cast(AddonList->ItemAt(ListView1->CurrentSelection()))->fileName; - previewDisplay->LoadNewAddon(SelectedAddonFileName.String()); + listItem = reinterpret_cast(AddonList->ItemAt(ListView1->CurrentSelection())); + //BString settingsMsgName(listItem->fileName); + //settingsMsgName.Prepend("settings_"); + //BMessage thisModulesSettings; + //settingsMsg.FindMessage(settingsMsgName, &thisModulesSettings); + previewDisplay->LoadNewAddon(listItem->fileName.String(), &settings); BWindow::MessageReceived(msg); break; default: @@ -213,9 +218,8 @@ void ScreenSaver::SetupForm(void) find_directory(B_USER_SETTINGS_DIRECTORY,&path); path.Append("OBOS_Screen_Saver",true); BFile file(path.Path(),B_READ_ONLY); - BMessage msg; - msg.Unflatten(&file); - loadSettings (&msg); + settings.Unflatten(&file); + loadSettings (&settings); updateStatus(); } diff --git a/src/prefs/screensaver/ScreenSaver.h b/src/prefs/screensaver/ScreenSaver.h index 13de83d901..9841efab5c 100644 --- a/src/prefs/screensaver/ScreenSaver.h +++ b/src/prefs/screensaver/ScreenSaver.h @@ -63,6 +63,7 @@ private: pwWindow *pwWin; BMessenger *pwMessenger; + BMessage settings; }; #endif // _ScreenSaver_H