Files
itgmania212121/stepmania/src/ScreenProfileOptions.cpp
T

229 lines
7.0 KiB
C++
Raw Normal View History

#include "global.h"
/*
-----------------------------------------------------------------------------
Class: ScreenProfileOptions
Desc: See header.
Copyright (c) 2001-2003 by the person(s) listed below. All rights reserved.
Chris Danford
Chris POmez
-----------------------------------------------------------------------------
*/
#include "ScreenProfileOptions.h"
#include "RageLog.h"
#include "ProfileManager.h"
#include "RageSounds.h"
#include "ThemeManager.h"
#include "PrefsManager.h"
#include "ScreenManager.h"
2003-11-01 19:36:52 +00:00
#include "ScreenTextEntry.h"
#include "ScreenPrompt.h"
enum {
PO_PLAYER1,
PO_PLAYER2,
PO_CREATE_NEW,
PO_DELETE_,
2003-09-08 07:21:41 +00:00
PO_RENAME_,
PO_OS_MOUNT_1,
PO_OS_MOUNT_2,
2003-09-30 05:25:47 +00:00
NUM_PROFILE_OPTIONS_LINES
};
OptionRowData g_ProfileOptionsLines[NUM_PROFILE_OPTIONS_LINES] = {
OptionRowData( "Player1\nProfile", true ),
OptionRowData( "Player2\nProfile", true ),
OptionRowData( "Create\nNew", true, "PRESS START" ),
OptionRowData( "Delete", true ),
OptionRowData( "Rename", true ),
OptionRowData( "OS Mount\nPlayer1", true, "" ),
OptionRowData( "OS Mount\nPlayer2", true, "" ),
};
2003-11-01 19:36:52 +00:00
const ScreenMessage SM_DoneCreating = ScreenMessage(SM_User+1);
const ScreenMessage SM_DoneRenaming = ScreenMessage(SM_User+2);
const ScreenMessage SM_DoneDeleting = ScreenMessage(SM_User+3);
2003-09-27 22:30:51 +00:00
ScreenProfileOptions::ScreenProfileOptions( CString sClassName ) : ScreenOptions( sClassName )
{
LOG->Trace( "ScreenProfileOptions::ScreenProfileOptions()" );
g_ProfileOptionsLines[PO_PLAYER1].choices.clear();
2003-09-08 07:21:41 +00:00
g_ProfileOptionsLines[PO_PLAYER1].choices.push_back( "-NONE-" );
2003-12-07 08:19:10 +00:00
PROFILEMAN->GetLocalProfileNames( g_ProfileOptionsLines[PO_PLAYER1].choices );
g_ProfileOptionsLines[PO_PLAYER2].choices.clear();
2003-09-08 07:21:41 +00:00
g_ProfileOptionsLines[PO_PLAYER2].choices.push_back( "-NONE-" );
2003-12-07 08:19:10 +00:00
PROFILEMAN->GetLocalProfileNames( g_ProfileOptionsLines[PO_PLAYER2].choices );
g_ProfileOptionsLines[PO_DELETE_].choices.clear();
2003-09-08 07:21:41 +00:00
g_ProfileOptionsLines[PO_DELETE_].choices.push_back( "-NONE-" );
2003-12-07 08:19:10 +00:00
PROFILEMAN->GetLocalProfileNames( g_ProfileOptionsLines[PO_DELETE_].choices );
2003-09-08 07:21:41 +00:00
g_ProfileOptionsLines[PO_RENAME_].choices.clear();
g_ProfileOptionsLines[PO_RENAME_].choices.push_back( "-NONE-" );
2003-12-07 08:19:10 +00:00
PROFILEMAN->GetLocalProfileNames( g_ProfileOptionsLines[PO_RENAME_].choices );
if( PREFSMAN->m_sMemoryCardOsMountPoint[PLAYER_1].empty() )
g_ProfileOptionsLines[PO_OS_MOUNT_1].choices[0] = "-NOT SET IN INI-";
2003-11-01 22:04:43 +00:00
else
g_ProfileOptionsLines[PO_OS_MOUNT_1].choices[0] = PREFSMAN->m_sMemoryCardOsMountPoint[PLAYER_1];
2003-11-01 22:04:43 +00:00
if( PREFSMAN->m_sMemoryCardOsMountPoint[PLAYER_2].empty() )
g_ProfileOptionsLines[PO_OS_MOUNT_2].choices[0] = "-NOT SET IN INI-";
2003-11-01 22:04:43 +00:00
else
g_ProfileOptionsLines[PO_OS_MOUNT_2].choices[0] = PREFSMAN->m_sMemoryCardOsMountPoint[PLAYER_2];
2003-11-01 22:04:43 +00:00
Init(
INPUTMODE_TOGETHER,
g_ProfileOptionsLines,
NUM_PROFILE_OPTIONS_LINES );
SOUND->PlayMusic( THEME->GetPathToS("ScreenMachineOptions music") );
}
void ScreenProfileOptions::ImportOptions()
{
2003-09-08 07:21:41 +00:00
vector<CString> vsProfiles;
2003-12-07 08:19:10 +00:00
PROFILEMAN->GetLocalProfileIDs( vsProfiles );
2003-09-08 07:21:41 +00:00
CStringArray::iterator iter;
iter = find(
2003-09-08 07:21:41 +00:00
vsProfiles.begin(),
vsProfiles.end(),
2003-12-07 08:19:10 +00:00
PREFSMAN->m_sDefaultLocalProfileID[PLAYER_1] );
2003-09-08 07:21:41 +00:00
if( iter != vsProfiles.end() )
m_Rows[PO_PLAYER1]->SetOneSharedSelection( iter - vsProfiles.begin() + 1 );
iter = find(
2003-09-08 07:21:41 +00:00
vsProfiles.begin(),
vsProfiles.end(),
2003-12-07 08:19:10 +00:00
PREFSMAN->m_sDefaultLocalProfileID[PLAYER_2] );
2003-09-08 07:21:41 +00:00
if( iter != vsProfiles.end() )
m_Rows[PO_PLAYER2]->SetOneSharedSelection( iter - vsProfiles.begin() + 1 );
}
void ScreenProfileOptions::ExportOptions()
{
2003-09-08 07:21:41 +00:00
vector<CString> vsProfiles;
2003-12-07 08:19:10 +00:00
PROFILEMAN->GetLocalProfileIDs( vsProfiles );
2003-09-08 07:21:41 +00:00
if( m_Rows[PO_PLAYER1]->GetOneSharedSelection() > 0 )
PREFSMAN->m_sDefaultLocalProfileID[PLAYER_1] = vsProfiles[m_Rows[PO_PLAYER1]->GetOneSharedSelection()-1];
2003-09-08 07:21:41 +00:00
else
2003-12-07 08:19:10 +00:00
PREFSMAN->m_sDefaultLocalProfileID[PLAYER_1] = "";
2003-09-08 07:21:41 +00:00
if( m_Rows[PO_PLAYER2]->GetOneSharedSelection() > 0 )
PREFSMAN->m_sDefaultLocalProfileID[PLAYER_2] = vsProfiles[m_Rows[PO_PLAYER2]->GetOneSharedSelection()-1];
2003-09-08 07:21:41 +00:00
else
2003-12-07 08:19:10 +00:00
PREFSMAN->m_sDefaultLocalProfileID[PLAYER_2] = "";
}
void ScreenProfileOptions::GoToPrevState()
{
SCREENMAN->SetNewScreen( "ScreenOptionsMenu" );
}
void ScreenProfileOptions::GoToNextState()
{
PREFSMAN->SaveGlobalPrefsToDisk();
GoToPrevState();
}
2003-09-08 07:21:41 +00:00
2003-11-01 19:36:52 +00:00
void ScreenProfileOptions::HandleScreenMessage( const ScreenMessage SM )
2003-09-08 07:21:41 +00:00
{
2003-11-01 19:36:52 +00:00
switch( SM )
2003-09-08 07:21:41 +00:00
{
2003-11-01 19:36:52 +00:00
case SM_DoneCreating:
2004-01-01 01:33:34 +00:00
if( !ScreenTextEntry::s_bCancelledLast && ScreenTextEntry::s_sLastAnswer != "" )
2003-09-08 07:21:41 +00:00
{
2003-11-01 22:04:43 +00:00
CString sNewName = ScreenTextEntry::s_sLastAnswer;
2003-12-07 08:19:10 +00:00
bool bResult = PROFILEMAN->CreateLocalProfile( sNewName );
2003-11-01 19:36:52 +00:00
if( bResult )
SCREENMAN->SetNewScreen( "ScreenProfileOptions" ); // reload
2003-09-08 07:21:41 +00:00
else
2003-11-01 22:04:43 +00:00
SCREENMAN->Prompt( SM_None, ssprintf("Error creating profile '%s'.", sNewName.c_str()) );
2003-09-08 07:21:41 +00:00
}
break;
2003-11-01 19:36:52 +00:00
case SM_DoneRenaming:
if( !ScreenTextEntry::s_bCancelledLast )
2003-09-08 07:21:41 +00:00
{
2003-12-16 07:20:45 +00:00
CString sProfileID = GetSelectedProfileID();
CString sName = GetSelectedProfileName();
2003-11-01 19:36:52 +00:00
CString sNewName = ScreenTextEntry::s_sLastAnswer;
2003-12-07 08:19:10 +00:00
bool bResult = PROFILEMAN->RenameLocalProfile( sProfileID, sNewName );
2003-11-01 19:36:52 +00:00
if( bResult )
SCREENMAN->SetNewScreen( "ScreenProfileOptions" ); // reload
2003-09-08 07:21:41 +00:00
else
2003-11-01 19:36:52 +00:00
SCREENMAN->Prompt( SM_None, ssprintf("Error renaming profile %s '%s'\nto '%s'.", sProfileID.c_str(), sName.c_str(), sNewName.c_str()) );
2003-09-08 07:21:41 +00:00
}
break;
2003-11-01 19:36:52 +00:00
case SM_DoneDeleting:
if( ScreenPrompt::s_bLastAnswer )
{
2003-12-16 07:20:45 +00:00
CString sProfileID = GetSelectedProfileID();
CString sName = GetSelectedProfileName();
2003-12-07 08:19:10 +00:00
bool bResult = PROFILEMAN->DeleteLocalProfile( sProfileID );
2003-11-01 19:36:52 +00:00
if( bResult )
SCREENMAN->SetNewScreen( "ScreenProfileOptions" ); // reload
else
SCREENMAN->Prompt( SM_None, ssprintf("Error deleting profile %s '%s'.", sName.c_str(), sProfileID.c_str()) );
}
break;
}
ScreenOptions::HandleScreenMessage( SM );
}
void ScreenProfileOptions::MenuStart( PlayerNumber pn, const InputEventType type )
2003-11-01 19:36:52 +00:00
{
CString sProfileID = GetSelectedProfileID();
CString sName = GetSelectedProfileName();
switch( GetCurrentRow() )
{
case PO_CREATE_NEW:
SCREENMAN->TextEntry( SM_DoneCreating, "Enter a profile name", "", NULL );
break;
case PO_DELETE_:
if( sProfileID=="" )
SOUND->PlayOnce( THEME->GetPathToS("common invalid") );
else
SCREENMAN->Prompt( SM_DoneDeleting, ssprintf("Delete profile %s '%s'?",sProfileID.c_str(),sName.c_str()), true );
break;
case PO_RENAME_:
if( sProfileID=="" )
SOUND->PlayOnce( THEME->GetPathToS("common invalid") );
else
SCREENMAN->TextEntry( SM_DoneRenaming, ssprintf("Rename profile %s '%s'",sProfileID.c_str(),sName.c_str()), sName, NULL );
break;
2003-09-08 07:21:41 +00:00
default:
ScreenOptions::MenuStart( pn, type );
2003-09-08 07:21:41 +00:00
}
}
2003-11-01 19:36:52 +00:00
CString ScreenProfileOptions::GetSelectedProfileID()
{
vector<CString> vsProfiles;
2003-12-07 08:19:10 +00:00
PROFILEMAN->GetLocalProfileIDs( vsProfiles );
2003-11-01 19:36:52 +00:00
if( m_Rows[GetCurrentRow()]->GetOneSharedSelection() )
2003-11-01 19:36:52 +00:00
return "";
else
return vsProfiles[ m_Rows[GetCurrentRow()]->GetOneSharedSelection()-1];
2003-11-01 19:36:52 +00:00
}
CString ScreenProfileOptions::GetSelectedProfileName()
{
if( m_Rows[GetCurrentRow()]->GetOneSharedSelection() )
2003-11-01 19:36:52 +00:00
return "";
else
return g_ProfileOptionsLines[PO_PLAYER1].choices[ m_Rows[GetCurrentRow()]->GetOneSharedSelection() ];
2003-11-01 19:36:52 +00:00
}