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:
@@ -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 );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 )
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|
||||||
|
|||||||
@@ -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 );
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ class ScreenSaveSync : public ScreenPrompt
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ScreenSaveSync( const CString &sScreenName );
|
ScreenSaveSync( const CString &sScreenName );
|
||||||
|
virtual void Init();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user