generalize deletion
This commit is contained in:
@@ -57,24 +57,38 @@ void ScreenEditMenu::Init()
|
|||||||
SOUND->PlayMusic( THEME->GetPathS(m_sName,"music") );
|
SOUND->PlayMusic( THEME->GetPathS(m_sName,"music") );
|
||||||
}
|
}
|
||||||
|
|
||||||
// helpers for MenuStart() below
|
/* This is actually just an adapter to make ScreenPrompt send different messages
|
||||||
static void DeleteCurSteps( void* pThrowAway )
|
* on yes and no: */
|
||||||
|
class ScreenEditMenuDeleteSteps: public ScreenPrompt
|
||||||
{
|
{
|
||||||
Song* pSong = GAMESTATE->m_pCurSong;
|
public:
|
||||||
Steps* pStepsToDelete = GAMESTATE->m_pCurSteps[PLAYER_1];
|
ScreenEditMenuDeleteSteps( const CString &sName ):
|
||||||
bool bSaveSong = !pStepsToDelete->WasLoadedFromProfile();
|
ScreenPrompt(sName)
|
||||||
pSong->RemoveSteps( pStepsToDelete );
|
|
||||||
|
|
||||||
/* Only save to the main .SM file if the steps we're deleting were loaded
|
|
||||||
* from it. */
|
|
||||||
if( bSaveSong )
|
|
||||||
{
|
{
|
||||||
pSong->Save();
|
|
||||||
SCREENMAN->ZeroNextUpdate();
|
|
||||||
}
|
}
|
||||||
SCREENMAN->SendMessageToTopScreen( SM_RefreshSelector );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
void Init()
|
||||||
|
{
|
||||||
|
ScreenPrompt::Init();
|
||||||
|
this->Load( SM_None, "These steps will be lost permanently.\n\nContinue with delete?", PROMPT_YES_NO, ANSWER_NO );
|
||||||
|
}
|
||||||
|
|
||||||
|
void End( bool bCancelled )
|
||||||
|
{
|
||||||
|
switch( m_Answer )
|
||||||
|
{
|
||||||
|
case ANSWER_YES:
|
||||||
|
m_smSendOnPop = SM_Success;
|
||||||
|
break;
|
||||||
|
case ANSWER_NO:
|
||||||
|
m_smSendOnPop = SM_Failure;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScreenPrompt::End( bCancelled );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
REGISTER_SCREEN_CLASS( ScreenEditMenuDeleteSteps );
|
||||||
|
|
||||||
|
|
||||||
void ScreenEditMenu::HandleScreenMessage( const ScreenMessage SM )
|
void ScreenEditMenu::HandleScreenMessage( const ScreenMessage SM )
|
||||||
@@ -87,7 +101,20 @@ void ScreenEditMenu::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
else if( SM == SM_Success )
|
else if( SM == SM_Success )
|
||||||
{
|
{
|
||||||
LOG->Trace( "Delete successful; deleting steps from memory" );
|
LOG->Trace( "Delete successful; deleting steps from memory" );
|
||||||
DeleteCurSteps( NULL );
|
|
||||||
|
Song* pSong = GAMESTATE->m_pCurSong;
|
||||||
|
Steps* pStepsToDelete = GAMESTATE->m_pCurSteps[PLAYER_1];
|
||||||
|
bool bSaveSong = !pStepsToDelete->WasLoadedFromProfile();
|
||||||
|
pSong->RemoveSteps( pStepsToDelete );
|
||||||
|
|
||||||
|
/* Only save to the main .SM file if the steps we're deleting were loaded
|
||||||
|
* from it. */
|
||||||
|
if( bSaveSong )
|
||||||
|
{
|
||||||
|
pSong->Save();
|
||||||
|
SCREENMAN->ZeroNextUpdate();
|
||||||
|
}
|
||||||
|
SCREENMAN->SendMessageToTopScreen( SM_RefreshSelector );
|
||||||
}
|
}
|
||||||
else if( SM == SM_Failure )
|
else if( SM == SM_Failure )
|
||||||
{
|
{
|
||||||
@@ -223,17 +250,7 @@ void ScreenEditMenu::MenuStart( PlayerNumber pn )
|
|||||||
break;
|
break;
|
||||||
case EDIT_MENU_ACTION_DELETE:
|
case EDIT_MENU_ACTION_DELETE:
|
||||||
ASSERT( pSteps );
|
ASSERT( pSteps );
|
||||||
switch( EDIT_MODE.GetValue() )
|
SCREENMAN->AddNewScreenToTop( "ScreenEditMenuDeleteSteps" );
|
||||||
{
|
|
||||||
case EDIT_MODE_HOME:
|
|
||||||
SCREENMAN->AddNewScreenToTop( "ScreenEditMenuDeleteSteps" );
|
|
||||||
break;
|
|
||||||
case EDIT_MODE_FULL:
|
|
||||||
ScreenPrompt::Prompt( SM_RefreshSelector, "These steps will be lost permanently.\n\nContinue with delete?", PROMPT_YES_NO, ANSWER_NO, DeleteCurSteps );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ASSERT(0);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EDIT_MENU_ACTION_CREATE:
|
case EDIT_MENU_ACTION_CREATE:
|
||||||
ASSERT( !pSteps );
|
ASSERT( !pSteps );
|
||||||
|
|||||||
Reference in New Issue
Block a user