diff --git a/stepmania/src/SongManager.cpp b/stepmania/src/SongManager.cpp index 65e34389c6..d70060bbae 100644 --- a/stepmania/src/SongManager.cpp +++ b/stepmania/src/SongManager.cpp @@ -262,7 +262,7 @@ void SongManager::LoadStepManiaSongDir( RString sDir, LoadingWindow *ld ) LoadGroupSymLinks(sDir, sGroupDirName); } - SetEnabledSongs(); + LoadEnabledSongsFromPref(); } // Instead of "symlinks", songs should have membership in multiple groups. @@ -906,23 +906,26 @@ void SongManager::SetPreferences() } } -void SongManager::EnableSong( Song *pSong, bool bEnable ) +void SongManager::SaveEnabledSongsToPref() { vector asDisabledSongs; split( g_sDisabledSongs, ";", asDisabledSongs, true ); - vector::iterator it = find( asDisabledSongs.begin(), asDisabledSongs.end(), pSong->GetSongDir() ); - if( bEnable && it == asDisabledSongs.end() ) - asDisabledSongs.push_back( pSong->GetSongDir() ); - else if( !bEnable && it != asDisabledSongs.end() ) - asDisabledSongs.erase( it ); - + const vector &apSongs = SONGMAN->GetSongs(); + FOREACH_CONST( Song *, apSongs, s ) + { + Song *pSong = (*s); + bool bEnabled = pSong->GetEnabled(); + vector::iterator it = find( asDisabledSongs.begin(), asDisabledSongs.end(), pSong->GetSongDir() ); + if( bEnabled && it == asDisabledSongs.end() ) + asDisabledSongs.push_back( pSong->GetSongDir() ); + else if( !bEnabled && it != asDisabledSongs.end() ) + asDisabledSongs.erase( it ); + } g_sDisabledSongs.Set( join(";", asDisabledSongs) ); - - pSong->SetEnabled( bEnable ); } -void SongManager::SetEnabledSongs() +void SongManager::LoadEnabledSongsFromPref() { FOREACH( Song *, m_pSongs, s ) (*s)->SetEnabled( true ); diff --git a/stepmania/src/SongManager.h b/stepmania/src/SongManager.h index 5bd719681a..95490327c2 100644 --- a/stepmania/src/SongManager.h +++ b/stepmania/src/SongManager.h @@ -38,8 +38,8 @@ public: void RegenerateNonFixedCourses(); void SetPreferences(); - void EnableSong( Song *pSong, bool bEnable ); - void SetEnabledSongs(); + void SaveEnabledSongsToPref(); + void LoadEnabledSongsFromPref(); void LoadStepEditsFromProfileDir( const RString &sProfileDir, ProfileSlot slot ); void LoadCourseEditsFromProfileDir( const RString &sProfileDir, ProfileSlot slot ); diff --git a/stepmania/src/song.h b/stepmania/src/song.h index fab7d18a4f..036475d8ed 100644 --- a/stepmania/src/song.h +++ b/stepmania/src/song.h @@ -209,6 +209,7 @@ public: bool HasEdits( StepsType st ) const; void SetEnabled( bool b ) { m_bEnabled = b; } + bool GetEnabled() const { return m_bEnabled; } bool NormallyDisplayed() const; bool ShowInDemonstrationAndRanking() const;