From f03a9838869dbac0102e96ef9e06ad3cd841a0e6 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sun, 14 Aug 2005 00:47:04 +0000 Subject: [PATCH] refactor to support preloading; load this (almost) like any other screen --- stepmania/src/ScreenTextEntry.cpp | 73 ++++++++++++++----------------- stepmania/src/ScreenTextEntry.h | 15 ------- 2 files changed, 32 insertions(+), 56 deletions(-) diff --git a/stepmania/src/ScreenTextEntry.cpp b/stepmania/src/ScreenTextEntry.cpp index 0253342e95..72b1725465 100644 --- a/stepmania/src/ScreenTextEntry.cpp +++ b/stepmania/src/ScreenTextEntry.cpp @@ -28,6 +28,18 @@ static Preference g_bAllowOldKeyboardInput( "AllowOldKeyboardInput", true CString ScreenTextEntry::s_sLastAnswer = ""; +/* Settings: */ +namespace +{ + CString g_sQuestion; + CString g_sInitialAnswer; + int g_iMaxInputLength; + bool(*g_pValidate)(const CString &sAnswer,CString &sErrorOut); + void(*g_pOnOK)(const CString &sAnswer); + void(*g_pOnCancel)(); + bool g_bPassword; +}; + void ScreenTextEntry::TextEntry( ScreenMessage smSendOnPop, CString sQuestion, @@ -39,20 +51,15 @@ void ScreenTextEntry::TextEntry( bool bPassword ) { - // add the new state onto the back of the array - ScreenTextEntry *pNewScreen = new ScreenTextEntry( "ScreenTextEntry" ); - pNewScreen->Init(); - pNewScreen->LoadMenu( - sQuestion, - sInitialAnswer, - iMaxInputLength, - Validate, - OnOK, - OnCancel, - bPassword ); + g_sQuestion = sQuestion; + g_sInitialAnswer = sInitialAnswer; + g_iMaxInputLength = iMaxInputLength; + g_pValidate = Validate; + g_pOnOK = OnOK; + g_pOnCancel = OnCancel; + g_bPassword = bPassword; - SCREENMAN->ZeroNextUpdate(); - SCREENMAN->PushScreen( pNewScreen, true, smSendOnPop ); + SCREENMAN->AddNewScreenToTop( "ScreenTextEntry", smSendOnPop ); } bool ScreenTextEntry::s_bCancelledLast = false; @@ -64,7 +71,7 @@ bool ScreenTextEntry::s_bCancelledLast = false; * XXX: Don't allow internal-use codepoints (above 0xFFFF); those are * subject to change and shouldn't be written to disk. */ -//REGISTER_SCREEN_CLASS( ScreenTextEntry ); +REGISTER_SCREEN_CLASS( ScreenTextEntry ); ScreenTextEntry::ScreenTextEntry( CString sClassName ) : ScreenWithMenuElements( sClassName ) @@ -112,29 +119,13 @@ ScreenTextEntry::~ScreenTextEntry() { } -void ScreenTextEntry::LoadMenu( - CString sQuestion, - CString sInitialAnswer, - int iMaxInputLength, - bool(*Validate)(const CString &sAnswer,CString &sErrorOut), - void(*OnOK)(const CString &sAnswer), - void(*OnCancel)(), - bool bPassword ) -{ - m_sQuestion = sQuestion; - m_sAnswer = CStringToWstring( sInitialAnswer ); - m_iMaxInputLength = iMaxInputLength; - m_pValidate = Validate; - m_pOnOK = OnOK; - m_pOnCancel = OnCancel; - m_bPassword = bPassword; -} - void ScreenTextEntry::BeginScreen() { + m_sAnswer = CStringToWstring( g_sInitialAnswer ); + ScreenWithMenuElements::BeginScreen(); - m_textQuestion.SetText( m_sQuestion ); + m_textQuestion.SetText( g_sQuestion ); SET_XY_AND_ON_COMMAND( m_textQuestion ); SET_XY_AND_ON_COMMAND( m_sprAnswerBox ); SET_XY_AND_ON_COMMAND( m_textAnswer ); @@ -177,7 +168,7 @@ void ScreenTextEntry::UpdateKeyboardText() void ScreenTextEntry::UpdateAnswerText() { CString txt = WStringToCString(m_sAnswer); - if( m_bPassword ) + if( g_bPassword ) { int len = txt.GetLength(); txt = ""; @@ -309,7 +300,7 @@ void ScreenTextEntry::MoveY( int iDir ) void ScreenTextEntry::AppendToAnswer( CString s ) { wstring sNewAnswer = m_sAnswer+CStringToWstring(s); - if( (int)sNewAnswer.length() > m_iMaxInputLength ) + if( (int)sNewAnswer.length() > g_iMaxInputLength ) { SCREENMAN->PlayInvalidSound(); return; @@ -366,8 +357,8 @@ void ScreenTextEntry::End( bool bCancelled ) { if( bCancelled ) { - if( m_pOnCancel ) - m_pOnCancel(); + if( g_pOnCancel ) + g_pOnCancel(); m_Cancel.StartTransitioning( SM_GoToNextScreen ); } @@ -375,9 +366,9 @@ void ScreenTextEntry::End( bool bCancelled ) { CString sAnswer = WStringToCString(m_sAnswer); CString sError; - if ( m_pValidate != NULL ) + if ( g_pValidate != NULL ) { - bool bValidAnswer = m_pValidate( sAnswer, sError ); + bool bValidAnswer = g_pValidate( sAnswer, sError ); if( !bValidAnswer ) { ScreenPrompt::Prompt( SM_None, sError ); @@ -385,11 +376,11 @@ void ScreenTextEntry::End( bool bCancelled ) } } - if( m_pOnOK ) + if( g_pOnOK ) { CString ret = WStringToCString(m_sAnswer); FontCharAliases::ReplaceMarkers(ret); - m_pOnOK( ret ); + g_pOnOK( ret ); } m_Out.StartTransitioning( SM_GoToNextScreen ); diff --git a/stepmania/src/ScreenTextEntry.h b/stepmania/src/ScreenTextEntry.h index ce4457f847..f2eb5f8ed2 100644 --- a/stepmania/src/ScreenTextEntry.h +++ b/stepmania/src/ScreenTextEntry.h @@ -45,15 +45,6 @@ public: virtual void Init(); virtual void BeginScreen(); - void LoadMenu( - CString sQuestion, - CString sInitialAnswer, - int iMaxInputLength, - bool(*Validate)(const CString &sAnswer,CString &sErrorOut) = NULL, - void(*OnOK)(const CString &sAnswer) = NULL, - void(*OnCanel)() = NULL, - bool bPassword = false ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); static CString s_sLastAnswer; @@ -78,16 +69,10 @@ protected: void UpdateKeyboardText(); void UpdateAnswerText(); - CString m_sQuestion; - int m_iMaxInputLength; - bool m_bPassword; BitmapText m_textQuestion; AutoActor m_sprAnswerBox; wstring m_sAnswer; BitmapText m_textAnswer; - bool(*m_pValidate)( const CString &sAnswer, CString &sErrorOut ); - void(*m_pOnOK)( const CString &sAnswer ); - void(*m_pOnCancel)(); AutoActor m_sprCursor;