diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 5e9f61f337..c9374a0ba4 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -77,7 +77,7 @@ Choice1=@"ApplyDefaultOptions;screen,"..ScreenCautionBranch() Choice2=screen,ScreenSelectGame Choice3=screen,ScreenOptionsMenu Choice4=screen,ScreenEditMenu -Choice5=screen,ScreenEditCoursesMenu +Choice5=screen,ScreenCourseManager Choice6=screen,ScreenJukeboxMenu Choice7=screen,ScreenExit Choice8=screen,ScreenTest @@ -4540,3 +4540,10 @@ Fallback=Screen Fallback=ScreenPrompt Class=ScreenSaveSync NextScreen=@GetGameplayNextScreen() + +[ScreenCourseManager] +Class=ScreenCourseManager +Fallback=ScreenOptions +TimerSeconds=0 +ShowExitRow=0 +ThemeItems=0 \ No newline at end of file diff --git a/stepmania/src/ScreenCourseManager.cpp b/stepmania/src/ScreenCourseManager.cpp new file mode 100644 index 0000000000..836a767039 --- /dev/null +++ b/stepmania/src/ScreenCourseManager.cpp @@ -0,0 +1,173 @@ +#include "global.h" +#include "ScreenCourseManager.h" +#include "RageLog.h" +#include "GameState.h" +#include "SongManager.h" + +enum CourseManagerRow +{ + ROW_GROUP, + ROW_COURSE, + ROW_ACTION +}; + +enum CourseManagerAction +{ + ACTION_EDIT, + ACTION_DELETE, + ACTION_CREATE_NEW, + ACTION_COPY_TO_NEW, + NUM_CourseManagerAction +}; +static const CString CourseManagerActionNames[] = { + "Edit", + "Delete", + "Create New", + "Copy to New", +}; +XToString( CourseManagerAction, NUM_CourseManagerAction ); + + +REGISTER_SCREEN_CLASS( ScreenCourseManager ); +ScreenCourseManager::ScreenCourseManager( CString sName ) : ScreenOptions( sName ) +{ + LOG->Trace( "ScreenCourseManager::ScreenCourseManager()" ); +} + +void ScreenCourseManager::Init() +{ + ScreenOptions::Init(); + + vector vDefs; + vector vHands; + + OptionRowDefinition def; + + def.name = "Group"; + def.choices.clear(); + SONGMAN->GetCourseGroupNames( def.choices ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "Course"; + def.choices.clear(); + def.choices.push_back( "" ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + def.name = "Action"; + def.choices.clear(); + def.choices.push_back( "" ); + vDefs.push_back( def ); + vHands.push_back( NULL ); + + ScreenOptions::InitMenu( INPUTMODE_SHARE_CURSOR, vDefs, vHands ); + + + OnChange( GAMESTATE->m_MasterPlayerNumber ); +} + +void ScreenCourseManager::HandleScreenMessage( const ScreenMessage SM ) +{ + ScreenOptions::HandleScreenMessage( SM ); +} + +void ScreenCourseManager::OnChange( PlayerNumber pn ) +{ + ScreenOptions::OnChange( pn ); + + switch( m_iCurrentRow[pn] ) + { + case ROW_GROUP: + // export current course group + { + OptionRow &row = *m_pRows[ROW_GROUP]; + int iChoice = row.GetChoiceInRowWithFocus(pn); + CString sCourseGroup = row.GetRowDef().choices[iChoice]; + GAMESTATE->m_sPreferredCourseGroup.Set( sCourseGroup ); + } + // Refresh courses + { + OptionRow &row = *m_pRows[ROW_COURSE]; + vector vpCourses; + SONGMAN->GetCoursesInGroup( vpCourses, GAMESTATE->m_sPreferredCourseGroup.Get(), false ); + OptionRowDefinition def = row.GetRowDef(); + def.choices.clear(); + FOREACH_CONST( Course*, vpCourses, c ) + def.choices.push_back( (*c)->GetTranslitFullTitle() ); + def.choices.push_back( NULL ); // new course + } + // fall through + case ROW_COURSE: + // export current course + { + OptionRow &row = *m_pRows[ROW_COURSE]; + int iChoice = row.GetChoiceInRowWithFocus(pn); + vector vpCourses; + SONGMAN->GetCoursesInGroup( vpCourses, GAMESTATE->m_sPreferredCourseGroup.Get(), false ); + Course *pCourse = vpCourses[iChoice]; + GAMESTATE->m_pCurCourse.Set( pCourse ); + } + // refresh actions + { + OptionRow &row = *m_pRows[ROW_ACTION]; + vector vpCourses; + SONGMAN->GetCoursesInGroup( vpCourses, GAMESTATE->m_sPreferredCourseGroup.Get(), false ); + OptionRowDefinition def = row.GetRowDef(); + def.choices.clear(); + FOREACH_CONST( Course*, vpCourses, c ) + def.choices.push_back( (*c)->GetTranslitFullTitle() ); + def.choices.push_back( NULL ); // new course + } + // fall through + case ROW_ACTION: + // fall through + default: + ; // nothing left to do + } +} + +void ScreenCourseManager::ImportOptions( int row, const vector &vpns ) +{ + +} + +void ScreenCourseManager::ExportOptions( int row, const vector &vpns ) +{ + +} + +void ScreenCourseManager::GoToNextScreen() +{ + +} + +void ScreenCourseManager::GoToPrevScreen() +{ + +} + +/* + * (c) 2002-2004 Chris Danford + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/stepmania/src/ScreenCourseManager.h b/stepmania/src/ScreenCourseManager.h new file mode 100644 index 0000000000..593ca232a6 --- /dev/null +++ b/stepmania/src/ScreenCourseManager.h @@ -0,0 +1,50 @@ +#ifndef ScreenCourseManager_H +#define ScreenCourseManager_H + +#include "ScreenOptions.h" + +class ScreenCourseManager : public ScreenOptions +{ +public: + ScreenCourseManager( CString sName ); + + void Init(); + + virtual void HandleScreenMessage( const ScreenMessage SM ); + +private: + virtual void ImportOptions( int row, const vector &vpns ); + virtual void ExportOptions( int row, const vector &vpns ); + + virtual void GoToNextScreen(); + virtual void GoToPrevScreen(); + + void OnChange( PlayerNumber pn ); +}; + +#endif + +/* + * (c) 2003-2004 Chris Danford + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/stepmania/src/SongManager.cpp b/stepmania/src/SongManager.cpp index a5cde1d34a..1e468e1ae8 100644 --- a/stepmania/src/SongManager.cpp +++ b/stepmania/src/SongManager.cpp @@ -886,6 +886,14 @@ void SongManager::GetCourses( CourseType ct, vector &AddTo, bool bInclu AddTo.push_back( m_pCourses[i] ); } +void SongManager::GetCoursesInGroup( vector &AddTo, const CString &sCourseGroup, bool bIncludeAutogen ) +{ + for( unsigned i=0; im_sGroupName == sCourseGroup ) + if( bIncludeAutogen || !m_pCourses[i]->m_bIsAutogen ) + AddTo.push_back( m_pCourses[i] ); +} + bool SongManager::GetExtraStageInfoFromCourse( bool bExtra2, CString sPreferredGroup, Song*& pSongOut, Steps*& pStepsOut, PlayerOptions& po_out, SongOptions& so_out ) { diff --git a/stepmania/src/SongManager.h b/stepmania/src/SongManager.h index 5ffde76120..031d19cb3c 100644 --- a/stepmania/src/SongManager.h +++ b/stepmania/src/SongManager.h @@ -86,6 +86,7 @@ public: void GetAllCourses( vector &AddTo, bool bIncludeAutogen ); void GetCourses( CourseType ct, vector &AddTo, bool bIncludeAutogen ); + void GetCoursesInGroup( vector &AddTo, const CString &sCourseGroup, bool bIncludeAutogen ); void GetExtraStageInfo( bool bExtra2, const Style *s, Song*& pSongOut, Steps*& pStepsOut, PlayerOptions& po_out, SongOptions& so_out ); @@ -125,7 +126,7 @@ protected: vector m_pBestCourses[NUM_PROFILE_SLOTS][NUM_COURSE_TYPES]; vector m_pShuffledCourses; // used by GetRandomCourse CStringArray m_sCourseGroupNames; - CStringArray m_sCourseGroupBannerPaths; // each song group may have a banner associated with it + CStringArray m_sCourseGroupBannerPaths; // each course group may have a banner associated with it ThemeMetric NUM_SONG_GROUP_COLORS; diff --git a/stepmania/src/StepMania-net2003.vcproj b/stepmania/src/StepMania-net2003.vcproj index a30b7a04b4..872296f04c 100644 --- a/stepmania/src/StepMania-net2003.vcproj +++ b/stepmania/src/StepMania-net2003.vcproj @@ -282,6 +282,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + +