diff --git a/stepmania/src/AdjustSync.cpp b/stepmania/src/AdjustSync.cpp index 9cad4e93b7..4fbc7d4158 100644 --- a/stepmania/src/AdjustSync.cpp +++ b/stepmania/src/AdjustSync.cpp @@ -34,11 +34,11 @@ */ #include "global.h" +#include "song.h" #include "AdjustSync.h" #include "GameState.h" -#include "song.h" -#include "PrefsManager.h" #include "LocalizedString.h" +#include "PrefsManager.h" #include "ScreenManager.h" TimingData *AdjustSync::s_pTimingDataOriginal = NULL; @@ -51,7 +51,6 @@ float AdjustSync::s_fAverageError = 0.0f; const float AdjustSync::ERROR_TOO_HIGH = 0.025f; int AdjustSync::s_iStepsFiltered = 0; - void AdjustSync::ResetOriginalSyncData() { if( s_pTimingDataOriginal == NULL ) @@ -87,8 +86,17 @@ void AdjustSync::SaveSyncChanges() { if( GAMESTATE->IsCourseMode() ) return; - if( GAMESTATE->m_pCurSong && *s_pTimingDataOriginal != GAMESTATE->m_pCurSong->m_Timing ) - GAMESTATE->m_pCurSong->Save(); + if( GAMESTATE->m_pCurSong && *s_pTimingDataOriginal != GAMESTATE->m_pCurSong->m_Timing ) + { + if( GAMESTATE->IsEditing() ) + { + MESSAGEMAN->Broadcast( Message_SongChanged ); + } + else + { + GAMESTATE->m_pCurSong->Save(); + } + } if( s_fGlobalOffsetSecondsOriginal != PREFSMAN->m_fGlobalOffsetSeconds ) PREFSMAN->SavePrefsToDisk(); ResetOriginalSyncData(); diff --git a/stepmania/src/MessageManager.cpp b/stepmania/src/MessageManager.cpp index 803800daf9..f62450adea 100644 --- a/stepmania/src/MessageManager.cpp +++ b/stepmania/src/MessageManager.cpp @@ -132,6 +132,7 @@ static const char *MessageNames[] = { "ShowHoldJudgmentMuliPlayerP30", "ShowHoldJudgmentMuliPlayerP31", "ShowHoldJudgmentMuliPlayerP32", + "MessageSongChanged", }; XToString( Message ); diff --git a/stepmania/src/MessageManager.h b/stepmania/src/MessageManager.h index 6447432d87..6a6d9bf3f3 100644 --- a/stepmania/src/MessageManager.h +++ b/stepmania/src/MessageManager.h @@ -127,6 +127,7 @@ enum Message Message_ShowHoldJudgmentMuliPlayerP30, Message_ShowHoldJudgmentMuliPlayerP31, Message_ShowHoldJudgmentMuliPlayerP32, + Message_SongChanged, NUM_Message, // leave this at the end Message_Invalid }; diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index 5cf0b37771..5f516e6fa5 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -763,6 +763,8 @@ void ScreenEdit::Init() this->HandleScreenMessage( SM_UpdateTextInfo ); m_bTextInfoNeedsUpdate = true; + + SubscribeToMessage( Message_SongChanged ); } ScreenEdit::~ScreenEdit() @@ -2365,6 +2367,15 @@ void ScreenEdit::ScrollTo( float fDestinationBeat ) m_soundChangeLine.Play(); } +void ScreenEdit::HandleMessage( const RString &sMessage ) +{ + if( sMessage == MessageToString( Message_SongChanged ) ) + { + SetDirty( true ); + } + Screen::HandleMessage( sMessage ); +} + static LocalizedString SAVE_SUCCESSFUL ( "ScreenEdit", "Save successful." ); void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenEdit.h b/stepmania/src/ScreenEdit.h index f1d06fb1c3..38dc1640a8 100644 --- a/stepmania/src/ScreenEdit.h +++ b/stepmania/src/ScreenEdit.h @@ -177,6 +177,7 @@ public: void InputRecord( const InputEventPlus &input, EditButton EditB ); void InputRecordPaused( const InputEventPlus &input, EditButton EditB ); void InputPlay( const InputEventPlus &input, EditButton EditB ); + virtual void HandleMessage( const RString& sMessage ); virtual void HandleScreenMessage( const ScreenMessage SM ); void SetDirty( bool bDirty ) { m_bDirty = bDirty; }