diff --git a/stepmania/src/ScreenCourseManager.cpp b/stepmania/src/ScreenCourseManager.cpp index c191a77581..bef15a8d94 100644 --- a/stepmania/src/ScreenCourseManager.cpp +++ b/stepmania/src/ScreenCourseManager.cpp @@ -1,35 +1,12 @@ #include "global.h" -#include "ScreenCourseManager.h" +#include "ScreenEditCourse.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_COPY_TO_NEW, - ACTION_CREATE_NEW, - NUM_CourseManagerAction -}; -static const CString CourseManagerActionNames[] = { - "Edit", - "Delete", - "Create New", - "Copy to New", -}; -XToString( CourseManagerAction, NUM_CourseManagerAction ); - -static void GetPossibleActions( Course *pCourse, vector &vActionsOut ) +static void GetPossibleActions( vector &vActionsOut ) { - if( pCourse ) + if( GAMESTATE->m_pCurCourse != NULL ) { vActionsOut.push_back( ACTION_EDIT ); vActionsOut.push_back( ACTION_DELETE ); @@ -42,13 +19,13 @@ static void GetPossibleActions( Course *pCourse, vector &vA } -REGISTER_SCREEN_CLASS( ScreenCourseManager ); -ScreenCourseManager::ScreenCourseManager( CString sName ) : ScreenOptions( sName ) +REGISTER_SCREEN_CLASS( ScreenEditCourse ); +ScreenEditCourse::ScreenEditCourse( CString sName ) : ScreenOptions( sName ) { - LOG->Trace( "ScreenCourseManager::ScreenCourseManager()" ); + LOG->Trace( "ScreenEditCourse::ScreenEditCourse()" ); } -void ScreenCourseManager::Init() +void ScreenEditCourse::Init() { ScreenOptions::Init(); @@ -56,6 +33,7 @@ void ScreenCourseManager::Init() vector vHands; OptionRowDefinition def; + def.layoutType = LAYOUT_SHOW_ONE_IN_ROW; def.name = "Group"; def.choices.clear(); @@ -81,12 +59,12 @@ void ScreenCourseManager::Init() OnChange( GAMESTATE->m_MasterPlayerNumber ); } -void ScreenCourseManager::HandleScreenMessage( const ScreenMessage SM ) +void ScreenEditCourse::HandleScreenMessage( const ScreenMessage SM ) { ScreenOptions::HandleScreenMessage( SM ); } -void ScreenCourseManager::OnChange( PlayerNumber pn ) +void ScreenEditCourse::OnChange( PlayerNumber pn ) { ScreenOptions::OnChange( pn ); @@ -129,7 +107,7 @@ void ScreenCourseManager::OnChange( PlayerNumber pn ) OptionRowDefinition def = row.GetRowDef(); def.choices.clear(); vector vActions; - GetPossibleActions( GAMESTATE->m_pCurCourse, vActions ); + GetPossibleActions( vActions ); FOREACH_CONST( CourseManagerAction, vActions, a ) def.choices.push_back( CourseManagerActionToString(*a) ); row.Reload( def ); @@ -142,22 +120,45 @@ void ScreenCourseManager::OnChange( PlayerNumber pn ) } } -void ScreenCourseManager::ImportOptions( int row, const vector &vpns ) +void ScreenEditCourse::ImportOptions( int row, const vector &vpns ) { } -void ScreenCourseManager::ExportOptions( int row, const vector &vpns ) +void ScreenEditCourse::ExportOptions( int row, const vector &vpns ) { } -void ScreenCourseManager::GoToNextScreen() +void ScreenEditCourse::GoToNextScreen() { + OptionRow &row = *m_pRows[ROW_ACTION]; + int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); + vector vActions; + GetPossibleActions( vActions ); + CourseManagerAction action = vActions[iChoice]; + + switch( action ) + { + default: + ASSERT(0); + case ACTION_EDIT: + SCREENMAN->SetNewScreen( "ScreenEditCourse" ); + break; + case ACTION_DELETE: + SCREENMAN->PlayInvalidSound(); + break; + case ACTION_COPY_TO_NEW: + SCREENMAN->PlayInvalidSound(); + break; + case ACTION_CREATE_NEW: + SCREENMAN->PlayInvalidSound(); + break; + } } -void ScreenCourseManager::GoToPrevScreen() +void ScreenEditCourse::GoToPrevScreen() { } diff --git a/stepmania/src/ScreenEditCourse.cpp b/stepmania/src/ScreenEditCourse.cpp new file mode 100644 index 0000000000..7bef0a7150 --- /dev/null +++ b/stepmania/src/ScreenEditCourse.cpp @@ -0,0 +1,212 @@ +#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_COPY_TO_NEW, + ACTION_CREATE_NEW, + NUM_CourseManagerAction +}; +static const CString CourseManagerActionNames[] = { + "Edit", + "Delete", + "Create New", + "Copy to New", +}; +XToString( CourseManagerAction, NUM_CourseManagerAction ); + +static void GetPossibleActions( vector &vActionsOut ) +{ + if( GAMESTATE->m_pCurCourse != NULL ) + { + vActionsOut.push_back( ACTION_EDIT ); + vActionsOut.push_back( ACTION_DELETE ); + vActionsOut.push_back( ACTION_COPY_TO_NEW ); + } + else + { + vActionsOut.push_back( ACTION_CREATE_NEW ); + } +} + + +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.layoutType = LAYOUT_SHOW_ONE_IN_ROW; + + 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 + row.Reload( def ); + } + // 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]; + OptionRowDefinition def = row.GetRowDef(); + def.choices.clear(); + vector vActions; + GetPossibleActions( vActions ); + FOREACH_CONST( CourseManagerAction, vActions, a ) + def.choices.push_back( CourseManagerActionToString(*a) ); + row.Reload( def ); + } + // 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() +{ + OptionRow &row = *m_pRows[ROW_ACTION]; + int iChoice = row.GetChoiceInRowWithFocus( GAMESTATE->m_MasterPlayerNumber ); + + vector vActions; + GetPossibleActions( vActions ); + CourseManagerAction action = vActions[iChoice]; + + switch( action ) + { + default: + ASSERT(0); + case ACTION_EDIT: + SCREENMAN->SetNewScreen( "ScreenEditCourse" ); + break; + case ACTION_DELETE: + SCREENMAN->PlayInvalidSound(); + break; + case ACTION_COPY_TO_NEW: + SCREENMAN->PlayInvalidSound(); + break; + case ACTION_CREATE_NEW: + SCREENMAN->PlayInvalidSound(); + break; + } +} + +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/ScreenEditCourse.h b/stepmania/src/ScreenEditCourse.h new file mode 100644 index 0000000000..593ca232a6 --- /dev/null +++ b/stepmania/src/ScreenEditCourse.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/StepMania-net2003.vcproj b/stepmania/src/StepMania-net2003.vcproj index 872296f04c..8bbd0769ce 100644 --- a/stepmania/src/StepMania-net2003.vcproj +++ b/stepmania/src/StepMania-net2003.vcproj @@ -43,7 +43,7 @@ + + + +