2003-09-08 03:26:58 +00:00
|
|
|
#include "global.h"
|
|
|
|
|
#include "ScreenProfileOptions.h"
|
|
|
|
|
#include "RageLog.h"
|
|
|
|
|
#include "ProfileManager.h"
|
2004-07-08 00:10:34 +00:00
|
|
|
#include "GameSoundManager.h"
|
2003-09-08 03:26:58 +00:00
|
|
|
#include "ThemeManager.h"
|
|
|
|
|
#include "PrefsManager.h"
|
|
|
|
|
#include "ScreenManager.h"
|
2003-11-01 19:36:52 +00:00
|
|
|
#include "ScreenTextEntry.h"
|
|
|
|
|
#include "ScreenPrompt.h"
|
2004-11-26 23:33:07 +00:00
|
|
|
#include "VirtualKeyboard.h"
|
2004-10-25 12:40:05 +00:00
|
|
|
|
2003-09-08 03:26:58 +00:00
|
|
|
|
2003-09-30 11:32:06 +00:00
|
|
|
enum {
|
2003-09-08 03:26:58 +00:00
|
|
|
PO_PLAYER1,
|
|
|
|
|
PO_PLAYER2,
|
|
|
|
|
PO_CREATE_NEW,
|
|
|
|
|
PO_DELETE_,
|
2003-09-08 07:21:41 +00:00
|
|
|
PO_RENAME_,
|
2003-12-19 08:51:47 +00:00
|
|
|
PO_OS_MOUNT_1,
|
|
|
|
|
PO_OS_MOUNT_2,
|
2003-09-30 05:25:47 +00:00
|
|
|
NUM_PROFILE_OPTIONS_LINES
|
2003-09-08 03:26:58 +00:00
|
|
|
};
|
|
|
|
|
|
2004-01-10 05:09:51 +00:00
|
|
|
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-09-08 03:26:58 +00:00
|
|
|
};
|
|
|
|
|
|
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);
|
|
|
|
|
|
2004-11-26 17:28:47 +00:00
|
|
|
REGISTER_SCREEN_CLASS( ScreenProfileOptions );
|
2003-09-27 22:30:51 +00:00
|
|
|
ScreenProfileOptions::ScreenProfileOptions( CString sClassName ) : ScreenOptions( sClassName )
|
2003-09-08 03:26:58 +00:00
|
|
|
{
|
|
|
|
|
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 );
|
2003-09-08 03:26:58 +00:00
|
|
|
|
|
|
|
|
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 );
|
2003-09-08 03:26:58 +00:00
|
|
|
|
|
|
|
|
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 );
|
2003-09-08 03:26:58 +00:00
|
|
|
|
2003-12-19 08:51:47 +00:00
|
|
|
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
|
2003-12-19 08:51:47 +00:00
|
|
|
g_ProfileOptionsLines[PO_OS_MOUNT_1].choices[0] = PREFSMAN->m_sMemoryCardOsMountPoint[PLAYER_1];
|
2003-11-01 22:04:43 +00:00
|
|
|
|
2003-12-19 08:51:47 +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
|
2003-12-19 08:51:47 +00:00
|
|
|
g_ProfileOptionsLines[PO_OS_MOUNT_2].choices[0] = PREFSMAN->m_sMemoryCardOsMountPoint[PLAYER_2];
|
2003-11-01 22:04:43 +00:00
|
|
|
|
2003-09-08 03:26:58 +00:00
|
|
|
Init(
|
2004-03-14 18:53:19 +00:00
|
|
|
INPUTMODE_SHARE_CURSOR,
|
2003-09-08 03:26:58 +00:00
|
|
|
g_ProfileOptionsLines,
|
2003-11-05 07:46:20 +00:00
|
|
|
NUM_PROFILE_OPTIONS_LINES );
|
2003-09-08 03:26:58 +00:00
|
|
|
|
|
|
|
|
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
|
|
|
|
2003-09-08 03:26:58 +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() )
|
2004-01-10 08:05:20 +00:00
|
|
|
m_Rows[PO_PLAYER1]->SetOneSharedSelection( iter - vsProfiles.begin() + 1 );
|
2003-09-08 03:26:58 +00:00
|
|
|
|
|
|
|
|
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() )
|
2004-01-10 08:05:20 +00:00
|
|
|
m_Rows[PO_PLAYER2]->SetOneSharedSelection( iter - vsProfiles.begin() + 1 );
|
2003-09-08 03:26:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
2004-01-10 08:05:20 +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
|
|
|
|
2004-01-10 08:05:20 +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] = "";
|
2003-09-08 03:26:58 +00:00
|
|
|
}
|
|
|
|
|
|
2004-12-05 11:59:39 +00:00
|
|
|
void ScreenProfileOptions::GoToPrevScreen()
|
2003-09-08 03:26:58 +00:00
|
|
|
{
|
|
|
|
|
SCREENMAN->SetNewScreen( "ScreenOptionsMenu" );
|
|
|
|
|
}
|
|
|
|
|
|
2004-12-05 11:59:39 +00:00
|
|
|
void ScreenProfileOptions::GoToNextScreen()
|
2003-09-08 03:26:58 +00:00
|
|
|
{
|
|
|
|
|
PREFSMAN->SaveGlobalPrefsToDisk();
|
2004-12-05 11:59:39 +00:00
|
|
|
GoToPrevScreen();
|
2003-09-08 03:26:58 +00:00
|
|
|
}
|
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 );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2003-11-25 21:53:56 +00:00
|
|
|
void ScreenProfileOptions::MenuStart( PlayerNumber pn, const InputEventType type )
|
2003-11-01 19:36:52 +00:00
|
|
|
{
|
|
|
|
|
switch( GetCurrentRow() )
|
|
|
|
|
{
|
|
|
|
|
case PO_CREATE_NEW:
|
2004-10-25 12:40:05 +00:00
|
|
|
|
2004-11-26 23:33:07 +00:00
|
|
|
VIRTUALKB.Reset(VKMODE_PROFILE); // set the xbox virtual keyboard to profile mode
|
2004-10-25 12:40:05 +00:00
|
|
|
|
2003-11-01 19:36:52 +00:00
|
|
|
SCREENMAN->TextEntry( SM_DoneCreating, "Enter a profile name", "", NULL );
|
|
|
|
|
break;
|
|
|
|
|
case PO_DELETE_:
|
2004-01-13 07:07:47 +00:00
|
|
|
{
|
|
|
|
|
const CString sProfileID = GetSelectedProfileID();
|
|
|
|
|
const CString sName = GetSelectedProfileName();
|
|
|
|
|
|
2003-11-01 19:36:52 +00:00
|
|
|
if( sProfileID=="" )
|
2004-05-01 23:28:53 +00:00
|
|
|
SCREENMAN->PlayInvalidSound();
|
2003-11-01 19:36:52 +00:00
|
|
|
else
|
|
|
|
|
SCREENMAN->Prompt( SM_DoneDeleting, ssprintf("Delete profile %s '%s'?",sProfileID.c_str(),sName.c_str()), true );
|
|
|
|
|
break;
|
2004-01-13 07:07:47 +00:00
|
|
|
}
|
2003-11-01 19:36:52 +00:00
|
|
|
case PO_RENAME_:
|
2004-01-13 07:07:47 +00:00
|
|
|
{
|
|
|
|
|
const CString sProfileID = GetSelectedProfileID();
|
|
|
|
|
const CString sName = GetSelectedProfileName();
|
|
|
|
|
|
2003-11-01 19:36:52 +00:00
|
|
|
if( sProfileID=="" )
|
2004-05-01 23:28:53 +00:00
|
|
|
SCREENMAN->PlayInvalidSound();
|
2003-11-01 19:36:52 +00:00
|
|
|
else
|
|
|
|
|
SCREENMAN->TextEntry( SM_DoneRenaming, ssprintf("Rename profile %s '%s'",sProfileID.c_str(),sName.c_str()), sName, NULL );
|
|
|
|
|
break;
|
2004-01-13 07:07:47 +00:00
|
|
|
}
|
2003-09-08 07:21:41 +00:00
|
|
|
default:
|
2003-11-25 21:53:56 +00:00
|
|
|
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
|
|
|
|
2004-01-13 07:07:47 +00:00
|
|
|
const Row &row = *m_Rows[GetCurrentRow()];
|
|
|
|
|
const int Selection = row.GetOneSharedSelection();
|
|
|
|
|
if( !Selection )
|
2003-11-01 19:36:52 +00:00
|
|
|
return "";
|
2004-01-13 07:07:47 +00:00
|
|
|
return vsProfiles[ Selection-1 ];
|
2003-11-01 19:36:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString ScreenProfileOptions::GetSelectedProfileName()
|
|
|
|
|
{
|
2004-01-13 07:07:47 +00:00
|
|
|
const Row &row = *m_Rows[GetCurrentRow()];
|
|
|
|
|
const int Selection = row.GetOneSharedSelection();
|
|
|
|
|
if( !Selection )
|
2003-11-01 19:36:52 +00:00
|
|
|
return "";
|
2004-01-13 07:07:47 +00:00
|
|
|
return g_ProfileOptionsLines[PO_PLAYER1].choices[ Selection ];
|
2003-11-01 19:36:52 +00:00
|
|
|
}
|
|
|
|
|
|
2004-06-08 05:22:33 +00:00
|
|
|
/*
|
|
|
|
|
* (c) 2001-2004 Chris Danford
|
|
|
|
|
* All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
|
* copy of this software and associated documentation files (the
|
|
|
|
|
* "Software"), to deal in the Software without restriction, including
|
|
|
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
|
* distribute, and/or sell copies of the Software, and to permit persons to
|
|
|
|
|
* whom the Software is furnished to do so, provided that the above
|
|
|
|
|
* copyright notice(s) and this permission notice appear in all copies of
|
|
|
|
|
* the Software and that both the above copyright notice(s) and this
|
|
|
|
|
* permission notice appear in supporting documentation.
|
|
|
|
|
*
|
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
|
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
|
|
|
|
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
|
|
|
|
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
|
|
|
|
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
|
|
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
|
|
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
|
|
* PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
*/
|