diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index 73de32f637..dabda6e4ff 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -621,7 +621,6 @@ ScreenEdit::ScreenEdit( CString sName ) : ScreenWithMenuElements( sName ) void ScreenEdit::Init() { EDIT_MODE.Load(m_sName,"EditMode"); - ScreenWithMenuElements::Init(); InitEditMappings(); @@ -1371,11 +1370,14 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) GAMESTATE->m_pCurSteps[PLAYER_1].Set( pSteps ); m_pSteps = pSteps; pSteps->GetNoteData( m_NoteDataEdit ); - SCREENMAN->SystemMessage( ssprintf( - "Switched to %s %s '%s'", + CString s = ssprintf( + "Switched to %s %s '%s' (%d of %d)", GAMEMAN->StepsTypeToString( pSteps->m_StepsType ).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(); } break; @@ -2551,14 +2553,18 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector &iAns pSteps->SetSavedToDisk( true ); CopyToLastSave(); + ClearUndo(); NotesWriterSM w; w.WriteEditFileToMachine( pSong, pSteps ); SCREENMAN->ZeroNextUpdate(); - /* FIXME + // TODO: make localizable + CString s = ssprintf( "Saved \"%s\"", Basename(pSteps->GetFilename()).c_str() ); + ScreenPrompt::Prompt( SM_None, s ); + /* FIXME CString s; switch( c ) { @@ -2670,10 +2676,17 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector &iAns { case EDIT_MODE_FULL: case EDIT_MODE_HOME: - ScreenPrompt::Prompt( - SM_DoSaveAndExit, - "Do you want to save changes before exiting?", - PROMPT_YES_NO_CANCEL, ANSWER_CANCEL ); + if( m_bHasUndo ) + { + ScreenPrompt::Prompt( + SM_DoSaveAndExit, + "Do you want to save changes before exiting?", + PROMPT_YES_NO_CANCEL, ANSWER_CANCEL ); + } + else + { + SCREENMAN->SendMessageToTopScreen( SM_DoExit ); + } break; case EDIT_MODE_PRACTICE: SCREENMAN->SendMessageToTopScreen( SM_DoExit ); @@ -3234,9 +3247,11 @@ void ScreenEdit::Undo() { if( m_bHasUndo ) { + // swap NoteData temp( m_NoteDataEdit ); m_NoteDataEdit.CopyAll( m_Undo ); m_Undo.CopyAll( temp ); + SCREENMAN->SystemMessage( "Undo" ); } else @@ -3246,6 +3261,11 @@ void ScreenEdit::Undo() } } +void ScreenEdit::ClearUndo() +{ + m_bHasUndo = false; +} + void ScreenEdit::CheckNumberOfNotesAndUndo() { for( int row=0; row<=m_NoteDataEdit.GetLastRow(); row+=ROWS_PER_MEASURE ) diff --git a/stepmania/src/ScreenEdit.h b/stepmania/src/ScreenEdit.h index dc1760e5e6..d605875c70 100644 --- a/stepmania/src/ScreenEdit.h +++ b/stepmania/src/ScreenEdit.h @@ -172,6 +172,7 @@ protected: void SaveUndo(); // Revert m_NoteDataEdit using m_Undo. void Undo(); + void ClearUndo(); // Call this after modifying m_NoteDataEdit. It will Undo() if // MAX_NOTES_PER_MEASURE was exceeded. void CheckNumberOfNotesAndUndo();