add clear, make FixedProfiles aware
This commit is contained in:
@@ -11,11 +11,12 @@
|
|||||||
#include "Profile.h"
|
#include "Profile.h"
|
||||||
#include "OptionRowHandler.h"
|
#include "OptionRowHandler.h"
|
||||||
|
|
||||||
static ThemeMetric<CString> NEW_PROFILE_DEFAULT_NAME( "ScreenOptionsManageProfiles", "NewProfileDefaultName" );
|
static ThemeMetric<CString> NEW_PROFILE_DEFAULT_NAME( "ScreenOptionsManageProfiles", "NewProfileDefaultName" );
|
||||||
|
|
||||||
AutoScreenMessage( SM_BackFromEnterNameForNew )
|
AutoScreenMessage( SM_BackFromEnterNameForNew )
|
||||||
AutoScreenMessage( SM_BackFromRename )
|
AutoScreenMessage( SM_BackFromRename )
|
||||||
AutoScreenMessage( SM_BackFromDeleteConfirm )
|
AutoScreenMessage( SM_BackFromDeleteConfirm )
|
||||||
|
AutoScreenMessage( SM_BackFromClearConfirm )
|
||||||
AutoScreenMessage( SM_BackFromContextMenu )
|
AutoScreenMessage( SM_BackFromContextMenu )
|
||||||
|
|
||||||
enum ProfileAction
|
enum ProfileAction
|
||||||
@@ -23,12 +24,14 @@ enum ProfileAction
|
|||||||
ProfileAction_Edit,
|
ProfileAction_Edit,
|
||||||
ProfileAction_Rename,
|
ProfileAction_Rename,
|
||||||
ProfileAction_Delete,
|
ProfileAction_Delete,
|
||||||
|
ProfileAction_Clear,
|
||||||
NUM_ProfileAction
|
NUM_ProfileAction
|
||||||
};
|
};
|
||||||
static const CString ProfileActionNames[] = {
|
static const CString ProfileActionNames[] = {
|
||||||
"Edit",
|
"Edit",
|
||||||
"Rename",
|
"Rename",
|
||||||
"Delete",
|
"Delete",
|
||||||
|
"Clear",
|
||||||
};
|
};
|
||||||
XToString( ProfileAction, NUM_ProfileAction );
|
XToString( ProfileAction, NUM_ProfileAction );
|
||||||
#define FOREACH_ProfileAction( i ) FOREACH_ENUM( ProfileAction, NUM_ProfileAction, i )
|
#define FOREACH_ProfileAction( i ) FOREACH_ENUM( ProfileAction, NUM_ProfileAction, i )
|
||||||
@@ -39,7 +42,9 @@ static MenuDef g_TempMenu(
|
|||||||
|
|
||||||
static bool ValidateLocalProfileName( const CString &sAnswer, CString &sErrorOut )
|
static bool ValidateLocalProfileName( const CString &sAnswer, CString &sErrorOut )
|
||||||
{
|
{
|
||||||
CString sCurrentProfileOldName = PROFILEMAN->GetLocalProfile( GAMESTATE->m_sEditLocalProfileID ).m_sDisplayName;
|
Profile *pProfile = PROFILEMAN->GetLocalProfile( GAMESTATE->m_sEditLocalProfileID );
|
||||||
|
ASSERT( pProfile );
|
||||||
|
CString sCurrentProfileOldName = pProfile->m_sDisplayName;
|
||||||
vector<CString> vsProfileNames;
|
vector<CString> vsProfileNames;
|
||||||
PROFILEMAN->GetLocalProfileDisplayNames( vsProfileNames );
|
PROFILEMAN->GetLocalProfileDisplayNames( vsProfileNames );
|
||||||
bool bAlreadyAProfileWithThisName = find( vsProfileNames.begin(), vsProfileNames.end(), sAnswer ) != vsProfileNames.end();
|
bool bAlreadyAProfileWithThisName = find( vsProfileNames.begin(), vsProfileNames.end(), sAnswer ) != vsProfileNames.end();
|
||||||
@@ -142,11 +147,12 @@ void ScreenOptionsManageProfiles::BeginScreen()
|
|||||||
|
|
||||||
FOREACH_CONST( CString, m_vsLocalProfileID, s )
|
FOREACH_CONST( CString, m_vsLocalProfileID, s )
|
||||||
{
|
{
|
||||||
Profile &profile = PROFILEMAN->GetLocalProfile( *s );
|
Profile *pProfile = PROFILEMAN->GetLocalProfile( *s );
|
||||||
|
ASSERT( pProfile );
|
||||||
|
|
||||||
def.m_sName = ssprintf( "%d", iIndex );
|
def.m_sName = ssprintf( "%d", iIndex );
|
||||||
def.m_vsChoices.clear();
|
def.m_vsChoices.clear();
|
||||||
def.m_vsChoices.push_back( profile.m_sDisplayName );
|
def.m_vsChoices.push_back( pProfile->m_sDisplayName );
|
||||||
vDefs.push_back( def );
|
vDefs.push_back( def );
|
||||||
|
|
||||||
OptionRowHandlerSimple *pHand = new OptionRowHandlerSimple;
|
OptionRowHandlerSimple *pHand = new OptionRowHandlerSimple;
|
||||||
@@ -236,12 +242,26 @@ void ScreenOptionsManageProfiles::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
SCREENMAN->SetNewScreen( this->m_sName ); // reload
|
SCREENMAN->SetNewScreen( this->m_sName ); // reload
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if( SM == SM_BackFromClearConfirm )
|
||||||
|
{
|
||||||
|
if( ScreenPrompt::s_LastAnswer == ANSWER_YES )
|
||||||
|
{
|
||||||
|
GAMESTATE->GetEditLocalProfile()->InitAll();
|
||||||
|
|
||||||
|
SCREENMAN->SetNewScreen( this->m_sName ); // reload
|
||||||
|
}
|
||||||
|
}
|
||||||
else if( SM == SM_BackFromContextMenu )
|
else if( SM == SM_BackFromContextMenu )
|
||||||
{
|
{
|
||||||
if( !ScreenMiniMenu::s_bCancelled )
|
if( !ScreenMiniMenu::s_bCancelled )
|
||||||
{
|
{
|
||||||
|
Profile *pProfile = PROFILEMAN->GetLocalProfile( GAMESTATE->m_sEditLocalProfileID );
|
||||||
|
ASSERT( pProfile );
|
||||||
|
|
||||||
switch( ScreenMiniMenu::s_iLastRowCode )
|
switch( ScreenMiniMenu::s_iLastRowCode )
|
||||||
{
|
{
|
||||||
|
default:
|
||||||
|
ASSERT(0);
|
||||||
case ProfileAction_Edit:
|
case ProfileAction_Edit:
|
||||||
{
|
{
|
||||||
GAMESTATE->m_sEditLocalProfileID.Set( GetLocalProfileIDWithFocus() );
|
GAMESTATE->m_sEditLocalProfileID.Set( GetLocalProfileIDWithFocus() );
|
||||||
@@ -251,23 +271,28 @@ void ScreenOptionsManageProfiles::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
break;
|
break;
|
||||||
case ProfileAction_Rename:
|
case ProfileAction_Rename:
|
||||||
{
|
{
|
||||||
Profile &profile = PROFILEMAN->GetLocalProfile( GAMESTATE->m_sEditLocalProfileID );
|
|
||||||
ScreenTextEntry::TextEntry(
|
ScreenTextEntry::TextEntry(
|
||||||
SM_BackFromRename,
|
SM_BackFromRename,
|
||||||
"Enter a name for the profile.",
|
"Enter a name for the profile.",
|
||||||
profile.m_sDisplayName,
|
pProfile->m_sDisplayName,
|
||||||
PROFILE_MAX_DISPLAY_NAME_LENGTH,
|
PROFILE_MAX_DISPLAY_NAME_LENGTH,
|
||||||
ValidateLocalProfileName );
|
ValidateLocalProfileName );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ProfileAction_Delete:
|
case ProfileAction_Delete:
|
||||||
{
|
{
|
||||||
Profile &profile = PROFILEMAN->GetLocalProfile( GetLocalProfileIDWithFocus() );
|
CString sTitle = pProfile->m_sDisplayName;
|
||||||
CString sTitle = profile.m_sDisplayName;
|
CString sMessage = ssprintf( "Are you sure you want to delete the profile '%s'?", sTitle.c_str() );
|
||||||
CString sMessage = ssprintf( "Are you sure you want to delete the course '%s'?", sTitle.c_str() );
|
|
||||||
ScreenPrompt::Prompt( SM_BackFromDeleteConfirm, sMessage, PROMPT_YES_NO );
|
ScreenPrompt::Prompt( SM_BackFromDeleteConfirm, sMessage, PROMPT_YES_NO );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ProfileAction_Clear:
|
||||||
|
{
|
||||||
|
CString sTitle = pProfile->m_sDisplayName;
|
||||||
|
CString sMessage = ssprintf( "Are you sure you want to clear all data in the profile '%s'?", sTitle.c_str() );
|
||||||
|
ScreenPrompt::Prompt( SM_BackFromClearConfirm, sMessage, PROMPT_YES_NO );
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -288,16 +313,6 @@ void ScreenOptionsManageProfiles::ProcessMenuStart( PlayerNumber pn, const Input
|
|||||||
|
|
||||||
if( iCurRow == 0 ) // "create new"
|
if( iCurRow == 0 ) // "create new"
|
||||||
{
|
{
|
||||||
if( PROFILEMAN->GetNumLocalProfiles() >= MAX_NUM_LOCAL_PROFILES )
|
|
||||||
{
|
|
||||||
CString s = ssprintf(
|
|
||||||
"You have %d profiles, the maximum number allowed.\n\n"
|
|
||||||
"You must delete an existing profile before creating a new profile.",
|
|
||||||
MAX_NUM_LOCAL_PROFILES );
|
|
||||||
ScreenPrompt::Prompt( SM_None, s );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
vector<CString> vsUsedNames;
|
vector<CString> vsUsedNames;
|
||||||
PROFILEMAN->GetLocalProfileDisplayNames( vsUsedNames );
|
PROFILEMAN->GetLocalProfileDisplayNames( vsUsedNames );
|
||||||
|
|
||||||
@@ -323,10 +338,20 @@ void ScreenOptionsManageProfiles::ProcessMenuStart( PlayerNumber pn, const Input
|
|||||||
else // a course
|
else // a course
|
||||||
{
|
{
|
||||||
g_TempMenu.rows.clear();
|
g_TempMenu.rows.clear();
|
||||||
FOREACH_ProfileAction( i )
|
|
||||||
|
#define ADD_ACTION( i ) \
|
||||||
|
g_TempMenu.rows.push_back( MenuRowDef( i, ProfileActionToString(i), true, EDIT_MODE_HOME, 0, "" ) );
|
||||||
|
|
||||||
|
if( PROFILEMAN->FixedProfiles() )
|
||||||
{
|
{
|
||||||
MenuRowDef mrd( i, ProfileActionToString(i), true, EDIT_MODE_HOME, 0, "" );
|
ADD_ACTION( ProfileAction_Rename );
|
||||||
g_TempMenu.rows.push_back( mrd );
|
ADD_ACTION( ProfileAction_Clear );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ADD_ACTION( ProfileAction_Edit );
|
||||||
|
ADD_ACTION( ProfileAction_Rename );
|
||||||
|
ADD_ACTION( ProfileAction_Delete );
|
||||||
}
|
}
|
||||||
|
|
||||||
int iWidth, iX, iY;
|
int iWidth, iX, iY;
|
||||||
|
|||||||
Reference in New Issue
Block a user