From a49aecd7744026ac22f44fd77bb3c2d3a682a459 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sun, 3 Jul 2005 03:49:19 +0000 Subject: [PATCH] pull ScreenPrompt init into a separate function, so it's slightly less of a special case; maybe this class's instances can be made reusable ... --- stepmania/src/ScreenManager.cpp | 3 +- stepmania/src/ScreenPrompt.cpp | 72 ++++++++++++++++---------------- stepmania/src/ScreenPrompt.h | 6 +-- stepmania/src/ScreenSaveSync.cpp | 14 +++++-- stepmania/src/ScreenSaveSync.h | 1 + 5 files changed, 49 insertions(+), 47 deletions(-) diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index d041e32bc5..df6f5a9087 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -459,8 +459,9 @@ void ScreenManager::Prompt( ScreenMessage smSendOnPop, const CString &sText, Pro m_ScreenStack.back()->HandleScreenMessage( SM_LoseFocus ); // add the new state onto the back of the array - Screen *pNewScreen = new ScreenPrompt( "ScreenPrompt", smSendOnPop, sText, type, defaultAnswer, OnYes, OnNo, pCallbackData); + ScreenPrompt *pNewScreen = new ScreenPrompt( "ScreenPrompt" ); pNewScreen->Init(); + pNewScreen->Load( smSendOnPop, sText, type, defaultAnswer, OnYes, OnNo, pCallbackData ); this->ZeroNextUpdate(); SetFromNewScreen( pNewScreen ); } diff --git a/stepmania/src/ScreenPrompt.cpp b/stepmania/src/ScreenPrompt.cpp index 12edca03cc..87e9908c56 100644 --- a/stepmania/src/ScreenPrompt.cpp +++ b/stepmania/src/ScreenPrompt.cpp @@ -1,6 +1,5 @@ #include "global.h" #include "ScreenPrompt.h" -#include "PrefsManager.h" #include "ScreenManager.h" #include "GameSoundManager.h" #include "GameConstantsAndTypes.h" @@ -16,28 +15,10 @@ bool ScreenPrompt::s_bCancelledLast = false; #define ANSWER_TEXT( elem ) THEME->GetMetric(m_sName,elem+"Text") //REGISTER_SCREEN_CLASS( ScreenPrompt ); -ScreenPrompt::ScreenPrompt( - const CString &sScreenName, - ScreenMessage smSendOnPop, - CString sText, - PromptType type, - PromptAnswer defaultAnswer, - void(*OnYes)(void*), - void(*OnNo)(void*), - void* pCallbackData - ) : +ScreenPrompt::ScreenPrompt( const CString &sScreenName ): Screen( sScreenName ) { m_bIsTransparent = true; // draw screens below us - - m_smSendOnPop = smSendOnPop; - m_sText = sText; - m_PromptType = type; - m_Answer = defaultAnswer; - CLAMP( (int&)m_Answer, 0, m_PromptType ); - m_pOnYes = OnYes; - m_pOnNo = OnNo; - m_pCallbackData = pCallbackData; } void ScreenPrompt::Init() @@ -50,29 +31,19 @@ void ScreenPrompt::Init() m_textQuestion.LoadFromFont( THEME->GetPathF(m_sName,"question") ); m_textQuestion.SetName( "Question" ); - m_textQuestion.SetText( m_sText ); - SET_XY_AND_ON_COMMAND( m_textQuestion ); this->AddChild( &m_textQuestion ); m_sprCursor.Load( THEME->GetPathG(m_sName,"cursor") ); m_sprCursor->SetName( "Cursor" ); - ON_COMMAND( m_sprCursor ); this->AddChild( m_sprCursor ); - for( int i=0; i<=m_PromptType; i++ ) + for( int i=0; iGetPathF(m_sName,"answer") ); - CString sElem = ssprintf("Answer%dOf%d", i+1, m_PromptType+1); - m_textAnswer[i].SetName( sElem ); - m_textAnswer[i].SetText( ANSWER_TEXT(sElem) ); this->AddChild( &m_textAnswer[i] ); - SET_XY_AND_ON_COMMAND( m_textAnswer[i] ); } - PositionCursor(); - m_In.Load( THEME->GetPathB(m_sName,"in") ); - m_In.StartTransitioning(); this->AddChild( &m_In ); m_Out.Load( THEME->GetPathB(m_sName,"out") ); @@ -84,14 +55,41 @@ void ScreenPrompt::Init() m_sndChange.Load( THEME->GetPathS(m_sName,"change"), true ); } -void ScreenPrompt::Update( float fDeltaTime ) +void ScreenPrompt::Load( + ScreenMessage smSendOnPop, + CString sText, + PromptType type, + PromptAnswer defaultAnswer, + void (*OnYes)(void*), + void (*OnNo)(void*), + void* pCallbackData ) { - Screen::Update( fDeltaTime ); -} + m_smSendOnPop = smSendOnPop; + m_sText = sText; + m_PromptType = type; + m_Answer = defaultAnswer; + CLAMP( (int&)m_Answer, 0, m_PromptType ); + m_pOnYes = OnYes; + m_pOnNo = OnNo; + m_pCallbackData = pCallbackData; -void ScreenPrompt::DrawPrimitives() -{ - Screen::DrawPrimitives(); + + m_textQuestion.SetText( m_sText ); + SET_XY_AND_ON_COMMAND( m_textQuestion ); + + ON_COMMAND( m_sprCursor ); + + for( int i=0; i<=m_PromptType; i++ ) + { + CString sElem = ssprintf("Answer%dOf%d", i+1, m_PromptType+1); + m_textAnswer[i].SetName( sElem ); + m_textAnswer[i].SetText( ANSWER_TEXT(sElem) ); + SET_XY_AND_ON_COMMAND( m_textAnswer[i] ); + } + + PositionCursor(); + + m_In.StartTransitioning(); } void ScreenPrompt::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) diff --git a/stepmania/src/ScreenPrompt.h b/stepmania/src/ScreenPrompt.h index 6c49f08fd2..e42ee48164 100644 --- a/stepmania/src/ScreenPrompt.h +++ b/stepmania/src/ScreenPrompt.h @@ -17,8 +17,7 @@ class ScreenPrompt : public Screen public: ScreenPrompt( const CString &sScreenName ); virtual void Init(); - ScreenPrompt( - const CString &sScreenName, + void Load( ScreenMessage smSendOnPop, CString sText, PromptType type = PROMPT_OK, @@ -27,9 +26,6 @@ public: void(*OnNo)(void*) = NULL, void* pCallbackData = NULL ); - - virtual void Update( float fDeltaTime ); - virtual void DrawPrimitives(); virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); virtual void HandleScreenMessage( const ScreenMessage SM ); diff --git a/stepmania/src/ScreenSaveSync.cpp b/stepmania/src/ScreenSaveSync.cpp index 6b9cffc426..83f5b6c5c7 100644 --- a/stepmania/src/ScreenSaveSync.cpp +++ b/stepmania/src/ScreenSaveSync.cpp @@ -108,16 +108,22 @@ static void RevertSyncChanges( void* pThrowAway ) REGISTER_SCREEN_CLASS( ScreenSaveSync ); ScreenSaveSync::ScreenSaveSync( const CString &sScreenName ) : - ScreenPrompt( - sScreenName, + ScreenPrompt( sScreenName ) +{ +} + +void ScreenSaveSync::Init() +{ + ScreenPrompt::Init(); + + Load( SM_None, GetPromptText(), PROMPT_YES_NO, ANSWER_YES, SaveSyncChanges, RevertSyncChanges, - NULL ) -{ + NULL ); } diff --git a/stepmania/src/ScreenSaveSync.h b/stepmania/src/ScreenSaveSync.h index e5b41d3b8a..4aa32c2c32 100644 --- a/stepmania/src/ScreenSaveSync.h +++ b/stepmania/src/ScreenSaveSync.h @@ -9,6 +9,7 @@ class ScreenSaveSync : public ScreenPrompt { public: ScreenSaveSync( const CString &sScreenName ); + virtual void Init(); };