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 );
// 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 );
}
+35 -37
View File
@@ -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; i<NUM_PROMPT_ANSWERS; i++ )
{
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] );
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 )
+1 -5
View File
@@ -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 );
+10 -4
View File
@@ -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 );
}
+1
View File
@@ -9,6 +9,7 @@ class ScreenSaveSync : public ScreenPrompt
{
public:
ScreenSaveSync( const CString &sScreenName );
virtual void Init();
};