From 30f9215aef8e7abe7a948a3065bc5974e10e5975 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Sat, 26 Feb 2011 15:11:41 -0600 Subject: [PATCH] change how ScreenOptionsToggleSongs works. Now the main page (ScreenOptionsToggleSongs) has the groups, and a sub-page (ScreenOptionsToggleSongsSubPage) holds all the songs in a specific group. --- Docs/Changelog_sm-ssc.txt | 7 ++++ Themes/_fallback/Languages/en.ini | 2 + src/ScreenOptionsToggleSongs.cpp | 66 +++++++++++++++++++++++++++++-- src/ScreenOptionsToggleSongs.h | 19 +++++++++ 4 files changed, 91 insertions(+), 3 deletions(-) diff --git a/Docs/Changelog_sm-ssc.txt b/Docs/Changelog_sm-ssc.txt index 261a0a1edb..9f28860874 100644 --- a/Docs/Changelog_sm-ssc.txt +++ b/Docs/Changelog_sm-ssc.txt @@ -13,6 +13,13 @@ _____________________________________________________________________________ sm-ssc v1.2.3 | 2011022? -------------------------------------------------------------------------------- +20110226 +-------- +* [ScreenOptionsToggleSongs] The structure of this screen has now changed. + Before, it contained the entire list of songs. Now, the main page + (ScreenOptionsToggleSongs) holds the groups, and a sub-page + (ScreenOptionsToggleSongsSubPage) holds the songs in each group. [AJ] + 20110225 -------- * Add lifts and fakes to all Pump noteskins. [Daisuke Master, Wolfman2000] diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index d68bff46a5..735d4cca65 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -412,6 +412,7 @@ ScoreDisplay=ScoreDisplay Scoreboard=Enables scoreboard ScoringType=Defines which scoring method to use. Scroll=Scroll +Select Group=Toggle Songs in this Group. Select Profile=Choose a profile Server=Start Local Server Servers=Servers @@ -442,6 +443,7 @@ Test Lights=Test the responsiveness of connected lights. TextureColorDepth=Choose the color depth of textures. 32 bit textures use more memory, but look nicer. Theme=Choose from this list of installed theme packs. TimingWindowScale=Increase this value to cause your steps to be judged more strictly (i.e. shrink the timing window). +Toggle Song=Toggle Song Turn=Turn Transfer Edits to USB=Transfer Edits to USB Transfer Edits from USB=Transfer Edits from USB diff --git a/src/ScreenOptionsToggleSongs.cpp b/src/ScreenOptionsToggleSongs.cpp index 7a83e9bfc7..af5eaea11c 100644 --- a/src/ScreenOptionsToggleSongs.cpp +++ b/src/ScreenOptionsToggleSongs.cpp @@ -7,16 +7,76 @@ #include "SongManager.h" #include "UnlockManager.h" #include "PrefsManager.h" +#include "MessageManager.h" +// main page (group list) REGISTER_SCREEN_CLASS( ScreenOptionsToggleSongs ); +REGISTER_SCREEN_CLASS( ScreenOptionsToggleSongsSubPage ); void ScreenOptionsToggleSongs::BeginScreen() +{ + m_asGroups.clear(); + + vector vHands; + + vector asAllGroups; + SONGMAN->GetSongGroupNames(asAllGroups); + FOREACH_CONST( RString, asAllGroups , s ) + { + vHands.push_back( OptionRowHandlerUtil::MakeNull() ); + OptionRowDefinition &def = vHands.back()->m_Def; + RString sGroup = *s; + + def.m_sName = sGroup; + def.m_sExplanationName = "Select Group"; + def.m_bAllowThemeTitle = false; // not themable + def.m_bAllowThemeItems = false; // already themed + def.m_bOneChoiceForAllPlayers = true; + def.m_vsChoices.clear(); + def.m_vsChoices.push_back( "" ); + + m_asGroups.push_back( sGroup ); + } + ScreenOptions::InitMenu( vHands ); + + ScreenOptions::BeginScreen(); +} + +void ScreenOptionsToggleSongs::ProcessMenuStart( const InputEventPlus &input ) +{ + if( IsTransitioning() ) + return; + + // switch to the subpage with the specified group + int iRow = GetCurrentRow(); + OptionRow &row = *m_pRows[iRow]; + if( row.GetRowType() == OptionRow::RowType_Exit ) + { + ScreenOptions::ProcessMenuStart( input ); + return; + } + + ToggleSongs::m_sGroup = m_asGroups[iRow]; + SCREENMAN->SetNewScreen("ScreenOptionsToggleSongsSubPage"); +} + +void ScreenOptionsToggleSongs::ImportOptions( int row, const vector &vpns ) +{ + +} +void ScreenOptionsToggleSongs::ExportOptions( int row, const vector &vpns ) +{ + +} + +// subpage (has the songs in a specific group) +void ScreenOptionsToggleSongsSubPage::BeginScreen() { m_apSongs.clear(); vector vHands; - const vector &apAllSongs = SONGMAN->GetAllSongs(); + const vector &apAllSongs = SONGMAN->GetSongs(ToggleSongs::m_sGroup); FOREACH_CONST( Song *, apAllSongs , s ) { Song *pSong = *s; @@ -43,7 +103,7 @@ void ScreenOptionsToggleSongs::BeginScreen() ScreenOptions::BeginScreen(); } -void ScreenOptionsToggleSongs::ImportOptions( int iRow, const vector &vpns ) +void ScreenOptionsToggleSongsSubPage::ImportOptions( int iRow, const vector &vpns ) { if( iRow >= (int)m_apSongs.size() ) // exit row return; @@ -54,7 +114,7 @@ void ScreenOptionsToggleSongs::ImportOptions( int iRow, const vector &vpns ) +void ScreenOptionsToggleSongsSubPage::ExportOptions( int iRow, const vector &vpns ) { if( iRow >= (int)m_apSongs.size() ) // exit row return; diff --git a/src/ScreenOptionsToggleSongs.h b/src/ScreenOptionsToggleSongs.h index ae2cdcba44..a6f8635402 100644 --- a/src/ScreenOptionsToggleSongs.h +++ b/src/ScreenOptionsToggleSongs.h @@ -4,11 +4,30 @@ #include "ScreenOptions.h" #include "Song.h" +// Can this be done any better? -aj +namespace ToggleSongs +{ + RString m_sGroup; +} + class ScreenOptionsToggleSongs: public ScreenOptions { public: virtual void BeginScreen(); +private: + virtual void ImportOptions( int row, const vector &vpns ); + virtual void ExportOptions( int row, const vector &vpns ); + virtual void ProcessMenuStart( const InputEventPlus &input ); + + vector m_asGroups; +}; + +class ScreenOptionsToggleSongsSubPage: public ScreenOptions +{ +public: + virtual void BeginScreen(); + private: virtual void ImportOptions( int row, const vector &vpns ); virtual void ExportOptions( int row, const vector &vpns );