From ff1d0fd0f0be425c7e25ef24194a4fbad0655390 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sat, 26 Mar 2005 20:46:50 +0000 Subject: [PATCH] hide locked songs from EditMenu in HomeEditMode --- stepmania/src/EditMenu.cpp | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/stepmania/src/EditMenu.cpp b/stepmania/src/EditMenu.cpp index 10f3a17bd0..da18ef4fbd 100644 --- a/stepmania/src/EditMenu.cpp +++ b/stepmania/src/EditMenu.cpp @@ -11,6 +11,7 @@ #include "Foreach.h" #include "CommonMetrics.h" #include "BannerCache.h" +#include "UnlockManager.h" static const CString EditMenuRowNames[NUM_EDIT_MENU_ROWS] = { @@ -47,6 +48,35 @@ StringToX( EditMenuAction ); #define ROW_Y( i ) THEME->GetMetricF("EditMenu",ssprintf("Row%dY",i+1)) +static void GetSongsToShowForGroup( const CString &sGroup, vector &vpSongsOut ) +{ + vpSongsOut.clear(); + SONGMAN->GetSongs( vpSongsOut, sGroup ); + if( HOME_EDIT_MODE ) + { + // strip groups that have no unlocked songs + for( int i=vpSongsOut.size()-1; i>=0; i-- ) + { + const Song* pSong = vpSongsOut[i]; + if( UNLOCKMAN->SongIsLocked(pSong) ) + vpSongsOut.erase( vpSongsOut.begin()+i ); + } + } +} +static void GetGroupsToShow( vector &vsGroupsOut ) +{ + vsGroupsOut.clear(); + SONGMAN->GetGroupNames( vsGroupsOut ); + for( int i = vsGroupsOut.size()-1; i>=0; i-- ) + { + const CString &sGroup = vsGroupsOut[i]; + vector vpSongs; + GetSongsToShowForGroup( sGroup, vpSongs ); + if( vpSongs.empty() ) + vsGroupsOut.erase( vsGroupsOut.begin()+i ); + } +} + EditMenu::EditMenu() { LOG->Trace( "EditMenu::EditMenu()" ); @@ -122,8 +152,10 @@ EditMenu::EditMenu() m_soundChangeValue.Load( THEME->GetPathS("EditMenu","value") ); + // // fill in data structures - SONGMAN->GetGroupNames( m_sGroups ); + // + GetGroupsToShow( m_sGroups ); m_StepsTypes = STEPS_TYPES_TO_SHOW.GetValue(); if( HOME_EDIT_MODE ) { @@ -315,7 +347,7 @@ void EditMenu::OnRowValueChanged( EditMenuRow row ) m_GroupBanner.LoadFromGroup( GetSelectedGroup() ); m_GroupBanner.ScaleToClipped( GROUP_BANNER_WIDTH, GROUP_BANNER_HEIGHT ); m_pSongs.clear(); - SONGMAN->GetSongs( m_pSongs, GetSelectedGroup() ); + GetSongsToShowForGroup( GetSelectedGroup(), m_pSongs ); m_iSelection[ROW_SONG] = 0; // fall through case ROW_SONG: