don't prompt to save on exit if there's no undo info

This commit is contained in:
Chris Danford
2005-12-06 12:41:06 +00:00
parent 8fda004742
commit 24e113d102
2 changed files with 30 additions and 9 deletions
+29 -9
View File
@@ -621,7 +621,6 @@ ScreenEdit::ScreenEdit( CString sName ) : ScreenWithMenuElements( sName )
void ScreenEdit::Init() void ScreenEdit::Init()
{ {
EDIT_MODE.Load(m_sName,"EditMode"); EDIT_MODE.Load(m_sName,"EditMode");
ScreenWithMenuElements::Init(); ScreenWithMenuElements::Init();
InitEditMappings(); InitEditMappings();
@@ -1371,11 +1370,14 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB )
GAMESTATE->m_pCurSteps[PLAYER_1].Set( pSteps ); GAMESTATE->m_pCurSteps[PLAYER_1].Set( pSteps );
m_pSteps = pSteps; m_pSteps = pSteps;
pSteps->GetNoteData( m_NoteDataEdit ); pSteps->GetNoteData( m_NoteDataEdit );
SCREENMAN->SystemMessage( ssprintf( CString s = ssprintf(
"Switched to %s %s '%s'", "Switched to %s %s '%s' (%d of %d)",
GAMEMAN->StepsTypeToString( pSteps->m_StepsType ).c_str(), GAMEMAN->StepsTypeToString( pSteps->m_StepsType ).c_str(),
DifficultyToString( pSteps->GetDifficulty() ).c_str(), DifficultyToString( pSteps->GetDifficulty() ).c_str(),
pSteps->GetDescription().c_str() ) ); pSteps->GetDescription().c_str(),
it - vSteps.begin(),
vSteps.size() );
SCREENMAN->SystemMessage( s );
m_soundSwitch.Play(); m_soundSwitch.Play();
} }
break; break;
@@ -2551,14 +2553,18 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
pSteps->SetSavedToDisk( true ); pSteps->SetSavedToDisk( true );
CopyToLastSave(); CopyToLastSave();
ClearUndo();
NotesWriterSM w; NotesWriterSM w;
w.WriteEditFileToMachine( pSong, pSteps ); w.WriteEditFileToMachine( pSong, pSteps );
SCREENMAN->ZeroNextUpdate(); SCREENMAN->ZeroNextUpdate();
/* FIXME // TODO: make localizable
CString s = ssprintf( "Saved \"%s\"", Basename(pSteps->GetFilename()).c_str() );
ScreenPrompt::Prompt( SM_None, s );
/* FIXME
CString s; CString s;
switch( c ) switch( c )
{ {
@@ -2670,10 +2676,17 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
{ {
case EDIT_MODE_FULL: case EDIT_MODE_FULL:
case EDIT_MODE_HOME: case EDIT_MODE_HOME:
ScreenPrompt::Prompt( if( m_bHasUndo )
SM_DoSaveAndExit, {
"Do you want to save changes before exiting?", ScreenPrompt::Prompt(
PROMPT_YES_NO_CANCEL, ANSWER_CANCEL ); SM_DoSaveAndExit,
"Do you want to save changes before exiting?",
PROMPT_YES_NO_CANCEL, ANSWER_CANCEL );
}
else
{
SCREENMAN->SendMessageToTopScreen( SM_DoExit );
}
break; break;
case EDIT_MODE_PRACTICE: case EDIT_MODE_PRACTICE:
SCREENMAN->SendMessageToTopScreen( SM_DoExit ); SCREENMAN->SendMessageToTopScreen( SM_DoExit );
@@ -3234,9 +3247,11 @@ void ScreenEdit::Undo()
{ {
if( m_bHasUndo ) if( m_bHasUndo )
{ {
// swap
NoteData temp( m_NoteDataEdit ); NoteData temp( m_NoteDataEdit );
m_NoteDataEdit.CopyAll( m_Undo ); m_NoteDataEdit.CopyAll( m_Undo );
m_Undo.CopyAll( temp ); m_Undo.CopyAll( temp );
SCREENMAN->SystemMessage( "Undo" ); SCREENMAN->SystemMessage( "Undo" );
} }
else else
@@ -3246,6 +3261,11 @@ void ScreenEdit::Undo()
} }
} }
void ScreenEdit::ClearUndo()
{
m_bHasUndo = false;
}
void ScreenEdit::CheckNumberOfNotesAndUndo() void ScreenEdit::CheckNumberOfNotesAndUndo()
{ {
for( int row=0; row<=m_NoteDataEdit.GetLastRow(); row+=ROWS_PER_MEASURE ) for( int row=0; row<=m_NoteDataEdit.GetLastRow(); row+=ROWS_PER_MEASURE )
+1
View File
@@ -172,6 +172,7 @@ protected:
void SaveUndo(); void SaveUndo();
// Revert m_NoteDataEdit using m_Undo. // Revert m_NoteDataEdit using m_Undo.
void Undo(); void Undo();
void ClearUndo();
// Call this after modifying m_NoteDataEdit. It will Undo() if // Call this after modifying m_NoteDataEdit. It will Undo() if
// MAX_NOTES_PER_MEASURE was exceeded. // MAX_NOTES_PER_MEASURE was exceeded.
void CheckNumberOfNotesAndUndo(); void CheckNumberOfNotesAndUndo();