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 ...
This commit is contained in:
Glenn Maynard
2005-07-03 03:49:19 +00:00
parent 5bdae4fa35
commit a49aecd774
5 changed files with 49 additions and 47 deletions
+2 -1
View File
@@ -459,8 +459,9 @@ void ScreenManager::Prompt( ScreenMessage smSendOnPop, const CString &sText, Pro
m_ScreenStack.back()->HandleScreenMessage( SM_LoseFocus ); m_ScreenStack.back()->HandleScreenMessage( SM_LoseFocus );
// add the new state onto the back of the array // 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->Init();
pNewScreen->Load( smSendOnPop, sText, type, defaultAnswer, OnYes, OnNo, pCallbackData );
this->ZeroNextUpdate(); this->ZeroNextUpdate();
SetFromNewScreen( pNewScreen ); SetFromNewScreen( pNewScreen );
} }
+35 -37
View File
@@ -1,6 +1,5 @@
#include "global.h" #include "global.h"
#include "ScreenPrompt.h" #include "ScreenPrompt.h"
#include "PrefsManager.h"
#include "ScreenManager.h" #include "ScreenManager.h"
#include "GameSoundManager.h" #include "GameSoundManager.h"
#include "GameConstantsAndTypes.h" #include "GameConstantsAndTypes.h"
@@ -16,28 +15,10 @@ bool ScreenPrompt::s_bCancelledLast = false;
#define ANSWER_TEXT( elem ) THEME->GetMetric(m_sName,elem+"Text") #define ANSWER_TEXT( elem ) THEME->GetMetric(m_sName,elem+"Text")
//REGISTER_SCREEN_CLASS( ScreenPrompt ); //REGISTER_SCREEN_CLASS( ScreenPrompt );
ScreenPrompt::ScreenPrompt( ScreenPrompt::ScreenPrompt( const CString &sScreenName ):
const CString &sScreenName,
ScreenMessage smSendOnPop,
CString sText,
PromptType type,
PromptAnswer defaultAnswer,
void(*OnYes)(void*),
void(*OnNo)(void*),
void* pCallbackData
) :
Screen( sScreenName ) Screen( sScreenName )
{ {
m_bIsTransparent = true; // draw screens below us 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() void ScreenPrompt::Init()
@@ -50,29 +31,19 @@ void ScreenPrompt::Init()
m_textQuestion.LoadFromFont( THEME->GetPathF(m_sName,"question") ); m_textQuestion.LoadFromFont( THEME->GetPathF(m_sName,"question") );
m_textQuestion.SetName( "Question" ); m_textQuestion.SetName( "Question" );
m_textQuestion.SetText( m_sText );
SET_XY_AND_ON_COMMAND( m_textQuestion );
this->AddChild( &m_textQuestion ); this->AddChild( &m_textQuestion );
m_sprCursor.Load( THEME->GetPathG(m_sName,"cursor") ); m_sprCursor.Load( THEME->GetPathG(m_sName,"cursor") );
m_sprCursor->SetName( "Cursor" ); m_sprCursor->SetName( "Cursor" );
ON_COMMAND( m_sprCursor );
this->AddChild( m_sprCursor ); this->AddChild( m_sprCursor );
for( int i=0; i<=m_PromptType; i++ ) for( int i=0; i<NUM_PROMPT_ANSWERS; i++ )
{ {
m_textAnswer[i].LoadFromFont( THEME->GetPathF(m_sName,"answer") ); m_textAnswer[i].LoadFromFont( THEME->GetPathF(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] ); this->AddChild( &m_textAnswer[i] );
SET_XY_AND_ON_COMMAND( m_textAnswer[i] );
} }
PositionCursor();
m_In.Load( THEME->GetPathB(m_sName,"in") ); m_In.Load( THEME->GetPathB(m_sName,"in") );
m_In.StartTransitioning();
this->AddChild( &m_In ); this->AddChild( &m_In );
m_Out.Load( THEME->GetPathB(m_sName,"out") ); m_Out.Load( THEME->GetPathB(m_sName,"out") );
@@ -84,14 +55,41 @@ void ScreenPrompt::Init()
m_sndChange.Load( THEME->GetPathS(m_sName,"change"), true ); 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()
{ m_textQuestion.SetText( m_sText );
Screen::DrawPrimitives(); 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 ) void ScreenPrompt::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
+1 -5
View File
@@ -17,8 +17,7 @@ class ScreenPrompt : public Screen
public: public:
ScreenPrompt( const CString &sScreenName ); ScreenPrompt( const CString &sScreenName );
virtual void Init(); virtual void Init();
ScreenPrompt( void Load(
const CString &sScreenName,
ScreenMessage smSendOnPop, ScreenMessage smSendOnPop,
CString sText, CString sText,
PromptType type = PROMPT_OK, PromptType type = PROMPT_OK,
@@ -27,9 +26,6 @@ public:
void(*OnNo)(void*) = NULL, void(*OnNo)(void*) = NULL,
void* pCallbackData = 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 Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void HandleScreenMessage( const ScreenMessage SM );
+10 -4
View File
@@ -108,16 +108,22 @@ static void RevertSyncChanges( void* pThrowAway )
REGISTER_SCREEN_CLASS( ScreenSaveSync ); REGISTER_SCREEN_CLASS( ScreenSaveSync );
ScreenSaveSync::ScreenSaveSync( const CString &sScreenName ) : ScreenSaveSync::ScreenSaveSync( const CString &sScreenName ) :
ScreenPrompt( ScreenPrompt( sScreenName )
sScreenName, {
}
void ScreenSaveSync::Init()
{
ScreenPrompt::Init();
Load(
SM_None, SM_None,
GetPromptText(), GetPromptText(),
PROMPT_YES_NO, PROMPT_YES_NO,
ANSWER_YES, ANSWER_YES,
SaveSyncChanges, SaveSyncChanges,
RevertSyncChanges, RevertSyncChanges,
NULL ) NULL );
{
} }
+1
View File
@@ -9,6 +9,7 @@ class ScreenSaveSync : public ScreenPrompt
{ {
public: public:
ScreenSaveSync( const CString &sScreenName ); ScreenSaveSync( const CString &sScreenName );
virtual void Init();
}; };