Merge branch 'windows-unicode'
Fixed unicode filename handling on Windows. Made all significant projects build with "Unicode" option on Windows. Fixed unicode string handling in GUI code on all OSes. From now on: std::string == UTF-8. Fixed issue 4111. Fixed issue 5178. Fixed issue 5980.
This commit is contained in:
commit
fcf87f6c53
|
@ -44,7 +44,7 @@
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "CPUDetect.h"
|
#include "CPUDetect.h"
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
|
#include "FileUtil.h"
|
||||||
|
|
||||||
const char procfile[] = "/proc/cpuinfo";
|
const char procfile[] = "/proc/cpuinfo";
|
||||||
|
|
||||||
|
@ -27,9 +28,9 @@ char *GetCPUString()
|
||||||
char *cpu_string = 0;
|
char *cpu_string = 0;
|
||||||
// Count the number of processor lines in /proc/cpuinfo
|
// Count the number of processor lines in /proc/cpuinfo
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
fp = fopen(procfile, "r");
|
File::IOFile file(procfile, "r");
|
||||||
|
auto const fp = file.GetHandle();
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -47,9 +48,9 @@ bool CheckCPUFeature(const char *feature)
|
||||||
{
|
{
|
||||||
const char marker[] = "Features\t: ";
|
const char marker[] = "Features\t: ";
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
FILE *fp;
|
|
||||||
|
File::IOFile file(procfile, "r");
|
||||||
fp = fopen(procfile, "r");
|
auto const fp = file.GetHandle();
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -73,9 +74,9 @@ int GetCoreCount()
|
||||||
const char marker[] = "processor\t: ";
|
const char marker[] = "processor\t: ";
|
||||||
int cores = 0;
|
int cores = 0;
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
FILE *fp;
|
|
||||||
|
File::IOFile file(procfile, "r");
|
||||||
fp = fopen(procfile, "r");
|
auto const fp = file.GetHandle();
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <memory> // for std::unique_ptr
|
#include <memory> // for std::unique_ptr
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include "StringUtil.h"
|
||||||
#elif __APPLE__
|
#elif __APPLE__
|
||||||
#include <CoreFoundation/CoreFoundation.h>
|
#include <CoreFoundation/CoreFoundation.h>
|
||||||
#include <IOKit/IOBSD.h>
|
#include <IOKit/IOBSD.h>
|
||||||
|
@ -25,7 +26,7 @@
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// takes a root drive path, returns true if it is a cdrom drive
|
// takes a root drive path, returns true if it is a cdrom drive
|
||||||
bool is_cdrom(const char drive[])
|
bool is_cdrom(const TCHAR* drive)
|
||||||
{
|
{
|
||||||
return (DRIVE_CDROM == GetDriveType(drive));
|
return (DRIVE_CDROM == GetDriveType(drive));
|
||||||
}
|
}
|
||||||
|
@ -36,15 +37,15 @@ std::vector<std::string> cdio_get_devices()
|
||||||
std::vector<std::string> drives;
|
std::vector<std::string> drives;
|
||||||
|
|
||||||
const DWORD buffsize = GetLogicalDriveStrings(0, NULL);
|
const DWORD buffsize = GetLogicalDriveStrings(0, NULL);
|
||||||
std::unique_ptr<char[]> buff(new char[buffsize]);
|
std::vector<TCHAR> buff(buffsize);
|
||||||
if (GetLogicalDriveStrings(buffsize, buff.get()) == buffsize - 1)
|
if (GetLogicalDriveStrings(buffsize, buff.data()) == buffsize - 1)
|
||||||
{
|
{
|
||||||
const char* drive = buff.get();
|
auto drive = buff.data();
|
||||||
while (*drive)
|
while (*drive)
|
||||||
{
|
{
|
||||||
if (is_cdrom(drive))
|
if (is_cdrom(drive))
|
||||||
{
|
{
|
||||||
std::string str(drive);
|
std::string str(TStrToUTF8(drive));
|
||||||
str.pop_back(); // we don't want the final backslash
|
str.pop_back(); // we don't want the final backslash
|
||||||
drives.push_back(std::move(str));
|
drives.push_back(std::move(str));
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ void ConsoleListener::Open(bool Hidden, int Width, int Height, const char *Title
|
||||||
// Save the window handle that AllocConsole() created
|
// Save the window handle that AllocConsole() created
|
||||||
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
// Set the console window title
|
// Set the console window title
|
||||||
SetConsoleTitle(Title);
|
SetConsoleTitle(UTF8ToTStr(Title).c_str());
|
||||||
// Set letter space
|
// Set letter space
|
||||||
LetterSpace(80, 4000);
|
LetterSpace(80, 4000);
|
||||||
//MoveWindow(GetConsoleWindow(), 200,200, 800,800, true);
|
//MoveWindow(GetConsoleWindow(), 200,200, 800,800, true);
|
||||||
|
@ -195,7 +195,7 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool
|
||||||
|
|
||||||
static const int MAX_BYTES = 1024 * 16;
|
static const int MAX_BYTES = 1024 * 16;
|
||||||
|
|
||||||
std::vector<std::array<CHAR, MAX_BYTES>> Str;
|
std::vector<std::array<TCHAR, MAX_BYTES>> Str;
|
||||||
std::vector<std::array<WORD, MAX_BYTES>> Attr;
|
std::vector<std::array<WORD, MAX_BYTES>> Attr;
|
||||||
|
|
||||||
// ReadConsoleOutputAttribute seems to have a limit at this level
|
// ReadConsoleOutputAttribute seems to have a limit at this level
|
||||||
|
|
|
@ -37,6 +37,8 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "../FileUtil.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 32-bit integer manipulation macros (little endian)
|
* 32-bit integer manipulation macros (little endian)
|
||||||
*/
|
*/
|
||||||
|
@ -301,7 +303,10 @@ int md5_file( char *path, unsigned char output[16] )
|
||||||
md5_context ctx;
|
md5_context ctx;
|
||||||
unsigned char buf[1024];
|
unsigned char buf[1024];
|
||||||
|
|
||||||
if( ( f = fopen( path, "rb" ) ) == NULL )
|
File::IOFile file(path, "rb");
|
||||||
|
f = file.GetHandle();
|
||||||
|
|
||||||
|
if (f == NULL)
|
||||||
return( 1 );
|
return( 1 );
|
||||||
|
|
||||||
md5_starts( &ctx );
|
md5_starts( &ctx );
|
||||||
|
@ -315,11 +320,9 @@ int md5_file( char *path, unsigned char output[16] )
|
||||||
|
|
||||||
if( ferror( f ) != 0 )
|
if( ferror( f ) != 0 )
|
||||||
{
|
{
|
||||||
fclose( f );
|
|
||||||
return( 2 );
|
return( 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose( f );
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "../FileUtil.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 32-bit integer manipulation macros (big endian)
|
* 32-bit integer manipulation macros (big endian)
|
||||||
*/
|
*/
|
||||||
|
@ -335,7 +337,10 @@ int sha1_file( char *path, unsigned char output[20] )
|
||||||
sha1_context ctx;
|
sha1_context ctx;
|
||||||
unsigned char buf[1024];
|
unsigned char buf[1024];
|
||||||
|
|
||||||
if( ( f = fopen( path, "rb" ) ) == NULL )
|
File::IOFile file(path, "rb");
|
||||||
|
f = file.GetHandle();
|
||||||
|
|
||||||
|
if (f == NULL)
|
||||||
return( 1 );
|
return( 1 );
|
||||||
|
|
||||||
sha1_starts( &ctx );
|
sha1_starts( &ctx );
|
||||||
|
@ -349,11 +354,9 @@ int sha1_file( char *path, unsigned char output[20] )
|
||||||
|
|
||||||
if( ferror( f ) != 0 )
|
if( ferror( f ) != 0 )
|
||||||
{
|
{
|
||||||
fclose( f );
|
|
||||||
return( 2 );
|
return( 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose( f );
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "ExtendedTrace.h"
|
#include "ExtendedTrace.h"
|
||||||
|
#include "StringUtil.h"
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
|
@ -274,13 +275,21 @@ static BOOL GetSourceInfoFromAddress( UINT address, LPTSTR lpszSourceInfo )
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file )
|
void PrintFunctionAndSourceInfo(FILE* file, const STACKFRAME& callstack)
|
||||||
|
{
|
||||||
|
TCHAR symInfo[BUFFERSIZE] = _T("?");
|
||||||
|
TCHAR srcInfo[BUFFERSIZE] = _T("?");
|
||||||
|
|
||||||
|
GetFunctionInfoFromAddresses((ULONG)callstack.AddrPC.Offset, (ULONG)callstack.AddrFrame.Offset, symInfo);
|
||||||
|
GetSourceInfoFromAddress((ULONG)callstack.AddrPC.Offset, srcInfo);
|
||||||
|
etfprint(file, " " + TStrToUTF8(srcInfo) + " : " + TStrToUTF8(symInfo) + "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void StackTrace( HANDLE hThread, const char* lpszMessage, FILE *file )
|
||||||
{
|
{
|
||||||
STACKFRAME callStack;
|
STACKFRAME callStack;
|
||||||
BOOL bResult;
|
BOOL bResult;
|
||||||
CONTEXT context;
|
CONTEXT context;
|
||||||
TCHAR symInfo[BUFFERSIZE] = _T("?");
|
|
||||||
TCHAR srcInfo[BUFFERSIZE] = _T("?");
|
|
||||||
HANDLE hProcess = GetCurrentProcess();
|
HANDLE hProcess = GetCurrentProcess();
|
||||||
|
|
||||||
// If it's not this thread, let's suspend it, and resume it at the end
|
// If it's not this thread, let's suspend it, and resume it at the end
|
||||||
|
@ -318,9 +327,7 @@ void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file )
|
||||||
etfprint(file, "Call stack info: \n");
|
etfprint(file, "Call stack info: \n");
|
||||||
etfprint(file, lpszMessage);
|
etfprint(file, lpszMessage);
|
||||||
|
|
||||||
GetFunctionInfoFromAddresses( (ULONG)callStack.AddrPC.Offset, (ULONG)callStack.AddrFrame.Offset, symInfo );
|
PrintFunctionAndSourceInfo(file, callStack);
|
||||||
GetSourceInfoFromAddress( (ULONG)callStack.AddrPC.Offset, srcInfo );
|
|
||||||
etfprint(file, string(" ") + srcInfo + string(" : ") + symInfo + string("\n"));
|
|
||||||
|
|
||||||
for( ULONG index = 0; ; index++ )
|
for( ULONG index = 0; ; index++ )
|
||||||
{
|
{
|
||||||
|
@ -341,9 +348,7 @@ void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file )
|
||||||
if( !bResult || callStack.AddrFrame.Offset == 0 )
|
if( !bResult || callStack.AddrFrame.Offset == 0 )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
GetFunctionInfoFromAddresses( (ULONG)callStack.AddrPC.Offset, (ULONG)callStack.AddrFrame.Offset, symInfo );
|
PrintFunctionAndSourceInfo(file, callStack);
|
||||||
GetSourceInfoFromAddress( (UINT)callStack.AddrPC.Offset, srcInfo );
|
|
||||||
etfprint(file, string(" ") + srcInfo + string(" : ") + symInfo + string("\n"));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,19 +356,7 @@ void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file )
|
||||||
ResumeThread( hThread );
|
ResumeThread( hThread );
|
||||||
}
|
}
|
||||||
|
|
||||||
void StackTrace( HANDLE hThread, wchar_t const*lpszMessage, FILE *file, DWORD eip, DWORD esp, DWORD ebp )
|
void StackTrace(HANDLE hThread, const char* lpszMessage, FILE *file, DWORD eip, DWORD esp, DWORD ebp )
|
||||||
{
|
|
||||||
// TODO: remove when Common builds as unicode
|
|
||||||
size_t origsize = wcslen(lpszMessage) + 1;
|
|
||||||
const size_t newsize = 100;
|
|
||||||
size_t convertedChars = 0;
|
|
||||||
char nstring[newsize];
|
|
||||||
wcstombs_s(&convertedChars, nstring, origsize, lpszMessage, _TRUNCATE);
|
|
||||||
|
|
||||||
StackTrace(hThread, nstring, file, eip, esp, ebp );
|
|
||||||
}
|
|
||||||
|
|
||||||
void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file, DWORD eip, DWORD esp, DWORD ebp )
|
|
||||||
{
|
{
|
||||||
STACKFRAME callStack;
|
STACKFRAME callStack;
|
||||||
BOOL bResult;
|
BOOL bResult;
|
||||||
|
@ -391,9 +384,7 @@ void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file, DWORD eip, DWO
|
||||||
etfprint(file, "Call stack info: \n");
|
etfprint(file, "Call stack info: \n");
|
||||||
etfprint(file, lpszMessage);
|
etfprint(file, lpszMessage);
|
||||||
|
|
||||||
GetFunctionInfoFromAddresses( (ULONG)callStack.AddrPC.Offset, (ULONG)callStack.AddrFrame.Offset, symInfo );
|
PrintFunctionAndSourceInfo(file, callStack);
|
||||||
GetSourceInfoFromAddress( (UINT)callStack.AddrPC.Offset, srcInfo );
|
|
||||||
etfprint(file, string(" ") + srcInfo + string(" : ") + symInfo + string("\n"));
|
|
||||||
|
|
||||||
for( ULONG index = 0; ; index++ )
|
for( ULONG index = 0; ; index++ )
|
||||||
{
|
{
|
||||||
|
@ -414,10 +405,7 @@ void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file, DWORD eip, DWO
|
||||||
if( !bResult || callStack.AddrFrame.Offset == 0 )
|
if( !bResult || callStack.AddrFrame.Offset == 0 )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
GetFunctionInfoFromAddresses( (ULONG)callStack.AddrPC.Offset, (ULONG)callStack.AddrFrame.Offset, symInfo );
|
PrintFunctionAndSourceInfo(file, callStack);
|
||||||
GetSourceInfoFromAddress( (UINT)callStack.AddrPC.Offset, srcInfo );
|
|
||||||
etfprint(file, string(" ") + srcInfo + string(" : ") + symInfo + string("\n"));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( hThread != GetCurrentThread() )
|
if ( hThread != GetCurrentThread() )
|
||||||
|
@ -426,7 +414,8 @@ void StackTrace( HANDLE hThread, LPCTSTR lpszMessage, FILE *file, DWORD eip, DWO
|
||||||
|
|
||||||
char g_uefbuf[2048];
|
char g_uefbuf[2048];
|
||||||
|
|
||||||
void etfprintf(FILE *file, const char *format, ...) {
|
void etfprintf(FILE *file, const char *format, ...)
|
||||||
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
int len = vsprintf(g_uefbuf, format, ap);
|
int len = vsprintf(g_uefbuf, format, ap);
|
||||||
|
@ -434,7 +423,8 @@ void etfprintf(FILE *file, const char *format, ...) {
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
void etfprint(FILE *file, const std::string &text) {
|
void etfprint(FILE *file, const std::string &text)
|
||||||
|
{
|
||||||
size_t len = text.length();
|
size_t len = text.length();
|
||||||
fwrite(text.data(), 1, len, file);
|
fwrite(text.data(), 1, len, file);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,15 +26,14 @@
|
||||||
|
|
||||||
#define EXTENDEDTRACEINITIALIZE( IniSymbolPath ) InitSymInfo( IniSymbolPath )
|
#define EXTENDEDTRACEINITIALIZE( IniSymbolPath ) InitSymInfo( IniSymbolPath )
|
||||||
#define EXTENDEDTRACEUNINITIALIZE() UninitSymInfo()
|
#define EXTENDEDTRACEUNINITIALIZE() UninitSymInfo()
|
||||||
#define STACKTRACE(file) StackTrace( GetCurrentThread(), _T(""), file)
|
#define STACKTRACE(file) StackTrace( GetCurrentThread(), "", file)
|
||||||
#define STACKTRACE2(file, eip, esp, ebp) StackTrace(GetCurrentThread(), _T(""), file, eip, esp, ebp)
|
#define STACKTRACE2(file, eip, esp, ebp) StackTrace(GetCurrentThread(), "", file, eip, esp, ebp)
|
||||||
// class File;
|
// class File;
|
||||||
|
|
||||||
BOOL InitSymInfo( PCSTR );
|
BOOL InitSymInfo( PCSTR );
|
||||||
BOOL UninitSymInfo();
|
BOOL UninitSymInfo();
|
||||||
void StackTrace( HANDLE, LPCTSTR, FILE *file);
|
void StackTrace(HANDLE, char const* msg, FILE *file);
|
||||||
void StackTrace( HANDLE, LPCTSTR, FILE *file, DWORD eip, DWORD esp, DWORD ebp);
|
void StackTrace(HANDLE, char const* msg, FILE *file, DWORD eip, DWORD esp, DWORD ebp);
|
||||||
void StackTrace( HANDLE hThread, wchar_t const* lpszMessage, FILE *file, DWORD eip, DWORD esp, DWORD ebp);
|
|
||||||
|
|
||||||
// functions by Masken
|
// functions by Masken
|
||||||
void etfprintf(FILE *file, const char *format, ...);
|
void etfprintf(FILE *file, const char *format, ...);
|
||||||
|
|
|
@ -51,7 +51,7 @@ void CFileSearch::FindFiles(const std::string& _searchString, const std::string&
|
||||||
BuildCompleteFilename(GCMSearchPath, _strPath, _searchString);
|
BuildCompleteFilename(GCMSearchPath, _strPath, _searchString);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
WIN32_FIND_DATA findData;
|
WIN32_FIND_DATA findData;
|
||||||
HANDLE FindFirst = FindFirstFile(GCMSearchPath.c_str(), &findData);
|
HANDLE FindFirst = FindFirstFile(UTF8ToTStr(GCMSearchPath).c_str(), &findData);
|
||||||
|
|
||||||
if (FindFirst != INVALID_HANDLE_VALUE)
|
if (FindFirst != INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
|
@ -62,7 +62,7 @@ void CFileSearch::FindFiles(const std::string& _searchString, const std::string&
|
||||||
if (findData.cFileName[0] != '.')
|
if (findData.cFileName[0] != '.')
|
||||||
{
|
{
|
||||||
std::string strFilename;
|
std::string strFilename;
|
||||||
BuildCompleteFilename(strFilename, _strPath, findData.cFileName);
|
BuildCompleteFilename(strFilename, _strPath, TStrToUTF8(findData.cFileName));
|
||||||
m_FileNames.push_back(strFilename);
|
m_FileNames.push_back(strFilename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +112,6 @@ void CFileSearch::FindFiles(const std::string& _searchString, const std::string&
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const CFileSearch::XStringVector& CFileSearch::GetFileNames() const
|
const CFileSearch::XStringVector& CFileSearch::GetFileNames() const
|
||||||
{
|
{
|
||||||
return m_FileNames;
|
return m_FileNames;
|
||||||
|
|
|
@ -41,10 +41,11 @@
|
||||||
#include <CoreFoundation/CFBundle.h>
|
#include <CoreFoundation/CFBundle.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include "StringUtil.h"
|
||||||
|
|
||||||
#ifndef S_ISDIR
|
#ifndef S_ISDIR
|
||||||
#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR)
|
#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR)
|
||||||
#endif
|
#endif
|
||||||
|
@ -81,7 +82,11 @@ bool Exists(const std::string &filename)
|
||||||
std::string copy(filename);
|
std::string copy(filename);
|
||||||
StripTailDirSlashes(copy);
|
StripTailDirSlashes(copy);
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
int result = _tstat64(UTF8ToTStr(copy).c_str(), &file_info);
|
||||||
|
#else
|
||||||
int result = stat64(copy.c_str(), &file_info);
|
int result = stat64(copy.c_str(), &file_info);
|
||||||
|
#endif
|
||||||
|
|
||||||
return (result == 0);
|
return (result == 0);
|
||||||
}
|
}
|
||||||
|
@ -94,7 +99,11 @@ bool IsDirectory(const std::string &filename)
|
||||||
std::string copy(filename);
|
std::string copy(filename);
|
||||||
StripTailDirSlashes(copy);
|
StripTailDirSlashes(copy);
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
int result = _tstat64(UTF8ToTStr(copy).c_str(), &file_info);
|
||||||
|
#else
|
||||||
int result = stat64(copy.c_str(), &file_info);
|
int result = stat64(copy.c_str(), &file_info);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
WARN_LOG(COMMON, "IsDirectory: stat failed on %s: %s",
|
WARN_LOG(COMMON, "IsDirectory: stat failed on %s: %s",
|
||||||
|
@ -127,7 +136,7 @@ bool Delete(const std::string &filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (!DeleteFile(filename.c_str()))
|
if (!DeleteFile(UTF8ToTStr(filename).c_str()))
|
||||||
{
|
{
|
||||||
WARN_LOG(COMMON, "Delete: DeleteFile failed on %s: %s",
|
WARN_LOG(COMMON, "Delete: DeleteFile failed on %s: %s",
|
||||||
filename.c_str(), GetLastErrorMsg());
|
filename.c_str(), GetLastErrorMsg());
|
||||||
|
@ -149,7 +158,7 @@ bool CreateDir(const std::string &path)
|
||||||
{
|
{
|
||||||
INFO_LOG(COMMON, "CreateDir: directory %s", path.c_str());
|
INFO_LOG(COMMON, "CreateDir: directory %s", path.c_str());
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (::CreateDirectory(path.c_str(), NULL))
|
if (::CreateDirectory(UTF8ToTStr(path).c_str(), NULL))
|
||||||
return true;
|
return true;
|
||||||
DWORD error = GetLastError();
|
DWORD error = GetLastError();
|
||||||
if (error == ERROR_ALREADY_EXISTS)
|
if (error == ERROR_ALREADY_EXISTS)
|
||||||
|
@ -228,7 +237,7 @@ bool DeleteDir(const std::string &filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (::RemoveDirectory(filename.c_str()))
|
if (::RemoveDirectory(UTF8ToTStr(filename).c_str()))
|
||||||
return true;
|
return true;
|
||||||
#else
|
#else
|
||||||
if (rmdir(filename.c_str()) == 0)
|
if (rmdir(filename.c_str()) == 0)
|
||||||
|
@ -257,7 +266,7 @@ bool Copy(const std::string &srcFilename, const std::string &destFilename)
|
||||||
INFO_LOG(COMMON, "Copy: %s --> %s",
|
INFO_LOG(COMMON, "Copy: %s --> %s",
|
||||||
srcFilename.c_str(), destFilename.c_str());
|
srcFilename.c_str(), destFilename.c_str());
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (CopyFile(srcFilename.c_str(), destFilename.c_str(), FALSE))
|
if (CopyFile(UTF8ToTStr(srcFilename).c_str(), UTF8ToTStr(destFilename).c_str(), FALSE))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
ERROR_LOG(COMMON, "Copy: failed %s --> %s: %s",
|
ERROR_LOG(COMMON, "Copy: failed %s --> %s: %s",
|
||||||
|
@ -342,8 +351,13 @@ u64 GetSize(const std::string &filename)
|
||||||
WARN_LOG(COMMON, "GetSize: failed %s: is a directory", filename.c_str());
|
WARN_LOG(COMMON, "GetSize: failed %s: is a directory", filename.c_str());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct stat64 buf;
|
struct stat64 buf;
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (_tstat64(UTF8ToTStr(filename).c_str(), &buf) == 0)
|
||||||
|
#else
|
||||||
if (stat64(filename.c_str(), &buf) == 0)
|
if (stat64(filename.c_str(), &buf) == 0)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
DEBUG_LOG(COMMON, "GetSize: %s: %lld",
|
DEBUG_LOG(COMMON, "GetSize: %s: %lld",
|
||||||
filename.c_str(), (long long)buf.st_size);
|
filename.c_str(), (long long)buf.st_size);
|
||||||
|
@ -391,13 +405,13 @@ bool CreateEmptyFile(const std::string &filename)
|
||||||
{
|
{
|
||||||
INFO_LOG(COMMON, "CreateEmptyFile: %s", filename.c_str());
|
INFO_LOG(COMMON, "CreateEmptyFile: %s", filename.c_str());
|
||||||
|
|
||||||
FILE *pFile = fopen(filename.c_str(), "wb");
|
if (!File::IOFile(filename, "wb"))
|
||||||
if (!pFile) {
|
{
|
||||||
ERROR_LOG(COMMON, "CreateEmptyFile: failed %s: %s",
|
ERROR_LOG(COMMON, "CreateEmptyFile: failed %s: %s",
|
||||||
filename.c_str(), GetLastErrorMsg());
|
filename.c_str(), GetLastErrorMsg());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
fclose(pFile);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -413,7 +427,7 @@ u32 ScanDirectoryTree(const std::string &directory, FSTEntry& parentEntry)
|
||||||
// Find the first file in the directory.
|
// Find the first file in the directory.
|
||||||
WIN32_FIND_DATA ffd;
|
WIN32_FIND_DATA ffd;
|
||||||
|
|
||||||
HANDLE hFind = FindFirstFile((directory + "\\*").c_str(), &ffd);
|
HANDLE hFind = FindFirstFile(UTF8ToTStr(directory + "\\*").c_str(), &ffd);
|
||||||
if (hFind == INVALID_HANDLE_VALUE)
|
if (hFind == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
FindClose(hFind);
|
FindClose(hFind);
|
||||||
|
@ -423,7 +437,7 @@ u32 ScanDirectoryTree(const std::string &directory, FSTEntry& parentEntry)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
FSTEntry entry;
|
FSTEntry entry;
|
||||||
const std::string virtualName(ffd.cFileName);
|
const std::string virtualName(TStrToUTF8(ffd.cFileName));
|
||||||
#else
|
#else
|
||||||
struct dirent dirent, *result = NULL;
|
struct dirent dirent, *result = NULL;
|
||||||
|
|
||||||
|
@ -480,7 +494,7 @@ bool DeleteDirRecursively(const std::string &directory)
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// Find the first file in the directory.
|
// Find the first file in the directory.
|
||||||
WIN32_FIND_DATA ffd;
|
WIN32_FIND_DATA ffd;
|
||||||
HANDLE hFind = FindFirstFile((directory + "\\*").c_str(), &ffd);
|
HANDLE hFind = FindFirstFile(UTF8ToTStr(directory + "\\*").c_str(), &ffd);
|
||||||
|
|
||||||
if (hFind == INVALID_HANDLE_VALUE)
|
if (hFind == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
|
@ -491,7 +505,7 @@ bool DeleteDirRecursively(const std::string &directory)
|
||||||
// windows loop
|
// windows loop
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
const std::string virtualName = ffd.cFileName;
|
const std::string virtualName(TStrToUTF8(ffd.cFileName));
|
||||||
#else
|
#else
|
||||||
struct dirent dirent, *result = NULL;
|
struct dirent dirent, *result = NULL;
|
||||||
DIR *dirp = opendir(directory.c_str());
|
DIR *dirp = opendir(directory.c_str());
|
||||||
|
@ -622,14 +636,14 @@ std::string GetBundleDirectory()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
std::string &GetExeDirectory()
|
std::string& GetExeDirectory()
|
||||||
{
|
{
|
||||||
static std::string DolphinPath;
|
static std::string DolphinPath;
|
||||||
if (DolphinPath.empty())
|
if (DolphinPath.empty())
|
||||||
{
|
{
|
||||||
char Dolphin_exe_Path[2048];
|
TCHAR Dolphin_exe_Path[2048];
|
||||||
GetModuleFileNameA(NULL, Dolphin_exe_Path, 2048);
|
GetModuleFileName(NULL, Dolphin_exe_Path, 2048);
|
||||||
DolphinPath = Dolphin_exe_Path;
|
DolphinPath = TStrToUTF8(Dolphin_exe_Path);
|
||||||
DolphinPath = DolphinPath.substr(0, DolphinPath.find_last_of('\\'));
|
DolphinPath = DolphinPath.substr(0, DolphinPath.find_last_of('\\'));
|
||||||
}
|
}
|
||||||
return DolphinPath;
|
return DolphinPath;
|
||||||
|
@ -730,31 +744,19 @@ std::string &GetUserPath(const unsigned int DirIDX, const std::string &newPath)
|
||||||
|
|
||||||
bool WriteStringToFile(bool text_file, const std::string &str, const char *filename)
|
bool WriteStringToFile(bool text_file, const std::string &str, const char *filename)
|
||||||
{
|
{
|
||||||
FILE *f = fopen(filename, text_file ? "w" : "wb");
|
return File::IOFile(filename, text_file ? "w" : "wb").WriteBytes(str.data(), str.size());
|
||||||
if (!f)
|
|
||||||
return false;
|
|
||||||
size_t len = str.size();
|
|
||||||
if (len != fwrite(str.data(), 1, str.size(), f)) // TODO: string::data() may not be contiguous
|
|
||||||
{
|
|
||||||
fclose(f);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ReadFileToString(bool text_file, const char *filename, std::string &str)
|
bool ReadFileToString(bool text_file, const char *filename, std::string &str)
|
||||||
{
|
{
|
||||||
FILE *f = fopen(filename, text_file ? "r" : "rb");
|
File::IOFile file(filename, text_file ? "r" : "rb");
|
||||||
|
auto const f = file.GetHandle();
|
||||||
|
|
||||||
if (!f)
|
if (!f)
|
||||||
return false;
|
return false;
|
||||||
size_t len = (size_t)GetSize(f);
|
|
||||||
char *buf = new char[len + 1];
|
str.resize(GetSize(f));
|
||||||
buf[fread(buf, 1, len, f)] = 0;
|
return file.ReadArray(&str[0], str.size());
|
||||||
str = std::string(buf, len);
|
|
||||||
fclose(f);
|
|
||||||
delete [] buf;
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IOFile::IOFile()
|
IOFile::IOFile()
|
||||||
|
@ -798,7 +800,7 @@ bool IOFile::Open(const std::string& filename, const char openmode[])
|
||||||
{
|
{
|
||||||
Close();
|
Close();
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
fopen_s(&m_file, filename.c_str(), openmode);
|
_tfopen_s(&m_file, UTF8ToTStr(filename).c_str(), UTF8ToTStr(openmode).c_str());
|
||||||
#else
|
#else
|
||||||
m_file = fopen(filename.c_str(), openmode);
|
m_file = fopen(filename.c_str(), openmode);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
#include "StringUtil.h"
|
||||||
|
|
||||||
// User directory indices for GetUserPath
|
// User directory indices for GetUserPath
|
||||||
enum {
|
enum {
|
||||||
|
@ -226,4 +227,15 @@ private:
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
// To deal with Windows being dumb at unicode:
|
||||||
|
template <typename T>
|
||||||
|
void OpenFStream(T& fstream, const std::string& filename, std::ios_base::openmode openmode)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
fstream.open(UTF8ToTStr(filename).c_str(), openmode);
|
||||||
|
#else
|
||||||
|
fstream.open(filename.c_str(), openmode);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include "FileUtil.h"
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
#include "IniFile.h"
|
#include "IniFile.h"
|
||||||
|
|
||||||
|
@ -400,7 +401,7 @@ bool IniFile::Load(const char* filename)
|
||||||
|
|
||||||
// Open file
|
// Open file
|
||||||
std::ifstream in;
|
std::ifstream in;
|
||||||
in.open(filename, std::ios::in);
|
OpenFStream(in, filename, std::ios::in);
|
||||||
|
|
||||||
if (in.fail()) return false;
|
if (in.fail()) return false;
|
||||||
|
|
||||||
|
@ -452,7 +453,7 @@ bool IniFile::Load(const char* filename)
|
||||||
bool IniFile::Save(const char* filename)
|
bool IniFile::Save(const char* filename)
|
||||||
{
|
{
|
||||||
std::ofstream out;
|
std::ofstream out;
|
||||||
out.open(filename, std::ios::out);
|
OpenFStream(out, filename, std::ios::out);
|
||||||
|
|
||||||
if (out.fail())
|
if (out.fail())
|
||||||
{
|
{
|
||||||
|
|
|
@ -74,7 +74,7 @@ public:
|
||||||
m_num_entries = 0;
|
m_num_entries = 0;
|
||||||
|
|
||||||
// try opening for reading/writing
|
// try opening for reading/writing
|
||||||
m_file.open(filename, ios_base::in | ios_base::out | ios_base::binary);
|
OpenFStream(m_file, filename, ios_base::in | ios_base::out | ios_base::binary);
|
||||||
|
|
||||||
m_file.seekg(0, std::ios::end);
|
m_file.seekg(0, std::ios::end);
|
||||||
std::fstream::pos_type end_pos = m_file.tellg();
|
std::fstream::pos_type end_pos = m_file.tellg();
|
||||||
|
|
|
@ -186,7 +186,7 @@ void LogContainer::Trigger(LogTypes::LOG_LEVELS level, const char *msg)
|
||||||
|
|
||||||
FileLogListener::FileLogListener(const char *filename)
|
FileLogListener::FileLogListener(const char *filename)
|
||||||
{
|
{
|
||||||
m_logfile.open(filename, std::ios::app);
|
OpenFStream(m_logfile, filename, std::ios::app);
|
||||||
SetEnable(true);
|
SetEnable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ const char* GetLastErrorMsg()
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static __declspec(thread) char err_str[buff_size] = {};
|
static __declspec(thread) char err_str[buff_size] = {};
|
||||||
|
|
||||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
|
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
err_str, buff_size, NULL);
|
err_str, buff_size, NULL);
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -106,7 +106,7 @@ bool DefaultMsgHandler(const char* caption, const char* text, bool yes_no, int S
|
||||||
if (Style == QUESTION) STYLE = MB_ICONQUESTION;
|
if (Style == QUESTION) STYLE = MB_ICONQUESTION;
|
||||||
if (Style == WARNING) STYLE = MB_ICONWARNING;
|
if (Style == WARNING) STYLE = MB_ICONWARNING;
|
||||||
|
|
||||||
return IDYES == MessageBox(0, text, caption, STYLE | (yes_no ? MB_YESNO : MB_OK));
|
return IDYES == MessageBox(0, UTF8ToTStr(text).c_str(), UTF8ToTStr(caption).c_str(), STYLE | (yes_no ? MB_YESNO : MB_OK));
|
||||||
|
|
||||||
#else
|
#else
|
||||||
printf("%s\n", text);
|
printf("%s\n", text);
|
||||||
|
|
|
@ -86,7 +86,8 @@ bool CheckTitleTIK(u64 _titleID)
|
||||||
|
|
||||||
static void CreateReplacementFile(std::string &filename)
|
static void CreateReplacementFile(std::string &filename)
|
||||||
{
|
{
|
||||||
std::ofstream replace(filename.c_str());
|
std::ofstream replace;
|
||||||
|
OpenFStream(replace, filename, std::ios_base::out);
|
||||||
replace <<"\" __22__\n";
|
replace <<"\" __22__\n";
|
||||||
replace << "* __2a__\n";
|
replace << "* __2a__\n";
|
||||||
//replace << "/ __2f__\n";
|
//replace << "/ __2f__\n";
|
||||||
|
@ -108,7 +109,8 @@ void ReadReplacements(replace_v& replacements)
|
||||||
if (!File::Exists(filename))
|
if (!File::Exists(filename))
|
||||||
CreateReplacementFile(filename);
|
CreateReplacementFile(filename);
|
||||||
|
|
||||||
std::ifstream f(filename.c_str());
|
std::ifstream f;
|
||||||
|
OpenFStream(f, filename, std::ios_base::in);
|
||||||
char letter;
|
char letter;
|
||||||
std::string replacement;
|
std::string replacement;
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
// Modified for Dolphin.
|
// Modified for Dolphin.
|
||||||
|
|
||||||
#include "SDCardUtil.h"
|
#include "SDCardUtil.h"
|
||||||
|
#include "FileUtil.h"
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -190,7 +191,6 @@ bool SDCardCreate(u64 disk_size /*in MB*/, const char* filename)
|
||||||
{
|
{
|
||||||
u32 sectors_per_fat;
|
u32 sectors_per_fat;
|
||||||
u32 sectors_per_disk;
|
u32 sectors_per_disk;
|
||||||
FILE* f;
|
|
||||||
|
|
||||||
// Convert MB to bytes
|
// Convert MB to bytes
|
||||||
disk_size *= 1024 * 1024;
|
disk_size *= 1024 * 1024;
|
||||||
|
@ -207,7 +207,8 @@ bool SDCardCreate(u64 disk_size /*in MB*/, const char* filename)
|
||||||
boot_sector_init(s_boot_sector, s_fsinfo_sector, disk_size, nullptr);
|
boot_sector_init(s_boot_sector, s_fsinfo_sector, disk_size, nullptr);
|
||||||
fat_init(s_fat_head);
|
fat_init(s_fat_head);
|
||||||
|
|
||||||
f = fopen(filename, "wb");
|
File::IOFile file(filename, "wb");
|
||||||
|
FILE* const f = file.GetHandle();
|
||||||
if (!f)
|
if (!f)
|
||||||
{
|
{
|
||||||
ERROR_LOG(COMMON, "Could not create file '%s', aborting...\n", filename);
|
ERROR_LOG(COMMON, "Could not create file '%s', aborting...\n", filename);
|
||||||
|
@ -247,13 +248,11 @@ bool SDCardCreate(u64 disk_size /*in MB*/, const char* filename)
|
||||||
|
|
||||||
if (write_empty(f, sectors_per_disk - RESERVED_SECTORS - 2*sectors_per_fat)) goto FailWrite;
|
if (write_empty(f, sectors_per_disk - RESERVED_SECTORS - 2*sectors_per_fat)) goto FailWrite;
|
||||||
|
|
||||||
fclose(f);
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
FailWrite:
|
FailWrite:
|
||||||
ERROR_LOG(COMMON, "Could not write to '%s', aborting...\n", filename);
|
ERROR_LOG(COMMON, "Could not write to '%s', aborting...\n", filename);
|
||||||
if (unlink(filename) < 0)
|
if (unlink(filename) < 0)
|
||||||
ERROR_LOG(COMMON, "unlink(%s) failed\n%s", filename, GetLastErrorMsg());
|
ERROR_LOG(COMMON, "unlink(%s) failed\n%s", filename, GetLastErrorMsg());
|
||||||
fclose(f);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,11 +17,21 @@
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "CommonPaths.h"
|
#include "CommonPaths.h"
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <Windows.h>
|
||||||
|
#elif defined(ANDROID)
|
||||||
|
|
||||||
|
#else
|
||||||
|
#include <iconv.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// faster than sscanf
|
// faster than sscanf
|
||||||
bool AsciiToHex(const char* _szValue, u32& result)
|
bool AsciiToHex(const char* _szValue, u32& result)
|
||||||
{
|
{
|
||||||
|
@ -375,3 +385,137 @@ std::string UriEncode(const std::string & sSrc)
|
||||||
delete [] pStart;
|
delete [] pStart;
|
||||||
return sResult;
|
return sResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
|
||||||
|
std::string UTF16ToUTF8(const std::wstring& input)
|
||||||
|
{
|
||||||
|
auto const size = WideCharToMultiByte(CP_UTF8, 0, input.data(), input.size(), nullptr, 0, nullptr, nullptr);
|
||||||
|
|
||||||
|
std::string output;
|
||||||
|
output.resize(size);
|
||||||
|
|
||||||
|
if (size != WideCharToMultiByte(CP_UTF8, 0, input.data(), input.size(), &output[0], output.size(), nullptr, nullptr))
|
||||||
|
output.clear();
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::wstring CPToUTF16(u32 code_page, const std::string& input)
|
||||||
|
{
|
||||||
|
auto const size = MultiByteToWideChar(code_page, 0, input.data(), input.size(), nullptr, 0);
|
||||||
|
|
||||||
|
std::wstring output;
|
||||||
|
output.resize(size);
|
||||||
|
|
||||||
|
if (size != MultiByteToWideChar(code_page, 0, input.data(), input.size(), &output[0], output.size()))
|
||||||
|
output.clear();
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::wstring UTF8ToUTF16(const std::string& input)
|
||||||
|
{
|
||||||
|
return CPToUTF16(CP_UTF8, input);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string SHIFTJISToUTF8(const std::string& input)
|
||||||
|
{
|
||||||
|
return UTF16ToUTF8(CPToUTF16(932, input));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CP1252ToUTF8(const std::string& input)
|
||||||
|
{
|
||||||
|
return UTF16ToUTF8(CPToUTF16(1252, input));
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
std::string CodeToUTF8(const char* fromcode, const std::basic_string<T>& input)
|
||||||
|
{
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
#if defined(ANDROID)
|
||||||
|
result = "Not implemented on Android!";
|
||||||
|
|
||||||
|
#else
|
||||||
|
iconv_t const conv_desc = iconv_open("UTF-8", fromcode);
|
||||||
|
if ((iconv_t)-1 == conv_desc)
|
||||||
|
{
|
||||||
|
ERROR_LOG(COMMON, "Iconv initialization failure [%s]: %s", fromcode, strerror(errno));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t const in_bytes = sizeof(T) * input.size();
|
||||||
|
size_t const out_buffer_size = 4 * in_bytes;
|
||||||
|
|
||||||
|
std::string out_buffer;
|
||||||
|
out_buffer.resize(out_buffer_size);
|
||||||
|
|
||||||
|
auto src_buffer = &input[0];
|
||||||
|
size_t src_bytes = in_bytes;
|
||||||
|
auto dst_buffer = &out_buffer[0];
|
||||||
|
size_t dst_bytes = out_buffer.size();
|
||||||
|
|
||||||
|
while (src_bytes != 0)
|
||||||
|
{
|
||||||
|
size_t const iconv_result = iconv(conv_desc, (char**)(&src_buffer), &src_bytes,
|
||||||
|
&dst_buffer, &dst_bytes);
|
||||||
|
|
||||||
|
if ((size_t)-1 == iconv_result)
|
||||||
|
{
|
||||||
|
if (EILSEQ == errno || EINVAL == errno)
|
||||||
|
{
|
||||||
|
// Try to skip the bad character
|
||||||
|
if (src_bytes != 0)
|
||||||
|
{
|
||||||
|
--src_bytes;
|
||||||
|
++src_buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ERROR_LOG(COMMON, "iconv failure [%s]: %s", fromcode, strerror(errno));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out_buffer.resize(out_buffer_size - dst_bytes);
|
||||||
|
out_buffer.swap(result);
|
||||||
|
|
||||||
|
iconv_close(conv_desc);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CP1252ToUTF8(const std::string& input)
|
||||||
|
{
|
||||||
|
//return CodeToUTF8("CP1252//TRANSLIT", input);
|
||||||
|
//return CodeToUTF8("CP1252//IGNORE", input);
|
||||||
|
return CodeToUTF8("CP1252", input);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string SHIFTJISToUTF8(const std::string& input)
|
||||||
|
{
|
||||||
|
//return CodeToUTF8("CP932", input);
|
||||||
|
return CodeToUTF8("SJIS", input);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string UTF16ToUTF8(const std::wstring& input)
|
||||||
|
{
|
||||||
|
std::string result =
|
||||||
|
// CodeToUTF8("UCS-2", input);
|
||||||
|
// CodeToUTF8("UCS-2LE", input);
|
||||||
|
// CodeToUTF8("UTF-16", input);
|
||||||
|
CodeToUTF8("UTF-16LE", input);
|
||||||
|
|
||||||
|
// TODO: why is this needed?
|
||||||
|
result.erase(std::remove(result.begin(), result.end(), 0x00), result.end());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -97,4 +97,28 @@ std::string ReplaceAll(std::string result, const std::string& src, const std::st
|
||||||
std::string UriDecode(const std::string & sSrc);
|
std::string UriDecode(const std::string & sSrc);
|
||||||
std::string UriEncode(const std::string & sSrc);
|
std::string UriEncode(const std::string & sSrc);
|
||||||
|
|
||||||
|
std::string CP1252ToUTF8(const std::string& str);
|
||||||
|
std::string SHIFTJISToUTF8(const std::string& str);
|
||||||
|
std::string UTF16ToUTF8(const std::wstring& str);
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
|
||||||
|
std::wstring UTF8ToUTF16(const std::string& str);
|
||||||
|
|
||||||
|
#ifdef _UNICODE
|
||||||
|
inline std::string TStrToUTF8(const std::wstring& str)
|
||||||
|
{ return UTF16ToUTF8(str); }
|
||||||
|
|
||||||
|
inline std::wstring UTF8ToTStr(const std::string& str)
|
||||||
|
{ return UTF8ToUTF16(str); }
|
||||||
|
#else
|
||||||
|
inline std::string TStrToUTF8(const std::string& str)
|
||||||
|
{ return str; }
|
||||||
|
|
||||||
|
inline std::string UTF8ToTStr(const std::string& str)
|
||||||
|
{ return str; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // _STRINGUTIL_H_
|
#endif // _STRINGUTIL_H_
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
@ -602,4 +602,4 @@
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -137,7 +137,7 @@ void SConfig::SaveSettings()
|
||||||
ini.Get("General", "GCMPathes", &oldPaths, 0);
|
ini.Get("General", "GCMPathes", &oldPaths, 0);
|
||||||
for (int i = numPaths; i < oldPaths; i++)
|
for (int i = numPaths; i < oldPaths; i++)
|
||||||
{
|
{
|
||||||
TCHAR tmp[16];
|
char tmp[16];
|
||||||
sprintf(tmp, "GCMPath%i", i);
|
sprintf(tmp, "GCMPath%i", i);
|
||||||
ini.DeleteKey("General", tmp);
|
ini.DeleteKey("General", tmp);
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,7 @@ void SConfig::SaveSettings()
|
||||||
|
|
||||||
for (int i = 0; i < numPaths; i++)
|
for (int i = 0; i < numPaths; i++)
|
||||||
{
|
{
|
||||||
TCHAR tmp[16];
|
char tmp[16];
|
||||||
sprintf(tmp, "GCMPath%i", i);
|
sprintf(tmp, "GCMPath%i", i);
|
||||||
ini.Set("General", tmp, m_ISOFolder[i]);
|
ini.Set("General", tmp, m_ISOFolder[i]);
|
||||||
}
|
}
|
||||||
|
@ -284,7 +284,7 @@ void SConfig::LoadSettings()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < numGCMPaths; i++)
|
for (int i = 0; i < numGCMPaths; i++)
|
||||||
{
|
{
|
||||||
TCHAR tmp[16];
|
char tmp[16];
|
||||||
sprintf(tmp, "GCMPath%i", i);
|
sprintf(tmp, "GCMPath%i", i);
|
||||||
std::string tmpPath;
|
std::string tmpPath;
|
||||||
ini.Get("General", tmp, &tmpPath, "");
|
ini.Get("General", tmp, &tmpPath, "");
|
||||||
|
|
|
@ -98,8 +98,8 @@ void Console_Submit(const char *cmd)
|
||||||
}
|
}
|
||||||
CASE("dump")
|
CASE("dump")
|
||||||
{
|
{
|
||||||
TCHAR temp[256];
|
char temp[256];
|
||||||
TCHAR filename[256];
|
char filename[256];
|
||||||
u32 start;
|
u32 start;
|
||||||
u32 end;
|
u32 end;
|
||||||
sscanf(cmd, "%s %08x %08x %s", temp, &start, &end, filename);
|
sscanf(cmd, "%s %08x %08x %s", temp, &start, &end, filename);
|
||||||
|
|
|
@ -754,7 +754,8 @@ bool DSPAssembler::AssembleFile(const char *fname, int pass)
|
||||||
{
|
{
|
||||||
int disable_text = 0; // modified by Hermes
|
int disable_text = 0; // modified by Hermes
|
||||||
|
|
||||||
std::ifstream fsrc(fname);
|
std::ifstream fsrc;
|
||||||
|
OpenFStream(fsrc, fname, std::ios_base::in);
|
||||||
|
|
||||||
if (fsrc.fail())
|
if (fsrc.fail())
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
namespace Win32TAPHelper
|
namespace Win32TAPHelper
|
||||||
{
|
{
|
||||||
|
|
||||||
bool IsTAPDevice(const char *guid)
|
bool IsTAPDevice(const TCHAR *guid)
|
||||||
{
|
{
|
||||||
HKEY netcard_key;
|
HKEY netcard_key;
|
||||||
LONG status;
|
LONG status;
|
||||||
|
@ -39,13 +39,13 @@ bool IsTAPDevice(const char *guid)
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
char enum_name[256];
|
TCHAR enum_name[256];
|
||||||
char unit_string[256];
|
TCHAR unit_string[256];
|
||||||
HKEY unit_key;
|
HKEY unit_key;
|
||||||
char component_id_string[] = "ComponentId";
|
TCHAR component_id_string[] = _T("ComponentId");
|
||||||
char component_id[256];
|
TCHAR component_id[256];
|
||||||
char net_cfg_instance_id_string[] = "NetCfgInstanceId";
|
TCHAR net_cfg_instance_id_string[] = _T("NetCfgInstanceId");
|
||||||
char net_cfg_instance_id[256];
|
TCHAR net_cfg_instance_id[256];
|
||||||
DWORD data_type;
|
DWORD data_type;
|
||||||
|
|
||||||
len = sizeof(enum_name);
|
len = sizeof(enum_name);
|
||||||
|
@ -56,7 +56,7 @@ bool IsTAPDevice(const char *guid)
|
||||||
else if (status != ERROR_SUCCESS)
|
else if (status != ERROR_SUCCESS)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
snprintf(unit_string, sizeof(unit_string), "%s\\%s", ADAPTER_KEY, enum_name);
|
_sntprintf(unit_string, sizeof(unit_string), _T("%s\\%s"), ADAPTER_KEY, enum_name);
|
||||||
|
|
||||||
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, unit_string, 0, KEY_READ, &unit_key);
|
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, unit_string, 0, KEY_READ, &unit_key);
|
||||||
|
|
||||||
|
@ -78,8 +78,8 @@ bool IsTAPDevice(const char *guid)
|
||||||
|
|
||||||
if (status == ERROR_SUCCESS && data_type == REG_SZ)
|
if (status == ERROR_SUCCESS && data_type == REG_SZ)
|
||||||
{
|
{
|
||||||
if (!strcmp(component_id, TAP_COMPONENT_ID) &&
|
if (!_tcscmp(component_id, TAP_COMPONENT_ID) &&
|
||||||
!strcmp(net_cfg_instance_id, guid))
|
!_tcscmp(net_cfg_instance_id, guid))
|
||||||
{
|
{
|
||||||
RegCloseKey(unit_key);
|
RegCloseKey(unit_key);
|
||||||
RegCloseKey(netcard_key);
|
RegCloseKey(netcard_key);
|
||||||
|
@ -96,7 +96,7 @@ bool IsTAPDevice(const char *guid)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GetGUIDs(std::vector<std::string>& guids)
|
bool GetGUIDs(std::vector<std::basic_string<TCHAR>>& guids)
|
||||||
{
|
{
|
||||||
LONG status;
|
LONG status;
|
||||||
HKEY control_net_key;
|
HKEY control_net_key;
|
||||||
|
@ -111,12 +111,12 @@ bool GetGUIDs(std::vector<std::string>& guids)
|
||||||
|
|
||||||
while (!found_all)
|
while (!found_all)
|
||||||
{
|
{
|
||||||
char enum_name[256];
|
TCHAR enum_name[256];
|
||||||
char connection_string[256];
|
TCHAR connection_string[256];
|
||||||
HKEY connection_key;
|
HKEY connection_key;
|
||||||
char name_data[256];
|
TCHAR name_data[256];
|
||||||
DWORD name_type;
|
DWORD name_type;
|
||||||
const char name_string[] = "Name";
|
const TCHAR name_string[] = _T("Name");
|
||||||
|
|
||||||
len = sizeof(enum_name);
|
len = sizeof(enum_name);
|
||||||
status = RegEnumKeyEx(control_net_key, i, enum_name,
|
status = RegEnumKeyEx(control_net_key, i, enum_name,
|
||||||
|
@ -127,8 +127,8 @@ bool GetGUIDs(std::vector<std::string>& guids)
|
||||||
else if (status != ERROR_SUCCESS)
|
else if (status != ERROR_SUCCESS)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
snprintf(connection_string, sizeof(connection_string),
|
_sntprintf(connection_string, sizeof(connection_string),
|
||||||
"%s\\%s\\Connection", NETWORK_CONNECTIONS_KEY, enum_name);
|
_T("%s\\%s\\Connection"), NETWORK_CONNECTIONS_KEY, enum_name);
|
||||||
|
|
||||||
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, connection_string,
|
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, connection_string,
|
||||||
0, KEY_READ, &connection_key);
|
0, KEY_READ, &connection_key);
|
||||||
|
@ -165,15 +165,11 @@ bool GetGUIDs(std::vector<std::string>& guids)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenTAP(HANDLE& adapter, const std::string device_guid)
|
bool OpenTAP(HANDLE& adapter, const std::basic_string<TCHAR>& device_guid)
|
||||||
{
|
{
|
||||||
char device_path[256];
|
auto const device_path = USERMODEDEVICEDIR + device_guid + TAPSUFFIX;
|
||||||
|
|
||||||
/* Open Windows TAP-Win32 adapter */
|
adapter = CreateFile(device_path.c_str(), GENERIC_READ | GENERIC_WRITE, 0, 0,
|
||||||
snprintf(device_path, sizeof(device_path), "%s%s%s",
|
|
||||||
USERMODEDEVICEDIR, device_guid.c_str(), TAPSUFFIX);
|
|
||||||
|
|
||||||
adapter = CreateFile(device_path, GENERIC_READ | GENERIC_WRITE, 0, 0,
|
|
||||||
OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, 0);
|
OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, 0);
|
||||||
|
|
||||||
if (adapter == INVALID_HANDLE_VALUE)
|
if (adapter == INVALID_HANDLE_VALUE)
|
||||||
|
@ -192,7 +188,7 @@ bool CEXIETHERNET::Activate()
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
DWORD len;
|
DWORD len;
|
||||||
std::vector<std::string> device_guids;
|
std::vector<std::basic_string<TCHAR>> device_guids;
|
||||||
|
|
||||||
if (!Win32TAPHelper::GetGUIDs(device_guids))
|
if (!Win32TAPHelper::GetGUIDs(device_guids))
|
||||||
{
|
{
|
||||||
|
|
|
@ -65,18 +65,18 @@
|
||||||
// Registry keys
|
// Registry keys
|
||||||
//=================
|
//=================
|
||||||
|
|
||||||
#define ADAPTER_KEY "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}"
|
#define ADAPTER_KEY _T("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}")
|
||||||
|
|
||||||
#define NETWORK_CONNECTIONS_KEY "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}"
|
#define NETWORK_CONNECTIONS_KEY _T("SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}")
|
||||||
|
|
||||||
//======================
|
//======================
|
||||||
// Filesystem prefixes
|
// Filesystem prefixes
|
||||||
//======================
|
//======================
|
||||||
|
|
||||||
#define USERMODEDEVICEDIR "\\\\.\\Global\\"
|
#define USERMODEDEVICEDIR _T("\\\\.\\Global\\")
|
||||||
#define SYSDEVICEDIR "\\Device\\"
|
#define SYSDEVICEDIR _T("\\Device\\")
|
||||||
#define USERDEVICEDIR "\\DosDevices\\Global\\"
|
#define USERDEVICEDIR _T("\\DosDevices\\Global\\")
|
||||||
#define TAPSUFFIX ".tap"
|
#define TAPSUFFIX _T(".tap")
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
// TAP_COMPONENT_ID -- This string defines the TAP driver
|
// TAP_COMPONENT_ID -- This string defines the TAP driver
|
||||||
|
@ -84,4 +84,4 @@
|
||||||
// simultaneously.
|
// simultaneously.
|
||||||
//=========================================================
|
//=========================================================
|
||||||
|
|
||||||
#define TAP_COMPONENT_ID "tap0901"
|
#define TAP_COMPONENT_ID _T("tap0901")
|
||||||
|
|
|
@ -297,7 +297,7 @@ void Wiimote::WriteData(const wm_write_data* const wd)
|
||||||
{
|
{
|
||||||
// writing the whole mii block each write :/
|
// writing the whole mii block each write :/
|
||||||
std::ofstream file;
|
std::ofstream file;
|
||||||
file.open((File::GetUserPath(D_WIIUSER_IDX) + "mii.bin").c_str(), std::ios::binary | std::ios::out);
|
OpenFStream(file, File::GetUserPath(D_WIIUSER_IDX) + "mii.bin", std::ios::binary | std::ios::out);
|
||||||
file.write((char*)m_eeprom + 0x0FCA, 0x02f0);
|
file.write((char*)m_eeprom + 0x0FCA, 0x02f0);
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,7 @@ void Wiimote::SpeakerData(wm_speaker_data* sd)
|
||||||
File::Delete("rmtdump.wav");
|
File::Delete("rmtdump.wav");
|
||||||
File::Delete("rmtdump.bin");
|
File::Delete("rmtdump.bin");
|
||||||
atexit(stopdamnwav);
|
atexit(stopdamnwav);
|
||||||
ofile.open("rmtdump.bin", ofile.binary | ofile.out);
|
OpenFStream(ofile, "rmtdump.bin", ofile.binary | ofile.out);
|
||||||
wav.Start("rmtdump.wav", 6000/*Common::swap16(m_reg_speaker.sample_rate)*/);
|
wav.Start("rmtdump.wav", 6000/*Common::swap16(m_reg_speaker.sample_rate)*/);
|
||||||
}
|
}
|
||||||
wav.AddMonoSamples(samples, sd->length*2);
|
wav.AddMonoSamples(samples, sd->length*2);
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <regex>
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
@ -87,7 +86,7 @@ static int initialized = 0;
|
||||||
std::unordered_map<BTH_ADDR, std::time_t> g_connect_times;
|
std::unordered_map<BTH_ADDR, std::time_t> g_connect_times;
|
||||||
|
|
||||||
#ifdef SHARE_WRITE_WIIMOTES
|
#ifdef SHARE_WRITE_WIIMOTES
|
||||||
std::unordered_set<std::string> g_connected_wiimotes;
|
std::unordered_set<std::basic_string<TCHAR>> g_connected_wiimotes;
|
||||||
std::mutex g_connected_wiimotes_lock;
|
std::mutex g_connected_wiimotes_lock;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -495,9 +494,6 @@ int Wiimote::IOWrite(const u8* buf, int len)
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void ProcessWiimotes(bool new_scan, T& callback)
|
void ProcessWiimotes(bool new_scan, T& callback)
|
||||||
{
|
{
|
||||||
// match strings like "Nintendo RVL-WBC-01", "Nintendo RVL-CNT-01", "Nintendo RVL-CNT-01-TR"
|
|
||||||
const std::wregex wiimote_device_name(L"Nintendo RVL-.*");
|
|
||||||
|
|
||||||
BLUETOOTH_DEVICE_SEARCH_PARAMS srch;
|
BLUETOOTH_DEVICE_SEARCH_PARAMS srch;
|
||||||
srch.dwSize = sizeof(srch);
|
srch.dwSize = sizeof(srch);
|
||||||
srch.fReturnAuthenticated = true;
|
srch.fReturnAuthenticated = true;
|
||||||
|
@ -540,7 +536,7 @@ void ProcessWiimotes(bool new_scan, T& callback)
|
||||||
DEBUG_LOG(WIIMOTE, "authed %i connected %i remembered %i ",
|
DEBUG_LOG(WIIMOTE, "authed %i connected %i remembered %i ",
|
||||||
btdi.fAuthenticated, btdi.fConnected, btdi.fRemembered);
|
btdi.fAuthenticated, btdi.fConnected, btdi.fRemembered);
|
||||||
|
|
||||||
if (std::regex_match(btdi.szName, wiimote_device_name))
|
if (IsValidBluetoothName(UTF16ToUTF8(btdi.szName)))
|
||||||
{
|
{
|
||||||
callback(hRadio, radioInfo, btdi);
|
callback(hRadio, radioInfo, btdi);
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,7 +91,7 @@ public:
|
||||||
int int_sock; // Interrupt socket
|
int int_sock; // Interrupt socket
|
||||||
|
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
std::string devicepath; // Unique wiimote reference
|
std::basic_string<TCHAR> devicepath; // Unique wiimote reference
|
||||||
//ULONGLONG btaddr; // Bluetooth address
|
//ULONGLONG btaddr; // Bluetooth address
|
||||||
HANDLE dev_handle; // HID handle
|
HANDLE dev_handle; // HID handle
|
||||||
OVERLAPPED hid_overlap_read, hid_overlap_write; // Overlap handle
|
OVERLAPPED hid_overlap_read, hid_overlap_write; // Overlap handle
|
||||||
|
|
|
@ -58,6 +58,7 @@
|
||||||
#include "CommonPaths.h"
|
#include "CommonPaths.h"
|
||||||
#include "IPC_HLE/WII_IPC_HLE_Device_usb.h"
|
#include "IPC_HLE/WII_IPC_HLE_Device_usb.h"
|
||||||
#include "../Movie.h"
|
#include "../Movie.h"
|
||||||
|
#include "StringUtil.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
@ -926,7 +927,7 @@ u32 CWII_IPC_HLE_Device_es::ES_DIVerify(u8* _pTMD, u32 _sz)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
MoveFile(savePath.c_str(), (savePath + "../backup/").c_str());
|
MoveFile(UTF8ToTStr(savePath).c_str(), UTF8ToTStr(savePath + "../backup/").c_str());
|
||||||
#else
|
#else
|
||||||
File::CopyDir(savePath.c_str(),(savePath + "../backup/").c_str());
|
File::CopyDir(savePath.c_str(),(savePath + "../backup/").c_str());
|
||||||
File::DeleteDirRecursively(savePath.c_str());
|
File::DeleteDirRecursively(savePath.c_str());
|
||||||
|
@ -940,7 +941,7 @@ u32 CWII_IPC_HLE_Device_es::ES_DIVerify(u8* _pTMD, u32 _sz)
|
||||||
if (File::Exists((savePath + "banner.bin").c_str()))
|
if (File::Exists((savePath + "banner.bin").c_str()))
|
||||||
File::DeleteDirRecursively(savePath);
|
File::DeleteDirRecursively(savePath);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
MoveFile((savePath + "../backup/").c_str(), savePath.c_str());
|
MoveFile(UTF8ToTStr(savePath + "../backup/").c_str(), UTF8ToTStr(savePath).c_str());
|
||||||
#else
|
#else
|
||||||
File::CopyDir((savePath + "../backup/").c_str(), savePath.c_str());
|
File::CopyDir((savePath + "../backup/").c_str(), savePath.c_str());
|
||||||
File::DeleteDirRecursively((savePath + "../backup/").c_str());
|
File::DeleteDirRecursively((savePath + "../backup/").c_str());
|
||||||
|
|
|
@ -34,7 +34,7 @@ struct Rpt : public std::vector<u8>
|
||||||
|
|
||||||
typedef std::vector<Rpt> NetWiimote;
|
typedef std::vector<Rpt> NetWiimote;
|
||||||
|
|
||||||
#define NETPLAY_VERSION "Dolphin NetPlay r6423"
|
#define NETPLAY_VERSION "Dolphin NetPlay 2013-03-03"
|
||||||
|
|
||||||
// messages
|
// messages
|
||||||
enum
|
enum
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
|
|
@ -22,186 +22,8 @@
|
||||||
#include "VolumeCreator.h"
|
#include "VolumeCreator.h"
|
||||||
#include "FileUtil.h"
|
#include "FileUtil.h"
|
||||||
|
|
||||||
// HyperIris: dunno if this suitable, may be need move.
|
|
||||||
#ifdef _WIN32
|
|
||||||
#include <Windows.h>
|
|
||||||
#else
|
|
||||||
#include <sys/param.h>
|
|
||||||
#ifndef ANDROID
|
|
||||||
#include <iconv.h>
|
|
||||||
#endif
|
|
||||||
#include <errno.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ICONV_CONST
|
|
||||||
#if defined __FreeBSD__ || __NetBSD__
|
|
||||||
#define ICONV_CONST const
|
|
||||||
#else
|
|
||||||
#define ICONV_CONST
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
void IBannerLoader::CopyToStringAndCheck(std::string& _rDestination, const char* _src)
|
|
||||||
{
|
|
||||||
static bool bValidChars[256];
|
|
||||||
static bool bInitialized = false;
|
|
||||||
|
|
||||||
if (!bInitialized)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < 0x20; i++)
|
|
||||||
{
|
|
||||||
bValidChars[i] = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// generate valid chars
|
|
||||||
for (int i = 0x20; i < 256; i++)
|
|
||||||
{
|
|
||||||
bValidChars[i] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bValidChars[0x0a] = true;
|
|
||||||
//bValidChars[0xa9] = true;
|
|
||||||
//bValidChars[0xe9] = true;
|
|
||||||
|
|
||||||
bInitialized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
char destBuffer[2048] = {0};
|
|
||||||
char* dest = destBuffer;
|
|
||||||
const char* src = _src;
|
|
||||||
|
|
||||||
// copy the string and check for "unknown" characters
|
|
||||||
while (*src != 0x00)
|
|
||||||
{
|
|
||||||
u8 c = *src;
|
|
||||||
|
|
||||||
if (c == 0x0a){c = 0x20;}
|
|
||||||
|
|
||||||
if (bValidChars[c] == false)
|
|
||||||
{
|
|
||||||
src++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
*dest = c;
|
|
||||||
dest++;
|
|
||||||
src++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// finalize the string
|
|
||||||
*dest = 0x00;
|
|
||||||
|
|
||||||
_rDestination = destBuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IBannerLoader::CopyBeUnicodeToString( std::string& _rDestination, const u16* _src, int length )
|
|
||||||
{
|
|
||||||
bool returnCode = false;
|
|
||||||
#ifdef WIN32
|
|
||||||
if (_src)
|
|
||||||
{
|
|
||||||
u16* buffer = new u16[length];
|
|
||||||
if (buffer)
|
|
||||||
{
|
|
||||||
memcpy(buffer, _src, sizeof(u16)*length);
|
|
||||||
for (int i = 0; i < length; i++)
|
|
||||||
{
|
|
||||||
buffer[i] = swap16(buffer[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 ansiNameSize = WideCharToMultiByte(932, 0,
|
|
||||||
(LPCWSTR)buffer, (int)wcslen((LPCWSTR)buffer),
|
|
||||||
NULL, NULL, NULL, NULL);
|
|
||||||
if (ansiNameSize > 0)
|
|
||||||
{
|
|
||||||
char* pAnsiStrBuffer = new char[ansiNameSize + 1];
|
|
||||||
if (pAnsiStrBuffer)
|
|
||||||
{
|
|
||||||
memset(pAnsiStrBuffer, 0, (ansiNameSize + 1) * sizeof(char));
|
|
||||||
if (WideCharToMultiByte(932, 0,
|
|
||||||
(LPCWSTR)buffer, (int)wcslen((LPCWSTR)buffer),
|
|
||||||
pAnsiStrBuffer, ansiNameSize, NULL, NULL))
|
|
||||||
{
|
|
||||||
_rDestination = pAnsiStrBuffer;
|
|
||||||
returnCode = true;
|
|
||||||
}
|
|
||||||
delete[] pAnsiStrBuffer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
delete[] buffer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#ifdef ANDROID
|
|
||||||
return false;
|
|
||||||
#else
|
|
||||||
if (_src)
|
|
||||||
{
|
|
||||||
iconv_t conv_desc = iconv_open("UTF-8", "CP932");
|
|
||||||
if (conv_desc == (iconv_t) -1)
|
|
||||||
{
|
|
||||||
// Initialization failure.
|
|
||||||
if (errno == EINVAL)
|
|
||||||
{
|
|
||||||
ERROR_LOG(DISCIO, "Conversion from CP932 to UTF-8 is not supported.");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ERROR_LOG(DISCIO, "Iconv initialization failure: %s\n", strerror (errno));
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
char* src_buffer = new char[length];
|
|
||||||
for (int i = 0; i < length; i++)
|
|
||||||
src_buffer[i] = swap16(_src[i]);
|
|
||||||
|
|
||||||
size_t inbytes = sizeof(char) * length;
|
|
||||||
size_t outbytes = 2 * inbytes;
|
|
||||||
char* utf8_buffer = new char[outbytes + 1];
|
|
||||||
memset(utf8_buffer, 0, (outbytes + 1) * sizeof(char));
|
|
||||||
|
|
||||||
// Save the buffer locations because iconv increments them
|
|
||||||
char* utf8_buffer_start = utf8_buffer;
|
|
||||||
char* src_buffer_start = src_buffer;
|
|
||||||
|
|
||||||
size_t iconv_size = iconv(conv_desc,
|
|
||||||
(ICONV_CONST char**)&src_buffer, &inbytes,
|
|
||||||
&utf8_buffer, &outbytes);
|
|
||||||
|
|
||||||
// Handle failures
|
|
||||||
if (iconv_size == (size_t) -1)
|
|
||||||
{
|
|
||||||
ERROR_LOG(DISCIO, "iconv failed.");
|
|
||||||
switch (errno) {
|
|
||||||
case EILSEQ:
|
|
||||||
ERROR_LOG(DISCIO, "Invalid multibyte sequence.");
|
|
||||||
break;
|
|
||||||
case EINVAL:
|
|
||||||
ERROR_LOG(DISCIO, "Incomplete multibyte sequence.");
|
|
||||||
break;
|
|
||||||
case E2BIG:
|
|
||||||
ERROR_LOG(DISCIO, "Insufficient space allocated for output buffer.");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ERROR_LOG(DISCIO, "Error: %s.", strerror(errno));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_rDestination = utf8_buffer_start;
|
|
||||||
returnCode = true;
|
|
||||||
}
|
|
||||||
delete[] utf8_buffer_start;
|
|
||||||
delete[] src_buffer_start;
|
|
||||||
iconv_close(conv_desc);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
return returnCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
IBannerLoader* CreateBannerLoader(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume *pVolume)
|
IBannerLoader* CreateBannerLoader(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume *pVolume)
|
||||||
{
|
{
|
||||||
|
@ -209,9 +31,9 @@ IBannerLoader* CreateBannerLoader(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVo
|
||||||
{
|
{
|
||||||
return new CBannerLoaderWii(pVolume);
|
return new CBannerLoaderWii(pVolume);
|
||||||
}
|
}
|
||||||
if (_rFileSystem.IsValid())
|
if (_rFileSystem.IsValid())
|
||||||
{
|
{
|
||||||
return new CBannerLoaderGC(_rFileSystem);
|
return new CBannerLoaderGC(_rFileSystem, pVolume);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
#ifndef _BANNER_LOADER_H_
|
#ifndef _BANNER_LOADER_H_
|
||||||
#define _BANNER_LOADER_H_
|
#define _BANNER_LOADER_H_
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "Filesystem.h"
|
#include "Filesystem.h"
|
||||||
|
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
|
@ -38,24 +41,9 @@ class IBannerLoader
|
||||||
|
|
||||||
virtual bool GetBanner(u32* _pBannerImage) = 0;
|
virtual bool GetBanner(u32* _pBannerImage) = 0;
|
||||||
|
|
||||||
virtual bool GetName(std::string* _rName) = 0;
|
virtual std::vector<std::string> GetNames() = 0;
|
||||||
virtual bool GetName(std::vector<std::wstring>& _rNames) {return false;};
|
virtual std::string GetCompany() = 0;
|
||||||
virtual bool GetCompany(std::string& _rCompany) = 0;
|
virtual std::vector<std::string> GetDescriptions() = 0;
|
||||||
|
|
||||||
virtual bool GetDescription(std::string* _rDescription) = 0;
|
|
||||||
virtual bool GetDescription(std::wstring& _rDescription) {return false;};
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
void CopyToStringAndCheck(std::string& _rDestination, const char* _src);
|
|
||||||
|
|
||||||
bool CopyBeUnicodeToString(std::string& _rDestination, const u16* _src, int length);
|
|
||||||
private:
|
|
||||||
u16 swap16(u16 data)
|
|
||||||
{
|
|
||||||
return ((data & 0xff00) >> 8) | ((data & 0xff) << 8);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
IBannerLoader* CreateBannerLoader(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume *pVolume);
|
IBannerLoader* CreateBannerLoader(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume *pVolume);
|
||||||
|
|
|
@ -23,13 +23,14 @@
|
||||||
|
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
CBannerLoaderGC::CBannerLoaderGC(DiscIO::IFileSystem& _rFileSystem)
|
CBannerLoaderGC::CBannerLoaderGC(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume* volume)
|
||||||
: m_pBannerFile(NULL),
|
: m_pBannerFile(NULL)
|
||||||
m_IsValid(false)
|
, m_IsValid(false)
|
||||||
|
, m_country(volume->GetCountry())
|
||||||
{
|
{
|
||||||
// load the opening.bnr
|
// load the opening.bnr
|
||||||
size_t FileSize = (size_t) _rFileSystem.GetFileSize("opening.bnr");
|
size_t FileSize = (size_t) _rFileSystem.GetFileSize("opening.bnr");
|
||||||
if (FileSize == sizeof(DVDBanner) || FileSize == sizeof(DVDBanner2))
|
if (FileSize == BNR1_SIZE || FileSize == BNR2_SIZE)
|
||||||
{
|
{
|
||||||
m_pBannerFile = new u8[FileSize];
|
m_pBannerFile = new u8[FileSize];
|
||||||
if (m_pBannerFile)
|
if (m_pBannerFile)
|
||||||
|
@ -62,7 +63,6 @@ bool CBannerLoaderGC::IsValid()
|
||||||
return m_IsValid;
|
return m_IsValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool CBannerLoaderGC::GetBanner(u32* _pBannerImage)
|
bool CBannerLoaderGC::GetBanner(u32* _pBannerImage)
|
||||||
{
|
{
|
||||||
if (!IsValid())
|
if (!IsValid())
|
||||||
|
@ -70,132 +70,111 @@ bool CBannerLoaderGC::GetBanner(u32* _pBannerImage)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
DVDBanner2* pBanner = (DVDBanner2*)m_pBannerFile;
|
auto const pBanner = (DVDBanner*)m_pBannerFile;
|
||||||
decode5A3image(_pBannerImage, pBanner->image, DVD_BANNER_WIDTH, DVD_BANNER_HEIGHT);
|
decode5A3image(_pBannerImage, pBanner->image, DVD_BANNER_WIDTH, DVD_BANNER_HEIGHT);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool CBannerLoaderGC::GetName(std::string _rName[])
|
std::vector<std::string> CBannerLoaderGC::GetNames()
|
||||||
{
|
{
|
||||||
bool returnCode = false;
|
std::vector<std::string> names;
|
||||||
|
|
||||||
if (!IsValid())
|
if (!IsValid())
|
||||||
{
|
{
|
||||||
return false;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 name_count = 0;
|
||||||
|
|
||||||
// find Banner type
|
// find Banner type
|
||||||
switch (m_BNRType)
|
switch (m_BNRType)
|
||||||
{
|
{
|
||||||
case CBannerLoaderGC::BANNER_BNR1:
|
case CBannerLoaderGC::BANNER_BNR1:
|
||||||
{
|
name_count = 1;
|
||||||
DVDBanner* pBanner = (DVDBanner*)m_pBannerFile;
|
|
||||||
char tempBuffer[65] = {0};
|
|
||||||
if (pBanner->comment.longTitle[0])
|
|
||||||
{
|
|
||||||
memcpy(tempBuffer, pBanner->comment.longTitle, 64);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memcpy(tempBuffer, pBanner->comment.shortTitle, 32);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
CopyToStringAndCheck(_rName[i], tempBuffer);
|
|
||||||
}
|
|
||||||
returnCode = true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CBannerLoaderGC::BANNER_BNR2:
|
case CBannerLoaderGC::BANNER_BNR2:
|
||||||
{
|
name_count = 6;
|
||||||
DVDBanner2* pBanner = (DVDBanner2*)m_pBannerFile;
|
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
char tempBuffer[65] = {0};
|
|
||||||
if (pBanner->comment[i].longTitle[0])
|
|
||||||
{
|
|
||||||
memcpy(tempBuffer, pBanner->comment[i].longTitle, 64);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memcpy(tempBuffer, pBanner->comment[i].shortTitle, 32);
|
|
||||||
}
|
|
||||||
CopyToStringAndCheck(_rName[i], tempBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
returnCode = true;
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto const banner = reinterpret_cast<const DVDBanner*>(m_pBannerFile);
|
||||||
|
|
||||||
|
for (u32 i = 0; i != name_count; ++i)
|
||||||
|
{
|
||||||
|
auto& comment = banner->comment[i];
|
||||||
|
|
||||||
|
if (comment.longTitle[0])
|
||||||
|
{
|
||||||
|
auto& data = comment.longTitle;
|
||||||
|
names.push_back(GetDecodedString(data));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto& data = comment.shortTitle;
|
||||||
|
names.push_back(GetDecodedString(data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return returnCode;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool CBannerLoaderGC::GetCompany(std::string& _rCompany)
|
std::string CBannerLoaderGC::GetCompany()
|
||||||
{
|
{
|
||||||
_rCompany = "N/A";
|
std::string company;
|
||||||
|
|
||||||
if (!IsValid())
|
if (IsValid())
|
||||||
{
|
{
|
||||||
return(false);
|
auto const pBanner = (DVDBanner*)m_pBannerFile;
|
||||||
|
auto& data = pBanner->comment[0].shortMaker;
|
||||||
|
company = GetDecodedString(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
DVDBanner2* pBanner = (DVDBanner2*)m_pBannerFile;
|
return company;
|
||||||
|
|
||||||
CopyToStringAndCheck(_rCompany, pBanner->comment[0].shortMaker);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool CBannerLoaderGC::GetDescription(std::string* _rDescription)
|
std::vector<std::string> CBannerLoaderGC::GetDescriptions()
|
||||||
{
|
{
|
||||||
bool returnCode = false;
|
std::vector<std::string> descriptions;
|
||||||
|
|
||||||
if (!IsValid())
|
if (!IsValid())
|
||||||
{
|
{
|
||||||
return false;
|
return descriptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 desc_count = 0;
|
||||||
|
|
||||||
// find Banner type
|
// find Banner type
|
||||||
switch (m_BNRType)
|
switch (m_BNRType)
|
||||||
{
|
{
|
||||||
case CBannerLoaderGC::BANNER_BNR1:
|
case CBannerLoaderGC::BANNER_BNR1:
|
||||||
{
|
desc_count = 1;
|
||||||
DVDBanner* pBanner = (DVDBanner*)m_pBannerFile;
|
|
||||||
char tempBuffer[129] = {0};
|
|
||||||
memcpy(tempBuffer, pBanner->comment.comment, 128);
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
CopyToStringAndCheck(_rDescription[i], tempBuffer);
|
|
||||||
}
|
|
||||||
returnCode = true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case CBannerLoaderGC::BANNER_BNR2:
|
|
||||||
{
|
|
||||||
DVDBanner2* pBanner = (DVDBanner2*)m_pBannerFile;
|
|
||||||
|
|
||||||
for (int i = 0; i< 6; i++)
|
case CBannerLoaderGC::BANNER_BNR2:
|
||||||
{
|
desc_count = 6;
|
||||||
char tempBuffer[129] = {0};
|
|
||||||
memcpy(tempBuffer, pBanner->comment[i].comment, 128);
|
|
||||||
CopyToStringAndCheck(_rDescription[i], tempBuffer);
|
|
||||||
}
|
|
||||||
returnCode = true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return returnCode;
|
|
||||||
|
auto banner = reinterpret_cast<const DVDBanner*>(m_pBannerFile);
|
||||||
|
|
||||||
|
for (u32 i = 0; i != desc_count; ++i)
|
||||||
|
{
|
||||||
|
auto& data = banner->comment[i].comment;
|
||||||
|
descriptions.push_back(GetDecodedString(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
return descriptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -223,13 +202,17 @@ CBannerLoaderGC::BANNER_TYPE CBannerLoaderGC::getBannerType()
|
||||||
CBannerLoaderGC::BANNER_TYPE type = CBannerLoaderGC::BANNER_UNKNOWN;
|
CBannerLoaderGC::BANNER_TYPE type = CBannerLoaderGC::BANNER_UNKNOWN;
|
||||||
switch (bannerSignature)
|
switch (bannerSignature)
|
||||||
{
|
{
|
||||||
|
// "BNR1"
|
||||||
case 0x31524e42:
|
case 0x31524e42:
|
||||||
type = CBannerLoaderGC::BANNER_BNR1;
|
type = CBannerLoaderGC::BANNER_BNR1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// "BNR2"
|
||||||
case 0x32524e42:
|
case 0x32524e42:
|
||||||
type = CBannerLoaderGC::BANNER_BNR2;
|
type = CBannerLoaderGC::BANNER_BNR2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
#define _BANNER_LOADER_GC_H_
|
#define _BANNER_LOADER_GC_H_
|
||||||
|
|
||||||
#include "BannerLoader.h"
|
#include "BannerLoader.h"
|
||||||
|
#include "VolumeGC.h"
|
||||||
|
#include "StringUtil.h"
|
||||||
|
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
|
@ -26,15 +28,16 @@ class CBannerLoaderGC
|
||||||
: public IBannerLoader
|
: public IBannerLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CBannerLoaderGC(DiscIO::IFileSystem& _rFileSystem);
|
CBannerLoaderGC(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume* volume);
|
||||||
virtual ~CBannerLoaderGC();
|
virtual ~CBannerLoaderGC();
|
||||||
|
|
||||||
virtual bool IsValid();
|
virtual bool IsValid();
|
||||||
|
|
||||||
virtual bool GetBanner(u32* _pBannerImage);
|
virtual bool GetBanner(u32* _pBannerImage);
|
||||||
virtual bool GetName(std::string* _rName);
|
|
||||||
virtual bool GetCompany(std::string& _rCompany);
|
virtual std::vector<std::string> GetNames();
|
||||||
virtual bool GetDescription(std::string* _rDescription);
|
virtual std::string GetCompany();
|
||||||
|
virtual std::vector<std::string> GetDescriptions();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum
|
enum
|
||||||
|
@ -60,30 +63,35 @@ class CBannerLoaderGC
|
||||||
char comment[128]; // Game description shown in IPL game start screen in two lines.
|
char comment[128]; // Game description shown in IPL game start screen in two lines.
|
||||||
};
|
};
|
||||||
|
|
||||||
// "opening.bnr" file format for JP/US console
|
|
||||||
struct DVDBanner
|
|
||||||
{
|
|
||||||
u32 id; // 'BNR1'
|
|
||||||
u32 padding[7];
|
|
||||||
u16 image[DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT]; // RGB5A3 96x32 texture image
|
|
||||||
DVDBannerComment comment;
|
|
||||||
};
|
|
||||||
|
|
||||||
// "opening.bnr" file format for EU console
|
// "opening.bnr" file format for EU console
|
||||||
struct DVDBanner2
|
struct DVDBanner
|
||||||
{
|
{
|
||||||
u32 id; // 'BNR2'
|
u32 id; // 'BNR2'
|
||||||
u32 padding[7];
|
u32 padding[7];
|
||||||
u16 image[DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT]; // RGB5A3 96x32 texture image
|
u16 image[DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT]; // RGB5A3 96x32 texture image
|
||||||
DVDBannerComment comment[6]; // Comments in six languages
|
DVDBannerComment comment[6]; // Comments in six languages (only 1 for BNR1 type)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const u32 BNR1_SIZE = sizeof(DVDBanner) - sizeof(DVDBannerComment) * 5;
|
||||||
|
static const u32 BNR2_SIZE = sizeof(DVDBanner);
|
||||||
|
|
||||||
|
template <u32 N>
|
||||||
|
std::string GetDecodedString(const char (&data)[N])
|
||||||
|
{
|
||||||
|
auto const string_decoder = CVolumeGC::GetStringDecoder(m_country);
|
||||||
|
|
||||||
|
// strnlen to trim NULLs
|
||||||
|
return string_decoder(std::string(data, strnlen(data, sizeof(data))));
|
||||||
|
}
|
||||||
|
|
||||||
u8* m_pBannerFile;
|
u8* m_pBannerFile;
|
||||||
bool m_IsValid;
|
bool m_IsValid;
|
||||||
BANNER_TYPE m_BNRType;
|
BANNER_TYPE m_BNRType;
|
||||||
|
|
||||||
void decode5A3image(u32* dst, u16* src, int width, int height);
|
void decode5A3image(u32* dst, u16* src, int width, int height);
|
||||||
BANNER_TYPE getBannerType();
|
BANNER_TYPE getBannerType();
|
||||||
|
|
||||||
|
DiscIO::IVolume::ECountry const m_country;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "ColorUtil.h"
|
#include "ColorUtil.h"
|
||||||
|
@ -144,73 +145,48 @@ bool CBannerLoaderWii::GetBanner(u32* _pBannerImage)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CBannerLoaderWii::GetStringFromComments(const CommentIndex index, std::string& s)
|
bool CBannerLoaderWii::GetStringFromComments(const CommentIndex index, std::string& result)
|
||||||
{
|
|
||||||
bool ret = false;
|
|
||||||
|
|
||||||
if (IsValid())
|
|
||||||
{
|
|
||||||
// find Banner type
|
|
||||||
SWiiBanner *pBanner = (SWiiBanner*)m_pBannerFile;
|
|
||||||
|
|
||||||
// Ensure the string is null-terminating, since the banner format
|
|
||||||
// doesn't require it
|
|
||||||
u16 *src = new u16[COMMENT_SIZE + 1];
|
|
||||||
memcpy(src, &pBanner->m_Comment[index], COMMENT_SIZE * sizeof(u16));
|
|
||||||
src[COMMENT_SIZE] = 0;
|
|
||||||
|
|
||||||
ret = CopyBeUnicodeToString(s, src, COMMENT_SIZE + 1);
|
|
||||||
|
|
||||||
delete [] src;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CBannerLoaderWii::GetStringFromComments(const CommentIndex index, std::wstring& s)
|
|
||||||
{
|
{
|
||||||
if (IsValid())
|
if (IsValid())
|
||||||
{
|
{
|
||||||
// find Banner type
|
auto const banner = reinterpret_cast<const SWiiBanner*>(m_pBannerFile);
|
||||||
SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile;
|
auto const src_ptr = banner->m_Comment[index];
|
||||||
|
|
||||||
std::wstring description;
|
// Trim at first NULL
|
||||||
for (int i = 0; i < COMMENT_SIZE; ++i)
|
auto const length = std::find(src_ptr, src_ptr + COMMENT_SIZE, 0x0) - src_ptr;
|
||||||
description.push_back(Common::swap16(pBanner->m_Comment[index][i]));
|
|
||||||
|
std::wstring src;
|
||||||
s = description;
|
src.resize(length);
|
||||||
|
std::transform(src_ptr, src_ptr + src.size(), src.begin(), (u16(&)(u16))Common::swap16);
|
||||||
|
result = UTF16ToUTF8(src);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CBannerLoaderWii::GetName(std::string* _rName)
|
std::vector<std::string> CBannerLoaderWii::GetNames()
|
||||||
{
|
{
|
||||||
return GetStringFromComments(NAME_IDX, *_rName);
|
std::vector<std::string> ret(1);
|
||||||
}
|
|
||||||
|
if (!GetStringFromComments(NAME_IDX, ret[0]))
|
||||||
|
ret.clear();
|
||||||
|
|
||||||
bool CBannerLoaderWii::GetName(std::vector<std::wstring>& _rNames)
|
|
||||||
{
|
|
||||||
std::wstring temp;
|
|
||||||
bool ret = GetStringFromComments(NAME_IDX, temp);
|
|
||||||
_rNames.push_back(temp);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CBannerLoaderWii::GetCompany(std::string& _rCompany)
|
std::string CBannerLoaderWii::GetCompany()
|
||||||
{
|
{
|
||||||
_rCompany = "N/A";
|
return "";
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CBannerLoaderWii::GetDescription(std::string* _rDescription)
|
std::vector<std::string> CBannerLoaderWii::GetDescriptions()
|
||||||
{
|
{
|
||||||
return GetStringFromComments(DESC_IDX, *_rDescription);
|
std::vector<std::string> result(1);
|
||||||
}
|
if (!GetStringFromComments(DESC_IDX, result[0]))
|
||||||
|
result.clear();
|
||||||
bool CBannerLoaderWii::GetDescription(std::wstring& _rDescription)
|
return result;
|
||||||
{
|
|
||||||
return GetStringFromComments(DESC_IDX, _rDescription);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBannerLoaderWii::decode5A3image(u32* dst, u16* src, int width, int height)
|
void CBannerLoaderWii::decode5A3image(u32* dst, u16* src, int width, int height)
|
||||||
|
|
|
@ -35,15 +35,9 @@ class CBannerLoaderWii
|
||||||
|
|
||||||
virtual bool GetBanner(u32* _pBannerImage);
|
virtual bool GetBanner(u32* _pBannerImage);
|
||||||
|
|
||||||
virtual bool GetName(std::string* _rName);
|
virtual std::vector<std::string> GetNames();
|
||||||
|
virtual std::string GetCompany();
|
||||||
bool GetName(std::vector<std::wstring>& _rNames);
|
virtual std::vector<std::string> GetDescriptions();
|
||||||
|
|
||||||
virtual bool GetCompany(std::string& _rCompany);
|
|
||||||
|
|
||||||
virtual bool GetDescription(std::string* _rDescription);
|
|
||||||
|
|
||||||
bool GetDescription(std::wstring& _rDescription);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -81,7 +75,6 @@ class CBannerLoaderWii
|
||||||
void decode5A3image(u32* dst, u16* src, int width, int height);
|
void decode5A3image(u32* dst, u16* src, int width, int height);
|
||||||
|
|
||||||
bool GetStringFromComments(const CommentIndex index, std::string& s);
|
bool GetStringFromComments(const CommentIndex index, std::string& s);
|
||||||
bool GetStringFromComments(const CommentIndex index, std::wstring& s);
|
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
#include "DriveBlob.h"
|
#include "DriveBlob.h"
|
||||||
|
#include "StringUtil.h"
|
||||||
|
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
|
@ -23,12 +24,9 @@ namespace DiscIO
|
||||||
DriveReader::DriveReader(const char *drive)
|
DriveReader::DriveReader(const char *drive)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
char path[MAX_PATH];
|
|
||||||
strncpy(path, drive, 3);
|
|
||||||
path[2] = 0;
|
|
||||||
sprintf(path, "\\\\.\\%s", drive);
|
|
||||||
SectorReader::SetSectorSize(2048);
|
SectorReader::SetSectorSize(2048);
|
||||||
hDisc = CreateFile(path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
auto const path = UTF8ToTStr(std::string("\\\\.\\") + drive);
|
||||||
|
hDisc = CreateFile(path.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL);
|
NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL);
|
||||||
if (hDisc != INVALID_HANDLE_VALUE)
|
if (hDisc != INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "FileSystemGCWii.h"
|
#include "FileSystemGCWii.h"
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
|
@ -27,10 +28,10 @@
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
CFileSystemGCWii::CFileSystemGCWii(const IVolume *_rVolume)
|
CFileSystemGCWii::CFileSystemGCWii(const IVolume *_rVolume)
|
||||||
: IFileSystem(_rVolume),
|
: IFileSystem(_rVolume)
|
||||||
m_Initialized(false),
|
, m_Initialized(false)
|
||||||
m_Valid(false),
|
, m_Valid(false)
|
||||||
m_OffsetShift(0)
|
, m_OffsetShift(0)
|
||||||
{
|
{
|
||||||
m_Valid = DetectFileSystem();
|
m_Valid = DetectFileSystem();
|
||||||
}
|
}
|
||||||
|
@ -213,9 +214,16 @@ u32 CFileSystemGCWii::Read32(u64 _Offset) const
|
||||||
return Common::swap32(Temp);
|
return Common::swap32(Temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileSystemGCWii::GetStringFromOffset(u64 _Offset, char* Filename) const
|
std::string CFileSystemGCWii::GetStringFromOffset(u64 _Offset) const
|
||||||
{
|
{
|
||||||
m_rVolume->Read(_Offset, 255, (u8*)Filename);
|
std::string data;
|
||||||
|
data.resize(255);
|
||||||
|
m_rVolume->Read(_Offset, data.size(), (u8*)&data[0]);
|
||||||
|
data.erase(std::find(data.begin(), data.end(), 0x00), data.end());
|
||||||
|
|
||||||
|
// TODO: Should we really always use SHIFT-JIS?
|
||||||
|
// It makes some filenames in Pikmin (NTSC-U) sane, but is it correct?
|
||||||
|
return SHIFTJISToUTF8(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t CFileSystemGCWii::GetFileList(std::vector<const SFileInfo *> &_rFilenames)
|
size_t CFileSystemGCWii::GetFileList(std::vector<const SFileInfo *> &_rFilenames)
|
||||||
|
@ -311,18 +319,16 @@ size_t CFileSystemGCWii::BuildFilenames(const size_t _FirstIndex, const size_t _
|
||||||
{
|
{
|
||||||
SFileInfo *rFileInfo = &m_FileInfoVector[CurrentIndex];
|
SFileInfo *rFileInfo = &m_FileInfoVector[CurrentIndex];
|
||||||
u64 uOffset = _NameTableOffset + (rFileInfo->m_NameOffset & 0xFFFFFF);
|
u64 uOffset = _NameTableOffset + (rFileInfo->m_NameOffset & 0xFFFFFF);
|
||||||
char filename[512];
|
std::string filename = GetStringFromOffset(uOffset);
|
||||||
memset(filename, 0, sizeof(filename));
|
|
||||||
GetStringFromOffset(uOffset, filename);
|
|
||||||
|
|
||||||
// check next index
|
// check next index
|
||||||
if (rFileInfo->IsDirectory())
|
if (rFileInfo->IsDirectory())
|
||||||
{
|
{
|
||||||
// this is a directory, build up the new szDirectory
|
// this is a directory, build up the new szDirectory
|
||||||
if (_szDirectory != NULL)
|
if (_szDirectory != NULL)
|
||||||
CharArrayFromFormat(rFileInfo->m_FullPath, "%s%s/", _szDirectory, filename);
|
CharArrayFromFormat(rFileInfo->m_FullPath, "%s%s/", _szDirectory, filename.c_str());
|
||||||
else
|
else
|
||||||
CharArrayFromFormat(rFileInfo->m_FullPath, "%s/", filename);
|
CharArrayFromFormat(rFileInfo->m_FullPath, "%s/", filename.c_str());
|
||||||
|
|
||||||
CurrentIndex = BuildFilenames(CurrentIndex + 1, (size_t) rFileInfo->m_FileSize, rFileInfo->m_FullPath, _NameTableOffset);
|
CurrentIndex = BuildFilenames(CurrentIndex + 1, (size_t) rFileInfo->m_FileSize, rFileInfo->m_FullPath, _NameTableOffset);
|
||||||
}
|
}
|
||||||
|
@ -330,9 +336,9 @@ size_t CFileSystemGCWii::BuildFilenames(const size_t _FirstIndex, const size_t _
|
||||||
{
|
{
|
||||||
// this is a filename
|
// this is a filename
|
||||||
if (_szDirectory != NULL)
|
if (_szDirectory != NULL)
|
||||||
CharArrayFromFormat(rFileInfo->m_FullPath, "%s%s", _szDirectory, filename);
|
CharArrayFromFormat(rFileInfo->m_FullPath, "%s%s", _szDirectory, filename.c_str());
|
||||||
else
|
else
|
||||||
CharArrayFromFormat(rFileInfo->m_FullPath, "%s", filename);
|
CharArrayFromFormat(rFileInfo->m_FullPath, "%s", filename.c_str());
|
||||||
|
|
||||||
CurrentIndex++;
|
CurrentIndex++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace DiscIO
|
||||||
class CFileSystemGCWii : public IFileSystem
|
class CFileSystemGCWii : public IFileSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CFileSystemGCWii(const IVolume *_rVolume);
|
CFileSystemGCWii(const IVolume* _rVolume);
|
||||||
virtual ~CFileSystemGCWii();
|
virtual ~CFileSystemGCWii();
|
||||||
virtual bool IsValid() const { return m_Valid; }
|
virtual bool IsValid() const { return m_Valid; }
|
||||||
virtual u64 GetFileSize(const char* _rFullPath);
|
virtual u64 GetFileSize(const char* _rFullPath);
|
||||||
|
@ -44,11 +44,11 @@ public:
|
||||||
private:
|
private:
|
||||||
bool m_Initialized;
|
bool m_Initialized;
|
||||||
bool m_Valid;
|
bool m_Valid;
|
||||||
|
|
||||||
u32 m_OffsetShift; // WII offsets are all shifted
|
u32 m_OffsetShift; // WII offsets are all shifted
|
||||||
|
|
||||||
std::vector <SFileInfo> m_FileInfoVector;
|
std::vector <SFileInfo> m_FileInfoVector;
|
||||||
u32 Read32(u64 _Offset) const;
|
u32 Read32(u64 _Offset) const;
|
||||||
void GetStringFromOffset(u64 _Offset, char* Filename) const;
|
std::string GetStringFromOffset(u64 _Offset) const;
|
||||||
const SFileInfo* FindFileInfo(const char* _rFullPath);
|
const SFileInfo* FindFileInfo(const char* _rFullPath);
|
||||||
bool DetectFileSystem();
|
bool DetectFileSystem();
|
||||||
void InitFileSystem();
|
void InitFileSystem();
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
#include "StringUtil.h"
|
||||||
|
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
|
@ -37,8 +38,9 @@ public:
|
||||||
virtual void GetTMD(u8*, u32 *_sz) const { *_sz=0; }
|
virtual void GetTMD(u8*, u32 *_sz) const { *_sz=0; }
|
||||||
virtual std::string GetUniqueID() const = 0;
|
virtual std::string GetUniqueID() const = 0;
|
||||||
virtual std::string GetMakerID() const = 0;
|
virtual std::string GetMakerID() const = 0;
|
||||||
virtual std::string GetName() const = 0;
|
// TODO: eliminate?
|
||||||
virtual bool GetWName(std::vector<std::wstring>& _rwNames) const { return false; }
|
virtual std::string GetName() const;
|
||||||
|
virtual std::vector<std::string> GetNames() const = 0;
|
||||||
virtual u32 GetFSTSize() const = 0;
|
virtual u32 GetFSTSize() const = 0;
|
||||||
virtual std::string GetApploaderDate() const = 0;
|
virtual std::string GetApploaderDate() const = 0;
|
||||||
virtual bool SupportsIntegrityCheck() const { return false; }
|
virtual bool SupportsIntegrityCheck() const { return false; }
|
||||||
|
|
|
@ -111,5 +111,13 @@ u8 GetSysMenuRegion(u16 _TitleVersion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
std::string IVolume::GetName() const
|
||||||
|
{
|
||||||
|
auto names = GetNames();
|
||||||
|
if (names.empty())
|
||||||
|
return "";
|
||||||
|
else
|
||||||
|
return names[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -207,11 +207,10 @@ std::string CVolumeDirectory::GetMakerID() const
|
||||||
return "VOID";
|
return "VOID";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CVolumeDirectory::GetName() const
|
std::vector<std::string> CVolumeDirectory::GetNames() const
|
||||||
{
|
{
|
||||||
_dbg_assert_(DVDINTERFACE, m_diskHeader);
|
_dbg_assert_(DVDINTERFACE, m_diskHeader);
|
||||||
std::string name = (char*)(m_diskHeader + 0x20);
|
return std::vector<std::string>(1, (char*)(m_diskHeader + 0x20));
|
||||||
return name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVolumeDirectory::SetName(std::string _Name)
|
void CVolumeDirectory::SetName(std::string _Name)
|
||||||
|
|
|
@ -50,7 +50,7 @@ public:
|
||||||
|
|
||||||
std::string GetMakerID() const;
|
std::string GetMakerID() const;
|
||||||
|
|
||||||
std::string GetName() const;
|
std::vector<std::string> GetNames() const;
|
||||||
void SetName(std::string);
|
void SetName(std::string);
|
||||||
|
|
||||||
u32 GetFSTSize() const;
|
u32 GetFSTSize() const;
|
||||||
|
|
|
@ -91,16 +91,17 @@ std::string CVolumeGC::GetMakerID() const
|
||||||
return makerID;
|
return makerID;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CVolumeGC::GetName() const
|
std::vector<std::string> CVolumeGC::GetNames() const
|
||||||
{
|
{
|
||||||
if (m_pReader == NULL)
|
std::vector<std::string> names;
|
||||||
return "";
|
|
||||||
|
auto const string_decoder = GetStringDecoder(GetCountry());
|
||||||
|
|
||||||
char name[128];
|
char name[0x60 + 1] = {};
|
||||||
if (!Read(0x20, 0x60, (u8*)&name))
|
if (m_pReader != NULL && Read(0x20, 0x60, (u8*)name))
|
||||||
return "";
|
names.push_back(string_decoder(name));
|
||||||
|
|
||||||
return name;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CVolumeGC::GetFSTSize() const
|
u32 CVolumeGC::GetFSTSize() const
|
||||||
|
@ -144,4 +145,10 @@ bool CVolumeGC::IsDiscTwo() const
|
||||||
return discTwo;
|
return discTwo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto CVolumeGC::GetStringDecoder(ECountry country) -> StringDecoder
|
||||||
|
{
|
||||||
|
return (COUNTRY_JAPAN == country || COUNTRY_TAIWAN == country) ?
|
||||||
|
SHIFTJISToUTF8 : CP1252ToUTF8;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
@ -34,12 +34,16 @@ public:
|
||||||
bool RAWRead(u64 _Offset, u64 _Length, u8* _pBuffer) const;
|
bool RAWRead(u64 _Offset, u64 _Length, u8* _pBuffer) const;
|
||||||
std::string GetUniqueID() const;
|
std::string GetUniqueID() const;
|
||||||
std::string GetMakerID() const;
|
std::string GetMakerID() const;
|
||||||
std::string GetName() const;
|
std::vector<std::string> GetNames() const;
|
||||||
u32 GetFSTSize() const;
|
u32 GetFSTSize() const;
|
||||||
std::string GetApploaderDate() const;
|
std::string GetApploaderDate() const;
|
||||||
ECountry GetCountry() const;
|
ECountry GetCountry() const;
|
||||||
u64 GetSize() const;
|
u64 GetSize() const;
|
||||||
bool IsDiscTwo() const;
|
bool IsDiscTwo() const;
|
||||||
|
|
||||||
|
typedef std::string(*StringDecoder)(const std::string&);
|
||||||
|
|
||||||
|
static StringDecoder GetStringDecoder(ECountry country);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
IBlobReader* m_pReader;
|
IBlobReader* m_pReader;
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
// Official SVN repository and contact information can be found at
|
// Official SVN repository and contact information can be found at
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "VolumeWad.h"
|
#include "VolumeWad.h"
|
||||||
|
@ -107,78 +108,42 @@ bool CVolumeWAD::GetTitleID(u8* _pBuffer) const
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CVolumeWAD::GetWName(std::vector<std::wstring>& _rwNames) const
|
std::vector<std::string> CVolumeWAD::GetNames() const
|
||||||
{
|
{
|
||||||
u32 footer_size;
|
std::vector<std::string> names;
|
||||||
|
|
||||||
|
u32 footer_size;
|
||||||
if (!Read(0x1C, 4, (u8*)&footer_size))
|
if (!Read(0x1C, 4, (u8*)&footer_size))
|
||||||
{
|
{
|
||||||
return false;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
footer_size = Common::swap32(footer_size);
|
||||||
|
|
||||||
//Japanese, English, German, French, Spanish, Italian, Dutch, unknown, unknown, Korean
|
//Japanese, English, German, French, Spanish, Italian, Dutch, unknown, unknown, Korean
|
||||||
|
for (int i = 0; i != 10; ++i)
|
||||||
// Offset to the english title
|
|
||||||
for (int i = 0; i < 10; i++)
|
|
||||||
{
|
{
|
||||||
u16 temp[42];
|
static const u32 string_length = 42;
|
||||||
std::wstring out_temp;
|
static const u32 bytes_length = string_length * sizeof(u16);
|
||||||
|
|
||||||
|
u16 temp[string_length];
|
||||||
|
|
||||||
if (!Read(0x9C + (i*84) + OpeningBnrOffset, 84, (u8*)&temp) || Common::swap32(footer_size) < 0xF1
|
if (footer_size < 0xF1 || !Read(0x9C + (i * bytes_length) + OpeningBnrOffset, bytes_length, (u8*)&temp))
|
||||||
|| !temp[0])
|
|
||||||
{
|
{
|
||||||
_rwNames.push_back(L"");
|
names.push_back("");
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for (int j = 0; j < 42; ++j)
|
|
||||||
{
|
|
||||||
u16 t = Common::swap16(temp[j]);
|
|
||||||
if (t == 0 && j > 0)
|
|
||||||
{
|
|
||||||
if (out_temp.at(out_temp.size()-1) != ' ')
|
|
||||||
out_temp.push_back(' ');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
out_temp.push_back(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
_rwNames.push_back(out_temp);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string CVolumeWAD::GetName() const
|
|
||||||
{
|
|
||||||
u32 footer_size;
|
|
||||||
|
|
||||||
if (!Read(0x1C, 4, (u8*)&footer_size))
|
|
||||||
return "";
|
|
||||||
|
|
||||||
|
|
||||||
//Japanese, English, German, French, Spanish, Italian, Dutch, unknown, unknown, Korean
|
|
||||||
|
|
||||||
// Offset to the english title
|
|
||||||
char temp[84];
|
|
||||||
if (!Read(0xF1 + OpeningBnrOffset, 84, (u8*)&temp) || Common::swap32(footer_size) < 0xF1 ||
|
|
||||||
!Common::swap16(temp[0]))
|
|
||||||
return "";
|
|
||||||
|
|
||||||
// Remove the null bytes due to 16bit char length
|
|
||||||
std::string out_temp;
|
|
||||||
for (unsigned int i = 0; i < sizeof(temp); i+=2)
|
|
||||||
{
|
|
||||||
// Replace null chars with a single space per null section
|
|
||||||
if (temp[i] == '\0' && i > 0)
|
|
||||||
{
|
|
||||||
if (out_temp.at(out_temp.size()-1) != ' ')
|
|
||||||
out_temp.push_back(' ');
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
out_temp.push_back(temp[i]);
|
{
|
||||||
|
std::wstring out_temp;
|
||||||
|
out_temp.resize(string_length);
|
||||||
|
std::transform(temp, temp + out_temp.size(), out_temp.begin(), (u16(&)(u16))Common::swap16);
|
||||||
|
out_temp.erase(std::find(out_temp.begin(), out_temp.end(), 0x00), out_temp.end());
|
||||||
|
|
||||||
|
names.push_back(UTF16ToUTF8(out_temp));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Make it a null terminated string
|
|
||||||
out_temp.replace(out_temp.end()-1, out_temp.end(), 1, '\0');
|
|
||||||
|
|
||||||
return out_temp;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 CVolumeWAD::GetSize() const
|
u64 CVolumeWAD::GetSize() const
|
||||||
|
|
|
@ -38,8 +38,7 @@ public:
|
||||||
bool GetTitleID(u8* _pBuffer) const;
|
bool GetTitleID(u8* _pBuffer) const;
|
||||||
std::string GetUniqueID() const;
|
std::string GetUniqueID() const;
|
||||||
std::string GetMakerID() const;
|
std::string GetMakerID() const;
|
||||||
std::string GetName() const;
|
std::vector<std::string> GetNames() const;
|
||||||
bool GetWName(std::vector<std::wstring>& _rwNames) const;
|
|
||||||
u32 GetFSTSize() const { return 0; }
|
u32 GetFSTSize() const { return 0; }
|
||||||
std::string GetApploaderDate() const { return "0"; }
|
std::string GetApploaderDate() const { return "0"; }
|
||||||
ECountry GetCountry() const;
|
ECountry GetCountry() const;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
#include "VolumeWiiCrypted.h"
|
#include "VolumeWiiCrypted.h"
|
||||||
|
#include "VolumeGC.h"
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
#include "Crypto/sha1.h"
|
#include "Crypto/sha1.h"
|
||||||
|
|
||||||
|
@ -168,21 +169,17 @@ std::string CVolumeWiiCrypted::GetMakerID() const
|
||||||
return makerID;
|
return makerID;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CVolumeWiiCrypted::GetName() const
|
std::vector<std::string> CVolumeWiiCrypted::GetNames() const
|
||||||
{
|
{
|
||||||
if (m_pReader == NULL)
|
std::vector<std::string> names;
|
||||||
{
|
|
||||||
return std::string();
|
auto const string_decoder = CVolumeGC::GetStringDecoder(GetCountry());
|
||||||
}
|
|
||||||
|
|
||||||
char name[0xFF];
|
char name[0xFF] = {};
|
||||||
|
if (m_pReader != NULL && Read(0x20, 0x60, (u8*)&name))
|
||||||
|
names.push_back(string_decoder(name));
|
||||||
|
|
||||||
if (!Read(0x20, 0x60, (u8*)&name))
|
return names;
|
||||||
{
|
|
||||||
return std::string();
|
|
||||||
}
|
|
||||||
|
|
||||||
return name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CVolumeWiiCrypted::GetFSTSize() const
|
u32 CVolumeWiiCrypted::GetFSTSize() const
|
||||||
|
|
|
@ -37,7 +37,7 @@ public:
|
||||||
void GetTMD(u8* _pBuffer, u32* _sz) const;
|
void GetTMD(u8* _pBuffer, u32* _sz) const;
|
||||||
std::string GetUniqueID() const;
|
std::string GetUniqueID() const;
|
||||||
std::string GetMakerID() const;
|
std::string GetMakerID() const;
|
||||||
std::string GetName() const;
|
std::vector<std::string> GetNames() const;
|
||||||
u32 GetFSTSize() const;
|
u32 GetFSTSize() const;
|
||||||
std::string GetApploaderDate() const;
|
std::string GetApploaderDate() const;
|
||||||
ECountry GetCountry() const;
|
ECountry GetCountry() const;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include "ARCodeAddEdit.h"
|
#include "ARCodeAddEdit.h"
|
||||||
#include "ARDecrypt.h"
|
#include "ARDecrypt.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
extern std::vector<ActionReplay::ARCode> arCodes;
|
extern std::vector<ActionReplay::ARCode> arCodes;
|
||||||
|
|
||||||
|
@ -38,7 +39,7 @@ CARCodeAddEdit::CARCodeAddEdit(int _selection, wxWindow* parent, wxWindowID id,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
currentName = wxString(arCodes.at(selection).name.c_str(), *wxConvCurrent);
|
currentName = StrToWxStr(arCodes.at(selection).name);
|
||||||
tempEntries = arCodes.at(selection);
|
tempEntries = arCodes.at(selection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,7 +74,7 @@ CARCodeAddEdit::CARCodeAddEdit(int _selection, wxWindow* parent, wxWindowID id,
|
||||||
void CARCodeAddEdit::ChangeEntry(wxSpinEvent& event)
|
void CARCodeAddEdit::ChangeEntry(wxSpinEvent& event)
|
||||||
{
|
{
|
||||||
ActionReplay::ARCode currentCode = arCodes.at((int)arCodes.size() - event.GetPosition());
|
ActionReplay::ARCode currentCode = arCodes.at((int)arCodes.size() - event.GetPosition());
|
||||||
EditCheatName->SetValue(wxString(currentCode.name.c_str(), *wxConvCurrent));
|
EditCheatName->SetValue(StrToWxStr(currentCode.name));
|
||||||
UpdateTextCtrl(currentCode);
|
UpdateTextCtrl(currentCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,7 +85,7 @@ void CARCodeAddEdit::SaveCheatData(wxCommandEvent& WXUNUSED (event))
|
||||||
|
|
||||||
// Split the entered cheat into lines.
|
// Split the entered cheat into lines.
|
||||||
std::vector<std::string> userInputLines;
|
std::vector<std::string> userInputLines;
|
||||||
SplitString(std::string(EditCheatCode->GetValue().mb_str()), '\n', userInputLines);
|
SplitString(WxStrToStr(EditCheatCode->GetValue()), '\n', userInputLines);
|
||||||
|
|
||||||
for (size_t i = 0; i < userInputLines.size(); i++)
|
for (size_t i = 0; i < userInputLines.size(); i++)
|
||||||
{
|
{
|
||||||
|
@ -148,7 +149,7 @@ void CARCodeAddEdit::SaveCheatData(wxCommandEvent& WXUNUSED (event))
|
||||||
// Add a new AR cheat code.
|
// Add a new AR cheat code.
|
||||||
ActionReplay::ARCode newCheat;
|
ActionReplay::ARCode newCheat;
|
||||||
|
|
||||||
newCheat.name = std::string(EditCheatName->GetValue().mb_str());
|
newCheat.name = WxStrToStr(EditCheatName->GetValue());
|
||||||
newCheat.ops = decryptedLines;
|
newCheat.ops = decryptedLines;
|
||||||
newCheat.active = true;
|
newCheat.active = true;
|
||||||
|
|
||||||
|
@ -157,7 +158,7 @@ void CARCodeAddEdit::SaveCheatData(wxCommandEvent& WXUNUSED (event))
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Update the currently-selected AR cheat code.
|
// Update the currently-selected AR cheat code.
|
||||||
arCodes.at(selection).name = std::string(EditCheatName->GetValue().mb_str());
|
arCodes.at(selection).name = WxStrToStr(EditCheatName->GetValue());
|
||||||
arCodes.at(selection).ops = decryptedLines;
|
arCodes.at(selection).ops = decryptedLines;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "AboutDolphin.h"
|
#include "AboutDolphin.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
#include "../resources/dolphin_logo.cpp"
|
#include "../resources/dolphin_logo.cpp"
|
||||||
#include "scmrev.h"
|
#include "scmrev.h"
|
||||||
|
|
||||||
|
@ -62,7 +63,7 @@ AboutDolphin::AboutDolphin(wxWindow *parent, wxWindowID id,
|
||||||
"and should not be used to play games you do\n"
|
"and should not be used to play games you do\n"
|
||||||
"not legally own.";
|
"not legally own.";
|
||||||
wxStaticText* const Message = new wxStaticText(this, wxID_ANY,
|
wxStaticText* const Message = new wxStaticText(this, wxID_ANY,
|
||||||
wxString::FromAscii(Text.c_str()));
|
StrToWxStr(Text));
|
||||||
Message->Wrap(GetSize().GetWidth());
|
Message->Wrap(GetSize().GetWidth());
|
||||||
|
|
||||||
wxBoxSizer* const sInfo = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer* const sInfo = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "ISOProperties.h"
|
#include "ISOProperties.h"
|
||||||
#include "HW/Memmap.h"
|
#include "HW/Memmap.h"
|
||||||
#include "Frame.h"
|
#include "Frame.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
#define MAX_CHEAT_SEARCH_RESULTS_DISPLAY 256
|
#define MAX_CHEAT_SEARCH_RESULTS_DISPLAY 256
|
||||||
|
|
||||||
|
@ -273,7 +274,7 @@ void wxCheatsWindow::Load_ARCodes()
|
||||||
{
|
{
|
||||||
ARCode code = GetARCode(i);
|
ARCode code = GetARCode(i);
|
||||||
ARCodeIndex ind;
|
ARCodeIndex ind;
|
||||||
u32 index = m_CheckListBox_CheatsList->Append(wxString(code.name.c_str(), *wxConvCurrent));
|
u32 index = m_CheckListBox_CheatsList->Append(StrToWxStr(code.name));
|
||||||
m_CheckListBox_CheatsList->Check(index, code.active);
|
m_CheckListBox_CheatsList->Check(index, code.active);
|
||||||
ind.index = i;
|
ind.index = i;
|
||||||
ind.uiIndex = index;
|
ind.uiIndex = index;
|
||||||
|
@ -291,18 +292,18 @@ void wxCheatsWindow::OnEvent_CheatsList_ItemSelected(wxCommandEvent& WXUNUSED (e
|
||||||
if ((int)indexList[i].uiIndex == index)
|
if ((int)indexList[i].uiIndex == index)
|
||||||
{
|
{
|
||||||
ARCode code = GetARCode(i);
|
ARCode code = GetARCode(i);
|
||||||
m_Label_Codename->SetLabel(_("Name: ") + wxString(code.name.c_str(), *wxConvCurrent));
|
m_Label_Codename->SetLabel(_("Name: ") + StrToWxStr(code.name));
|
||||||
char text[CHAR_MAX];
|
char text[CHAR_MAX];
|
||||||
char* numcodes = text;
|
char* numcodes = text;
|
||||||
sprintf(numcodes, "Number of Codes: %lu", (unsigned long)code.ops.size());
|
sprintf(numcodes, "Number of Codes: %lu", (unsigned long)code.ops.size());
|
||||||
m_Label_NumCodes->SetLabel(wxString::FromAscii(numcodes));
|
m_Label_NumCodes->SetLabel(StrToWxStr(numcodes));
|
||||||
m_ListBox_CodesList->Clear();
|
m_ListBox_CodesList->Clear();
|
||||||
for (size_t j = 0; j < code.ops.size(); j++)
|
for (size_t j = 0; j < code.ops.size(); j++)
|
||||||
{
|
{
|
||||||
char text2[CHAR_MAX];
|
char text2[CHAR_MAX];
|
||||||
char* ops = text2;
|
char* ops = text2;
|
||||||
sprintf(ops, "%08x %08x", code.ops[j].cmd_addr, code.ops[j].value);
|
sprintf(ops, "%08x %08x", code.ops[j].cmd_addr, code.ops[j].value);
|
||||||
m_ListBox_CodesList->Append(wxString::FromAscii(ops));
|
m_ListBox_CodesList->Append(StrToWxStr(ops));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -347,7 +348,7 @@ void wxCheatsWindow::OnEvent_ButtonUpdateLog_Press(wxCommandEvent& WXUNUSED (eve
|
||||||
const std::vector<std::string> &arLog = ActionReplay::GetSelfLog();
|
const std::vector<std::string> &arLog = ActionReplay::GetSelfLog();
|
||||||
for (u32 i = 0; i < arLog.size(); i++)
|
for (u32 i = 0; i < arLog.size(); i++)
|
||||||
{
|
{
|
||||||
m_TextCtrl_Log->AppendText(wxString::FromAscii(arLog[i].c_str()));
|
m_TextCtrl_Log->AppendText(StrToWxStr(arLog[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -619,7 +620,7 @@ void CreateCodeDialog::PressOK(wxCommandEvent& ev)
|
||||||
// create the new code
|
// create the new code
|
||||||
ActionReplay::ARCode new_cheat;
|
ActionReplay::ARCode new_cheat;
|
||||||
new_cheat.active = false;
|
new_cheat.active = false;
|
||||||
new_cheat.name = std::string(code_name.ToAscii());
|
new_cheat.name = WxStrToStr(code_name);
|
||||||
const ActionReplay::AREntry new_entry(code_address, code_value);
|
const ActionReplay::AREntry new_entry(code_address, code_value);
|
||||||
new_cheat.ops.push_back(new_entry);
|
new_cheat.ops.push_back(new_entry);
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "IPC_HLE/WII_IPC_HLE.h"
|
#include "IPC_HLE/WII_IPC_HLE.h"
|
||||||
#include "NANDContentLoader.h"
|
#include "NANDContentLoader.h"
|
||||||
|
|
||||||
|
#include "WxUtils.h"
|
||||||
#include "Globals.h" // Local
|
#include "Globals.h" // Local
|
||||||
#include "ConfigMain.h"
|
#include "ConfigMain.h"
|
||||||
#include "ConfigManager.h"
|
#include "ConfigManager.h"
|
||||||
|
@ -100,7 +101,6 @@ static const wxLanguage langIds[] =
|
||||||
#define EXIDEV_AM_BB_STR _trans("AM-Baseboard")
|
#define EXIDEV_AM_BB_STR _trans("AM-Baseboard")
|
||||||
#define EXIDEV_GECKO_STR "USBGecko"
|
#define EXIDEV_GECKO_STR "USBGecko"
|
||||||
|
|
||||||
#define CSTR_TRANS(a) wxString(wxGetTranslation(wxT(a))).mb_str()
|
|
||||||
#define WXSTR_TRANS(a) wxString(wxGetTranslation(wxT(a)))
|
#define WXSTR_TRANS(a) wxString(wxGetTranslation(wxT(a)))
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
//only used with xgettext to be picked up as translatable string.
|
//only used with xgettext to be picked up as translatable string.
|
||||||
|
@ -188,7 +188,7 @@ CConfigMain::CConfigMain(wxWindow* parent, wxWindowID id, const wxString& title,
|
||||||
// Update selected ISO paths
|
// Update selected ISO paths
|
||||||
for(u32 i = 0; i < SConfig::GetInstance().m_ISOFolder.size(); i++)
|
for(u32 i = 0; i < SConfig::GetInstance().m_ISOFolder.size(); i++)
|
||||||
{
|
{
|
||||||
ISOPaths->Append(wxString(SConfig::GetInstance().m_ISOFolder[i].c_str(), *wxConvCurrent));
|
ISOPaths->Append(StrToWxStr(SConfig::GetInstance().m_ISOFolder[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,10 +477,10 @@ void CConfigMain::InitializeGUIValues()
|
||||||
|
|
||||||
// Paths
|
// Paths
|
||||||
RecursiveISOPath->SetValue(SConfig::GetInstance().m_RecursiveISOFolder);
|
RecursiveISOPath->SetValue(SConfig::GetInstance().m_RecursiveISOFolder);
|
||||||
DefaultISO->SetPath(wxString(startup_params.m_strDefaultGCM.c_str(), *wxConvCurrent));
|
DefaultISO->SetPath(StrToWxStr(startup_params.m_strDefaultGCM));
|
||||||
DVDRoot->SetPath(wxString(startup_params.m_strDVDRoot.c_str(), *wxConvCurrent));
|
DVDRoot->SetPath(StrToWxStr(startup_params.m_strDVDRoot));
|
||||||
ApploaderPath->SetPath(wxString(startup_params.m_strApploader.c_str(), *wxConvCurrent));
|
ApploaderPath->SetPath(StrToWxStr(startup_params.m_strApploader));
|
||||||
NANDRoot->SetPath(wxString(SConfig::GetInstance().m_NANDPath.c_str(), *wxConvCurrent));
|
NANDRoot->SetPath(StrToWxStr(SConfig::GetInstance().m_NANDPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConfigMain::InitializeGUITooltips()
|
void CConfigMain::InitializeGUITooltips()
|
||||||
|
@ -958,10 +958,10 @@ void CConfigMain::AudioSettingsChanged(wxCommandEvent& event)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_BACKEND:
|
case ID_BACKEND:
|
||||||
VolumeSlider->Enable(SupportsVolumeChanges(std::string(BackendSelection->GetStringSelection().mb_str())));
|
VolumeSlider->Enable(SupportsVolumeChanges(WxStrToStr(BackendSelection->GetStringSelection())));
|
||||||
Latency->Enable(std::string(BackendSelection->GetStringSelection().mb_str()) == BACKEND_OPENAL);
|
Latency->Enable(WxStrToStr(BackendSelection->GetStringSelection()) == BACKEND_OPENAL);
|
||||||
DPL2Decoder->Enable(std::string(BackendSelection->GetStringSelection().mb_str()) == BACKEND_OPENAL);
|
DPL2Decoder->Enable(WxStrToStr(BackendSelection->GetStringSelection()) == BACKEND_OPENAL);
|
||||||
SConfig::GetInstance().sBackend = BackendSelection->GetStringSelection().mb_str();
|
SConfig::GetInstance().sBackend = WxStrToStr(BackendSelection->GetStringSelection());
|
||||||
AudioCommon::UpdateSoundStream();
|
AudioCommon::UpdateSoundStream();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -982,9 +982,9 @@ void CConfigMain::AddAudioBackends()
|
||||||
for (std::vector<std::string>::const_iterator iter = backends.begin();
|
for (std::vector<std::string>::const_iterator iter = backends.begin();
|
||||||
iter != backends.end(); ++iter)
|
iter != backends.end(); ++iter)
|
||||||
{
|
{
|
||||||
BackendSelection->Append(wxString::FromAscii((*iter).c_str()));
|
BackendSelection->Append(StrToWxStr(*iter));
|
||||||
int num = BackendSelection->\
|
int num = BackendSelection->\
|
||||||
FindString(wxString::FromAscii(SConfig::GetInstance().sBackend.c_str()));
|
FindString(StrToWxStr(SConfig::GetInstance().sBackend));
|
||||||
BackendSelection->SetSelection(num);
|
BackendSelection->SetSelection(num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1046,12 +1046,12 @@ void CConfigMain::GCSettingsChanged(wxCommandEvent& event)
|
||||||
|
|
||||||
void CConfigMain::ChooseMemcardPath(std::string& strMemcard, bool isSlotA)
|
void CConfigMain::ChooseMemcardPath(std::string& strMemcard, bool isSlotA)
|
||||||
{
|
{
|
||||||
std::string filename = std::string(wxFileSelector(
|
std::string filename = WxStrToStr(wxFileSelector(
|
||||||
_("Choose a file to open"),
|
_("Choose a file to open"),
|
||||||
wxString::FromUTF8(File::GetUserPath(D_GCUSER_IDX).c_str()),
|
StrToWxStr(File::GetUserPath(D_GCUSER_IDX)),
|
||||||
isSlotA ? wxT(GC_MEMCARDA) : wxT(GC_MEMCARDB),
|
isSlotA ? wxT(GC_MEMCARDA) : wxT(GC_MEMCARDB),
|
||||||
wxEmptyString,
|
wxEmptyString,
|
||||||
_("Gamecube Memory Cards (*.raw,*.gcp)") + wxString(wxT("|*.raw;*.gcp"))).mb_str());
|
_("Gamecube Memory Cards (*.raw,*.gcp)") + wxString(wxT("|*.raw;*.gcp"))));
|
||||||
|
|
||||||
if (!filename.empty())
|
if (!filename.empty())
|
||||||
{
|
{
|
||||||
|
@ -1242,7 +1242,7 @@ void CConfigMain::AddRemoveISOPaths(wxCommandEvent& event)
|
||||||
SConfig::GetInstance().m_ISOFolder.clear();
|
SConfig::GetInstance().m_ISOFolder.clear();
|
||||||
|
|
||||||
for (unsigned int i = 0; i < ISOPaths->GetCount(); i++)
|
for (unsigned int i = 0; i < ISOPaths->GetCount(); i++)
|
||||||
SConfig::GetInstance().m_ISOFolder.push_back(std::string(ISOPaths->GetStrings()[i].mb_str()));
|
SConfig::GetInstance().m_ISOFolder.push_back(WxStrToStr(ISOPaths->GetStrings()[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConfigMain::RecursiveDirectoryChanged(wxCommandEvent& WXUNUSED (event))
|
void CConfigMain::RecursiveDirectoryChanged(wxCommandEvent& WXUNUSED (event))
|
||||||
|
@ -1253,24 +1253,25 @@ void CConfigMain::RecursiveDirectoryChanged(wxCommandEvent& WXUNUSED (event))
|
||||||
|
|
||||||
void CConfigMain::DefaultISOChanged(wxFileDirPickerEvent& WXUNUSED (event))
|
void CConfigMain::DefaultISOChanged(wxFileDirPickerEvent& WXUNUSED (event))
|
||||||
{
|
{
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDefaultGCM = DefaultISO->GetPath().mb_str();
|
SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDefaultGCM = WxStrToStr(DefaultISO->GetPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConfigMain::DVDRootChanged(wxFileDirPickerEvent& WXUNUSED (event))
|
void CConfigMain::DVDRootChanged(wxFileDirPickerEvent& WXUNUSED (event))
|
||||||
{
|
{
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDVDRoot = DVDRoot->GetPath().mb_str();
|
SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDVDRoot = WxStrToStr(DVDRoot->GetPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConfigMain::ApploaderPathChanged(wxFileDirPickerEvent& WXUNUSED (event))
|
void CConfigMain::ApploaderPathChanged(wxFileDirPickerEvent& WXUNUSED (event))
|
||||||
{
|
{
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.m_strApploader = ApploaderPath->GetPath().mb_str();
|
SConfig::GetInstance().m_LocalCoreStartupParameter.m_strApploader = WxStrToStr(ApploaderPath->GetPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConfigMain::NANDRootChanged(wxFileDirPickerEvent& WXUNUSED (event))
|
void CConfigMain::NANDRootChanged(wxFileDirPickerEvent& WXUNUSED (event))
|
||||||
{
|
{
|
||||||
std::string NANDPath =
|
std::string NANDPath =
|
||||||
SConfig::GetInstance().m_NANDPath = File::GetUserPath(D_WIIROOT_IDX, std::string(NANDRoot->GetPath().mb_str()));
|
SConfig::GetInstance().m_NANDPath =
|
||||||
NANDRoot->SetPath(wxString(NANDPath.c_str(), *wxConvCurrent));
|
File::GetUserPath(D_WIIROOT_IDX, WxStrToStr(NANDRoot->GetPath()));
|
||||||
|
NANDRoot->SetPath(StrToWxStr(NANDPath));
|
||||||
SConfig::GetInstance().m_SYSCONF->UpdateLocation();
|
SConfig::GetInstance().m_SYSCONF->UpdateLocation();
|
||||||
DiscIO::cUIDsys::AccessInstance().UpdateLocation();
|
DiscIO::cUIDsys::AccessInstance().UpdateLocation();
|
||||||
DiscIO::CSharedContent::AccessInstance().UpdateLocation();
|
DiscIO::CSharedContent::AccessInstance().UpdateLocation();
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
#include "PowerPC/PowerPC.h"
|
#include "PowerPC/PowerPC.h"
|
||||||
#include "BreakpointWindow.h"
|
#include "BreakpointWindow.h"
|
||||||
|
#include "../WxUtils.h"
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(BreakPointDlg, wxDialog)
|
BEGIN_EVENT_TABLE(BreakPointDlg, wxDialog)
|
||||||
EVT_BUTTON(wxID_OK, BreakPointDlg::OnOK)
|
EVT_BUTTON(wxID_OK, BreakPointDlg::OnOK)
|
||||||
|
@ -42,14 +43,14 @@ void BreakPointDlg::OnOK(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
wxString AddressString = m_pEditAddress->GetLineText(0);
|
wxString AddressString = m_pEditAddress->GetLineText(0);
|
||||||
u32 Address = 0;
|
u32 Address = 0;
|
||||||
if (AsciiToHex(AddressString.mb_str(), Address))
|
if (AsciiToHex(WxStrToStr(AddressString).c_str(), Address))
|
||||||
{
|
{
|
||||||
PowerPC::breakpoints.Add(Address);
|
PowerPC::breakpoints.Add(Address);
|
||||||
Parent->NotifyUpdate();
|
Parent->NotifyUpdate();
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
PanicAlert("The address %s is invalid.", (const char *)AddressString.ToUTF8());
|
PanicAlert("The address %s is invalid.", WxStrToStr(AddressString).c_str());
|
||||||
|
|
||||||
event.Skip();
|
event.Skip();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "PowerPC/PPCSymbolDB.h"
|
#include "PowerPC/PPCSymbolDB.h"
|
||||||
#include "PowerPC/PowerPC.h"
|
#include "PowerPC/PowerPC.h"
|
||||||
#include "HW/Memmap.h"
|
#include "HW/Memmap.h"
|
||||||
|
#include "../WxUtils.h"
|
||||||
|
|
||||||
CBreakPointView::CBreakPointView(wxWindow* parent, const wxWindowID id)
|
CBreakPointView::CBreakPointView(wxWindow* parent, const wxWindowID id)
|
||||||
: wxListCtrl(parent, id, wxDefaultPosition, wxDefaultSize,
|
: wxListCtrl(parent, id, wxDefaultPosition, wxDefaultSize,
|
||||||
|
@ -50,20 +51,20 @@ void CBreakPointView::Update()
|
||||||
if (!rBP.bTemporary)
|
if (!rBP.bTemporary)
|
||||||
{
|
{
|
||||||
wxString temp;
|
wxString temp;
|
||||||
temp = wxString::FromAscii(rBP.bOn ? "on" : " ");
|
temp = StrToWxStr(rBP.bOn ? "on" : " ");
|
||||||
int Item = InsertItem(0, temp);
|
int Item = InsertItem(0, temp);
|
||||||
temp = wxString::FromAscii("BP");
|
temp = StrToWxStr("BP");
|
||||||
SetItem(Item, 1, temp);
|
SetItem(Item, 1, temp);
|
||||||
|
|
||||||
Symbol *symbol = g_symbolDB.GetSymbolFromAddr(rBP.iAddress);
|
Symbol *symbol = g_symbolDB.GetSymbolFromAddr(rBP.iAddress);
|
||||||
if (symbol)
|
if (symbol)
|
||||||
{
|
{
|
||||||
temp = wxString::FromAscii(g_symbolDB.GetDescription(rBP.iAddress));
|
temp = StrToWxStr(g_symbolDB.GetDescription(rBP.iAddress));
|
||||||
SetItem(Item, 2, temp);
|
SetItem(Item, 2, temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(szBuffer, "%08x", rBP.iAddress);
|
sprintf(szBuffer, "%08x", rBP.iAddress);
|
||||||
temp = wxString::FromAscii(szBuffer);
|
temp = StrToWxStr(szBuffer);
|
||||||
SetItem(Item, 3, temp);
|
SetItem(Item, 3, temp);
|
||||||
|
|
||||||
SetItemData(Item, rBP.iAddress);
|
SetItemData(Item, rBP.iAddress);
|
||||||
|
@ -76,27 +77,27 @@ void CBreakPointView::Update()
|
||||||
const TMemCheck& rMemCheck = rMemChecks[i];
|
const TMemCheck& rMemCheck = rMemChecks[i];
|
||||||
|
|
||||||
wxString temp;
|
wxString temp;
|
||||||
temp = wxString::FromAscii((rMemCheck.Break || rMemCheck.Log) ? "on" : " ");
|
temp = StrToWxStr((rMemCheck.Break || rMemCheck.Log) ? "on" : " ");
|
||||||
int Item = InsertItem(0, temp);
|
int Item = InsertItem(0, temp);
|
||||||
temp = wxString::FromAscii("MC");
|
temp = StrToWxStr("MC");
|
||||||
SetItem(Item, 1, temp);
|
SetItem(Item, 1, temp);
|
||||||
|
|
||||||
Symbol *symbol = g_symbolDB.GetSymbolFromAddr(rMemCheck.StartAddress);
|
Symbol *symbol = g_symbolDB.GetSymbolFromAddr(rMemCheck.StartAddress);
|
||||||
if (symbol)
|
if (symbol)
|
||||||
{
|
{
|
||||||
temp = wxString::FromAscii(g_symbolDB.GetDescription(rMemCheck.StartAddress));
|
temp = StrToWxStr(g_symbolDB.GetDescription(rMemCheck.StartAddress));
|
||||||
SetItem(Item, 2, temp);
|
SetItem(Item, 2, temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(szBuffer, "%08x to %08x", rMemCheck.StartAddress, rMemCheck.EndAddress);
|
sprintf(szBuffer, "%08x to %08x", rMemCheck.StartAddress, rMemCheck.EndAddress);
|
||||||
temp = wxString::FromAscii(szBuffer);
|
temp = StrToWxStr(szBuffer);
|
||||||
SetItem(Item, 3, temp);
|
SetItem(Item, 3, temp);
|
||||||
|
|
||||||
size_t c = 0;
|
size_t c = 0;
|
||||||
if (rMemCheck.OnRead) szBuffer[c++] = 'r';
|
if (rMemCheck.OnRead) szBuffer[c++] = 'r';
|
||||||
if (rMemCheck.OnWrite) szBuffer[c++] = 'w';
|
if (rMemCheck.OnWrite) szBuffer[c++] = 'w';
|
||||||
szBuffer[c] = 0x00;
|
szBuffer[c] = 0x00;
|
||||||
temp = wxString::FromAscii(szBuffer);
|
temp = StrToWxStr(szBuffer);
|
||||||
SetItem(Item, 4, temp);
|
SetItem(Item, 4, temp);
|
||||||
|
|
||||||
SetItemData(Item, rMemCheck.StartAddress);
|
SetItemData(Item, rMemCheck.StartAddress);
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "Host.h"
|
#include "Host.h"
|
||||||
#include "CodeView.h"
|
#include "CodeView.h"
|
||||||
#include "SymbolDB.h"
|
#include "SymbolDB.h"
|
||||||
|
#include "../WxUtils.h"
|
||||||
|
|
||||||
#include <wx/event.h>
|
#include <wx/event.h>
|
||||||
#include <wx/clipbrd.h>
|
#include <wx/clipbrd.h>
|
||||||
|
@ -223,7 +224,7 @@ void CCodeView::OnPopupMenu(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
char disasm[256];
|
char disasm[256];
|
||||||
debugger->disasm(selection, disasm, 256);
|
debugger->disasm(selection, disasm, 256);
|
||||||
wxTheClipboard->SetData(new wxTextDataObject(wxString::FromAscii(disasm)));
|
wxTheClipboard->SetData(new wxTextDataObject(StrToWxStr(disasm)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -231,7 +232,7 @@ void CCodeView::OnPopupMenu(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
char temp[24];
|
char temp[24];
|
||||||
sprintf(temp, "%08x", debugger->readInstruction(selection));
|
sprintf(temp, "%08x", debugger->readInstruction(selection));
|
||||||
wxTheClipboard->SetData(new wxTextDataObject(wxString::FromAscii(temp)));
|
wxTheClipboard->SetData(new wxTextDataObject(StrToWxStr(temp)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -252,7 +253,7 @@ void CCodeView::OnPopupMenu(wxCommandEvent& event)
|
||||||
debugger->disasm(addr, disasm, 256);
|
debugger->disasm(addr, disasm, 256);
|
||||||
text = text + StringFromFormat("%08x: ", addr) + disasm + "\r\n";
|
text = text + StringFromFormat("%08x: ", addr) + disasm + "\r\n";
|
||||||
}
|
}
|
||||||
wxTheClipboard->SetData(new wxTextDataObject(wxString::FromAscii(text.c_str())));
|
wxTheClipboard->SetData(new wxTextDataObject(StrToWxStr(text)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -297,12 +298,12 @@ void CCodeView::OnPopupMenu(wxCommandEvent& event)
|
||||||
Symbol *symbol = symbol_db->GetSymbolFromAddr(selection);
|
Symbol *symbol = symbol_db->GetSymbolFromAddr(selection);
|
||||||
if (symbol)
|
if (symbol)
|
||||||
{
|
{
|
||||||
wxTextEntryDialog input_symbol(this, wxString::FromAscii("Rename symbol:"),
|
wxTextEntryDialog input_symbol(this, StrToWxStr("Rename symbol:"),
|
||||||
wxGetTextFromUserPromptStr,
|
wxGetTextFromUserPromptStr,
|
||||||
wxString::FromAscii(symbol->name.c_str()));
|
StrToWxStr(symbol->name));
|
||||||
if (input_symbol.ShowModal() == wxID_OK)
|
if (input_symbol.ShowModal() == wxID_OK)
|
||||||
{
|
{
|
||||||
symbol->name = input_symbol.GetValue().mb_str();
|
symbol->name = WxStrToStr(input_symbol.GetValue());
|
||||||
Refresh(); // Redraw to show the renamed symbol
|
Refresh(); // Redraw to show the renamed symbol
|
||||||
}
|
}
|
||||||
Host_NotifyMapLoaded();
|
Host_NotifyMapLoaded();
|
||||||
|
@ -327,23 +328,23 @@ void CCodeView::OnMouseUpR(wxMouseEvent& event)
|
||||||
wxMenu* menu = new wxMenu;
|
wxMenu* menu = new wxMenu;
|
||||||
//menu->Append(IDM_GOTOINMEMVIEW, "&Goto in mem view");
|
//menu->Append(IDM_GOTOINMEMVIEW, "&Goto in mem view");
|
||||||
menu->Append(IDM_FOLLOWBRANCH,
|
menu->Append(IDM_FOLLOWBRANCH,
|
||||||
wxString::FromAscii("&Follow branch"))->Enable(AddrToBranch(selection) ? true : false);
|
StrToWxStr("&Follow branch"))->Enable(AddrToBranch(selection) ? true : false);
|
||||||
menu->AppendSeparator();
|
menu->AppendSeparator();
|
||||||
#if wxUSE_CLIPBOARD
|
#if wxUSE_CLIPBOARD
|
||||||
menu->Append(IDM_COPYADDRESS, wxString::FromAscii("Copy &address"));
|
menu->Append(IDM_COPYADDRESS, StrToWxStr("Copy &address"));
|
||||||
menu->Append(IDM_COPYFUNCTION, wxString::FromAscii("Copy &function"))->Enable(isSymbol);
|
menu->Append(IDM_COPYFUNCTION, StrToWxStr("Copy &function"))->Enable(isSymbol);
|
||||||
menu->Append(IDM_COPYCODE, wxString::FromAscii("Copy &code line"));
|
menu->Append(IDM_COPYCODE, StrToWxStr("Copy &code line"));
|
||||||
menu->Append(IDM_COPYHEX, wxString::FromAscii("Copy &hex"));
|
menu->Append(IDM_COPYHEX, StrToWxStr("Copy &hex"));
|
||||||
menu->AppendSeparator();
|
menu->AppendSeparator();
|
||||||
#endif
|
#endif
|
||||||
menu->Append(IDM_RENAMESYMBOL, wxString::FromAscii("Rename &symbol"))->Enable(isSymbol);
|
menu->Append(IDM_RENAMESYMBOL, StrToWxStr("Rename &symbol"))->Enable(isSymbol);
|
||||||
menu->AppendSeparator();
|
menu->AppendSeparator();
|
||||||
menu->Append(IDM_RUNTOHERE, _("&Run To Here"));
|
menu->Append(IDM_RUNTOHERE, _("&Run To Here"));
|
||||||
menu->Append(IDM_ADDFUNCTION, _("&Add function"));
|
menu->Append(IDM_ADDFUNCTION, _("&Add function"));
|
||||||
menu->Append(IDM_JITRESULTS, wxString::FromAscii("PPC vs X86"));
|
menu->Append(IDM_JITRESULTS, StrToWxStr("PPC vs X86"));
|
||||||
menu->Append(IDM_INSERTBLR, wxString::FromAscii("Insert &blr"));
|
menu->Append(IDM_INSERTBLR, StrToWxStr("Insert &blr"));
|
||||||
menu->Append(IDM_INSERTNOP, wxString::FromAscii("Insert &nop"));
|
menu->Append(IDM_INSERTNOP, StrToWxStr("Insert &nop"));
|
||||||
menu->Append(IDM_PATCHALERT, wxString::FromAscii("Patch alert"));
|
menu->Append(IDM_PATCHALERT, StrToWxStr("Patch alert"));
|
||||||
PopupMenu(menu);
|
PopupMenu(menu);
|
||||||
event.Skip(true);
|
event.Skip(true);
|
||||||
}
|
}
|
||||||
|
@ -489,7 +490,7 @@ void CCodeView::OnPaint(wxPaintEvent& event)
|
||||||
dc.SetTextForeground(_T("#000000"));
|
dc.SetTextForeground(_T("#000000"));
|
||||||
}
|
}
|
||||||
|
|
||||||
dc.DrawText(wxString::FromAscii(dis2), 17 + 17*charWidth, rowY1);
|
dc.DrawText(StrToWxStr(dis2), 17 + 17*charWidth, rowY1);
|
||||||
// ------------
|
// ------------
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -499,7 +500,7 @@ void CCodeView::OnPaint(wxPaintEvent& event)
|
||||||
else
|
else
|
||||||
dc.SetTextForeground(_T("#8000FF")); // purple
|
dc.SetTextForeground(_T("#8000FF")); // purple
|
||||||
|
|
||||||
dc.DrawText(wxString::FromAscii(dis), 17 + (plain ? 1*charWidth : 9*charWidth), rowY1);
|
dc.DrawText(StrToWxStr(dis), 17 + (plain ? 1*charWidth : 9*charWidth), rowY1);
|
||||||
|
|
||||||
if (desc[0] == 0)
|
if (desc[0] == 0)
|
||||||
{
|
{
|
||||||
|
@ -513,7 +514,7 @@ void CCodeView::OnPaint(wxPaintEvent& event)
|
||||||
//UnDecorateSymbolName(desc,temp,255,UNDNAME_COMPLETE);
|
//UnDecorateSymbolName(desc,temp,255,UNDNAME_COMPLETE);
|
||||||
if (strlen(desc))
|
if (strlen(desc))
|
||||||
{
|
{
|
||||||
dc.DrawText(wxString::FromAscii(desc), 17 + 35 * charWidth, rowY1);
|
dc.DrawText(StrToWxStr(desc), 17 + 35 * charWidth, rowY1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "CodeWindow.h"
|
#include "CodeWindow.h"
|
||||||
#include "CodeView.h"
|
#include "CodeView.h"
|
||||||
|
|
||||||
|
#include "../WxUtils.h"
|
||||||
#include "FileUtil.h"
|
#include "FileUtil.h"
|
||||||
#include "Core.h"
|
#include "Core.h"
|
||||||
#include "HW/Memmap.h"
|
#include "HW/Memmap.h"
|
||||||
|
@ -210,7 +211,7 @@ void CCodeWindow::OnAddrBoxChange(wxCommandEvent& event)
|
||||||
wxTextCtrl* pAddrCtrl = (wxTextCtrl*)GetToolBar()->FindControl(IDM_ADDRBOX);
|
wxTextCtrl* pAddrCtrl = (wxTextCtrl*)GetToolBar()->FindControl(IDM_ADDRBOX);
|
||||||
wxString txt = pAddrCtrl->GetValue();
|
wxString txt = pAddrCtrl->GetValue();
|
||||||
|
|
||||||
std::string text(txt.mb_str());
|
std::string text(WxStrToStr(txt));
|
||||||
text = StripSpaces(text);
|
text = StripSpaces(text);
|
||||||
if (text.size() == 8)
|
if (text.size() == 8)
|
||||||
{
|
{
|
||||||
|
@ -312,7 +313,7 @@ void CCodeWindow::UpdateLists()
|
||||||
Symbol *caller_symbol = g_symbolDB.GetSymbolFromAddr(caller_addr);
|
Symbol *caller_symbol = g_symbolDB.GetSymbolFromAddr(caller_addr);
|
||||||
if (caller_symbol)
|
if (caller_symbol)
|
||||||
{
|
{
|
||||||
int idx = callers->Append(wxString::FromAscii(StringFromFormat
|
int idx = callers->Append(StrToWxStr(StringFromFormat
|
||||||
("< %s (%08x)", caller_symbol->name.c_str(), caller_addr).c_str()));
|
("< %s (%08x)", caller_symbol->name.c_str(), caller_addr).c_str()));
|
||||||
callers->SetClientData(idx, (void*)(u64)caller_addr);
|
callers->SetClientData(idx, (void*)(u64)caller_addr);
|
||||||
}
|
}
|
||||||
|
@ -325,7 +326,7 @@ void CCodeWindow::UpdateLists()
|
||||||
Symbol *call_symbol = g_symbolDB.GetSymbolFromAddr(call_addr);
|
Symbol *call_symbol = g_symbolDB.GetSymbolFromAddr(call_addr);
|
||||||
if (call_symbol)
|
if (call_symbol)
|
||||||
{
|
{
|
||||||
int idx = calls->Append(wxString::FromAscii(StringFromFormat
|
int idx = calls->Append(StrToWxStr(StringFromFormat
|
||||||
("> %s (%08x)", call_symbol->name.c_str(), call_addr).c_str()));
|
("> %s (%08x)", call_symbol->name.c_str(), call_addr).c_str()));
|
||||||
calls->SetClientData(idx, (void*)(u64)call_addr);
|
calls->SetClientData(idx, (void*)(u64)call_addr);
|
||||||
}
|
}
|
||||||
|
@ -344,12 +345,12 @@ void CCodeWindow::UpdateCallstack()
|
||||||
|
|
||||||
for (size_t i = 0; i < stack.size(); i++)
|
for (size_t i = 0; i < stack.size(); i++)
|
||||||
{
|
{
|
||||||
int idx = callstack->Append(wxString::FromAscii(stack[i].Name.c_str()));
|
int idx = callstack->Append(StrToWxStr(stack[i].Name));
|
||||||
callstack->SetClientData(idx, (void*)(u64)stack[i].vAddress);
|
callstack->SetClientData(idx, (void*)(u64)stack[i].vAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
callstack->Append(wxString::FromAscii("invalid callstack"));
|
callstack->Append(StrToWxStr("invalid callstack"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create CPU Mode menus
|
// Create CPU Mode menus
|
||||||
|
@ -360,7 +361,7 @@ void CCodeWindow::CreateMenu(const SCoreStartupParameter& _LocalCoreStartupParam
|
||||||
wxMenu* pCoreMenu = new wxMenu;
|
wxMenu* pCoreMenu = new wxMenu;
|
||||||
|
|
||||||
wxMenuItem* interpreter = pCoreMenu->Append(IDM_INTERPRETER, _("&Interpreter core"),
|
wxMenuItem* interpreter = pCoreMenu->Append(IDM_INTERPRETER, _("&Interpreter core"),
|
||||||
wxString::FromAscii("This is necessary to get break points"
|
StrToWxStr("This is necessary to get break points"
|
||||||
" and stepping to work as explained in the Developer Documentation. But it can be very"
|
" and stepping to work as explained in the Developer Documentation. But it can be very"
|
||||||
" slow, perhaps slower than 1 fps."),
|
" slow, perhaps slower than 1 fps."),
|
||||||
wxITEM_CHECK);
|
wxITEM_CHECK);
|
||||||
|
@ -428,7 +429,7 @@ void CCodeWindow::CreateMenuOptions(wxMenu* pMenu)
|
||||||
boottopause->Check(bBootToPause);
|
boottopause->Check(bBootToPause);
|
||||||
|
|
||||||
wxMenuItem* automaticstart = pMenu->Append(IDM_AUTOMATICSTART, _("&Automatic start"),
|
wxMenuItem* automaticstart = pMenu->Append(IDM_AUTOMATICSTART, _("&Automatic start"),
|
||||||
wxString::FromAscii(
|
StrToWxStr(
|
||||||
"Automatically load the Default ISO when Dolphin starts, or the last game you loaded,"
|
"Automatically load the Default ISO when Dolphin starts, or the last game you loaded,"
|
||||||
" if you have not given it an elf file with the --elf command line. [This can be"
|
" if you have not given it an elf file with the --elf command line. [This can be"
|
||||||
" convenient if you are bug-testing with a certain game and want to rebuild"
|
" convenient if you are bug-testing with a certain game and want to rebuild"
|
||||||
|
@ -515,10 +516,10 @@ void CCodeWindow::OnJitMenu(wxCommandEvent& event)
|
||||||
for (u32 addr = 0x80000000; addr < 0x80100000; addr += 4)
|
for (u32 addr = 0x80000000; addr < 0x80100000; addr += 4)
|
||||||
{
|
{
|
||||||
const char *name = PPCTables::GetInstructionName(Memory::ReadUnchecked_U32(addr));
|
const char *name = PPCTables::GetInstructionName(Memory::ReadUnchecked_U32(addr));
|
||||||
if (name && !strcmp((const char *)str.mb_str(), name))
|
auto const wx_name = WxStrToStr(str);
|
||||||
|
if (name && (wx_name == name))
|
||||||
{
|
{
|
||||||
std::string mb_str(str.mb_str());
|
NOTICE_LOG(POWERPC, "Found %s at %08x", wx_name.c_str(), addr);
|
||||||
NOTICE_LOG(POWERPC, "Found %s at %08x", mb_str.c_str(), addr);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#include "DebuggerUIUtil.h"
|
#include "DebuggerUIUtil.h"
|
||||||
|
|
||||||
|
#include "../WxUtils.h"
|
||||||
#include "RegisterWindow.h"
|
#include "RegisterWindow.h"
|
||||||
#include "BreakpointWindow.h"
|
#include "BreakpointWindow.h"
|
||||||
#include "MemoryWindow.h"
|
#include "MemoryWindow.h"
|
||||||
|
@ -65,7 +66,7 @@ void CCodeWindow::Load()
|
||||||
std::string fontDesc;
|
std::string fontDesc;
|
||||||
ini.Get("General", "DebuggerFont", &fontDesc);
|
ini.Get("General", "DebuggerFont", &fontDesc);
|
||||||
if (!fontDesc.empty())
|
if (!fontDesc.empty())
|
||||||
DebuggerFont.SetNativeFontInfoUserDesc(wxString::FromAscii(fontDesc.c_str()));
|
DebuggerFont.SetNativeFontInfoUserDesc(StrToWxStr(fontDesc));
|
||||||
|
|
||||||
// Boot to pause or not
|
// Boot to pause or not
|
||||||
ini.Get("General", "AutomaticStart", &bAutomaticStart, false);
|
ini.Get("General", "AutomaticStart", &bAutomaticStart, false);
|
||||||
|
@ -107,7 +108,7 @@ void CCodeWindow::Save()
|
||||||
ini.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX));
|
ini.Load(File::GetUserPath(F_DEBUGGERCONFIG_IDX));
|
||||||
|
|
||||||
ini.Set("General", "DebuggerFont",
|
ini.Set("General", "DebuggerFont",
|
||||||
std::string(DebuggerFont.GetNativeFontInfoUserDesc().mb_str()));
|
WxStrToStr(DebuggerFont.GetNativeFontInfoUserDesc()));
|
||||||
|
|
||||||
// Boot to pause or not
|
// Boot to pause or not
|
||||||
ini.Set("General", "AutomaticStart", GetMenuBar()->IsChecked(IDM_AUTOMATICSTART));
|
ini.Set("General", "AutomaticStart", GetMenuBar()->IsChecked(IDM_AUTOMATICSTART));
|
||||||
|
@ -154,7 +155,7 @@ void CCodeWindow::CreateMenuSymbols(wxMenuBar *pMenuBar)
|
||||||
pSymbolsMenu->Append(IDM_SAVEMAPFILE, _("&Save symbol map"));
|
pSymbolsMenu->Append(IDM_SAVEMAPFILE, _("&Save symbol map"));
|
||||||
pSymbolsMenu->AppendSeparator();
|
pSymbolsMenu->AppendSeparator();
|
||||||
pSymbolsMenu->Append(IDM_SAVEMAPFILEWITHCODES, _("Save code"),
|
pSymbolsMenu->Append(IDM_SAVEMAPFILEWITHCODES, _("Save code"),
|
||||||
wxString::FromAscii("Save the entire disassembled code. This may take a several seconds"
|
StrToWxStr("Save the entire disassembled code. This may take a several seconds"
|
||||||
" and may require between 50 and 100 MB of hard drive space. It will only save code"
|
" and may require between 50 and 100 MB of hard drive space. It will only save code"
|
||||||
" that are in the first 4 MB of memory, if you are debugging a game that load .rel"
|
" that are in the first 4 MB of memory, if you are debugging a game that load .rel"
|
||||||
" files with code to memory you may want to increase that to perhaps 8 MB, you can do"
|
" files with code to memory you may want to increase that to perhaps 8 MB, you can do"
|
||||||
|
@ -208,7 +209,7 @@ void CCodeWindow::OnProfilerMenu(wxCommandEvent& event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
wxString OpenCommand;
|
wxString OpenCommand;
|
||||||
OpenCommand = filetype->GetOpenCommand(wxString::From8BitData(filename.c_str()));
|
OpenCommand = filetype->GetOpenCommand(StrToWxStr(filename));
|
||||||
if(!OpenCommand.IsEmpty())
|
if(!OpenCommand.IsEmpty())
|
||||||
wxExecute(OpenCommand, wxEXEC_SYNC);
|
wxExecute(OpenCommand, wxEXEC_SYNC);
|
||||||
}
|
}
|
||||||
|
@ -284,7 +285,8 @@ void CCodeWindow::OnSymbolsMenu(wxCommandEvent& event)
|
||||||
|
|
||||||
if (!path.IsEmpty())
|
if (!path.IsEmpty())
|
||||||
{
|
{
|
||||||
std::ifstream f(path.mb_str());
|
std::ifstream f;
|
||||||
|
OpenFStream(f, WxStrToStr(path), std::ios_base::in);
|
||||||
|
|
||||||
std::string line;
|
std::string line;
|
||||||
while (std::getline(f, line))
|
while (std::getline(f, line))
|
||||||
|
@ -312,13 +314,13 @@ void CCodeWindow::OnSymbolsMenu(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
wxTextEntryDialog input_prefix(
|
wxTextEntryDialog input_prefix(
|
||||||
this,
|
this,
|
||||||
wxString::FromAscii("Only export symbols with prefix:\n(Blank for all symbols)"),
|
StrToWxStr("Only export symbols with prefix:\n(Blank for all symbols)"),
|
||||||
wxGetTextFromUserPromptStr,
|
wxGetTextFromUserPromptStr,
|
||||||
wxEmptyString);
|
wxEmptyString);
|
||||||
|
|
||||||
if (input_prefix.ShowModal() == wxID_OK)
|
if (input_prefix.ShowModal() == wxID_OK)
|
||||||
{
|
{
|
||||||
std::string prefix(input_prefix.GetValue().mb_str());
|
std::string prefix(WxStrToStr(input_prefix.GetValue()));
|
||||||
|
|
||||||
wxString path = wxFileSelector(
|
wxString path = wxFileSelector(
|
||||||
_T("Save signature as"), wxEmptyString, wxEmptyString, wxEmptyString,
|
_T("Save signature as"), wxEmptyString, wxEmptyString, wxEmptyString,
|
||||||
|
@ -328,8 +330,7 @@ void CCodeWindow::OnSymbolsMenu(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
SignatureDB db;
|
SignatureDB db;
|
||||||
db.Initialize(&g_symbolDB, prefix.c_str());
|
db.Initialize(&g_symbolDB, prefix.c_str());
|
||||||
std::string filename(path.mb_str());
|
db.Save(WxStrToStr(path).c_str());
|
||||||
db.Save(path.mb_str());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -343,7 +344,7 @@ void CCodeWindow::OnSymbolsMenu(wxCommandEvent& event)
|
||||||
if (!path.IsEmpty())
|
if (!path.IsEmpty())
|
||||||
{
|
{
|
||||||
SignatureDB db;
|
SignatureDB db;
|
||||||
db.Load(path.mb_str());
|
db.Load(WxStrToStr(path).c_str());
|
||||||
db.Apply(&g_symbolDB);
|
db.Apply(&g_symbolDB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -366,7 +367,7 @@ void CCodeWindow::NotifyMapLoaded()
|
||||||
symbols->Clear();
|
symbols->Clear();
|
||||||
for (PPCSymbolDB::XFuncMap::iterator iter = g_symbolDB.GetIterator(); iter != g_symbolDB.End(); ++iter)
|
for (PPCSymbolDB::XFuncMap::iterator iter = g_symbolDB.GetIterator(); iter != g_symbolDB.End(); ++iter)
|
||||||
{
|
{
|
||||||
int idx = symbols->Append(wxString::FromAscii(iter->second.name.c_str()));
|
int idx = symbols->Append(StrToWxStr(iter->second.name));
|
||||||
symbols->SetClientData(idx, (void*)&iter->second);
|
symbols->SetClientData(idx, (void*)&iter->second);
|
||||||
}
|
}
|
||||||
symbols->Thaw();
|
symbols->Thaw();
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
#include <wx/artprov.h>
|
#include <wx/artprov.h>
|
||||||
|
|
||||||
|
#include "../WxUtils.h"
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
#include "DSPDebugWindow.h"
|
#include "DSPDebugWindow.h"
|
||||||
#include "DSPRegisterView.h"
|
#include "DSPRegisterView.h"
|
||||||
|
@ -220,7 +221,7 @@ void DSPDebuggerLLE::UpdateSymbolMap()
|
||||||
for (SymbolDB::XFuncMap::iterator iter = DSPSymbols::g_dsp_symbol_db.GetIterator();
|
for (SymbolDB::XFuncMap::iterator iter = DSPSymbols::g_dsp_symbol_db.GetIterator();
|
||||||
iter != DSPSymbols::g_dsp_symbol_db.End(); ++iter)
|
iter != DSPSymbols::g_dsp_symbol_db.End(); ++iter)
|
||||||
{
|
{
|
||||||
int idx = m_SymbolList->Append(wxString::FromAscii(iter->second.name.c_str()));
|
int idx = m_SymbolList->Append(StrToWxStr(iter->second.name));
|
||||||
m_SymbolList->SetClientData(idx, (void*)&iter->second);
|
m_SymbolList->SetClientData(idx, (void*)&iter->second);
|
||||||
}
|
}
|
||||||
m_SymbolList->Thaw();
|
m_SymbolList->Thaw();
|
||||||
|
@ -250,8 +251,7 @@ void DSPDebuggerLLE::OnAddrBoxChange(wxCommandEvent& event)
|
||||||
wxTextCtrl* pAddrCtrl = (wxTextCtrl*)m_Toolbar->FindControl(ID_ADDRBOX);
|
wxTextCtrl* pAddrCtrl = (wxTextCtrl*)m_Toolbar->FindControl(ID_ADDRBOX);
|
||||||
wxString txt = pAddrCtrl->GetValue();
|
wxString txt = pAddrCtrl->GetValue();
|
||||||
|
|
||||||
std::string text(txt.mb_str());
|
auto text = StripSpaces(WxStrToStr(txt));
|
||||||
text = StripSpaces(text);
|
|
||||||
if (text.size())
|
if (text.size())
|
||||||
{
|
{
|
||||||
u32 addr;
|
u32 addr;
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
#include "DSPDebugWindow.h"
|
#include "DSPDebugWindow.h"
|
||||||
#include "DSPRegisterView.h"
|
#include "DSPRegisterView.h"
|
||||||
|
#include "../WxUtils.h"
|
||||||
|
|
||||||
wxString CDSPRegTable::GetValue(int row, int col)
|
wxString CDSPRegTable::GetValue(int row, int col)
|
||||||
{
|
{
|
||||||
|
@ -25,7 +25,7 @@ wxString CDSPRegTable::GetValue(int row, int col)
|
||||||
{
|
{
|
||||||
switch (col)
|
switch (col)
|
||||||
{
|
{
|
||||||
case 0: return wxString::FromAscii(pdregname(row));
|
case 0: return StrToWxStr(pdregname(row));
|
||||||
case 1: return wxString::Format(wxT("0x%04x"), DSPCore_ReadRegister(row));
|
case 1: return wxString::Format(wxT("0x%04x"), DSPCore_ReadRegister(row));
|
||||||
default: return wxEmptyString;
|
default: return wxEmptyString;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include "Core.h"
|
#include "Core.h"
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
#include "LogManager.h"
|
#include "LogManager.h"
|
||||||
|
#include "../WxUtils.h"
|
||||||
|
|
||||||
#include "../Globals.h"
|
#include "../Globals.h"
|
||||||
|
|
||||||
|
@ -119,9 +120,9 @@ void CJitWindow::Compare(u32 em_address)
|
||||||
}
|
}
|
||||||
// Do not merge this "if" with the above - block_num changes inside it.
|
// Do not merge this "if" with the above - block_num changes inside it.
|
||||||
if (block_num < 0) {
|
if (block_num < 0) {
|
||||||
ppc_box->SetValue(wxString::FromAscii(StringFromFormat("(non-code address: %08x)",
|
ppc_box->SetValue(StrToWxStr(StringFromFormat("(non-code address: %08x)",
|
||||||
em_address).c_str()));
|
em_address)));
|
||||||
x86_box->SetValue(wxString::FromAscii(StringFromFormat("(no translation)").c_str()));
|
x86_box->SetValue(StrToWxStr(StringFromFormat("(no translation)")));
|
||||||
delete[] xDis;
|
delete[] xDis;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -150,7 +151,7 @@ void CJitWindow::Compare(u32 em_address)
|
||||||
*sptr++ = 10;
|
*sptr++ = 10;
|
||||||
num_x86_instructions++;
|
num_x86_instructions++;
|
||||||
}
|
}
|
||||||
x86_box->SetValue(wxString::FromAscii((char*)xDis));
|
x86_box->SetValue(StrToWxStr((char*)xDis));
|
||||||
|
|
||||||
// == Fill in ppc box
|
// == Fill in ppc box
|
||||||
u32 ppc_addr = block->originalAddress;
|
u32 ppc_addr = block->originalAddress;
|
||||||
|
@ -189,11 +190,11 @@ void CJitWindow::Compare(u32 em_address)
|
||||||
sptr += sprintf(sptr, "Num bytes: PPC: %i x86: %i (blowup: %i%%)\n",
|
sptr += sprintf(sptr, "Num bytes: PPC: %i x86: %i (blowup: %i%%)\n",
|
||||||
size * 4, block->codeSize, 100 * (block->codeSize / (4 * size) - 1));
|
size * 4, block->codeSize, 100 * (block->codeSize / (4 * size) - 1));
|
||||||
|
|
||||||
ppc_box->SetValue(wxString::FromAscii((char*)xDis));
|
ppc_box->SetValue(StrToWxStr((char*)xDis));
|
||||||
} else {
|
} else {
|
||||||
ppc_box->SetValue(wxString::FromAscii(StringFromFormat(
|
ppc_box->SetValue(StrToWxStr(StringFromFormat(
|
||||||
"(non-code address: %08x)", em_address).c_str()));
|
"(non-code address: %08x)", em_address)));
|
||||||
x86_box->SetValue(wxString::FromAscii("---"));
|
x86_box->SetValue("---");
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] xDis;
|
delete[] xDis;
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
// Official SVN repository and contact information can be found at
|
// Official SVN repository and contact information can be found at
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
|
#include "../WxUtils.h"
|
||||||
#include "MemoryCheckDlg.h"
|
#include "MemoryCheckDlg.h"
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
|
@ -79,9 +80,9 @@ void MemoryCheckDlg::OnOK(wxCommandEvent& event)
|
||||||
|
|
||||||
u32 StartAddress, EndAddress;
|
u32 StartAddress, EndAddress;
|
||||||
bool EndAddressOK = EndAddressString.Len() &&
|
bool EndAddressOK = EndAddressString.Len() &&
|
||||||
AsciiToHex(EndAddressString.mb_str(), EndAddress);
|
AsciiToHex(WxStrToStr(EndAddressString).c_str(), EndAddress);
|
||||||
|
|
||||||
if (AsciiToHex(StartAddressString.mb_str(), StartAddress) &&
|
if (AsciiToHex(WxStrToStr(StartAddressString).c_str(), StartAddress) &&
|
||||||
(OnRead || OnWrite) && (Log || Break))
|
(OnRead || OnWrite) && (Log || Break))
|
||||||
{
|
{
|
||||||
TMemCheck MemCheck;
|
TMemCheck MemCheck;
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
#include "HW/Memmap.h"
|
#include "HW/Memmap.h"
|
||||||
|
|
||||||
#include "MemoryView.h"
|
#include "MemoryView.h"
|
||||||
|
#include "../WxUtils.h"
|
||||||
|
|
||||||
#include <wx/event.h>
|
#include <wx/event.h>
|
||||||
#include <wx/clipbrd.h>
|
#include <wx/clipbrd.h>
|
||||||
|
|
||||||
|
@ -149,7 +151,7 @@ void CMemoryView::OnPopupMenu(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
char temp[24];
|
char temp[24];
|
||||||
sprintf(temp, "%08x", debugger->readExtraMemory(memory, selection));
|
sprintf(temp, "%08x", debugger->readExtraMemory(memory, selection));
|
||||||
wxTheClipboard->SetData(new wxTextDataObject(wxString::FromAscii(temp)));
|
wxTheClipboard->SetData(new wxTextDataObject(StrToWxStr(temp)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -186,16 +188,16 @@ void CMemoryView::OnMouseDownR(wxMouseEvent& event)
|
||||||
wxMenu* menu = new wxMenu;
|
wxMenu* menu = new wxMenu;
|
||||||
//menu.Append(IDM_GOTOINMEMVIEW, "&Goto in mem view");
|
//menu.Append(IDM_GOTOINMEMVIEW, "&Goto in mem view");
|
||||||
#if wxUSE_CLIPBOARD
|
#if wxUSE_CLIPBOARD
|
||||||
menu->Append(IDM_COPYADDRESS, wxString::FromAscii("Copy &address"));
|
menu->Append(IDM_COPYADDRESS, StrToWxStr("Copy &address"));
|
||||||
menu->Append(IDM_COPYHEX, wxString::FromAscii("Copy &hex"));
|
menu->Append(IDM_COPYHEX, StrToWxStr("Copy &hex"));
|
||||||
#endif
|
#endif
|
||||||
menu->Append(IDM_TOGGLEMEMORY, wxString::FromAscii("Toggle &memory"));
|
menu->Append(IDM_TOGGLEMEMORY, StrToWxStr("Toggle &memory"));
|
||||||
|
|
||||||
wxMenu* viewAsSubMenu = new wxMenu;
|
wxMenu* viewAsSubMenu = new wxMenu;
|
||||||
viewAsSubMenu->Append(IDM_VIEWASFP, wxString::FromAscii("FP value"));
|
viewAsSubMenu->Append(IDM_VIEWASFP, StrToWxStr("FP value"));
|
||||||
viewAsSubMenu->Append(IDM_VIEWASASCII, wxString::FromAscii("ASCII"));
|
viewAsSubMenu->Append(IDM_VIEWASASCII, StrToWxStr("ASCII"));
|
||||||
viewAsSubMenu->Append(IDM_VIEWASHEX, wxString::FromAscii("Hex"));
|
viewAsSubMenu->Append(IDM_VIEWASHEX, StrToWxStr("Hex"));
|
||||||
menu->AppendSubMenu(viewAsSubMenu, wxString::FromAscii("View As:"));
|
menu->AppendSubMenu(viewAsSubMenu, StrToWxStr("View As:"));
|
||||||
|
|
||||||
PopupMenu(menu);
|
PopupMenu(menu);
|
||||||
}
|
}
|
||||||
|
@ -285,7 +287,7 @@ void CMemoryView::OnPaint(wxPaintEvent& event)
|
||||||
char mem[256];
|
char mem[256];
|
||||||
debugger->getRawMemoryString(memory, address, mem, 256);
|
debugger->getRawMemoryString(memory, address, mem, 256);
|
||||||
dc.SetTextForeground(_T("#000080"));
|
dc.SetTextForeground(_T("#000080"));
|
||||||
dc.DrawText(wxString::FromAscii(mem), 17+fontSize*(8), rowY1);
|
dc.DrawText(StrToWxStr(mem), 17+fontSize*(8), rowY1);
|
||||||
dc.SetTextForeground(_T("#000000"));
|
dc.SetTextForeground(_T("#000000"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,9 +363,9 @@ void CMemoryView::OnPaint(wxPaintEvent& event)
|
||||||
|
|
||||||
char desc[256] = "";
|
char desc[256] = "";
|
||||||
if (viewAsType != VIEWAS_HEX)
|
if (viewAsType != VIEWAS_HEX)
|
||||||
dc.DrawText(wxString::FromAscii(dis), textPlacement + fontSize*(8 + 8), rowY1);
|
dc.DrawText(StrToWxStr(dis), textPlacement + fontSize*(8 + 8), rowY1);
|
||||||
else
|
else
|
||||||
dc.DrawText(wxString::FromAscii(dis), textPlacement, rowY1);
|
dc.DrawText(StrToWxStr(dis), textPlacement, rowY1);
|
||||||
|
|
||||||
if (desc[0] == 0)
|
if (desc[0] == 0)
|
||||||
strcpy(desc, debugger->getDescription(address).c_str());
|
strcpy(desc, debugger->getDescription(address).c_str());
|
||||||
|
@ -371,7 +373,7 @@ void CMemoryView::OnPaint(wxPaintEvent& event)
|
||||||
dc.SetTextForeground(_T("#0000FF"));
|
dc.SetTextForeground(_T("#0000FF"));
|
||||||
|
|
||||||
if (strlen(desc))
|
if (strlen(desc))
|
||||||
dc.DrawText(wxString::FromAscii(desc), 17+fontSize*((8+8+8+30)*2), rowY1);
|
dc.DrawText(StrToWxStr(desc), 17+fontSize*((8+8+8+30)*2), rowY1);
|
||||||
|
|
||||||
// Show blue memory check dot
|
// Show blue memory check dot
|
||||||
if (debugger->isMemCheck(address))
|
if (debugger->isMemCheck(address))
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
#include <wx/listctrl.h>
|
#include <wx/listctrl.h>
|
||||||
#include <wx/thread.h>
|
#include <wx/thread.h>
|
||||||
#include <wx/listctrl.h>
|
#include <wx/listctrl.h>
|
||||||
|
|
||||||
|
#include "../WxUtils.h"
|
||||||
#include "MemoryWindow.h"
|
#include "MemoryWindow.h"
|
||||||
#include "HW/CPU.h"
|
#include "HW/CPU.h"
|
||||||
#include "PowerPC/PowerPC.h"
|
#include "PowerPC/PowerPC.h"
|
||||||
|
@ -152,8 +154,8 @@ void CMemoryWindow::JumpToAddress(u32 _Address)
|
||||||
|
|
||||||
void CMemoryWindow::SetMemoryValue(wxCommandEvent& event)
|
void CMemoryWindow::SetMemoryValue(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
std::string str_addr = std::string(addrbox->GetValue().mb_str());
|
std::string str_addr = WxStrToStr(addrbox->GetValue());
|
||||||
std::string str_val = std::string(valbox->GetValue().mb_str());
|
std::string str_val = WxStrToStr(valbox->GetValue());
|
||||||
u32 addr;
|
u32 addr;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
|
@ -179,7 +181,7 @@ void CMemoryWindow::OnAddrBoxChange(wxCommandEvent& event)
|
||||||
if (txt.size())
|
if (txt.size())
|
||||||
{
|
{
|
||||||
u32 addr;
|
u32 addr;
|
||||||
sscanf(txt.mb_str(), "%08x", &addr);
|
sscanf(WxStrToStr(txt).c_str(), "%08x", &addr);
|
||||||
memview->Center(addr & ~3);
|
memview->Center(addr & ~3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,10 +351,7 @@ void CMemoryWindow::onSearch(wxCommandEvent& event)
|
||||||
tmpstr = new char[newsize + 1];
|
tmpstr = new char[newsize + 1];
|
||||||
memset(tmpstr, 0, newsize + 1);
|
memset(tmpstr, 0, newsize + 1);
|
||||||
}
|
}
|
||||||
//sprintf(tmpstr, "%s%s", tmpstr, rawData.c_str());
|
sprintf(tmpstr, "%s%s", tmpstr, WxStrToStr(rawData).c_str());
|
||||||
//strcpy(&tmpstr[1], rawData.ToAscii());
|
|
||||||
//memcpy(&tmpstr[1], &rawData.c_str()[0], rawData.size());
|
|
||||||
sprintf(tmpstr, "%s%s", tmpstr, (const char *)rawData.mb_str());
|
|
||||||
tmp2 = &Dest.front();
|
tmp2 = &Dest.front();
|
||||||
count = 0;
|
count = 0;
|
||||||
for(i = 0; i < strlen(tmpstr); i++)
|
for(i = 0; i < strlen(tmpstr); i++)
|
||||||
|
@ -376,7 +375,7 @@ void CMemoryWindow::onSearch(wxCommandEvent& event)
|
||||||
tmpstr = new char[size+1];
|
tmpstr = new char[size+1];
|
||||||
|
|
||||||
tmp2 = &Dest.front();
|
tmp2 = &Dest.front();
|
||||||
sprintf(tmpstr, "%s", (const char *)rawData.mb_str());
|
sprintf(tmpstr, "%s", WxStrToStr(rawData).c_str());
|
||||||
|
|
||||||
for(i = 0; i < size; i++)
|
for(i = 0; i < size; i++)
|
||||||
tmp2[i] = tmpstr[i];
|
tmp2[i] = tmpstr[i];
|
||||||
|
@ -393,7 +392,7 @@ void CMemoryWindow::onSearch(wxCommandEvent& event)
|
||||||
u32 addr = 0;
|
u32 addr = 0;
|
||||||
if (txt.size())
|
if (txt.size())
|
||||||
{
|
{
|
||||||
sscanf(txt.mb_str(), "%08x", &addr);
|
sscanf(WxStrToStr(txt).c_str(), "%08x", &addr);
|
||||||
}
|
}
|
||||||
i = addr+4;
|
i = addr+4;
|
||||||
for( ; i < szRAM; i++)
|
for( ; i < szRAM; i++)
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "PowerPC/PowerPC.h"
|
#include "PowerPC/PowerPC.h"
|
||||||
#include "HW/ProcessorInterface.h"
|
#include "HW/ProcessorInterface.h"
|
||||||
#include "IniFile.h"
|
#include "IniFile.h"
|
||||||
|
#include "../WxUtils.h"
|
||||||
|
|
||||||
// F-zero 80005e60 wtf??
|
// F-zero 80005e60 wtf??
|
||||||
|
|
||||||
|
@ -51,9 +52,9 @@ wxString CRegTable::GetValue(int row, int col)
|
||||||
{
|
{
|
||||||
if (row < 32) {
|
if (row < 32) {
|
||||||
switch (col) {
|
switch (col) {
|
||||||
case 0: return wxString::FromAscii(GetGPRName(row));
|
case 0: return StrToWxStr(GetGPRName(row));
|
||||||
case 1: return wxString::Format(wxT("%08x"), GPR(row));
|
case 1: return wxString::Format(wxT("%08x"), GPR(row));
|
||||||
case 2: return wxString::FromAscii(GetFPRName(row));
|
case 2: return StrToWxStr(GetFPRName(row));
|
||||||
case 3: return wxString::Format(wxT("%016llx"), riPS0(row));
|
case 3: return wxString::Format(wxT("%016llx"), riPS0(row));
|
||||||
case 4: return wxString::Format(wxT("%016llx"), riPS1(row));
|
case 4: return wxString::Format(wxT("%016llx"), riPS1(row));
|
||||||
default: return wxEmptyString;
|
default: return wxEmptyString;
|
||||||
|
@ -61,7 +62,7 @@ wxString CRegTable::GetValue(int row, int col)
|
||||||
} else {
|
} else {
|
||||||
if (row - 32 < NUM_SPECIALS) {
|
if (row - 32 < NUM_SPECIALS) {
|
||||||
switch (col) {
|
switch (col) {
|
||||||
case 0: return wxString::FromAscii(special_reg_names[row - 32]);
|
case 0: return StrToWxStr(special_reg_names[row - 32]);
|
||||||
case 1: return wxString::Format(wxT("%08x"), GetSpecialRegValue(row - 32));
|
case 1: return wxString::Format(wxT("%08x"), GetSpecialRegValue(row - 32));
|
||||||
default: return wxEmptyString;
|
default: return wxEmptyString;
|
||||||
}
|
}
|
||||||
|
@ -91,7 +92,7 @@ static void SetSpecialRegValue(int reg, u32 value) {
|
||||||
void CRegTable::SetValue(int row, int col, const wxString& strNewVal)
|
void CRegTable::SetValue(int row, int col, const wxString& strNewVal)
|
||||||
{
|
{
|
||||||
u32 newVal = 0;
|
u32 newVal = 0;
|
||||||
if (TryParse(std::string(strNewVal.mb_str()), &newVal))
|
if (TryParse(WxStrToStr(strNewVal), &newVal))
|
||||||
{
|
{
|
||||||
if (row < 32) {
|
if (row < 32) {
|
||||||
if (col == 1)
|
if (col == 1)
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "FifoPlayer/FifoPlayer.h"
|
#include "FifoPlayer/FifoPlayer.h"
|
||||||
#include "FifoPlayer/FifoRecorder.h"
|
#include "FifoPlayer/FifoRecorder.h"
|
||||||
#include "OpcodeDecoding.h"
|
#include "OpcodeDecoding.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
#include <wx/spinctrl.h>
|
#include <wx/spinctrl.h>
|
||||||
#include <wx/clipbrd.h>
|
#include <wx/clipbrd.h>
|
||||||
|
@ -395,7 +396,7 @@ void FifoPlayerDlg::OnSaveFile(wxCommandEvent& WXUNUSED(event))
|
||||||
if (!path.empty())
|
if (!path.empty())
|
||||||
{
|
{
|
||||||
wxBeginBusyCursor();
|
wxBeginBusyCursor();
|
||||||
bool result = file->Save(path.mb_str());
|
bool result = file->Save(WxStrToStr(path).c_str());
|
||||||
wxEndBusyCursor();
|
wxEndBusyCursor();
|
||||||
|
|
||||||
if (!result)
|
if (!result)
|
||||||
|
@ -752,10 +753,10 @@ void FifoPlayerDlg::OnObjectCmdListSelectionChanged(wxCommandEvent& event)
|
||||||
char name[64]="\0", desc[512]="\0";
|
char name[64]="\0", desc[512]="\0";
|
||||||
GetBPRegInfo(cmddata+1, name, sizeof(name), desc, sizeof(desc));
|
GetBPRegInfo(cmddata+1, name, sizeof(name), desc, sizeof(desc));
|
||||||
newLabel = _("BP register ");
|
newLabel = _("BP register ");
|
||||||
newLabel += (name[0] != '\0') ? wxString(name, *wxConvCurrent) : wxString::Format(_("UNKNOWN_%02X"), *(cmddata+1));
|
newLabel += (name[0] != '\0') ? StrToWxStr(name) : wxString::Format(_("UNKNOWN_%02X"), *(cmddata+1));
|
||||||
newLabel += wxT(":\n");
|
newLabel += wxT(":\n");
|
||||||
if (desc[0] != '\0')
|
if (desc[0] != '\0')
|
||||||
newLabel += wxString(desc, *wxConvCurrent);
|
newLabel += StrToWxStr(desc);
|
||||||
else
|
else
|
||||||
newLabel += _("No description available");
|
newLabel += _("No description available");
|
||||||
}
|
}
|
||||||
|
|
|
@ -659,7 +659,7 @@ void CFrame::OnGameListCtrl_ItemActivated(wxListEvent& WXUNUSED (event))
|
||||||
// 1. Boot the selected iso
|
// 1. Boot the selected iso
|
||||||
// 2. Boot the default or last loaded iso.
|
// 2. Boot the default or last loaded iso.
|
||||||
// 3. Call BrowseForDirectory if the gamelist is empty
|
// 3. Call BrowseForDirectory if the gamelist is empty
|
||||||
if (!m_GameListCtrl->GetGameNames().size() &&
|
if (!m_GameListCtrl->GetISO(0) &&
|
||||||
!((SConfig::GetInstance().m_ListGC &&
|
!((SConfig::GetInstance().m_ListGC &&
|
||||||
SConfig::GetInstance().m_ListWii &&
|
SConfig::GetInstance().m_ListWii &&
|
||||||
SConfig::GetInstance().m_ListWad) &&
|
SConfig::GetInstance().m_ListWad) &&
|
||||||
|
@ -693,7 +693,7 @@ void CFrame::OnGameListCtrl_ItemActivated(wxListEvent& WXUNUSED (event))
|
||||||
|
|
||||||
m_GameListCtrl->Update();
|
m_GameListCtrl->Update();
|
||||||
}
|
}
|
||||||
else if (!m_GameListCtrl->GetGameNames().size())
|
else if (!m_GameListCtrl->GetISO(0))
|
||||||
m_GameListCtrl->BrowseForDirectory();
|
m_GameListCtrl->BrowseForDirectory();
|
||||||
else
|
else
|
||||||
// Game started by double click
|
// Game started by double click
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "Globals.h" // Local
|
#include "Globals.h" // Local
|
||||||
#include "Frame.h"
|
#include "Frame.h"
|
||||||
#include "LogWindow.h"
|
#include "LogWindow.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
#include "ConfigManager.h" // Core
|
#include "ConfigManager.h" // Core
|
||||||
|
|
||||||
|
@ -548,7 +549,7 @@ void CFrame::OnDropDownToolbarItem(wxAuiToolBarEvent& event)
|
||||||
for (u32 i = 0; i < Perspectives.size(); i++)
|
for (u32 i = 0; i < Perspectives.size(); i++)
|
||||||
{
|
{
|
||||||
wxMenuItem* mItem = new wxMenuItem(menuPopup, IDM_PERSPECTIVES_0 + i,
|
wxMenuItem* mItem = new wxMenuItem(menuPopup, IDM_PERSPECTIVES_0 + i,
|
||||||
wxString::FromAscii(Perspectives[i].Name.c_str()),
|
StrToWxStr(Perspectives[i].Name),
|
||||||
wxT(""), wxITEM_CHECK);
|
wxT(""), wxITEM_CHECK);
|
||||||
menuPopup->Append(mItem);
|
menuPopup->Append(mItem);
|
||||||
if (i == ActivePerspective) mItem->Check(true);
|
if (i == ActivePerspective) mItem->Check(true);
|
||||||
|
@ -580,7 +581,7 @@ void CFrame::OnToolBar(wxCommandEvent& event)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SaveIniPerspectives();
|
SaveIniPerspectives();
|
||||||
GetStatusBar()->SetStatusText(wxString::FromAscii(std::string
|
GetStatusBar()->SetStatusText(StrToWxStr(std::string
|
||||||
("Saved " + Perspectives[ActivePerspective].Name).c_str()), 0);
|
("Saved " + Perspectives[ActivePerspective].Name).c_str()), 0);
|
||||||
break;
|
break;
|
||||||
case IDM_PERSPECTIVES_ADD_PANE:
|
case IDM_PERSPECTIVES_ADD_PANE:
|
||||||
|
@ -633,7 +634,7 @@ void CFrame::OnDropDownToolbarSelect(wxCommandEvent& event)
|
||||||
}
|
}
|
||||||
|
|
||||||
SPerspectives Tmp;
|
SPerspectives Tmp;
|
||||||
Tmp.Name = dlg.GetValue().mb_str();
|
Tmp.Name = WxStrToStr(dlg.GetValue());
|
||||||
Tmp.Perspective = m_Mgr->SavePerspective();
|
Tmp.Perspective = m_Mgr->SavePerspective();
|
||||||
|
|
||||||
ActivePerspective = (u32)Perspectives.size();
|
ActivePerspective = (u32)Perspectives.size();
|
||||||
|
@ -870,7 +871,7 @@ void CFrame::LoadIniPerspectives()
|
||||||
ini.Get(_Section.c_str(), "Width", &_Width, "70,25");
|
ini.Get(_Section.c_str(), "Width", &_Width, "70,25");
|
||||||
ini.Get(_Section.c_str(), "Height", &_Height, "80,80");
|
ini.Get(_Section.c_str(), "Height", &_Height, "80,80");
|
||||||
|
|
||||||
Tmp.Perspective = wxString::FromAscii(_Perspective.c_str());
|
Tmp.Perspective = StrToWxStr(_Perspective);
|
||||||
|
|
||||||
SplitString(_Width, ',', _SWidth);
|
SplitString(_Width, ',', _SWidth);
|
||||||
SplitString(_Height, ',', _SHeight);
|
SplitString(_Height, ',', _SHeight);
|
||||||
|
@ -940,7 +941,7 @@ void CFrame::SaveIniPerspectives()
|
||||||
for (u32 i = 0; i < Perspectives.size(); i++)
|
for (u32 i = 0; i < Perspectives.size(); i++)
|
||||||
{
|
{
|
||||||
std::string _Section = "P - " + Perspectives[i].Name;
|
std::string _Section = "P - " + Perspectives[i].Name;
|
||||||
ini.Set(_Section.c_str(), "Perspective", Perspectives[i].Perspective.mb_str());
|
ini.Set(_Section.c_str(), "Perspective", WxStrToStr(Perspectives[i].Perspective));
|
||||||
|
|
||||||
std::string SWidth = "", SHeight = "";
|
std::string SWidth = "", SHeight = "";
|
||||||
for (u32 j = 0; j < Perspectives[i].Width.size(); j++)
|
for (u32 j = 0; j < Perspectives[i].Width.size(); j++)
|
||||||
|
|
|
@ -101,7 +101,7 @@ void CFrame::CreateMenu()
|
||||||
drives = cdio_get_devices();
|
drives = cdio_get_devices();
|
||||||
// Windows Limitation of 24 character drives
|
// Windows Limitation of 24 character drives
|
||||||
for (unsigned int i = 0; i < drives.size() && i < 24; i++) {
|
for (unsigned int i = 0; i < drives.size() && i < 24; i++) {
|
||||||
externalDrive->Append(IDM_DRIVE1 + i, wxString::FromAscii(drives[i].c_str()));
|
externalDrive->Append(IDM_DRIVE1 + i, StrToWxStr(drives[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
fileMenu->AppendSeparator();
|
fileMenu->AppendSeparator();
|
||||||
|
@ -601,12 +601,10 @@ void CFrame::DoOpen(bool Boot)
|
||||||
|
|
||||||
// Should we boot a new game or just change the disc?
|
// Should we boot a new game or just change the disc?
|
||||||
if (Boot && !path.IsEmpty())
|
if (Boot && !path.IsEmpty())
|
||||||
BootGame(std::string(path.mb_str()));
|
BootGame(WxStrToStr(path));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char newDiscpath[2048];
|
DVDInterface::ChangeDisc(WxStrToStr(path).c_str());
|
||||||
strncpy(newDiscpath, path.mb_str(), strlen(path.mb_str())+1);
|
|
||||||
DVDInterface::ChangeDisc(newDiscpath);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -693,7 +691,7 @@ void CFrame::OnPlayRecording(wxCommandEvent& WXUNUSED (event))
|
||||||
GetMenuBar()->FindItem(IDM_RECORDREADONLY)->Check(true);
|
GetMenuBar()->FindItem(IDM_RECORDREADONLY)->Check(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Movie::PlayInput(path.mb_str()))
|
if (Movie::PlayInput(WxStrToStr(path).c_str()))
|
||||||
BootGame(std::string(""));
|
BootGame(std::string(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1015,7 +1013,7 @@ void CFrame::DoStop()
|
||||||
X11Utils::InhibitScreensaver(X11Utils::XDisplayFromHandle(GetHandle()),
|
X11Utils::InhibitScreensaver(X11Utils::XDisplayFromHandle(GetHandle()),
|
||||||
X11Utils::XWindowFromHandle(GetHandle()), false);
|
X11Utils::XWindowFromHandle(GetHandle()), false);
|
||||||
#endif
|
#endif
|
||||||
m_RenderFrame->SetTitle(wxString::FromAscii(scm_rev_str));
|
m_RenderFrame->SetTitle(StrToWxStr(scm_rev_str));
|
||||||
|
|
||||||
// Destroy the renderer frame when not rendering to main
|
// Destroy the renderer frame when not rendering to main
|
||||||
m_RenderParent->Unbind(wxEVT_SIZE, &CFrame::OnRenderParentResize, this);
|
m_RenderParent->Unbind(wxEVT_SIZE, &CFrame::OnRenderParentResize, this);
|
||||||
|
@ -1081,7 +1079,7 @@ void CFrame::DoRecordingSave()
|
||||||
if(path.IsEmpty())
|
if(path.IsEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Movie::SaveRecording(path.mb_str());
|
Movie::SaveRecording(WxStrToStr(path).c_str());
|
||||||
|
|
||||||
if (!paused)
|
if (!paused)
|
||||||
DoPause();
|
DoPause();
|
||||||
|
@ -1212,7 +1210,7 @@ void CFrame::StatusBarMessage(const char * Text, ...)
|
||||||
vsnprintf(Str, MAX_BYTES, Text, ArgPtr);
|
vsnprintf(Str, MAX_BYTES, Text, ArgPtr);
|
||||||
va_end(ArgPtr);
|
va_end(ArgPtr);
|
||||||
|
|
||||||
if (this->GetStatusBar()->IsEnabled()) this->GetStatusBar()->SetStatusText(wxString::FromAscii(Str),0);
|
if (this->GetStatusBar()->IsEnabled()) this->GetStatusBar()->SetStatusText(StrToWxStr(Str),0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1248,7 +1246,8 @@ void CFrame::OnImportSave(wxCommandEvent& WXUNUSED (event))
|
||||||
|
|
||||||
if (!path.IsEmpty())
|
if (!path.IsEmpty())
|
||||||
{
|
{
|
||||||
CWiiSaveCrypted* saveFile = new CWiiSaveCrypted(path.mb_str());
|
// TODO: Does this actually need to be dynamically allocated for some reason?
|
||||||
|
CWiiSaveCrypted* saveFile = new CWiiSaveCrypted(WxStrToStr(path).c_str());
|
||||||
delete saveFile;
|
delete saveFile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1288,7 +1287,7 @@ void CFrame::OnInstallWAD(wxCommandEvent& event)
|
||||||
_T("Wii WAD file (*.wad)|*.wad"),
|
_T("Wii WAD file (*.wad)|*.wad"),
|
||||||
wxFD_OPEN | wxFD_PREVIEW | wxFD_FILE_MUST_EXIST,
|
wxFD_OPEN | wxFD_PREVIEW | wxFD_FILE_MUST_EXIST,
|
||||||
this);
|
this);
|
||||||
fileName = path.mb_str();
|
fileName = WxStrToStr(path);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -1354,7 +1353,7 @@ void CFrame::ConnectWiimote(int wm_idx, bool connect)
|
||||||
GetUsbPointer()->AccessWiiMote(wm_idx | 0x100)->Activate(connect);
|
GetUsbPointer()->AccessWiiMote(wm_idx | 0x100)->Activate(connect);
|
||||||
wxString msg(wxString::Format(wxT("Wiimote %i %s"), wm_idx + 1,
|
wxString msg(wxString::Format(wxT("Wiimote %i %s"), wm_idx + 1,
|
||||||
connect ? wxT("Connected") : wxT("Disconnected")));
|
connect ? wxT("Connected") : wxT("Disconnected")));
|
||||||
Core::DisplayMessage(msg.ToAscii(), 3000);
|
Core::DisplayMessage(WxStrToStr(msg), 3000);
|
||||||
Host_UpdateMainFrame();
|
Host_UpdateMainFrame();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1394,7 +1393,7 @@ void CFrame::OnLoadStateFromFile(wxCommandEvent& WXUNUSED (event))
|
||||||
this);
|
this);
|
||||||
|
|
||||||
if (!path.IsEmpty())
|
if (!path.IsEmpty())
|
||||||
State::LoadAs((const char*)path.mb_str());
|
State::LoadAs(WxStrToStr(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFrame::OnSaveStateToFile(wxCommandEvent& WXUNUSED (event))
|
void CFrame::OnSaveStateToFile(wxCommandEvent& WXUNUSED (event))
|
||||||
|
@ -1408,7 +1407,7 @@ void CFrame::OnSaveStateToFile(wxCommandEvent& WXUNUSED (event))
|
||||||
this);
|
this);
|
||||||
|
|
||||||
if (!path.IsEmpty())
|
if (!path.IsEmpty())
|
||||||
State::SaveAs((const char*)path.mb_str());
|
State::SaveAs(WxStrToStr(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFrame::OnLoadLastState(wxCommandEvent& WXUNUSED (event))
|
void CFrame::OnLoadLastState(wxCommandEvent& WXUNUSED (event))
|
||||||
|
|
|
@ -257,7 +257,7 @@ void CGameListCtrl::BrowseForDirectory()
|
||||||
|
|
||||||
if (dialog.ShowModal() == wxID_OK)
|
if (dialog.ShowModal() == wxID_OK)
|
||||||
{
|
{
|
||||||
std::string sPath(dialog.GetPath().mb_str());
|
std::string sPath(WxStrToStr(dialog.GetPath()));
|
||||||
std::vector<std::string>::iterator itResult = std::find(
|
std::vector<std::string>::iterator itResult = std::find(
|
||||||
SConfig::GetInstance().m_ISOFolder.begin(),
|
SConfig::GetInstance().m_ISOFolder.begin(),
|
||||||
SConfig::GetInstance().m_ISOFolder.end(), sPath);
|
SConfig::GetInstance().m_ISOFolder.end(), sPath);
|
||||||
|
@ -285,10 +285,6 @@ void CGameListCtrl::Update()
|
||||||
m_imageListSmall = NULL;
|
m_imageListSmall = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NetPlay : Set/Reset the GameList string
|
|
||||||
m_gameList.clear();
|
|
||||||
m_gamePath.clear();
|
|
||||||
|
|
||||||
Hide();
|
Hide();
|
||||||
|
|
||||||
ScanForISOs();
|
ScanForISOs();
|
||||||
|
@ -402,19 +398,10 @@ wxString NiceSizeFormat(s64 _size)
|
||||||
wxString NiceString;
|
wxString NiceString;
|
||||||
char tempstr[32];
|
char tempstr[32];
|
||||||
sprintf(tempstr,"%3.1f %s", f, sizes[s]);
|
sprintf(tempstr,"%3.1f %s", f, sizes[s]);
|
||||||
NiceString = wxString::FromAscii(tempstr);
|
NiceString = StrToWxStr(tempstr);
|
||||||
return(NiceString);
|
return(NiceString);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CGameListCtrl::GetGamePaths() const
|
|
||||||
{
|
|
||||||
return m_gamePath;
|
|
||||||
}
|
|
||||||
std::string CGameListCtrl::GetGameNames() const
|
|
||||||
{
|
|
||||||
return m_gameList;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CGameListCtrl::InsertItemInReportView(long _Index)
|
void CGameListCtrl::InsertItemInReportView(long _Index)
|
||||||
{
|
{
|
||||||
// When using wxListCtrl, there is no hope of per-column text colors.
|
// When using wxListCtrl, there is no hope of per-column text colors.
|
||||||
|
@ -423,25 +410,7 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
|
||||||
// company: 0x007030
|
// company: 0x007030
|
||||||
int ImageIndex = -1;
|
int ImageIndex = -1;
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
wxCSConv SJISConv(*(wxCSConv*)wxConvCurrent);
|
|
||||||
static bool validCP932 = ::IsValidCodePage(932) != 0;
|
|
||||||
if (validCP932)
|
|
||||||
{
|
|
||||||
SJISConv = wxCSConv(wxFontMapper::GetEncodingName(wxFONTENCODING_SHIFT_JIS));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WARN_LOG(COMMON, "Cannot Convert from Charset Windows Japanese cp 932");
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// on linux the wrong string is returned from wxFontMapper::GetEncodingName(wxFONTENCODING_SHIFT_JIS)
|
|
||||||
// it returns CP-932, in order to use iconv we need to use CP932
|
|
||||||
wxCSConv SJISConv(wxT("CP932"));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GameListItem& rISOFile = *m_ISOFiles[_Index];
|
GameListItem& rISOFile = *m_ISOFiles[_Index];
|
||||||
m_gamePath.append(rISOFile.GetFileName() + '\n');
|
|
||||||
|
|
||||||
// Insert a first row with nothing in it, that will be used as the Index
|
// Insert a first row with nothing in it, that will be used as the Index
|
||||||
long ItemIndex = InsertItem(_Index, wxEmptyString);
|
long ItemIndex = InsertItem(_Index, wxEmptyString);
|
||||||
|
@ -454,55 +423,33 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
|
||||||
|
|
||||||
// Set the game's banner in the second column
|
// Set the game's banner in the second column
|
||||||
SetItemColumnImage(_Index, COLUMN_BANNER, ImageIndex);
|
SetItemColumnImage(_Index, COLUMN_BANNER, ImageIndex);
|
||||||
|
|
||||||
std::wstring wstring_name;
|
|
||||||
const std::wstring& wstring_description = rISOFile.GetDescription();
|
|
||||||
std::string company;
|
|
||||||
|
|
||||||
wxString name;
|
|
||||||
wxString description;
|
|
||||||
|
|
||||||
// We show the company string on Gamecube only
|
|
||||||
// On Wii we show the description instead as the company string is empty
|
|
||||||
if (rISOFile.GetPlatform() == GameListItem::GAMECUBE_DISC)
|
|
||||||
company = rISOFile.GetCompany().c_str();
|
|
||||||
int SelectedLanguage = SConfig::GetInstance().m_LocalCoreStartupParameter.SelectedLanguage;
|
int SelectedLanguage = SConfig::GetInstance().m_LocalCoreStartupParameter.SelectedLanguage;
|
||||||
|
|
||||||
|
// Is this sane?
|
||||||
switch (rISOFile.GetCountry())
|
switch (rISOFile.GetCountry())
|
||||||
{
|
{
|
||||||
case DiscIO::IVolume::COUNTRY_TAIWAN:
|
case DiscIO::IVolume::COUNTRY_TAIWAN:
|
||||||
case DiscIO::IVolume::COUNTRY_JAPAN:
|
case DiscIO::IVolume::COUNTRY_JAPAN:
|
||||||
{
|
SelectedLanguage = -1;
|
||||||
rISOFile.GetName(wstring_name, -1);
|
|
||||||
name = wxString(rISOFile.GetName(0).c_str(), SJISConv);
|
|
||||||
m_gameList.append(StringFromFormat("%s (J)\n", (const char *)name.c_str()));
|
|
||||||
description = wxString(company.size() ? company.c_str() :
|
|
||||||
rISOFile.GetDescription(0).c_str(), SJISConv);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DiscIO::IVolume::COUNTRY_USA:
|
case DiscIO::IVolume::COUNTRY_USA:
|
||||||
SelectedLanguage = 0;
|
SelectedLanguage = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
|
||||||
wxCSConv WindowsCP1252(wxFontMapper::GetEncodingName(wxFONTENCODING_CP1252));
|
|
||||||
rISOFile.GetName(wstring_name, SelectedLanguage);
|
|
||||||
|
|
||||||
name = wxString(rISOFile.GetName(SelectedLanguage).c_str(), WindowsCP1252);
|
|
||||||
m_gameList.append(StringFromFormat("%s (%c)\n",
|
|
||||||
rISOFile.GetName(SelectedLanguage).c_str(),
|
|
||||||
(rISOFile.GetCountry() == DiscIO::IVolume::COUNTRY_USA) ? 'U' : 'E'));
|
|
||||||
description = wxString(company.size() ? company.c_str() :
|
|
||||||
rISOFile.GetDescription(SelectedLanguage).c_str(), WindowsCP1252);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string const name = rISOFile.GetName(SelectedLanguage);
|
||||||
|
SetItem(_Index, COLUMN_TITLE, StrToWxStr(name), -1);
|
||||||
|
|
||||||
if (wstring_name.length())
|
// We show the company string on Gamecube only
|
||||||
name = wstring_name.c_str();
|
// On Wii we show the description instead as the company string is empty
|
||||||
if (wstring_description.length())
|
std::string const notes = (rISOFile.GetPlatform() == GameListItem::GAMECUBE_DISC) ?
|
||||||
description = wstring_description.c_str();
|
rISOFile.GetCompany() : rISOFile.GetDescription(SelectedLanguage);
|
||||||
|
SetItem(_Index, COLUMN_NOTES, StrToWxStr(notes), -1);
|
||||||
SetItem(_Index, COLUMN_TITLE, name, -1);
|
|
||||||
SetItem(_Index, COLUMN_NOTES, description, -1);
|
|
||||||
|
|
||||||
// Emulation state
|
// Emulation state
|
||||||
SetItemColumnImage(_Index, COLUMN_EMULATION_STATE, m_EmuStateImageIndex[rISOFile.GetEmuState()]);
|
SetItemColumnImage(_Index, COLUMN_EMULATION_STATE, m_EmuStateImageIndex[rISOFile.GetEmuState()]);
|
||||||
|
@ -614,7 +561,7 @@ void CGameListCtrl::ScanForISOs()
|
||||||
|
|
||||||
// Update with the progress (i) and the message
|
// Update with the progress (i) and the message
|
||||||
dialog.Update(i, wxString::Format(_("Scanning %s"),
|
dialog.Update(i, wxString::Format(_("Scanning %s"),
|
||||||
wxString(FileName.c_str(), *wxConvCurrent).c_str()));
|
StrToWxStr(FileName)));
|
||||||
if (dialog.WasCancelled())
|
if (dialog.WasCancelled())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -858,7 +805,7 @@ void CGameListCtrl::OnMouseMotion(wxMouseEvent& event)
|
||||||
char temp[2048];
|
char temp[2048];
|
||||||
sprintf(temp, "^ %s%s%s", emuState[emu_state - 1],
|
sprintf(temp, "^ %s%s%s", emuState[emu_state - 1],
|
||||||
issues.size() > 0 ? " :\n" : "", issues.c_str());
|
issues.size() > 0 ? " :\n" : "", issues.c_str());
|
||||||
toolTip = new wxEmuStateTip(this, wxString(temp, *wxConvCurrent), &toolTip);
|
toolTip = new wxEmuStateTip(this, StrToWxStr(temp), &toolTip);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
toolTip = new wxEmuStateTip(this, _("Not Set"), &toolTip);
|
toolTip = new wxEmuStateTip(this, _("Not Set"), &toolTip);
|
||||||
|
@ -999,8 +946,7 @@ void CGameListCtrl::OnOpenContainingFolder(wxCommandEvent& WXUNUSED (event))
|
||||||
if (!iso)
|
if (!iso)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wxString strPath(iso->GetFileName().c_str(), wxConvUTF8);
|
wxFileName path = wxFileName::FileName(StrToWxStr(iso->GetFileName()));
|
||||||
wxFileName path = wxFileName::FileName(strPath);
|
|
||||||
path.MakeAbsolute();
|
path.MakeAbsolute();
|
||||||
WxUtils::Explore(path.GetPath().char_str());
|
WxUtils::Explore(path.GetPath().char_str());
|
||||||
}
|
}
|
||||||
|
@ -1115,9 +1061,9 @@ void CGameListCtrl::OnWiki(wxCommandEvent& WXUNUSED (event))
|
||||||
void CGameListCtrl::MultiCompressCB(const char* text, float percent, void* arg)
|
void CGameListCtrl::MultiCompressCB(const char* text, float percent, void* arg)
|
||||||
{
|
{
|
||||||
percent = (((float)m_currentItem) + percent) / (float)m_numberItem;
|
percent = (((float)m_currentItem) + percent) / (float)m_numberItem;
|
||||||
wxString textString(StringFromFormat("%s (%i/%i) - %s",
|
wxString textString(StrToWxStr(StringFromFormat("%s (%i/%i) - %s",
|
||||||
m_currentFilename.c_str(), (int)m_currentItem+1,
|
m_currentFilename.c_str(), (int)m_currentItem+1,
|
||||||
(int)m_numberItem, text).c_str(), *wxConvCurrent);
|
(int)m_numberItem, text)));
|
||||||
|
|
||||||
((wxProgressDialog*)arg)->Update((int)(percent*1000), textString);
|
((wxProgressDialog*)arg)->Update((int)(percent*1000), textString);
|
||||||
}
|
}
|
||||||
|
@ -1170,13 +1116,13 @@ void CGameListCtrl::CompressSelection(bool _compress)
|
||||||
|
|
||||||
std::string OutputFileName;
|
std::string OutputFileName;
|
||||||
BuildCompleteFilename(OutputFileName,
|
BuildCompleteFilename(OutputFileName,
|
||||||
(const char *)browseDialog.GetPath().mb_str(wxConvUTF8),
|
WxStrToStr(browseDialog.GetPath()),
|
||||||
FileName);
|
FileName);
|
||||||
|
|
||||||
if (wxFileExists(wxString::FromAscii(OutputFileName.c_str())) &&
|
if (wxFileExists(StrToWxStr(OutputFileName)) &&
|
||||||
wxMessageBox(
|
wxMessageBox(
|
||||||
wxString::Format(_("The file %s already exists.\nDo you wish to replace it?"),
|
wxString::Format(_("The file %s already exists.\nDo you wish to replace it?"),
|
||||||
wxString(OutputFileName.c_str(), *wxConvCurrent).c_str()),
|
StrToWxStr(OutputFileName)),
|
||||||
_("Confirm File Overwrite"),
|
_("Confirm File Overwrite"),
|
||||||
wxYES_NO) == wxNO)
|
wxYES_NO) == wxNO)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1198,13 +1144,13 @@ void CGameListCtrl::CompressSelection(bool _compress)
|
||||||
|
|
||||||
std::string OutputFileName;
|
std::string OutputFileName;
|
||||||
BuildCompleteFilename(OutputFileName,
|
BuildCompleteFilename(OutputFileName,
|
||||||
(const char *)browseDialog.GetPath().mb_str(wxConvUTF8),
|
WxStrToStr(browseDialog.GetPath()),
|
||||||
FileName);
|
FileName);
|
||||||
|
|
||||||
if (wxFileExists(wxString::FromAscii(OutputFileName.c_str())) &&
|
if (wxFileExists(StrToWxStr(OutputFileName)) &&
|
||||||
wxMessageBox(
|
wxMessageBox(
|
||||||
wxString::Format(_("The file %s already exists.\nDo you wish to replace it?"),
|
wxString::Format(_("The file %s already exists.\nDo you wish to replace it?"),
|
||||||
wxString(OutputFileName.c_str(), *wxConvCurrent).c_str()),
|
StrToWxStr(OutputFileName)),
|
||||||
_("Confirm File Overwrite"),
|
_("Confirm File Overwrite"),
|
||||||
wxYES_NO) == wxNO)
|
wxYES_NO) == wxNO)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1225,7 +1171,7 @@ void CGameListCtrl::CompressSelection(bool _compress)
|
||||||
void CGameListCtrl::CompressCB(const char* text, float percent, void* arg)
|
void CGameListCtrl::CompressCB(const char* text, float percent, void* arg)
|
||||||
{
|
{
|
||||||
((wxProgressDialog*)arg)->
|
((wxProgressDialog*)arg)->
|
||||||
Update((int)(percent*1000), wxString(text, *wxConvCurrent));
|
Update((int)(percent*1000), StrToWxStr(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event))
|
void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event))
|
||||||
|
@ -1251,8 +1197,8 @@ void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event))
|
||||||
|
|
||||||
path = wxFileSelector(
|
path = wxFileSelector(
|
||||||
_("Save decompressed GCM/ISO"),
|
_("Save decompressed GCM/ISO"),
|
||||||
wxString(FilePath.c_str(), *wxConvCurrent),
|
StrToWxStr(FilePath),
|
||||||
wxString(FileName.c_str(), *wxConvCurrent) + FileType.After('*'),
|
StrToWxStr(FileName) + FileType.After('*'),
|
||||||
wxEmptyString,
|
wxEmptyString,
|
||||||
FileType + wxT("|") + wxGetTranslation(wxALL_FILES),
|
FileType + wxT("|") + wxGetTranslation(wxALL_FILES),
|
||||||
wxFD_SAVE,
|
wxFD_SAVE,
|
||||||
|
@ -1262,8 +1208,8 @@ void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event))
|
||||||
{
|
{
|
||||||
path = wxFileSelector(
|
path = wxFileSelector(
|
||||||
_("Save compressed GCM/ISO"),
|
_("Save compressed GCM/ISO"),
|
||||||
wxString(FilePath.c_str(), *wxConvCurrent),
|
StrToWxStr(FilePath),
|
||||||
wxString(FileName.c_str(), *wxConvCurrent) + _T(".gcz"),
|
StrToWxStr(FileName) + _T(".gcz"),
|
||||||
wxEmptyString,
|
wxEmptyString,
|
||||||
_("All compressed GC/Wii ISO files (gcz)") +
|
_("All compressed GC/Wii ISO files (gcz)") +
|
||||||
wxString::Format(wxT("|*.gcz|%s"), wxGetTranslation(wxALL_FILES)),
|
wxString::Format(wxT("|*.gcz|%s"), wxGetTranslation(wxALL_FILES)),
|
||||||
|
|
|
@ -47,10 +47,6 @@ public:
|
||||||
|
|
||||||
void Update();
|
void Update();
|
||||||
|
|
||||||
// Net Play method
|
|
||||||
std::string GetGamePaths() const;
|
|
||||||
std::string GetGameNames() const;
|
|
||||||
|
|
||||||
void BrowseForDirectory();
|
void BrowseForDirectory();
|
||||||
const GameListItem *GetSelectedISO();
|
const GameListItem *GetSelectedISO();
|
||||||
const GameListItem *GetISO(size_t index) const;
|
const GameListItem *GetISO(size_t index) const;
|
||||||
|
@ -84,10 +80,6 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NetPlay string for the gamelist
|
|
||||||
std::string m_gameList;
|
|
||||||
std::string m_gamePath;
|
|
||||||
|
|
||||||
int last_column;
|
int last_column;
|
||||||
int last_sort;
|
int last_sort;
|
||||||
wxSize lastpos;
|
wxSize lastpos;
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
// If not, see http://www.gnu.org/licenses/
|
// If not, see http://www.gnu.org/licenses/
|
||||||
|
|
||||||
#include "GeckoCodeDiag.h"
|
#include "GeckoCodeDiag.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
#include <SFML/Network/Http.hpp>
|
#include <SFML/Network/Http.hpp>
|
||||||
|
|
||||||
|
@ -76,7 +77,7 @@ void CodeConfigPanel::UpdateCodeList()
|
||||||
gcodes_end = m_gcodes.end();
|
gcodes_end = m_gcodes.end();
|
||||||
for (; gcodes_iter!=gcodes_end; ++gcodes_iter)
|
for (; gcodes_iter!=gcodes_end; ++gcodes_iter)
|
||||||
{
|
{
|
||||||
m_listbox_gcodes->Append(wxString(gcodes_iter->name.c_str(), *wxConvCurrent));
|
m_listbox_gcodes->Append(StrToWxStr(gcodes_iter->name));
|
||||||
if (gcodes_iter->enabled)
|
if (gcodes_iter->enabled)
|
||||||
m_listbox_gcodes->Check(m_listbox_gcodes->GetCount()-1, true);
|
m_listbox_gcodes->Check(m_listbox_gcodes->GetCount()-1, true);
|
||||||
}
|
}
|
||||||
|
@ -109,7 +110,7 @@ void CodeConfigPanel::UpdateInfoBox(wxCommandEvent&)
|
||||||
|
|
||||||
if (sel > -1)
|
if (sel > -1)
|
||||||
{
|
{
|
||||||
m_infobox.label_name->SetLabel(wxGetTranslation(wxstr_name) + wxString(m_gcodes[sel].name.c_str(), *wxConvCurrent));
|
m_infobox.label_name->SetLabel(wxGetTranslation(wxstr_name) + StrToWxStr(m_gcodes[sel].name));
|
||||||
|
|
||||||
// notes textctrl
|
// notes textctrl
|
||||||
m_infobox.textctrl_notes->Clear();
|
m_infobox.textctrl_notes->Clear();
|
||||||
|
@ -117,10 +118,10 @@ void CodeConfigPanel::UpdateInfoBox(wxCommandEvent&)
|
||||||
notes_iter = m_gcodes[sel].notes.begin(),
|
notes_iter = m_gcodes[sel].notes.begin(),
|
||||||
notes_end = m_gcodes[sel].notes.end();
|
notes_end = m_gcodes[sel].notes.end();
|
||||||
for (; notes_iter!=notes_end; ++notes_iter)
|
for (; notes_iter!=notes_end; ++notes_iter)
|
||||||
m_infobox.textctrl_notes->AppendText(wxString(notes_iter->c_str(), *wxConvCurrent));
|
m_infobox.textctrl_notes->AppendText(StrToWxStr(*notes_iter));
|
||||||
m_infobox.textctrl_notes->ScrollLines(-99); // silly
|
m_infobox.textctrl_notes->ScrollLines(-99); // silly
|
||||||
|
|
||||||
m_infobox.label_creator->SetLabel(wxGetTranslation(wxstr_creator) + wxString(m_gcodes[sel].creator.c_str(), *wxConvCurrent));
|
m_infobox.label_creator->SetLabel(wxGetTranslation(wxstr_creator) + StrToWxStr(m_gcodes[sel].creator));
|
||||||
|
|
||||||
// add codes to info listbox
|
// add codes to info listbox
|
||||||
std::vector<GeckoCode::Code>::const_iterator
|
std::vector<GeckoCode::Code>::const_iterator
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "StringUtil.h"
|
#include "StringUtil.h"
|
||||||
#include "Hash.h"
|
#include "Hash.h"
|
||||||
#include "IniFile.h"
|
#include "IniFile.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
#include "Filesystem.h"
|
#include "Filesystem.h"
|
||||||
#include "BannerLoader.h"
|
#include "BannerLoader.h"
|
||||||
|
@ -36,7 +37,7 @@
|
||||||
#include "ChunkFile.h"
|
#include "ChunkFile.h"
|
||||||
#include "ConfigManager.h"
|
#include "ConfigManager.h"
|
||||||
|
|
||||||
#define CACHE_REVISION 0x110
|
#define CACHE_REVISION 0x112
|
||||||
|
|
||||||
#define DVD_BANNER_WIDTH 96
|
#define DVD_BANNER_WIDTH 96
|
||||||
#define DVD_BANNER_HEIGHT 32
|
#define DVD_BANNER_HEIGHT 32
|
||||||
|
@ -65,26 +66,10 @@ GameListItem::GameListItem(const std::string& _rFileName)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_Platform = WII_WAD;
|
m_Platform = WII_WAD;
|
||||||
pVolume->GetWName(m_wNames);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Company = "N/A";
|
m_volume_names = pVolume->GetNames();
|
||||||
|
|
||||||
|
|
||||||
m_Name[0] = pVolume->GetName();
|
|
||||||
|
|
||||||
if(m_Name[0] == "") // Couldn't find the name in the WAD...
|
|
||||||
{
|
|
||||||
std::string FileName;
|
|
||||||
SplitPath(m_FileName, NULL, &FileName, NULL);
|
|
||||||
m_Name[0] = FileName; // Then just display the filename... Better than something like "No Name"
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
m_Name[i] = m_Name[0];
|
|
||||||
m_Description[i] = "No Description";
|
|
||||||
}
|
|
||||||
m_Country = pVolume->GetCountry();
|
m_Country = pVolume->GetCountry();
|
||||||
m_FileSize = File::GetSize(_rFileName);
|
m_FileSize = File::GetSize(_rFileName);
|
||||||
m_VolumeSize = pVolume->GetSize();
|
m_VolumeSize = pVolume->GetSize();
|
||||||
|
@ -104,12 +89,9 @@ GameListItem::GameListItem(const std::string& _rFileName)
|
||||||
{
|
{
|
||||||
if (pBannerLoader->IsValid())
|
if (pBannerLoader->IsValid())
|
||||||
{
|
{
|
||||||
m_wNames.clear();
|
m_names = pBannerLoader->GetNames();
|
||||||
pBannerLoader->GetName(m_wNames);
|
m_company = pBannerLoader->GetCompany();
|
||||||
pBannerLoader->GetName(m_Name);
|
m_descriptions = pBannerLoader->GetDescriptions();
|
||||||
pBannerLoader->GetCompany(m_Company);
|
|
||||||
pBannerLoader->GetDescription(m_wDescription);
|
|
||||||
pBannerLoader->GetDescription(m_Description);
|
|
||||||
|
|
||||||
if (pBannerLoader->GetBanner(g_ImageTemp))
|
if (pBannerLoader->GetBanner(g_ImageTemp))
|
||||||
{
|
{
|
||||||
|
@ -129,25 +111,6 @@ GameListItem::GameListItem(const std::string& _rFileName)
|
||||||
|
|
||||||
delete pFileSystem;
|
delete pFileSystem;
|
||||||
}
|
}
|
||||||
std::vector<std::wstring>::iterator i, end = m_wNames.end();
|
|
||||||
std::wstring wFileName;
|
|
||||||
for (i = m_wNames.begin(); i != end; ++i)
|
|
||||||
{
|
|
||||||
if (*i == L"")
|
|
||||||
{
|
|
||||||
if (!wFileName.length())
|
|
||||||
{
|
|
||||||
std::string FileName;
|
|
||||||
SplitPath(m_FileName, NULL, &FileName, NULL);
|
|
||||||
int length = FileName.length();
|
|
||||||
wFileName.reserve(length+1);
|
|
||||||
for (int j = 0; j < length; ++j)
|
|
||||||
wFileName.push_back(FileName[j]);
|
|
||||||
wFileName.push_back(0);
|
|
||||||
}
|
|
||||||
*i = wFileName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
delete pVolume;
|
delete pVolume;
|
||||||
|
|
||||||
|
@ -208,33 +171,10 @@ void GameListItem::SaveToCache()
|
||||||
|
|
||||||
void GameListItem::DoState(PointerWrap &p)
|
void GameListItem::DoState(PointerWrap &p)
|
||||||
{
|
{
|
||||||
p.Do(m_Name[0]); p.Do(m_Name[1]); p.Do(m_Name[2]);
|
p.Do(m_volume_names);
|
||||||
p.Do(m_Name[3]); p.Do(m_Name[4]); p.Do(m_Name[5]);
|
p.Do(m_company);
|
||||||
|
p.Do(m_names);
|
||||||
int wNamesSize = m_wNames.size();
|
p.Do(m_descriptions);
|
||||||
p.Do(wNamesSize);
|
|
||||||
|
|
||||||
if (p.mode == p.MODE_READ)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < wNamesSize; ++i)
|
|
||||||
{
|
|
||||||
std::wstring temp;
|
|
||||||
p.Do(temp);
|
|
||||||
m_wNames.push_back(temp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (int i = 0; i < wNamesSize; ++i)
|
|
||||||
{
|
|
||||||
p.Do(m_wNames[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
p.Do(m_Company);
|
|
||||||
p.Do(m_Description[0]); p.Do(m_Description[1]); p.Do(m_Description[2]);
|
|
||||||
p.Do(m_Description[3]); p.Do(m_Description[4]); p.Do(m_Description[5]);
|
|
||||||
p.Do(m_wDescription);
|
|
||||||
p.Do(m_UniqueID);
|
p.Do(m_UniqueID);
|
||||||
p.Do(m_FileSize);
|
p.Do(m_FileSize);
|
||||||
p.Do(m_VolumeSize);
|
p.Do(m_VolumeSize);
|
||||||
|
@ -263,49 +203,73 @@ std::string GameListItem::CreateCacheFilename()
|
||||||
return fullname;
|
return fullname;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string& GameListItem::GetDescription(int index) const
|
std::string GameListItem::GetCompany() const
|
||||||
{
|
{
|
||||||
if ((index >=0) && (index < 6))
|
if (m_company.empty())
|
||||||
{
|
return "N/A";
|
||||||
return m_Description[index];
|
else
|
||||||
}
|
return m_company;
|
||||||
return m_Description[0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::wstring& GameListItem::GetDescription() const
|
// (-1 = Japanese, 0 = English, etc)
|
||||||
|
std::string GameListItem::GetDescription(int _index) const
|
||||||
{
|
{
|
||||||
return m_wDescription;
|
const u32 index = _index + 1;
|
||||||
|
|
||||||
|
if (index < m_descriptions.size())
|
||||||
|
return m_descriptions[index];
|
||||||
|
|
||||||
|
if (!m_descriptions.empty())
|
||||||
|
return m_descriptions[0];
|
||||||
|
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string& GameListItem::GetName(int index) const
|
// (-1 = Japanese, 0 = English, etc)
|
||||||
|
std::string GameListItem::GetVolumeName(int _index) const
|
||||||
{
|
{
|
||||||
if ((index >=0) && (index < 6))
|
u32 const index = _index + 1;
|
||||||
{
|
|
||||||
return m_Name[index];
|
if (index < m_volume_names.size() && !m_volume_names[index].empty())
|
||||||
}
|
return m_volume_names[index];
|
||||||
return m_Name[0];
|
|
||||||
|
if (!m_volume_names.empty())
|
||||||
|
return m_volume_names[0];
|
||||||
|
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GameListItem::GetName(std::wstring& wName, int index) const
|
// (-1 = Japanese, 0 = English, etc)
|
||||||
|
std::string GameListItem::GetBannerName(int _index) const
|
||||||
{
|
{
|
||||||
// This function will only succeed for wii discs with banners or WADs
|
u32 const index = _index + 1;
|
||||||
// utilize the same array as for gc discs (-1= Japanese, 0 = English etc
|
|
||||||
index++;
|
if (index < m_names.size() && !m_names[index].empty())
|
||||||
if ((index >= 0) && (index < 10))
|
return m_names[index];
|
||||||
|
|
||||||
|
if (!m_names.empty())
|
||||||
|
return m_names[0];
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// (-1 = Japanese, 0 = English, etc)
|
||||||
|
std::string GameListItem::GetName(int _index) const
|
||||||
|
{
|
||||||
|
// Prefer name from banner, fallback to name from volume, fallback to filename
|
||||||
|
|
||||||
|
std::string name = GetBannerName(_index);
|
||||||
|
|
||||||
|
if (name.empty())
|
||||||
|
name = GetVolumeName(_index);
|
||||||
|
|
||||||
|
if (name.empty())
|
||||||
{
|
{
|
||||||
if (m_wNames.size() > (size_t)index)
|
// No usable name, return filename (better than nothing)
|
||||||
{
|
SplitPath(GetFileName(), NULL, &name, NULL);
|
||||||
wName = m_wNames[index];
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (m_wNames.size() > 0)
|
|
||||||
{
|
|
||||||
wName = m_wNames[0];
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string GameListItem::GetWiiFSPath() const
|
const std::string GameListItem::GetWiiFSPath() const
|
||||||
|
@ -331,7 +295,7 @@ const std::string GameListItem::GetWiiFSPath() const
|
||||||
File::CreateFullPath(Path);
|
File::CreateFullPath(Path);
|
||||||
|
|
||||||
if (Path[0] == '.')
|
if (Path[0] == '.')
|
||||||
ret = std::string(wxGetCwd().mb_str()) + std::string(Path).substr(strlen(ROOT_DIR));
|
ret = WxStrToStr(wxGetCwd()) + std::string(Path).substr(strlen(ROOT_DIR));
|
||||||
else
|
else
|
||||||
ret = std::string(Path);
|
ret = std::string(Path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
#ifndef __ISOFILE_H_
|
#ifndef __ISOFILE_H_
|
||||||
#define __ISOFILE_H_
|
#define __ISOFILE_H_
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "Volume.h"
|
#include "Volume.h"
|
||||||
#include "VolumeCreator.h"
|
#include "VolumeCreator.h"
|
||||||
|
|
||||||
|
@ -34,11 +37,11 @@ public:
|
||||||
|
|
||||||
bool IsValid() const {return m_Valid;}
|
bool IsValid() const {return m_Valid;}
|
||||||
const std::string& GetFileName() const {return m_FileName;}
|
const std::string& GetFileName() const {return m_FileName;}
|
||||||
const std::string& GetName(int index) const;
|
std::string GetBannerName(int index) const;
|
||||||
bool GetName(std::wstring& wName, int index=0) const;
|
std::string GetVolumeName(int index) const;
|
||||||
const std::string& GetCompany() const {return m_Company;}
|
std::string GetName(int index) const;
|
||||||
const std::string& GetDescription(int index) const;
|
std::string GetCompany() const;
|
||||||
const std::wstring& GetDescription() const;
|
std::string GetDescription(int index = 0) const;
|
||||||
const std::string& GetUniqueID() const {return m_UniqueID;}
|
const std::string& GetUniqueID() const {return m_UniqueID;}
|
||||||
const std::string GetWiiFSPath() const;
|
const std::string GetWiiFSPath() const;
|
||||||
DiscIO::IVolume::ECountry GetCountry() const {return m_Country;}
|
DiscIO::IVolume::ECountry GetCountry() const {return m_Country;}
|
||||||
|
@ -65,11 +68,15 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_FileName;
|
std::string m_FileName;
|
||||||
std::string m_Name[6];
|
|
||||||
std::vector<std::wstring> m_wNames;
|
// TODO: eliminate this and overwrite with names from banner when available?
|
||||||
std::string m_Company;
|
std::vector<std::string> m_volume_names;
|
||||||
std::string m_Description[6];
|
|
||||||
std::wstring m_wDescription;
|
// Stuff from banner
|
||||||
|
std::string m_company;
|
||||||
|
std::vector<std::string> m_names;
|
||||||
|
std::vector<std::string> m_descriptions;
|
||||||
|
|
||||||
std::string m_UniqueID;
|
std::string m_UniqueID;
|
||||||
|
|
||||||
std::string m_issues;
|
std::string m_issues;
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "CommonPaths.h"
|
#include "CommonPaths.h"
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
|
|
||||||
|
#include "WxUtils.h"
|
||||||
#include "VolumeCreator.h"
|
#include "VolumeCreator.h"
|
||||||
#include "Filesystem.h"
|
#include "Filesystem.h"
|
||||||
#include "ISOProperties.h"
|
#include "ISOProperties.h"
|
||||||
|
@ -136,7 +137,8 @@ CISOProperties::CISOProperties(const std::string fileName, wxWindow* parent, wxW
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Will fail out if GameConfig folder doesn't exist
|
// Will fail out if GameConfig folder doesn't exist
|
||||||
std::ofstream f(GameIniFile.c_str());
|
std::ofstream f;
|
||||||
|
OpenFStream(f, GameIniFile, std::ios_base::out);
|
||||||
if (f)
|
if (f)
|
||||||
{
|
{
|
||||||
f << "# " << OpenISO->GetUniqueID() << " - " << OpenISO->GetName() << '\n'
|
f << "# " << OpenISO->GetUniqueID() << " - " << OpenISO->GetName() << '\n'
|
||||||
|
@ -150,21 +152,14 @@ CISOProperties::CISOProperties(const std::string fileName, wxWindow* parent, wxW
|
||||||
LoadGameConfig();
|
LoadGameConfig();
|
||||||
else
|
else
|
||||||
wxMessageBox(wxString::Format(_("Could not create %s"),
|
wxMessageBox(wxString::Format(_("Could not create %s"),
|
||||||
wxString::From8BitData(GameIniFile.c_str()).c_str()),
|
StrToWxStr(GameIniFile).c_str()),
|
||||||
_("Error"), wxOK|wxICON_ERROR, this);
|
_("Error"), wxOK|wxICON_ERROR, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disk header and apploader
|
// Disk header and apploader
|
||||||
|
|
||||||
std::wstring wname;
|
m_Name->SetValue(StrToWxStr(OpenISO->GetName()));
|
||||||
wxString name;
|
m_GameID->SetValue(StrToWxStr(OpenISO->GetUniqueID()));
|
||||||
if (OpenGameListItem->GetName(wname))
|
|
||||||
name = wname.c_str();
|
|
||||||
else
|
|
||||||
name = wxString(OpenISO->GetName().c_str(), wxConvUTF8);
|
|
||||||
m_Name->SetValue(name);
|
|
||||||
|
|
||||||
m_GameID->SetValue(wxString(OpenISO->GetUniqueID().c_str(), wxConvUTF8));
|
|
||||||
switch (OpenISO->GetCountry())
|
switch (OpenISO->GetCountry())
|
||||||
{
|
{
|
||||||
case DiscIO::IVolume::COUNTRY_EUROPE:
|
case DiscIO::IVolume::COUNTRY_EUROPE:
|
||||||
|
@ -204,9 +199,9 @@ CISOProperties::CISOProperties(const std::string fileName, wxWindow* parent, wxW
|
||||||
m_Country->SetValue(_("UNKNOWN"));
|
m_Country->SetValue(_("UNKNOWN"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
wxString temp = _T("0x") + wxString::From8BitData(OpenISO->GetMakerID().c_str());
|
wxString temp = _T("0x") + StrToWxStr(OpenISO->GetMakerID());
|
||||||
m_MakerID->SetValue(temp);
|
m_MakerID->SetValue(temp);
|
||||||
m_Date->SetValue(wxString::From8BitData(OpenISO->GetApploaderDate().c_str()));
|
m_Date->SetValue(StrToWxStr(OpenISO->GetApploaderDate()));
|
||||||
m_FST->SetValue(wxString::Format(wxT("%u"), OpenISO->GetFSTSize()));
|
m_FST->SetValue(wxString::Format(wxT("%u"), OpenISO->GetFSTSize()));
|
||||||
|
|
||||||
// Here we set all the info to be shown (be it SJIS or Ascii) + we set the window title
|
// Here we set all the info to be shown (be it SJIS or Ascii) + we set the window title
|
||||||
|
@ -271,12 +266,12 @@ size_t CISOProperties::CreateDirectoryTree(wxTreeItemId& parent,
|
||||||
// check next index
|
// check next index
|
||||||
if (rFileInfo->IsDirectory())
|
if (rFileInfo->IsDirectory())
|
||||||
{
|
{
|
||||||
wxTreeItemId item = m_Treectrl->AppendItem(parent, wxString::From8BitData(itemName), 1, 1);
|
wxTreeItemId item = m_Treectrl->AppendItem(parent, StrToWxStr(itemName), 1, 1);
|
||||||
CurrentIndex = CreateDirectoryTree(item, fileInfos, CurrentIndex + 1, (size_t)rFileInfo->m_FileSize);
|
CurrentIndex = CreateDirectoryTree(item, fileInfos, CurrentIndex + 1, (size_t)rFileInfo->m_FileSize);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_Treectrl->AppendItem(parent, wxString::From8BitData(itemName), 2, 2);
|
m_Treectrl->AppendItem(parent, StrToWxStr(itemName), 2, 2);
|
||||||
CurrentIndex++;
|
CurrentIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -663,10 +658,10 @@ void CISOProperties::OnExtractFile(wxCommandEvent& WXUNUSED (event))
|
||||||
{
|
{
|
||||||
int partitionNum = wxAtoi(File.SubString(10, 11));
|
int partitionNum = wxAtoi(File.SubString(10, 11));
|
||||||
File.Remove(0, 12); // Remove "Partition x/"
|
File.Remove(0, 12); // Remove "Partition x/"
|
||||||
WiiDisc.at(partitionNum).FileSystem->ExportFile(File.mb_str(), Path.mb_str());
|
WiiDisc.at(partitionNum).FileSystem->ExportFile(WxStrToStr(File).c_str(), WxStrToStr(Path).c_str());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
pFileSystem->ExportFile(File.mb_str(), Path.mb_str());
|
pFileSystem->ExportFile(WxStrToStr(File).c_str(), WxStrToStr(Path).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CISOProperties::ExportDir(const char* _rFullPath, const char* _rExportFolder, const int partitionNum)
|
void CISOProperties::ExportDir(const char* _rFullPath, const char* _rExportFolder, const int partitionNum)
|
||||||
|
@ -727,7 +722,7 @@ void CISOProperties::ExportDir(const char* _rFullPath, const char* _rExportFolde
|
||||||
(u32)(((float)(i - index[0]) / (float)(index[1] - index[0])) * 100)));
|
(u32)(((float)(i - index[0]) / (float)(index[1] - index[0])) * 100)));
|
||||||
|
|
||||||
dialog.Update(i, wxString::Format(_("Extracting %s"),
|
dialog.Update(i, wxString::Format(_("Extracting %s"),
|
||||||
wxString(fst[i]->m_FullPath, *wxConvCurrent).c_str()));
|
StrToWxStr(fst[i]->m_FullPath)));
|
||||||
|
|
||||||
if (dialog.WasCancelled())
|
if (dialog.WasCancelled())
|
||||||
break;
|
break;
|
||||||
|
@ -778,9 +773,9 @@ void CISOProperties::OnExtractDir(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
if (DiscIO::IsVolumeWiiDisc(OpenISO))
|
if (DiscIO::IsVolumeWiiDisc(OpenISO))
|
||||||
for (u32 i = 0; i < WiiDisc.size(); i++)
|
for (u32 i = 0; i < WiiDisc.size(); i++)
|
||||||
ExportDir(NULL, Path.mb_str(), i);
|
ExportDir(NULL, WxStrToStr(Path).c_str(), i);
|
||||||
else
|
else
|
||||||
ExportDir(NULL, Path.mb_str());
|
ExportDir(NULL, WxStrToStr(Path).c_str());
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -798,10 +793,10 @@ void CISOProperties::OnExtractDir(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
int partitionNum = wxAtoi(Directory.SubString(10, 11));
|
int partitionNum = wxAtoi(Directory.SubString(10, 11));
|
||||||
Directory.Remove(0, 12); // Remove "Partition x/"
|
Directory.Remove(0, 12); // Remove "Partition x/"
|
||||||
ExportDir(Directory.mb_str(), Path.mb_str(), partitionNum);
|
ExportDir(WxStrToStr(Directory).c_str(), WxStrToStr(Path).c_str(), partitionNum);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ExportDir(Directory.mb_str(), Path.mb_str());
|
ExportDir(WxStrToStr(Directory).c_str(), WxStrToStr(Path).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CISOProperties::OnExtractDataFromHeader(wxCommandEvent& event)
|
void CISOProperties::OnExtractDataFromHeader(wxCommandEvent& event)
|
||||||
|
@ -821,15 +816,15 @@ void CISOProperties::OnExtractDataFromHeader(wxCommandEvent& event)
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
if (event.GetId() == IDM_EXTRACTAPPLOADER)
|
if (event.GetId() == IDM_EXTRACTAPPLOADER)
|
||||||
{
|
{
|
||||||
ret = FS->ExportApploader(Path.mb_str());
|
ret = FS->ExportApploader(WxStrToStr(Path).c_str());
|
||||||
}
|
}
|
||||||
else if (event.GetId() == IDM_EXTRACTDOL)
|
else if (event.GetId() == IDM_EXTRACTDOL)
|
||||||
{
|
{
|
||||||
ret = FS->ExportDOL(Path.mb_str());
|
ret = FS->ExportDOL(WxStrToStr(Path).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
PanicAlertT("Failed to extract to %s!", (const char *)Path.mb_str());
|
PanicAlertT("Failed to extract to %s!", WxStrToStr(Path).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
class IntegrityCheckThread : public wxThread
|
class IntegrityCheckThread : public wxThread
|
||||||
|
@ -989,7 +984,7 @@ void CISOProperties::LoadGameConfig()
|
||||||
GameIni.Get("EmuState", "EmulationIssues", &sTemp);
|
GameIni.Get("EmuState", "EmulationIssues", &sTemp);
|
||||||
if (!sTemp.empty())
|
if (!sTemp.empty())
|
||||||
{
|
{
|
||||||
EmuIssues->SetValue(wxString(sTemp.c_str(), *wxConvCurrent));
|
EmuIssues->SetValue(StrToWxStr(sTemp));
|
||||||
}
|
}
|
||||||
EmuIssues->Enable(EmuState->GetSelection() != 0);
|
EmuIssues->Enable(EmuState->GetSelection() != 0);
|
||||||
|
|
||||||
|
@ -1075,7 +1070,7 @@ bool CISOProperties::SaveGameConfig()
|
||||||
GameIni.Get("EmuState","EmulationIssues", &sTemp);
|
GameIni.Get("EmuState","EmulationIssues", &sTemp);
|
||||||
if (EmuIssues->GetValue() != sTemp)
|
if (EmuIssues->GetValue() != sTemp)
|
||||||
bRefreshList = true;
|
bRefreshList = true;
|
||||||
GameIni.Set("EmuState", "EmulationIssues", (const char*)EmuIssues->GetValue().mb_str(*wxConvCurrent));
|
GameIni.Set("EmuState", "EmulationIssues", WxStrToStr(EmuIssues->GetValue()));
|
||||||
|
|
||||||
PatchList_Save();
|
PatchList_Save();
|
||||||
ActionReplayList_Save();
|
ActionReplayList_Save();
|
||||||
|
@ -1086,7 +1081,7 @@ bool CISOProperties::SaveGameConfig()
|
||||||
|
|
||||||
void CISOProperties::OnEditConfig(wxCommandEvent& WXUNUSED (event))
|
void CISOProperties::OnEditConfig(wxCommandEvent& WXUNUSED (event))
|
||||||
{
|
{
|
||||||
if (wxFileExists(wxString::From8BitData(GameIniFile.c_str())))
|
if (File::Exists(GameIniFile))
|
||||||
{
|
{
|
||||||
SaveGameConfig();
|
SaveGameConfig();
|
||||||
|
|
||||||
|
@ -1107,7 +1102,7 @@ void CISOProperties::OnEditConfig(wxCommandEvent& WXUNUSED (event))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wxString OpenCommand;
|
wxString OpenCommand;
|
||||||
OpenCommand = filetype->GetOpenCommand(wxString::From8BitData(GameIniFile.c_str()));
|
OpenCommand = filetype->GetOpenCommand(StrToWxStr(GameIniFile));
|
||||||
if(OpenCommand.IsEmpty())
|
if(OpenCommand.IsEmpty())
|
||||||
PanicAlertT("Couldn't find open command for extension 'ini'!");
|
PanicAlertT("Couldn't find open command for extension 'ini'!");
|
||||||
else
|
else
|
||||||
|
@ -1156,7 +1151,7 @@ void CISOProperties::PatchList_Load()
|
||||||
for (std::vector<PatchEngine::Patch>::const_iterator it = onFrame.begin(); it != onFrame.end(); ++it)
|
for (std::vector<PatchEngine::Patch>::const_iterator it = onFrame.begin(); it != onFrame.end(); ++it)
|
||||||
{
|
{
|
||||||
PatchEngine::Patch p = *it;
|
PatchEngine::Patch p = *it;
|
||||||
Patches->Append(wxString(p.name.c_str(), *wxConvCurrent));
|
Patches->Append(StrToWxStr(p.name));
|
||||||
Patches->Check(index, p.active);
|
Patches->Check(index, p.active);
|
||||||
++index;
|
++index;
|
||||||
}
|
}
|
||||||
|
@ -1209,7 +1204,7 @@ void CISOProperties::PatchButtonClicked(wxCommandEvent& event)
|
||||||
CPatchAddEdit dlg(-1, this, 1, _("Add Patch"));
|
CPatchAddEdit dlg(-1, this, 1, _("Add Patch"));
|
||||||
if (dlg.ShowModal() == wxID_OK)
|
if (dlg.ShowModal() == wxID_OK)
|
||||||
{
|
{
|
||||||
Patches->Append(wxString(onFrame.back().name.c_str(), *wxConvCurrent));
|
Patches->Append(StrToWxStr(onFrame.back().name));
|
||||||
Patches->Check((unsigned int)(onFrame.size() - 1), onFrame.back().active);
|
Patches->Check((unsigned int)(onFrame.size() - 1), onFrame.back().active);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1238,7 +1233,7 @@ void CISOProperties::ActionReplayList_Load()
|
||||||
for (std::vector<ActionReplay::ARCode>::const_iterator it = arCodes.begin(); it != arCodes.end(); ++it)
|
for (std::vector<ActionReplay::ARCode>::const_iterator it = arCodes.begin(); it != arCodes.end(); ++it)
|
||||||
{
|
{
|
||||||
ActionReplay::ARCode arCode = *it;
|
ActionReplay::ARCode arCode = *it;
|
||||||
Cheats->Append(wxString(arCode.name.c_str(), *wxConvCurrent));
|
Cheats->Append(StrToWxStr(arCode.name));
|
||||||
Cheats->Check(index, arCode.active);
|
Cheats->Check(index, arCode.active);
|
||||||
++index;
|
++index;
|
||||||
}
|
}
|
||||||
|
@ -1256,7 +1251,7 @@ void CISOProperties::ActionReplayList_Save()
|
||||||
|
|
||||||
for (std::vector<ActionReplay::AREntry>::const_iterator iter2 = code.ops.begin(); iter2 != code.ops.end(); ++iter2)
|
for (std::vector<ActionReplay::AREntry>::const_iterator iter2 = code.ops.begin(); iter2 != code.ops.end(); ++iter2)
|
||||||
{
|
{
|
||||||
lines.push_back(std::string(wxString::Format(wxT("%08X %08X"), iter2->cmd_addr, iter2->value).mb_str()));
|
lines.push_back(WxStrToStr(wxString::Format(wxT("%08X %08X"), iter2->cmd_addr, iter2->value)));
|
||||||
}
|
}
|
||||||
++index;
|
++index;
|
||||||
}
|
}
|
||||||
|
@ -1280,7 +1275,7 @@ void CISOProperties::ActionReplayButtonClicked(wxCommandEvent& event)
|
||||||
CARCodeAddEdit dlg(-1, this, 1, _("Add ActionReplay Code"));
|
CARCodeAddEdit dlg(-1, this, 1, _("Add ActionReplay Code"));
|
||||||
if (dlg.ShowModal() == wxID_OK)
|
if (dlg.ShowModal() == wxID_OK)
|
||||||
{
|
{
|
||||||
Cheats->Append(wxString::From8BitData(arCodes.back().name.c_str()));
|
Cheats->Append(StrToWxStr(arCodes.back().name));
|
||||||
Cheats->Check((unsigned int)(arCodes.size() - 1), arCodes.back().active);
|
Cheats->Check((unsigned int)(arCodes.size() - 1), arCodes.back().active);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1306,56 +1301,26 @@ void CISOProperties::OnChangeBannerLang(wxCommandEvent& event)
|
||||||
|
|
||||||
void CISOProperties::ChangeBannerDetails(int lang)
|
void CISOProperties::ChangeBannerDetails(int lang)
|
||||||
{
|
{
|
||||||
std::wstring wname;
|
// why?
|
||||||
wxString shortName,
|
|
||||||
comment,
|
|
||||||
maker;
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
wxCSConv SJISConv(*(wxCSConv*)wxConvCurrent);
|
|
||||||
static bool validCP932 = ::IsValidCodePage(932) != 0;
|
|
||||||
if (validCP932)
|
|
||||||
{
|
|
||||||
SJISConv = wxCSConv(wxFontMapper::GetEncodingName(wxFONTENCODING_SHIFT_JIS));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WARN_LOG(COMMON, "Cannot Convert from Charset Windows Japanese cp 932");
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// on linux the wrong string is returned from wxFontMapper::GetEncodingName(wxFONTENCODING_SHIFT_JIS)
|
|
||||||
// it returns CP-932, in order to use iconv we need to use CP932
|
|
||||||
wxCSConv SJISConv(wxT("CP932"));
|
|
||||||
#endif
|
|
||||||
switch (OpenGameListItem->GetCountry())
|
switch (OpenGameListItem->GetCountry())
|
||||||
{
|
{
|
||||||
case DiscIO::IVolume::COUNTRY_TAIWAN:
|
case DiscIO::IVolume::COUNTRY_TAIWAN:
|
||||||
case DiscIO::IVolume::COUNTRY_JAPAN:
|
case DiscIO::IVolume::COUNTRY_JAPAN:
|
||||||
|
lang = -1;
|
||||||
if (OpenGameListItem->GetName(wname, -1))
|
|
||||||
shortName = wname.c_str();
|
|
||||||
else
|
|
||||||
shortName = wxString(OpenGameListItem->GetName(0).c_str(), SJISConv);
|
|
||||||
|
|
||||||
if ((comment = OpenGameListItem->GetDescription().c_str()).size() == 0)
|
|
||||||
comment = wxString(OpenGameListItem->GetDescription(0).c_str(), SJISConv);
|
|
||||||
maker = wxString(OpenGameListItem->GetCompany().c_str(), SJISConv);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DiscIO::IVolume::COUNTRY_USA:
|
case DiscIO::IVolume::COUNTRY_USA:
|
||||||
lang = 0;
|
lang = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
|
||||||
wxCSConv WindowsCP1252(wxFontMapper::GetEncodingName(wxFONTENCODING_CP1252));
|
|
||||||
if (OpenGameListItem->GetName(wname, lang))
|
|
||||||
shortName = wname.c_str();
|
|
||||||
else
|
|
||||||
shortName = wxString(OpenGameListItem->GetName(lang).c_str(), WindowsCP1252);
|
|
||||||
if ((comment = OpenGameListItem->GetDescription().c_str()).size() == 0)
|
|
||||||
comment = wxString(OpenGameListItem->GetDescription(lang).c_str(), WindowsCP1252);
|
|
||||||
maker = wxString(OpenGameListItem->GetCompany().c_str(), WindowsCP1252);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxString const shortName = StrToWxStr(OpenGameListItem->GetBannerName(lang));
|
||||||
|
wxString const comment = StrToWxStr(OpenGameListItem->GetDescription(lang));
|
||||||
|
wxString const maker = StrToWxStr(OpenGameListItem->GetCompany());
|
||||||
|
|
||||||
// Updates the informations shown in the window
|
// Updates the informations shown in the window
|
||||||
m_ShortName->SetValue(shortName);
|
m_ShortName->SetValue(shortName);
|
||||||
m_Comment->SetValue(comment);
|
m_Comment->SetValue(comment);
|
||||||
|
@ -1364,5 +1329,6 @@ void CISOProperties::ChangeBannerDetails(int lang)
|
||||||
std::string filename, extension;
|
std::string filename, extension;
|
||||||
SplitPath(OpenGameListItem->GetFileName(), 0, &filename, &extension);
|
SplitPath(OpenGameListItem->GetFileName(), 0, &filename, &extension);
|
||||||
// Also sets the window's title
|
// Also sets the window's title
|
||||||
SetTitle(wxString(StringFromFormat("%s%s: %s - ", filename.c_str(), extension.c_str(), OpenGameListItem->GetUniqueID().c_str()).c_str(), *wxConvCurrent)+shortName);
|
SetTitle(StrToWxStr(StringFromFormat("%s%s: %s - ", filename.c_str(),
|
||||||
|
extension.c_str(), OpenGameListItem->GetUniqueID().c_str())) + shortName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,10 +17,7 @@
|
||||||
|
|
||||||
#include "InputConfigDiag.h"
|
#include "InputConfigDiag.h"
|
||||||
#include "UDPConfigDiag.h"
|
#include "UDPConfigDiag.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
#define WXSTR_FROM_STR(s) (wxString::FromUTF8((s).c_str()))
|
|
||||||
#define WXTSTR_FROM_CSTR(s) (wxGetTranslation(wxString::FromUTF8(s)))
|
|
||||||
#define STR_FROM_WXSTR(w) (std::string((w).ToUTF8()))
|
|
||||||
|
|
||||||
void GamepadPage::ConfigUDPWii(wxCommandEvent &event)
|
void GamepadPage::ConfigUDPWii(wxCommandEvent &event)
|
||||||
{
|
{
|
||||||
|
@ -37,7 +34,7 @@ void GamepadPage::ConfigExtension(wxCommandEvent& event)
|
||||||
if (ex->switch_extension)
|
if (ex->switch_extension)
|
||||||
{
|
{
|
||||||
wxDialog dlg(this, -1,
|
wxDialog dlg(this, -1,
|
||||||
WXTSTR_FROM_CSTR(ex->attachments[ex->switch_extension]->GetName().c_str()),
|
StrToWxStr(ex->attachments[ex->switch_extension]->GetName()),
|
||||||
wxDefaultPosition, wxDefaultSize);
|
wxDefaultPosition, wxDefaultSize);
|
||||||
|
|
||||||
wxBoxSizer* const main_szr = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer* const main_szr = new wxBoxSizer(wxVERTICAL);
|
||||||
|
@ -67,7 +64,7 @@ PadSettingExtension::PadSettingExtension(wxWindow* const parent, ControllerEmu::
|
||||||
e = extension->attachments.end();
|
e = extension->attachments.end();
|
||||||
|
|
||||||
for (; i!=e; ++i)
|
for (; i!=e; ++i)
|
||||||
((wxChoice*)wxcontrol)->Append(WXTSTR_FROM_CSTR((*i)->GetName().c_str()));
|
((wxChoice*)wxcontrol)->Append(StrToWxStr((*i)->GetName()));
|
||||||
|
|
||||||
UpdateGUI();
|
UpdateGUI();
|
||||||
}
|
}
|
||||||
|
@ -83,7 +80,7 @@ void PadSettingExtension::UpdateValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
PadSettingCheckBox::PadSettingCheckBox(wxWindow* const parent, ControlState& _value, const char* const label)
|
PadSettingCheckBox::PadSettingCheckBox(wxWindow* const parent, ControlState& _value, const char* const label)
|
||||||
: PadSetting(new wxCheckBox(parent, -1, WXTSTR_FROM_CSTR(label), wxDefaultPosition))
|
: PadSetting(new wxCheckBox(parent, -1, StrToWxStr(label), wxDefaultPosition))
|
||||||
, value(_value)
|
, value(_value)
|
||||||
{
|
{
|
||||||
UpdateGUI();
|
UpdateGUI();
|
||||||
|
@ -119,8 +116,8 @@ ControlDialog::ControlDialog(GamepadPage* const parent, InputPlugin& plugin, Con
|
||||||
m_devq = m_parent->controller->default_device;
|
m_devq = m_parent->controller->default_device;
|
||||||
|
|
||||||
// GetStrings() sounds slow :/
|
// GetStrings() sounds slow :/
|
||||||
//device_cbox = new wxComboBox(this, -1, WXSTR_FROM_STR(ref->device_qualifier.ToString()), wxDefaultPosition, wxSize(256,-1), parent->device_cbox->GetStrings(), wxTE_PROCESS_ENTER);
|
//device_cbox = new wxComboBox(this, -1, StrToWxStr(ref->device_qualifier.ToString()), wxDefaultPosition, wxSize(256,-1), parent->device_cbox->GetStrings(), wxTE_PROCESS_ENTER);
|
||||||
device_cbox = new wxComboBox(this, -1, WXSTR_FROM_STR(m_devq.ToString()), wxDefaultPosition, wxSize(256,-1), parent->device_cbox->GetStrings(), wxTE_PROCESS_ENTER);
|
device_cbox = new wxComboBox(this, -1, StrToWxStr(m_devq.ToString()), wxDefaultPosition, wxSize(256,-1), parent->device_cbox->GetStrings(), wxTE_PROCESS_ENTER);
|
||||||
|
|
||||||
device_cbox->Bind(wxEVT_COMMAND_COMBOBOX_SELECTED, &ControlDialog::SetDevice, this);
|
device_cbox->Bind(wxEVT_COMMAND_COMBOBOX_SELECTED, &ControlDialog::SetDevice, this);
|
||||||
device_cbox->Bind(wxEVT_COMMAND_TEXT_ENTER, &ControlDialog::SetDevice, this);
|
device_cbox->Bind(wxEVT_COMMAND_TEXT_ENTER, &ControlDialog::SetDevice, this);
|
||||||
|
@ -145,9 +142,9 @@ ControlButton::ControlButton(wxWindow* const parent, ControllerInterface::Contro
|
||||||
, control_reference(_ref)
|
, control_reference(_ref)
|
||||||
{
|
{
|
||||||
if (label.empty())
|
if (label.empty())
|
||||||
SetLabel(WXSTR_FROM_STR(_ref->expression));
|
SetLabel(StrToWxStr(_ref->expression));
|
||||||
else
|
else
|
||||||
SetLabel(WXSTR_FROM_STR(label));
|
SetLabel(StrToWxStr(label));
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputConfigDialog::UpdateProfileComboBox()
|
void InputConfigDialog::UpdateProfileComboBox()
|
||||||
|
@ -169,7 +166,7 @@ void InputConfigDialog::UpdateProfileComboBox()
|
||||||
for (; si!=se; ++si)
|
for (; si!=se; ++si)
|
||||||
{
|
{
|
||||||
std::string str(si->begin() + si->find_last_of('/') + 1 , si->end() - 4) ;
|
std::string str(si->begin() + si->find_last_of('/') + 1 , si->end() - 4) ;
|
||||||
strs.push_back(WXSTR_FROM_STR(str));
|
strs.push_back(StrToWxStr(str));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector< GamepadPage* >::iterator i = m_padpages.begin(),
|
std::vector< GamepadPage* >::iterator i = m_padpages.begin(),
|
||||||
|
@ -209,7 +206,7 @@ void ControlDialog::UpdateListContents()
|
||||||
i = dev->Inputs().begin(),
|
i = dev->Inputs().begin(),
|
||||||
e = dev->Inputs().end();
|
e = dev->Inputs().end();
|
||||||
for (; i!=e; ++i)
|
for (; i!=e; ++i)
|
||||||
control_lbox->Append(WXSTR_FROM_STR((*i)->GetName()));
|
control_lbox->Append(StrToWxStr((*i)->GetName()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -218,7 +215,7 @@ void ControlDialog::UpdateListContents()
|
||||||
i = dev->Outputs().begin(),
|
i = dev->Outputs().begin(),
|
||||||
e = dev->Outputs().end();
|
e = dev->Outputs().end();
|
||||||
for (; i!=e; ++i)
|
for (; i!=e; ++i)
|
||||||
control_lbox->Append(WXSTR_FROM_STR((*i)->GetName()));
|
control_lbox->Append(StrToWxStr((*i)->GetName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -227,7 +224,7 @@ void ControlDialog::SelectControl(const std::string& name)
|
||||||
{
|
{
|
||||||
//UpdateGUI();
|
//UpdateGUI();
|
||||||
|
|
||||||
const int f = control_lbox->FindString(WXSTR_FROM_STR(name));
|
const int f = control_lbox->FindString(StrToWxStr(name));
|
||||||
if (f >= 0)
|
if (f >= 0)
|
||||||
control_lbox->Select(f);
|
control_lbox->Select(f);
|
||||||
}
|
}
|
||||||
|
@ -235,7 +232,7 @@ void ControlDialog::SelectControl(const std::string& name)
|
||||||
void ControlDialog::UpdateGUI()
|
void ControlDialog::UpdateGUI()
|
||||||
{
|
{
|
||||||
// update textbox
|
// update textbox
|
||||||
textctrl->SetValue(WXSTR_FROM_STR(control_reference->expression));
|
textctrl->SetValue(StrToWxStr(control_reference->expression));
|
||||||
|
|
||||||
// updates the "bound controls:" label
|
// updates the "bound controls:" label
|
||||||
m_bound_label->SetLabel(wxString::Format(_("Bound Controls: %lu"),
|
m_bound_label->SetLabel(wxString::Format(_("Bound Controls: %lu"),
|
||||||
|
@ -244,7 +241,7 @@ void ControlDialog::UpdateGUI()
|
||||||
|
|
||||||
void GamepadPage::UpdateGUI()
|
void GamepadPage::UpdateGUI()
|
||||||
{
|
{
|
||||||
device_cbox->SetValue(WXSTR_FROM_STR(controller->default_device.ToString()));
|
device_cbox->SetValue(StrToWxStr(controller->default_device.ToString()));
|
||||||
|
|
||||||
std::vector< ControlGroupBox* >::const_iterator g = control_groups.begin(),
|
std::vector< ControlGroupBox* >::const_iterator g = control_groups.begin(),
|
||||||
ge = control_groups.end();
|
ge = control_groups.end();
|
||||||
|
@ -255,7 +252,7 @@ void GamepadPage::UpdateGUI()
|
||||||
, e = (*g)->control_buttons.end();
|
, e = (*g)->control_buttons.end();
|
||||||
for (; i!=e; ++i)
|
for (; i!=e; ++i)
|
||||||
//if (std::string::npos == (*i)->control_reference->expression.find_first_of("`|&!#"))
|
//if (std::string::npos == (*i)->control_reference->expression.find_first_of("`|&!#"))
|
||||||
(*i)->SetLabel(WXSTR_FROM_STR((*i)->control_reference->expression));
|
(*i)->SetLabel(StrToWxStr((*i)->control_reference->expression));
|
||||||
//else
|
//else
|
||||||
//(*i)->SetLabel(wxT("..."));
|
//(*i)->SetLabel(wxT("..."));
|
||||||
|
|
||||||
|
@ -294,7 +291,7 @@ void GamepadPage::LoadDefaults(wxCommandEvent&)
|
||||||
|
|
||||||
void ControlDialog::SetControl(wxCommandEvent&)
|
void ControlDialog::SetControl(wxCommandEvent&)
|
||||||
{
|
{
|
||||||
control_reference->expression = STR_FROM_WXSTR(textctrl->GetValue());
|
control_reference->expression = WxStrToStr(textctrl->GetValue());
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_plugin.controls_lock);
|
std::lock_guard<std::recursive_mutex> lk(m_plugin.controls_lock);
|
||||||
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
||||||
|
@ -304,10 +301,10 @@ void ControlDialog::SetControl(wxCommandEvent&)
|
||||||
|
|
||||||
void GamepadPage::SetDevice(wxCommandEvent&)
|
void GamepadPage::SetDevice(wxCommandEvent&)
|
||||||
{
|
{
|
||||||
controller->default_device.FromString(STR_FROM_WXSTR(device_cbox->GetValue()));
|
controller->default_device.FromString(WxStrToStr(device_cbox->GetValue()));
|
||||||
|
|
||||||
// show user what it was validated as
|
// show user what it was validated as
|
||||||
device_cbox->SetValue(WXSTR_FROM_STR(controller->default_device.ToString()));
|
device_cbox->SetValue(StrToWxStr(controller->default_device.ToString()));
|
||||||
|
|
||||||
// this will set all the controls to this default device
|
// this will set all the controls to this default device
|
||||||
controller->UpdateDefaultDevice();
|
controller->UpdateDefaultDevice();
|
||||||
|
@ -319,10 +316,10 @@ void GamepadPage::SetDevice(wxCommandEvent&)
|
||||||
|
|
||||||
void ControlDialog::SetDevice(wxCommandEvent&)
|
void ControlDialog::SetDevice(wxCommandEvent&)
|
||||||
{
|
{
|
||||||
m_devq.FromString(STR_FROM_WXSTR(device_cbox->GetValue()));
|
m_devq.FromString(WxStrToStr(device_cbox->GetValue()));
|
||||||
|
|
||||||
// show user what it was validated as
|
// show user what it was validated as
|
||||||
device_cbox->SetValue(WXSTR_FROM_STR(m_devq.ToString()));
|
device_cbox->SetValue(StrToWxStr(m_devq.ToString()));
|
||||||
|
|
||||||
// update gui
|
// update gui
|
||||||
UpdateListContents();
|
UpdateListContents();
|
||||||
|
@ -349,12 +346,12 @@ void ControlDialog::SetSelectedControl(wxCommandEvent&)
|
||||||
|
|
||||||
// non-default device
|
// non-default device
|
||||||
if (false == (m_devq == m_parent->controller->default_device))
|
if (false == (m_devq == m_parent->controller->default_device))
|
||||||
expr.append(wxT('`')).append(WXSTR_FROM_STR(m_devq.ToString())).append(wxT('`'));
|
expr.append(wxT('`')).append(StrToWxStr(m_devq.ToString())).append(wxT('`'));
|
||||||
|
|
||||||
// append the control name
|
// append the control name
|
||||||
expr += control_lbox->GetString(num);
|
expr += control_lbox->GetString(num);
|
||||||
|
|
||||||
control_reference->expression = STR_FROM_WXSTR(expr);
|
control_reference->expression = WxStrToStr(expr);
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_plugin.controls_lock);
|
std::lock_guard<std::recursive_mutex> lk(m_plugin.controls_lock);
|
||||||
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
||||||
|
@ -380,12 +377,12 @@ void ControlDialog::AppendControl(wxCommandEvent& event)
|
||||||
|
|
||||||
// non-default device
|
// non-default device
|
||||||
if (false == (m_devq == m_parent->controller->default_device))
|
if (false == (m_devq == m_parent->controller->default_device))
|
||||||
expr.append(wxT('`')).append(WXSTR_FROM_STR(m_devq.ToString())).append(wxT('`'));
|
expr.append(wxT('`')).append(StrToWxStr(m_devq.ToString())).append(wxT('`'));
|
||||||
|
|
||||||
// append the control name
|
// append the control name
|
||||||
expr += control_lbox->GetString(num);
|
expr += control_lbox->GetString(num);
|
||||||
|
|
||||||
control_reference->expression = STR_FROM_WXSTR(expr);
|
control_reference->expression = WxStrToStr(expr);
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> lk(m_plugin.controls_lock);
|
std::lock_guard<std::recursive_mutex> lk(m_plugin.controls_lock);
|
||||||
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
||||||
|
@ -475,7 +472,7 @@ void GamepadPage::DetectControl(wxCommandEvent& event)
|
||||||
g_controller_interface.UpdateReference(btn->control_reference, controller->default_device);
|
g_controller_interface.UpdateReference(btn->control_reference, controller->default_device);
|
||||||
}
|
}
|
||||||
|
|
||||||
btn->SetLabel(WXSTR_FROM_STR(btn->control_reference->expression));
|
btn->SetLabel(StrToWxStr(btn->control_reference->expression));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -565,7 +562,7 @@ void GamepadPage::GetProfilePath(std::string& path)
|
||||||
path += PROFILES_PATH;
|
path += PROFILES_PATH;
|
||||||
path += m_plugin.profile_name;
|
path += m_plugin.profile_name;
|
||||||
path += '/';
|
path += '/';
|
||||||
path += STR_FROM_WXSTR(profile_cbox->GetValue());
|
path += WxStrToStr(profile_cbox->GetValue());
|
||||||
path += ".ini";
|
path += ".ini";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -615,7 +612,7 @@ void GamepadPage::DeleteProfile(wxCommandEvent&)
|
||||||
|
|
||||||
if (File::Exists(fnamecstr) &&
|
if (File::Exists(fnamecstr) &&
|
||||||
AskYesNoT("Are you sure you want to delete \"%s\"?",
|
AskYesNoT("Are you sure you want to delete \"%s\"?",
|
||||||
STR_FROM_WXSTR(profile_cbox->GetValue()).c_str()))
|
WxStrToStr(profile_cbox->GetValue()).c_str()))
|
||||||
{
|
{
|
||||||
File::Delete(fnamecstr);
|
File::Delete(fnamecstr);
|
||||||
|
|
||||||
|
@ -637,9 +634,9 @@ void InputConfigDialog::UpdateDeviceComboBox()
|
||||||
for (; di!=de; ++di)
|
for (; di!=de; ++di)
|
||||||
{
|
{
|
||||||
dq.FromDevice(*di);
|
dq.FromDevice(*di);
|
||||||
(*i)->device_cbox->Append(WXSTR_FROM_STR(dq.ToString()));
|
(*i)->device_cbox->Append(StrToWxStr(dq.ToString()));
|
||||||
}
|
}
|
||||||
(*i)->device_cbox->SetValue(WXSTR_FROM_STR((*i)->controller->default_device.ToString()));
|
(*i)->device_cbox->SetValue(StrToWxStr((*i)->controller->default_device.ToString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -680,7 +677,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
|
||||||
for (; ci != ce; ++ci)
|
for (; ci != ce; ++ci)
|
||||||
{
|
{
|
||||||
|
|
||||||
wxStaticText* const label = new wxStaticText(parent, -1, WXTSTR_FROM_CSTR((*ci)->name));
|
wxStaticText* const label = new wxStaticText(parent, -1, StrToWxStr((*ci)->name));
|
||||||
|
|
||||||
ControlButton* const control_button = new ControlButton(parent, (*ci)->control_ref, 80);
|
ControlButton* const control_button = new ControlButton(parent, (*ci)->control_ref, 80);
|
||||||
control_button->SetFont(m_SmallFont);
|
control_button->SetFont(m_SmallFont);
|
||||||
|
@ -734,7 +731,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
|
||||||
PadSettingSpin* setting = new PadSettingSpin(parent, *i);
|
PadSettingSpin* setting = new PadSettingSpin(parent, *i);
|
||||||
setting->wxcontrol->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &GamepadPage::AdjustSetting, eventsink);
|
setting->wxcontrol->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &GamepadPage::AdjustSetting, eventsink);
|
||||||
options.push_back(setting);
|
options.push_back(setting);
|
||||||
szr->Add(new wxStaticText(parent, -1, WXTSTR_FROM_CSTR((*i)->name)));
|
szr->Add(new wxStaticText(parent, -1, StrToWxStr((*i)->name)));
|
||||||
szr->Add(setting->wxcontrol, 0, wxLEFT, 0);
|
szr->Add(setting->wxcontrol, 0, wxLEFT, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -760,7 +757,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
|
||||||
options.push_back(threshold_cbox);
|
options.push_back(threshold_cbox);
|
||||||
|
|
||||||
wxBoxSizer* const szr = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer* const szr = new wxBoxSizer(wxHORIZONTAL);
|
||||||
szr->Add(new wxStaticText(parent, -1, WXTSTR_FROM_CSTR(group->settings[0]->name)),
|
szr->Add(new wxStaticText(parent, -1, StrToWxStr(group->settings[0]->name)),
|
||||||
0, wxCENTER|wxRIGHT, 3);
|
0, wxCENTER|wxRIGHT, 3);
|
||||||
szr->Add(threshold_cbox->wxcontrol, 0, wxRIGHT, 3);
|
szr->Add(threshold_cbox->wxcontrol, 0, wxRIGHT, 3);
|
||||||
|
|
||||||
|
@ -795,7 +792,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
|
||||||
setting->wxcontrol->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &GamepadPage::AdjustSetting, eventsink);
|
setting->wxcontrol->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &GamepadPage::AdjustSetting, eventsink);
|
||||||
options.push_back(setting);
|
options.push_back(setting);
|
||||||
wxBoxSizer* const szr = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer* const szr = new wxBoxSizer(wxHORIZONTAL);
|
||||||
szr->Add(new wxStaticText(parent, -1, WXTSTR_FROM_CSTR((*i)->name)), 0, wxCENTER|wxRIGHT, 3);
|
szr->Add(new wxStaticText(parent, -1, StrToWxStr((*i)->name)), 0, wxCENTER|wxRIGHT, 3);
|
||||||
szr->Add(setting->wxcontrol, 0, wxRIGHT, 3);
|
szr->Add(setting->wxcontrol, 0, wxRIGHT, 3);
|
||||||
Add(szr, 0, wxALL|wxCENTER, 3);
|
Add(szr, 0, wxALL|wxCENTER, 3);
|
||||||
}
|
}
|
||||||
|
@ -859,7 +856,7 @@ ControlGroupsSizer::ControlGroupsSizer(ControllerEmu* const controller, wxWindow
|
||||||
{
|
{
|
||||||
ControlGroupBox* control_group_box = new ControlGroupBox(controller->groups[i], parent, eventsink);
|
ControlGroupBox* control_group_box = new ControlGroupBox(controller->groups[i], parent, eventsink);
|
||||||
wxStaticBoxSizer *control_group =
|
wxStaticBoxSizer *control_group =
|
||||||
new wxStaticBoxSizer(wxVERTICAL, parent, WXTSTR_FROM_CSTR(controller->groups[i]->name));
|
new wxStaticBoxSizer(wxVERTICAL, parent, StrToWxStr(controller->groups[i]->name));
|
||||||
control_group->Add(control_group_box);
|
control_group->Add(control_group_box);
|
||||||
|
|
||||||
const size_t grp_size = controller->groups[i]->controls.size() + controller->groups[i]->settings.size();
|
const size_t grp_size = controller->groups[i]->controls.size() + controller->groups[i]->settings.size();
|
||||||
|
@ -955,7 +952,7 @@ GamepadPage::GamepadPage(wxWindow* parent, InputPlugin& plugin, const unsigned i
|
||||||
|
|
||||||
|
|
||||||
InputConfigDialog::InputConfigDialog(wxWindow* const parent, InputPlugin& plugin, const std::string& name, const int tab_num)
|
InputConfigDialog::InputConfigDialog(wxWindow* const parent, InputPlugin& plugin, const std::string& name, const int tab_num)
|
||||||
: wxDialog(parent, wxID_ANY, WXTSTR_FROM_CSTR(name.c_str()), wxPoint(128,-1), wxDefaultSize)
|
: wxDialog(parent, wxID_ANY, StrToWxStr(name), wxPoint(128,-1), wxDefaultSize)
|
||||||
, m_plugin(plugin)
|
, m_plugin(plugin)
|
||||||
{
|
{
|
||||||
m_pad_notebook = new wxNotebook(this, -1, wxDefaultPosition, wxDefaultSize, wxNB_DEFAULT);
|
m_pad_notebook = new wxNotebook(this, -1, wxDefaultPosition, wxDefaultSize, wxNB_DEFAULT);
|
||||||
|
@ -963,7 +960,7 @@ InputConfigDialog::InputConfigDialog(wxWindow* const parent, InputPlugin& plugin
|
||||||
{
|
{
|
||||||
GamepadPage* gp = new GamepadPage(m_pad_notebook, m_plugin, i, this);
|
GamepadPage* gp = new GamepadPage(m_pad_notebook, m_plugin, i, this);
|
||||||
m_padpages.push_back(gp);
|
m_padpages.push_back(gp);
|
||||||
m_pad_notebook->AddPage(gp, wxString::Format(wxT("%s %u"), WXTSTR_FROM_CSTR(m_plugin.gui_name), 1+i));
|
m_pad_notebook->AddPage(gp, wxString::Format(wxT("%s %u"), StrToWxStr(m_plugin.gui_name), 1+i));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_pad_notebook->SetSelection(tab_num);
|
m_pad_notebook->SetSelection(tab_num);
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
#include "InputConfigDiag.h"
|
#include "InputConfigDiag.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
|
void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
|
@ -48,7 +49,7 @@ void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
|
||||||
|
|
||||||
// label for sticks and stuff
|
// label for sticks and stuff
|
||||||
if (64 == bitmap.GetHeight())
|
if (64 == bitmap.GetHeight())
|
||||||
dc.DrawText(wxString::FromAscii((*g)->control_group->name).Upper(), 4, 2);
|
dc.DrawText(StrToWxStr((*g)->control_group->name).Upper(), 4, 2);
|
||||||
|
|
||||||
switch ( (*g)->control_group->type )
|
switch ( (*g)->control_group->type )
|
||||||
{
|
{
|
||||||
|
@ -227,7 +228,7 @@ void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
|
||||||
// text
|
// text
|
||||||
const char* const name = (*g)->control_group->controls[n]->name;
|
const char* const name = (*g)->control_group->controls[n]->name;
|
||||||
// bit of hax so ZL, ZR show up as L, R
|
// bit of hax so ZL, ZR show up as L, R
|
||||||
dc.DrawText(wxString::FromAscii((name[1] && name[1] < 'a') ? name[1] : name[0]), n*12 + 2, 1);
|
dc.DrawText(StrToWxStr(std::string(1, (name[1] && name[1] < 'a') ? name[1] : name[0])), n*12 + 2, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] bitmasks;
|
delete[] bitmasks;
|
||||||
|
@ -263,7 +264,7 @@ void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
|
||||||
dc.DrawRectangle(0, n*12, trigs[n], 14);
|
dc.DrawRectangle(0, n*12, trigs[n], 14);
|
||||||
|
|
||||||
// text
|
// text
|
||||||
dc.DrawText(wxString::FromAscii((*g)->control_group->controls[n]->name), 3, n*12 + 1);
|
dc.DrawText(StrToWxStr((*g)->control_group->controls[n]->name), 3, n*12 + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] trigs;
|
delete[] trigs;
|
||||||
|
@ -298,8 +299,8 @@ void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
|
||||||
dc.DrawRectangle(64, n*12, 32, 14);
|
dc.DrawRectangle(64, n*12, 32, 14);
|
||||||
|
|
||||||
// text
|
// text
|
||||||
dc.DrawText(wxString::FromAscii((*g)->control_group->controls[n+trigger_count]->name), 3, n*12 + 1);
|
dc.DrawText(StrToWxStr((*g)->control_group->controls[n+trigger_count]->name), 3, n*12 + 1);
|
||||||
dc.DrawText(wxString::FromAscii((*g)->control_group->controls[n]->name[0]), 64 + 3, n*12 + 1);
|
dc.DrawText(StrToWxStr(std::string(1, (*g)->control_group->controls[n]->name[0])), 64 + 3, n*12 + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// threshold box
|
// threshold box
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "ConsoleListener.h"
|
#include "ConsoleListener.h"
|
||||||
#include "LogWindow.h"
|
#include "LogWindow.h"
|
||||||
#include "FileUtil.h"
|
#include "FileUtil.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
LogConfigWindow::LogConfigWindow(wxWindow* parent, CLogWindow *log_window, wxWindowID id)
|
LogConfigWindow::LogConfigWindow(wxWindow* parent, CLogWindow *log_window, wxWindowID id)
|
||||||
: wxPanel(parent, id, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _("Log Configuration"))
|
: wxPanel(parent, id, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _("Log Configuration"))
|
||||||
|
@ -74,7 +75,7 @@ void LogConfigWindow::CreateGUIControls()
|
||||||
m_checks = new wxCheckListBox(this, wxID_ANY);
|
m_checks = new wxCheckListBox(this, wxID_ANY);
|
||||||
m_checks->Bind(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, &LogConfigWindow::OnLogCheck, this);
|
m_checks->Bind(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, &LogConfigWindow::OnLogCheck, this);
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
|
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
|
||||||
m_checks->Append(wxString::FromAscii(m_LogManager->GetFullName((LogTypes::LOG_TYPE)i)));
|
m_checks->Append(StrToWxStr(m_LogManager->GetFullName((LogTypes::LOG_TYPE)i)));
|
||||||
|
|
||||||
// Sizers
|
// Sizers
|
||||||
wxStaticBoxSizer* sbOutputs = new wxStaticBoxSizer(wxVERTICAL, this, _("Logger Outputs"));
|
wxStaticBoxSizer* sbOutputs = new wxStaticBoxSizer(wxVERTICAL, this, _("Logger Outputs"));
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
#include "IniFile.h"
|
#include "IniFile.h"
|
||||||
#include "FileUtil.h"
|
#include "FileUtil.h"
|
||||||
#include "Debugger/DebuggerUIUtil.h"
|
#include "Debugger/DebuggerUIUtil.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
#include <wx/fontmap.h>
|
#include <wx/fontmap.h>
|
||||||
|
|
||||||
// Milliseconds between msgQueue flushes to wxTextCtrl
|
// Milliseconds between msgQueue flushes to wxTextCtrl
|
||||||
|
@ -41,25 +43,7 @@ CLogWindow::CLogWindow(CFrame *parent, wxWindowID id, const wxPoint& pos,
|
||||||
, x(0), y(0), winpos(0)
|
, x(0), y(0), winpos(0)
|
||||||
, Parent(parent), m_ignoreLogTimer(false), m_LogAccess(true)
|
, Parent(parent), m_ignoreLogTimer(false), m_LogAccess(true)
|
||||||
, m_Log(NULL), m_cmdline(NULL), m_FontChoice(NULL)
|
, m_Log(NULL), m_cmdline(NULL), m_FontChoice(NULL)
|
||||||
, m_SJISConv(wxT(""))
|
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
|
||||||
static bool validCP932 = ::IsValidCodePage(932) != 0;
|
|
||||||
if (validCP932)
|
|
||||||
{
|
|
||||||
m_SJISConv = wxCSConv(wxFontMapper::GetEncodingName(wxFONTENCODING_SHIFT_JIS));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WARN_LOG(COMMON, "Cannot Convert from Charset Windows Japanese cp 932");
|
|
||||||
m_SJISConv = *(wxCSConv*)wxConvCurrent;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// on linux the wrong string is returned from wxFontMapper::GetEncodingName(wxFONTENCODING_SHIFT_JIS)
|
|
||||||
// it returns CP-932, in order to use iconv we need to use CP932
|
|
||||||
m_SJISConv = wxCSConv(wxT("CP932"));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
m_LogManager = LogManager::GetInstance();
|
m_LogManager = LogManager::GetInstance();
|
||||||
|
|
||||||
CreateGUIControls();
|
CreateGUIControls();
|
||||||
|
@ -208,7 +192,7 @@ void CLogWindow::SaveSettings()
|
||||||
void CLogWindow::OnSubmit(wxCommandEvent& WXUNUSED (event))
|
void CLogWindow::OnSubmit(wxCommandEvent& WXUNUSED (event))
|
||||||
{
|
{
|
||||||
if (!m_cmdline) return;
|
if (!m_cmdline) return;
|
||||||
Console_Submit(m_cmdline->GetValue().To8BitData());
|
Console_Submit(WxStrToStr(m_cmdline->GetValue()).c_str());
|
||||||
m_cmdline->SetValue(wxEmptyString);
|
m_cmdline->SetValue(wxEmptyString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,5 +354,6 @@ void CLogWindow::Log(LogTypes::LOG_LEVELS level, const char *text)
|
||||||
|
|
||||||
if (msgQueue.size() >= 100)
|
if (msgQueue.size() >= 100)
|
||||||
msgQueue.pop();
|
msgQueue.pop();
|
||||||
msgQueue.push(std::pair<u8, wxString>((u8)level, wxString(text, m_SJISConv)));
|
|
||||||
|
msgQueue.push(std::make_pair(u8(level), StrToWxStr(text)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,8 +75,6 @@ private:
|
||||||
|
|
||||||
std::mutex m_LogSection;
|
std::mutex m_LogSection;
|
||||||
|
|
||||||
wxCSConv m_SJISConv;
|
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
|
|
||||||
wxTextCtrl * CreateTextCtrl(wxPanel* parent, wxWindowID id = wxID_ANY, long Style = NULL);
|
wxTextCtrl * CreateTextCtrl(wxPanel* parent, wxWindowID id = wxID_ANY, long Style = NULL);
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include "Host.h" // Core
|
#include "Host.h" // Core
|
||||||
#include "HW/Wiimote.h"
|
#include "HW/Wiimote.h"
|
||||||
|
|
||||||
|
#include "WxUtils.h"
|
||||||
#include "Globals.h" // Local
|
#include "Globals.h" // Local
|
||||||
#include "Main.h"
|
#include "Main.h"
|
||||||
#include "ConfigManager.h"
|
#include "ConfigManager.h"
|
||||||
|
@ -211,7 +212,7 @@ bool DolphinApp::OnInit()
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (!wxSetWorkingDirectory(wxString(File::GetExeDirectory().c_str(), *wxConvCurrent)))
|
if (!wxSetWorkingDirectory(StrToWxStr(File::GetExeDirectory())))
|
||||||
{
|
{
|
||||||
INFO_LOG(CONSOLE, "set working directory failed");
|
INFO_LOG(CONSOLE, "set working directory failed");
|
||||||
}
|
}
|
||||||
|
@ -246,7 +247,7 @@ bool DolphinApp::OnInit()
|
||||||
|
|
||||||
if (selectVideoBackend && videoBackendName != wxEmptyString)
|
if (selectVideoBackend && videoBackendName != wxEmptyString)
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.m_strVideoBackend =
|
SConfig::GetInstance().m_LocalCoreStartupParameter.m_strVideoBackend =
|
||||||
std::string(videoBackendName.mb_str());
|
WxStrToStr(videoBackendName);
|
||||||
|
|
||||||
if (selectAudioEmulation)
|
if (selectAudioEmulation)
|
||||||
{
|
{
|
||||||
|
@ -296,7 +297,7 @@ bool DolphinApp::OnInit()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
main_frame = new CFrame((wxFrame*)NULL, wxID_ANY,
|
main_frame = new CFrame((wxFrame*)NULL, wxID_ANY,
|
||||||
wxString::FromAscii(scm_rev_str),
|
StrToWxStr(scm_rev_str),
|
||||||
wxPoint(x, y), wxSize(w, h),
|
wxPoint(x, y), wxSize(w, h),
|
||||||
UseDebugger, BatchMode, UseLogger);
|
UseDebugger, BatchMode, UseLogger);
|
||||||
SetTopWindow(main_frame);
|
SetTopWindow(main_frame);
|
||||||
|
@ -317,7 +318,7 @@ void DolphinApp::MacOpenFile(const wxString &fileName)
|
||||||
LoadFile = true;
|
LoadFile = true;
|
||||||
|
|
||||||
if (m_afterinit == NULL)
|
if (m_afterinit == NULL)
|
||||||
main_frame->BootGame(std::string(FileToLoad.mb_str()));
|
main_frame->BootGame(WxStrToStr(FileToLoad));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DolphinApp::AfterInit(wxTimerEvent& WXUNUSED(event))
|
void DolphinApp::AfterInit(wxTimerEvent& WXUNUSED(event))
|
||||||
|
@ -331,7 +332,7 @@ void DolphinApp::AfterInit(wxTimerEvent& WXUNUSED(event))
|
||||||
// First check if we have an exec command line.
|
// First check if we have an exec command line.
|
||||||
if (LoadFile && FileToLoad != wxEmptyString)
|
if (LoadFile && FileToLoad != wxEmptyString)
|
||||||
{
|
{
|
||||||
main_frame->BootGame(std::string(FileToLoad.mb_str()));
|
main_frame->BootGame(WxStrToStr(FileToLoad));
|
||||||
}
|
}
|
||||||
// If we have selected Automatic Start, start the default ISO,
|
// If we have selected Automatic Start, start the default ISO,
|
||||||
// or if no default ISO exists, start the last loaded ISO
|
// or if no default ISO exists, start the last loaded ISO
|
||||||
|
@ -418,7 +419,7 @@ void Host_SysMessage(const char *fmt, ...)
|
||||||
va_end(list);
|
va_end(list);
|
||||||
|
|
||||||
if (msg[strlen(msg)-1] == '\n') msg[strlen(msg)-1] = 0;
|
if (msg[strlen(msg)-1] == '\n') msg[strlen(msg)-1] = 0;
|
||||||
//wxMessageBox(wxString::FromAscii(msg));
|
//wxMessageBox(StrToWxStr(msg));
|
||||||
PanicAlert("%s", msg);
|
PanicAlert("%s", msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,14 +428,13 @@ bool wxMsgAlert(const char* caption, const char* text, bool yes_no, int /*Style*
|
||||||
#ifdef __WXGTK__
|
#ifdef __WXGTK__
|
||||||
if (wxIsMainThread())
|
if (wxIsMainThread())
|
||||||
#endif
|
#endif
|
||||||
return wxYES == wxMessageBox(wxString::FromUTF8(text),
|
return wxYES == wxMessageBox(StrToWxStr(text), StrToWxStr(caption),
|
||||||
wxString::FromUTF8(caption),
|
|
||||||
(yes_no) ? wxYES_NO : wxOK, wxGetActiveWindow());
|
(yes_no) ? wxYES_NO : wxOK, wxGetActiveWindow());
|
||||||
#ifdef __WXGTK__
|
#ifdef __WXGTK__
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_PANIC);
|
wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_PANIC);
|
||||||
event.SetString(wxString::FromUTF8(caption) + wxT(":") + wxString::FromUTF8(text));
|
event.SetString(StrToWxStr(caption) + wxT(":") + StrToWxStr(text));
|
||||||
event.SetInt(yes_no);
|
event.SetInt(yes_no);
|
||||||
main_frame->GetEventHandler()->AddPendingEvent(event);
|
main_frame->GetEventHandler()->AddPendingEvent(event);
|
||||||
main_frame->panic_event.Wait();
|
main_frame->panic_event.Wait();
|
||||||
|
@ -445,7 +445,7 @@ bool wxMsgAlert(const char* caption, const char* text, bool yes_no, int /*Style*
|
||||||
|
|
||||||
std::string wxStringTranslator(const char *text)
|
std::string wxStringTranslator(const char *text)
|
||||||
{
|
{
|
||||||
return (const char *)wxString(wxGetTranslation(wxString::From8BitData(text))).ToUTF8();
|
return WxStrToStr(wxGetTranslation(wxString::FromUTF8(text)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Accessor for the main window class
|
// Accessor for the main window class
|
||||||
|
@ -536,7 +536,7 @@ void Host_UpdateMainFrame()
|
||||||
void Host_UpdateTitle(const char* title)
|
void Host_UpdateTitle(const char* title)
|
||||||
{
|
{
|
||||||
wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_UPDATETITLE);
|
wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_UPDATETITLE);
|
||||||
event.SetString(wxString::FromAscii(title));
|
event.SetString(StrToWxStr(title));
|
||||||
main_frame->GetEventHandler()->AddPendingEvent(event);
|
main_frame->GetEventHandler()->AddPendingEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -603,7 +603,7 @@ void Host_UpdateStatusBar(const char* _pText, int Field)
|
||||||
{
|
{
|
||||||
wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_UPDATESTATUSBAR);
|
wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_UPDATESTATUSBAR);
|
||||||
// Set the event string
|
// Set the event string
|
||||||
event.SetString(wxString::FromAscii(_pText));
|
event.SetString(StrToWxStr(_pText));
|
||||||
// Update statusbar field
|
// Update statusbar field
|
||||||
event.SetInt(Field);
|
event.SetInt(Field);
|
||||||
// Post message
|
// Post message
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
|
|
||||||
#include "MemcardManager.h"
|
#include "MemcardManager.h"
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
|
||||||
|
#include "WxUtils.h"
|
||||||
#include "wx/mstream.h"
|
#include "wx/mstream.h"
|
||||||
|
|
||||||
#define ARROWS slot ? _T("") : ARROW[slot], slot ? ARROW[slot] : _T("")
|
#define ARROWS slot ? _T("") : ARROW[slot], slot ? ARROW[slot] : _T("")
|
||||||
|
@ -212,7 +214,7 @@ void CMemcardManager::CreateGUIControls()
|
||||||
sPages->Add(m_NextPage[slot], 0, wxEXPAND|wxALL, 1);
|
sPages->Add(m_NextPage[slot], 0, wxEXPAND|wxALL, 1);
|
||||||
|
|
||||||
m_MemcardPath[slot] = new wxFilePickerCtrl(this, ID_MEMCARDPATH_A + slot,
|
m_MemcardPath[slot] = new wxFilePickerCtrl(this, ID_MEMCARDPATH_A + slot,
|
||||||
wxString::From8BitData(File::GetUserPath(D_GCUSER_IDX).c_str()), _("Choose a memory card:"),
|
StrToWxStr(File::GetUserPath(D_GCUSER_IDX)), _("Choose a memory card:"),
|
||||||
_("Gamecube Memory Cards (*.raw,*.gcp)") + wxString(wxT("|*.raw;*.gcp")), wxDefaultPosition, wxDefaultSize, wxFLP_USE_TEXTCTRL|wxFLP_OPEN);
|
_("Gamecube Memory Cards (*.raw,*.gcp)") + wxString(wxT("|*.raw;*.gcp")), wxDefaultPosition, wxDefaultSize, wxFLP_USE_TEXTCTRL|wxFLP_OPEN);
|
||||||
|
|
||||||
m_MemcardList[slot] = new CMemcardListCtrl(this, ID_MEMCARDLIST_A + slot, wxDefaultPosition, wxSize(350,400),
|
m_MemcardList[slot] = new CMemcardListCtrl(this, ID_MEMCARDLIST_A + slot, wxDefaultPosition, wxSize(350,400),
|
||||||
|
@ -263,7 +265,7 @@ void CMemcardManager::CreateGUIControls()
|
||||||
m_Delete[i]->Disable();
|
m_Delete[i]->Disable();
|
||||||
if (DefaultMemcard[i].length())
|
if (DefaultMemcard[i].length())
|
||||||
{
|
{
|
||||||
m_MemcardPath[i]->SetPath(wxString::From8BitData(DefaultMemcard[i].c_str()));
|
m_MemcardPath[i]->SetPath(StrToWxStr(DefaultMemcard[i]));
|
||||||
ChangePath(i);
|
ChangePath(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -290,7 +292,7 @@ void CMemcardManager::ChangePath(int slot)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_MemcardPath[slot]->GetPath().length() && ReloadMemcard(m_MemcardPath[slot]->GetPath().mb_str(), slot))
|
if (m_MemcardPath[slot]->GetPath().length() && ReloadMemcard(WxStrToStr(m_MemcardPath[slot]->GetPath()).c_str(), slot))
|
||||||
{
|
{
|
||||||
if (memoryCard[slot2])
|
if (memoryCard[slot2])
|
||||||
{
|
{
|
||||||
|
@ -345,7 +347,7 @@ void CMemcardManager::OnPageChange(wxCommandEvent& event)
|
||||||
m_NextPage[slot]->Disable();
|
m_NextPage[slot]->Disable();
|
||||||
m_MemcardList[slot]->nextPage = false;
|
m_MemcardList[slot]->nextPage = false;
|
||||||
}
|
}
|
||||||
ReloadMemcard(m_MemcardPath[slot]->GetPath().mb_str(), slot);
|
ReloadMemcard(WxStrToStr(m_MemcardPath[slot]->GetPath()).c_str(), slot);
|
||||||
break;
|
break;
|
||||||
case ID_PREVPAGE_A:
|
case ID_PREVPAGE_A:
|
||||||
slot = SLOT_A;
|
slot = SLOT_A;
|
||||||
|
@ -361,7 +363,7 @@ void CMemcardManager::OnPageChange(wxCommandEvent& event)
|
||||||
m_PrevPage[slot]->Disable();
|
m_PrevPage[slot]->Disable();
|
||||||
m_MemcardList[slot]->prevPage = false;
|
m_MemcardList[slot]->prevPage = false;
|
||||||
}
|
}
|
||||||
ReloadMemcard(m_MemcardPath[slot]->GetPath().mb_str(), slot);
|
ReloadMemcard(WxStrToStr(m_MemcardPath[slot]->GetPath()).c_str(), slot);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -373,7 +375,7 @@ void CMemcardManager::OnMenuChange(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
case ID_MEMCARDPATH_A:
|
case ID_MEMCARDPATH_A:
|
||||||
case ID_MEMCARDPATH_B:
|
case ID_MEMCARDPATH_B:
|
||||||
DefaultMemcard[_id - ID_MEMCARDPATH_A] = m_MemcardPath[_id - ID_MEMCARDPATH_A]->GetPath().mb_str();
|
DefaultMemcard[_id - ID_MEMCARDPATH_A] = WxStrToStr(m_MemcardPath[_id - ID_MEMCARDPATH_A]->GetPath());
|
||||||
return;
|
return;
|
||||||
case ID_USEPAGES:
|
case ID_USEPAGES:
|
||||||
mcmSettings.usePages = !mcmSettings.usePages;
|
mcmSettings.usePages = !mcmSettings.usePages;
|
||||||
|
@ -400,8 +402,8 @@ void CMemcardManager::OnMenuChange(wxCommandEvent& event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (memoryCard[SLOT_A]) ReloadMemcard(m_MemcardPath[SLOT_A]->GetPath().mb_str(), SLOT_A);
|
if (memoryCard[SLOT_A]) ReloadMemcard(WxStrToStr(m_MemcardPath[SLOT_A]->GetPath()).c_str(), SLOT_A);
|
||||||
if (memoryCard[SLOT_B]) ReloadMemcard(m_MemcardPath[SLOT_B]->GetPath().mb_str(), SLOT_B);
|
if (memoryCard[SLOT_B]) ReloadMemcard(WxStrToStr(m_MemcardPath[SLOT_B]->GetPath()).c_str(), SLOT_B);
|
||||||
}
|
}
|
||||||
bool CMemcardManager::CopyDeleteSwitch(u32 error, int slot)
|
bool CMemcardManager::CopyDeleteSwitch(u32 error, int slot)
|
||||||
{
|
{
|
||||||
|
@ -416,7 +418,7 @@ bool CMemcardManager::CopyDeleteSwitch(u32 error, int slot)
|
||||||
memoryCard[slot]->FixChecksums();
|
memoryCard[slot]->FixChecksums();
|
||||||
if (!memoryCard[slot]->Save()) PanicAlert(E_SAVEFAILED);
|
if (!memoryCard[slot]->Save()) PanicAlert(E_SAVEFAILED);
|
||||||
page[slot] = FIRSTPAGE;
|
page[slot] = FIRSTPAGE;
|
||||||
ReloadMemcard(m_MemcardPath[slot]->GetPath().mb_str(), slot);
|
ReloadMemcard(WxStrToStr(m_MemcardPath[slot]->GetPath()).c_str(), slot);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NOMEMCARD:
|
case NOMEMCARD:
|
||||||
|
@ -517,8 +519,8 @@ void CMemcardManager::CopyDeleteClick(wxCommandEvent& event)
|
||||||
wxString fileName = wxFileSelector(
|
wxString fileName = wxFileSelector(
|
||||||
_("Select a save file to import"),
|
_("Select a save file to import"),
|
||||||
(strcmp(DefaultIOPath.c_str(), "/Users/GC") == 0)
|
(strcmp(DefaultIOPath.c_str(), "/Users/GC") == 0)
|
||||||
? wxString::FromAscii("")
|
? StrToWxStr("")
|
||||||
: wxString::From8BitData(DefaultIOPath.c_str()),
|
: StrToWxStr(DefaultIOPath),
|
||||||
wxEmptyString, wxEmptyString,
|
wxEmptyString, wxEmptyString,
|
||||||
_("GameCube Savegame files(*.gci;*.gcs;*.sav)") + wxString(wxT("|*.gci;*.gcs;*.sav|")) +
|
_("GameCube Savegame files(*.gci;*.gcs;*.sav)") + wxString(wxT("|*.gci;*.gcs;*.sav|")) +
|
||||||
_("Native GCI files(*.gci)") + wxString(wxT("|*.gci|")) +
|
_("Native GCI files(*.gci)") + wxString(wxT("|*.gci|")) +
|
||||||
|
@ -532,11 +534,11 @@ void CMemcardManager::CopyDeleteClick(wxCommandEvent& event)
|
||||||
_("GCI File(*.gci)") + wxString(_T("|*.gci")),
|
_("GCI File(*.gci)") + wxString(_T("|*.gci")),
|
||||||
wxFD_OVERWRITE_PROMPT|wxFD_SAVE, this);
|
wxFD_OVERWRITE_PROMPT|wxFD_SAVE, this);
|
||||||
if (temp2.empty()) break;
|
if (temp2.empty()) break;
|
||||||
fileName2 = temp2.mb_str();
|
fileName2 = WxStrToStr(temp2);
|
||||||
}
|
}
|
||||||
if (fileName.length() > 0)
|
if (fileName.length() > 0)
|
||||||
{
|
{
|
||||||
CopyDeleteSwitch(memoryCard[slot]->ImportGci(fileName.mb_str(), fileName2), slot);
|
CopyDeleteSwitch(memoryCard[slot]->ImportGci(WxStrToStr(fileName).c_str(), fileName2), slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -555,8 +557,8 @@ void CMemcardManager::CopyDeleteClick(wxCommandEvent& event)
|
||||||
}
|
}
|
||||||
wxString fileName = wxFileSelector(
|
wxString fileName = wxFileSelector(
|
||||||
_("Export save as..."),
|
_("Export save as..."),
|
||||||
wxString::From8BitData(DefaultIOPath.c_str()),
|
StrToWxStr(DefaultIOPath),
|
||||||
wxString::From8BitData(gciFilename.c_str()), wxT(".gci"),
|
StrToWxStr(gciFilename), wxT(".gci"),
|
||||||
_("Native GCI files(*.gci)") + wxString(wxT("|*.gci|")) +
|
_("Native GCI files(*.gci)") + wxString(wxT("|*.gci|")) +
|
||||||
_("MadCatz Gameshark files(*.gcs)") + wxString(wxT("|*.gcs|")) +
|
_("MadCatz Gameshark files(*.gcs)") + wxString(wxT("|*.gcs|")) +
|
||||||
_("Datel MaxDrive/Pro files(*.sav)") + wxString(wxT("|*.sav")),
|
_("Datel MaxDrive/Pro files(*.sav)") + wxString(wxT("|*.sav")),
|
||||||
|
@ -564,9 +566,9 @@ void CMemcardManager::CopyDeleteClick(wxCommandEvent& event)
|
||||||
|
|
||||||
if (fileName.length() > 0)
|
if (fileName.length() > 0)
|
||||||
{
|
{
|
||||||
if (!CopyDeleteSwitch(memoryCard[slot]->ExportGci(index, fileName.mb_str(), ""), -1))
|
if (!CopyDeleteSwitch(memoryCard[slot]->ExportGci(index, WxStrToStr(fileName).c_str(), ""), -1))
|
||||||
{
|
{
|
||||||
File::Delete(std::string(fileName.mb_str()));
|
File::Delete(WxStrToStr(fileName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -576,7 +578,7 @@ void CMemcardManager::CopyDeleteClick(wxCommandEvent& event)
|
||||||
case ID_EXPORTALL_B:
|
case ID_EXPORTALL_B:
|
||||||
{
|
{
|
||||||
std::string path1, path2, mpath;
|
std::string path1, path2, mpath;
|
||||||
mpath = m_MemcardPath[slot]->GetPath().mb_str();
|
mpath = WxStrToStr(m_MemcardPath[slot]->GetPath());
|
||||||
SplitPath(mpath, &path1, &path2, NULL);
|
SplitPath(mpath, &path1, &path2, NULL);
|
||||||
path1 += path2;
|
path1 += path2;
|
||||||
File::CreateDir(path1);
|
File::CreateDir(path1);
|
||||||
|
@ -702,26 +704,11 @@ bool CMemcardManager::ReloadMemcard(const char *fileName, int card)
|
||||||
std::string title = memoryCard[card]->GetSaveComment1(fileIndex);
|
std::string title = memoryCard[card]->GetSaveComment1(fileIndex);
|
||||||
std::string comment = memoryCard[card]->GetSaveComment2(fileIndex);
|
std::string comment = memoryCard[card]->GetSaveComment2(fileIndex);
|
||||||
|
|
||||||
bool ascii = memoryCard[card]->IsAsciiEncoding();
|
auto const string_decoder = memoryCard[card]->IsAsciiEncoding() ?
|
||||||
|
CP1252ToUTF8 : SHIFTJISToUTF8;
|
||||||
#ifdef _WIN32
|
|
||||||
wxCSConv SJISConv(*(wxCSConv*)wxConvCurrent);
|
wxTitle = StrToWxStr(string_decoder(title));
|
||||||
static bool validCP932 = ::IsValidCodePage(932) != 0;
|
wxComment = StrToWxStr(string_decoder(comment));
|
||||||
if (validCP932)
|
|
||||||
{
|
|
||||||
SJISConv = wxCSConv(wxFontMapper::GetEncodingName(wxFONTENCODING_SHIFT_JIS));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WARN_LOG(COMMON, "Cannot Convert from Charset Windows Japanese cp 932");
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// on linux the wrong string is returned from wxFontMapper::GetEncodingName(wxFONTENCODING_SHIFT_JIS)
|
|
||||||
// it returns CP-932, in order to use iconv we need to use CP932
|
|
||||||
wxCSConv SJISConv(wxT("CP932"));
|
|
||||||
#endif
|
|
||||||
wxTitle = wxString(title.c_str(), ascii ? *wxConvCurrent : SJISConv);
|
|
||||||
wxComment = wxString(comment.c_str(), ascii ? *wxConvCurrent : SJISConv);
|
|
||||||
|
|
||||||
m_MemcardList[card]->SetItem(index, COLUMN_TITLE, wxTitle);
|
m_MemcardList[card]->SetItem(index, COLUMN_TITLE, wxTitle);
|
||||||
m_MemcardList[card]->SetItem(index, COLUMN_COMMENT, wxComment);
|
m_MemcardList[card]->SetItem(index, COLUMN_COMMENT, wxComment);
|
||||||
|
|
|
@ -18,11 +18,13 @@
|
||||||
#include <FileUtil.h>
|
#include <FileUtil.h>
|
||||||
#include <IniFile.h>
|
#include <IniFile.h>
|
||||||
|
|
||||||
|
#include "WxUtils.h"
|
||||||
#include "NetPlay.h"
|
#include "NetPlay.h"
|
||||||
#include "NetWindow.h"
|
#include "NetWindow.h"
|
||||||
#include "Frame.h"
|
#include "Frame.h"
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#define NETPLAY_TITLEBAR "Dolphin NetPlay"
|
#define NETPLAY_TITLEBAR "Dolphin NetPlay"
|
||||||
|
|
||||||
|
@ -34,6 +36,24 @@ static NetPlay* netplay_ptr = NULL;
|
||||||
extern CFrame* main_frame;
|
extern CFrame* main_frame;
|
||||||
NetPlayDiag *NetPlayDiag::npd = NULL;
|
NetPlayDiag *NetPlayDiag::npd = NULL;
|
||||||
|
|
||||||
|
std::string BuildGameName(const GameListItem& game)
|
||||||
|
{
|
||||||
|
// Lang needs to be consistent
|
||||||
|
auto const lang = 0;
|
||||||
|
|
||||||
|
std::string name(game.GetBannerName(lang));
|
||||||
|
if (name.empty())
|
||||||
|
name = game.GetVolumeName(lang);
|
||||||
|
|
||||||
|
return name + " (" + game.GetUniqueID() + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
void FillWithGameNames(wxListBox* game_lbox, const CGameListCtrl& game_list)
|
||||||
|
{
|
||||||
|
for (u32 i = 0 ; auto game = game_list.GetISO(i); ++i)
|
||||||
|
game_lbox->Append(StrToWxStr(BuildGameName(*game)));
|
||||||
|
}
|
||||||
|
|
||||||
NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl* const game_list)
|
NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl* const game_list)
|
||||||
: wxFrame(parent, wxID_ANY, wxT(NETPLAY_TITLEBAR), wxDefaultPosition, wxDefaultSize)
|
: wxFrame(parent, wxID_ANY, wxT(NETPLAY_TITLEBAR), wxDefaultPosition, wxDefaultSize)
|
||||||
, m_game_list(game_list)
|
, m_game_list(game_list)
|
||||||
|
@ -50,7 +70,7 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl*
|
||||||
|
|
||||||
std::string nickname;
|
std::string nickname;
|
||||||
netplay_section.Get("Nickname", &nickname, "Player");
|
netplay_section.Get("Nickname", &nickname, "Player");
|
||||||
m_nickname_text = new wxTextCtrl(panel, wxID_ANY, wxString::From8BitData(nickname.c_str()));
|
m_nickname_text = new wxTextCtrl(panel, wxID_ANY, StrToWxStr(nickname));
|
||||||
|
|
||||||
wxBoxSizer* const nick_szr = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer* const nick_szr = new wxBoxSizer(wxHORIZONTAL);
|
||||||
nick_szr->Add(nick_lbl, 0, wxCENTER);
|
nick_szr->Add(nick_lbl, 0, wxCENTER);
|
||||||
|
@ -72,7 +92,7 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl*
|
||||||
|
|
||||||
std::string address;
|
std::string address;
|
||||||
netplay_section.Get("Address", &address, "localhost");
|
netplay_section.Get("Address", &address, "localhost");
|
||||||
m_connect_ip_text = new wxTextCtrl(connect_tab, wxID_ANY, wxString::FromAscii(address.c_str()));
|
m_connect_ip_text = new wxTextCtrl(connect_tab, wxID_ANY, StrToWxStr(address));
|
||||||
|
|
||||||
wxStaticText* const port_lbl = new wxStaticText(connect_tab, wxID_ANY, _("Port :"),
|
wxStaticText* const port_lbl = new wxStaticText(connect_tab, wxID_ANY, _("Port :"),
|
||||||
wxDefaultPosition, wxDefaultSize);
|
wxDefaultPosition, wxDefaultSize);
|
||||||
|
@ -80,7 +100,7 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl*
|
||||||
// string? w/e
|
// string? w/e
|
||||||
std::string port;
|
std::string port;
|
||||||
netplay_section.Get("ConnectPort", &port, "2626");
|
netplay_section.Get("ConnectPort", &port, "2626");
|
||||||
m_connect_port_text = new wxTextCtrl(connect_tab, wxID_ANY, wxString::FromAscii(port.c_str()));
|
m_connect_port_text = new wxTextCtrl(connect_tab, wxID_ANY, StrToWxStr(port));
|
||||||
|
|
||||||
wxButton* const connect_btn = new wxButton(connect_tab, wxID_ANY, _("Connect"));
|
wxButton* const connect_btn = new wxButton(connect_tab, wxID_ANY, _("Connect"));
|
||||||
connect_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlaySetupDiag::OnJoin, this);
|
connect_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlaySetupDiag::OnJoin, this);
|
||||||
|
@ -113,18 +133,15 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl*
|
||||||
// string? w/e
|
// string? w/e
|
||||||
std::string port;
|
std::string port;
|
||||||
netplay_section.Get("HostPort", &port, "2626");
|
netplay_section.Get("HostPort", &port, "2626");
|
||||||
m_host_port_text = new wxTextCtrl(host_tab, wxID_ANY, wxString::FromAscii(port.c_str()));
|
m_host_port_text = new wxTextCtrl(host_tab, wxID_ANY, StrToWxStr(port));
|
||||||
|
|
||||||
wxButton* const host_btn = new wxButton(host_tab, wxID_ANY, _("Host"));
|
wxButton* const host_btn = new wxButton(host_tab, wxID_ANY, _("Host"));
|
||||||
host_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlaySetupDiag::OnHost, this);
|
host_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlaySetupDiag::OnHost, this);
|
||||||
|
|
||||||
m_game_lbox = new wxListBox(host_tab, wxID_ANY);
|
m_game_lbox = new wxListBox(host_tab, wxID_ANY);
|
||||||
m_game_lbox->Bind(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, &NetPlaySetupDiag::OnHost, this);
|
m_game_lbox->Bind(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, &NetPlaySetupDiag::OnHost, this);
|
||||||
|
|
||||||
std::istringstream ss(game_list->GetGameNames());
|
FillWithGameNames(m_game_lbox, *game_list);
|
||||||
std::string game;
|
|
||||||
while (std::getline(ss,game))
|
|
||||||
m_game_lbox->Append(wxString(game.c_str(), *wxConvCurrent));
|
|
||||||
|
|
||||||
wxBoxSizer* const top_szr = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer* const top_szr = new wxBoxSizer(wxHORIZONTAL);
|
||||||
top_szr->Add(port_lbl, 0, wxCENTER | wxRIGHT, 5);
|
top_szr->Add(port_lbl, 0, wxCENTER | wxRIGHT, 5);
|
||||||
|
@ -167,10 +184,10 @@ NetPlaySetupDiag::~NetPlaySetupDiag()
|
||||||
inifile.Load(dolphin_ini);
|
inifile.Load(dolphin_ini);
|
||||||
IniFile::Section& netplay_section = *inifile.GetOrCreateSection("NetPlay");
|
IniFile::Section& netplay_section = *inifile.GetOrCreateSection("NetPlay");
|
||||||
|
|
||||||
netplay_section.Set("Nickname", m_nickname_text->GetValue().mb_str());
|
netplay_section.Set("Nickname", WxStrToStr(m_nickname_text->GetValue()));
|
||||||
netplay_section.Set("Address", m_connect_ip_text->GetValue().mb_str());
|
netplay_section.Set("Address", WxStrToStr(m_connect_ip_text->GetValue()));
|
||||||
netplay_section.Set("ConnectPort", m_connect_port_text->GetValue().mb_str());
|
netplay_section.Set("ConnectPort", WxStrToStr(m_connect_port_text->GetValue()));
|
||||||
netplay_section.Set("HostPort", m_host_port_text->GetValue().mb_str());
|
netplay_section.Set("HostPort", WxStrToStr(m_host_port_text->GetValue()));
|
||||||
|
|
||||||
inifile.Save(dolphin_ini);
|
inifile.Save(dolphin_ini);
|
||||||
main_frame->g_NetPlaySetupDiag = NULL;
|
main_frame->g_NetPlaySetupDiag = NULL;
|
||||||
|
@ -191,13 +208,13 @@ void NetPlaySetupDiag::OnHost(wxCommandEvent&)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string game(m_game_lbox->GetStringSelection().mb_str());
|
std::string game(WxStrToStr(m_game_lbox->GetStringSelection()));
|
||||||
|
|
||||||
npd = new NetPlayDiag(m_parent, m_game_list, game, true);
|
npd = new NetPlayDiag(m_parent, m_game_list, game, true);
|
||||||
unsigned long port = 0;
|
unsigned long port = 0;
|
||||||
m_host_port_text->GetValue().ToULong(&port);
|
m_host_port_text->GetValue().ToULong(&port);
|
||||||
netplay_ptr = new NetPlayServer(u16(port)
|
netplay_ptr = new NetPlayServer(u16(port)
|
||||||
, std::string(m_nickname_text->GetValue().mb_str()), npd, game);
|
, WxStrToStr(m_nickname_text->GetValue()), npd, game);
|
||||||
if (netplay_ptr->is_connected)
|
if (netplay_ptr->is_connected)
|
||||||
{
|
{
|
||||||
npd->Show();
|
npd->Show();
|
||||||
|
@ -222,8 +239,8 @@ void NetPlaySetupDiag::OnJoin(wxCommandEvent&)
|
||||||
npd = new NetPlayDiag(m_parent, m_game_list, "");
|
npd = new NetPlayDiag(m_parent, m_game_list, "");
|
||||||
unsigned long port = 0;
|
unsigned long port = 0;
|
||||||
m_connect_port_text->GetValue().ToULong(&port);
|
m_connect_port_text->GetValue().ToULong(&port);
|
||||||
netplay_ptr = new NetPlayClient(std::string(m_connect_ip_text->GetValue().mb_str())
|
netplay_ptr = new NetPlayClient(WxStrToStr(m_connect_ip_text->GetValue())
|
||||||
, (u16)port, npd, std::string(m_nickname_text->GetValue().mb_str()));
|
, (u16)port, npd, WxStrToStr(m_nickname_text->GetValue()));
|
||||||
if (netplay_ptr->is_connected)
|
if (netplay_ptr->is_connected)
|
||||||
{
|
{
|
||||||
npd->Show();
|
npd->Show();
|
||||||
|
@ -250,7 +267,7 @@ NetPlayDiag::NetPlayDiag(wxWindow* const parent, const CGameListCtrl* const game
|
||||||
|
|
||||||
// top crap
|
// top crap
|
||||||
m_game_btn = new wxButton(panel, wxID_ANY,
|
m_game_btn = new wxButton(panel, wxID_ANY,
|
||||||
wxString(m_selected_game.c_str(), *wxConvCurrent).Prepend(_(" Game : ")),
|
StrToWxStr(m_selected_game).Prepend(_(" Game : ")),
|
||||||
wxDefaultPosition, wxDefaultSize, wxBU_LEFT);
|
wxDefaultPosition, wxDefaultSize, wxBU_LEFT);
|
||||||
|
|
||||||
if (is_hosting)
|
if (is_hosting)
|
||||||
|
@ -351,7 +368,7 @@ void NetPlayDiag::OnChat(wxCommandEvent&)
|
||||||
|
|
||||||
if (s.Length())
|
if (s.Length())
|
||||||
{
|
{
|
||||||
netplay_ptr->SendChatMessage(std::string(s.mb_str()));
|
netplay_ptr->SendChatMessage(WxStrToStr(s));
|
||||||
m_chat_text->AppendText(s.Prepend(wxT(" >> ")).Append(wxT('\n')));
|
m_chat_text->AppendText(s.Prepend(wxT(" >> ")).Append(wxT('\n')));
|
||||||
m_chat_msg_text->Clear();
|
m_chat_msg_text->Clear();
|
||||||
}
|
}
|
||||||
|
@ -359,24 +376,17 @@ void NetPlayDiag::OnChat(wxCommandEvent&)
|
||||||
|
|
||||||
void NetPlayDiag::OnStart(wxCommandEvent&)
|
void NetPlayDiag::OnStart(wxCommandEvent&)
|
||||||
{
|
{
|
||||||
// find path for selected game
|
// find path for selected game, sloppy..
|
||||||
std::string ntmp, ptmp, path;
|
for (u32 i = 0 ; auto game = m_game_list->GetISO(i); ++i)
|
||||||
std::istringstream nss(m_game_list->GetGameNames()), pss(m_game_list->GetGamePaths());
|
|
||||||
|
|
||||||
while(std::getline(nss,ntmp))
|
|
||||||
{
|
{
|
||||||
std::getline(pss,ptmp);
|
if (m_selected_game == BuildGameName(*game))
|
||||||
if (m_selected_game == ntmp)
|
|
||||||
{
|
{
|
||||||
path = ptmp;
|
netplay_ptr->StartGame(game->GetFileName());
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (path.length())
|
PanicAlertT("Game not found!");
|
||||||
netplay_ptr->StartGame(path);
|
|
||||||
else
|
|
||||||
PanicAlertT("Game not found!!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetPlayDiag::OnStop(wxCommandEvent&)
|
void NetPlayDiag::OnStop(wxCommandEvent&)
|
||||||
|
@ -412,7 +422,7 @@ void NetPlayDiag::OnMsgChangeGame(const std::string& filename)
|
||||||
{
|
{
|
||||||
wxCommandEvent evt(wxEVT_THREAD, NP_GUI_EVT_CHANGE_GAME);
|
wxCommandEvent evt(wxEVT_THREAD, NP_GUI_EVT_CHANGE_GAME);
|
||||||
// TODO: using a wxString in AddPendingEvent from another thread is unsafe i guess?
|
// TODO: using a wxString in AddPendingEvent from another thread is unsafe i guess?
|
||||||
evt.SetString(wxString(filename.c_str(), *wxConvCurrent));
|
evt.SetString(StrToWxStr(filename));
|
||||||
GetEventHandler()->AddPendingEvent(evt);
|
GetEventHandler()->AddPendingEvent(evt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,7 +446,7 @@ void NetPlayDiag::OnPadBuffHelp(wxCommandEvent&)
|
||||||
<< time * (60.0f/1000) << "(60fps) / "
|
<< time * (60.0f/1000) << "(60fps) / "
|
||||||
<< time * (50.0f/1000) << "(50fps) >\n";
|
<< time * (50.0f/1000) << "(50fps) >\n";
|
||||||
|
|
||||||
m_chat_text->AppendText(wxString(ss.str().c_str(), *wxConvCurrent));
|
m_chat_text->AppendText(StrToWxStr(ss.str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetPlayDiag::OnAdjustBuffer(wxCommandEvent& event)
|
void NetPlayDiag::OnAdjustBuffer(wxCommandEvent& event)
|
||||||
|
@ -447,7 +457,7 @@ void NetPlayDiag::OnAdjustBuffer(wxCommandEvent& event)
|
||||||
std::ostringstream ss;
|
std::ostringstream ss;
|
||||||
ss << "< Pad Buffer: " << val << " >";
|
ss << "< Pad Buffer: " << val << " >";
|
||||||
netplay_ptr->SendChatMessage(ss.str());
|
netplay_ptr->SendChatMessage(ss.str());
|
||||||
m_chat_text->AppendText(wxString(ss.str().c_str(), *wxConvCurrent).Append(wxT('\n')));
|
m_chat_text->AppendText(StrToWxStr(ss.str()).Append(wxT('\n')));
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetPlayDiag::OnQuit(wxCommandEvent&)
|
void NetPlayDiag::OnQuit(wxCommandEvent&)
|
||||||
|
@ -468,7 +478,7 @@ void NetPlayDiag::OnThread(wxCommandEvent& event)
|
||||||
m_player_lbox->Clear();
|
m_player_lbox->Clear();
|
||||||
std::istringstream ss(tmps);
|
std::istringstream ss(tmps);
|
||||||
while (std::getline(ss, tmps))
|
while (std::getline(ss, tmps))
|
||||||
m_player_lbox->Append(wxString(tmps.c_str(), *wxConvCurrent));
|
m_player_lbox->Append(StrToWxStr(tmps));
|
||||||
|
|
||||||
m_player_lbox->SetSelection(selection);
|
m_player_lbox->SetSelection(selection);
|
||||||
|
|
||||||
|
@ -477,7 +487,7 @@ void NetPlayDiag::OnThread(wxCommandEvent& event)
|
||||||
case NP_GUI_EVT_CHANGE_GAME :
|
case NP_GUI_EVT_CHANGE_GAME :
|
||||||
// update selected game :/
|
// update selected game :/
|
||||||
{
|
{
|
||||||
m_selected_game.assign(event.GetString().mb_str());
|
m_selected_game.assign(WxStrToStr(event.GetString()));
|
||||||
m_game_btn->SetLabel(event.GetString().Prepend(_(" Game : ")));
|
m_game_btn->SetLabel(event.GetString().Prepend(_(" Game : ")));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -503,7 +513,7 @@ void NetPlayDiag::OnThread(wxCommandEvent& event)
|
||||||
std::string s;
|
std::string s;
|
||||||
chat_msgs.Pop(s);
|
chat_msgs.Pop(s);
|
||||||
//PanicAlert("message: %s", s.c_str());
|
//PanicAlert("message: %s", s.c_str());
|
||||||
m_chat_text->AppendText(wxString(s.c_str(), *wxConvCurrent).Append(wxT('\n')));
|
m_chat_text->AppendText(StrToWxStr(s).Append(wxT('\n')));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -515,7 +525,7 @@ void NetPlayDiag::OnChangeGame(wxCommandEvent&)
|
||||||
|
|
||||||
if (game_name.length())
|
if (game_name.length())
|
||||||
{
|
{
|
||||||
m_selected_game = std::string(game_name.mb_str());
|
m_selected_game = WxStrToStr(game_name);
|
||||||
netplay_ptr->ChangeGame(m_selected_game);
|
netplay_ptr->ChangeGame(m_selected_game);
|
||||||
m_game_btn->SetLabel(game_name.Prepend(_(" Game : ")));
|
m_game_btn->SetLabel(game_name.Prepend(_(" Game : ")));
|
||||||
}
|
}
|
||||||
|
@ -549,11 +559,7 @@ ChangeGameDiag::ChangeGameDiag(wxWindow* const parent, const CGameListCtrl* cons
|
||||||
m_game_lbox = new wxListBox(this, wxID_ANY);
|
m_game_lbox = new wxListBox(this, wxID_ANY);
|
||||||
m_game_lbox->Bind(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, &ChangeGameDiag::OnPick, this);
|
m_game_lbox->Bind(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, &ChangeGameDiag::OnPick, this);
|
||||||
|
|
||||||
// fill list with games
|
FillWithGameNames(m_game_lbox, *game_list);
|
||||||
std::istringstream ss(game_list->GetGameNames());
|
|
||||||
std::string game;
|
|
||||||
while (std::getline(ss,game))
|
|
||||||
m_game_lbox->Append(wxString(game.c_str(), *wxConvCurrent));
|
|
||||||
|
|
||||||
wxButton* const ok_btn = new wxButton(this, wxID_OK, _("Change"));
|
wxButton* const ok_btn = new wxButton(this, wxID_OK, _("Change"));
|
||||||
ok_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ChangeGameDiag::OnPick, this);
|
ok_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ChangeGameDiag::OnPick, this);
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include "PHackSettings.h"
|
#include "PHackSettings.h"
|
||||||
#include "ConfigManager.h"
|
#include "ConfigManager.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
extern PHackData PHack_Data;
|
extern PHackData PHack_Data;
|
||||||
|
|
||||||
|
@ -97,8 +98,8 @@ void CPHackSettings::LoadPHackData()
|
||||||
if (sTemp.empty())
|
if (sTemp.empty())
|
||||||
sTemp = wxString(_("(UNKNOWN)")).char_str();
|
sTemp = wxString(_("(UNKNOWN)")).char_str();
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
PHackChoice->Append(wxString("-------------", *wxConvCurrent));
|
PHackChoice->Append(StrToWxStr("-------------"));
|
||||||
PHackChoice->Append(wxString(sTemp.c_str(), *wxConvCurrent));
|
PHackChoice->Append(StrToWxStr(sTemp));
|
||||||
}
|
}
|
||||||
PHackChoice->Select(0);
|
PHackChoice->Select(0);
|
||||||
|
|
||||||
|
@ -106,8 +107,8 @@ void CPHackSettings::LoadPHackData()
|
||||||
PHackSZFar->Set3StateValue((wxCheckBoxState)PHack_Data.PHackSZFar);
|
PHackSZFar->Set3StateValue((wxCheckBoxState)PHack_Data.PHackSZFar);
|
||||||
PHackExP->Set3StateValue((wxCheckBoxState)PHack_Data.PHackExP);
|
PHackExP->Set3StateValue((wxCheckBoxState)PHack_Data.PHackExP);
|
||||||
|
|
||||||
PHackZNear->SetValue(wxString(PHack_Data.PHZNear.c_str(), *wxConvCurrent));
|
PHackZNear->SetValue(StrToWxStr(PHack_Data.PHZNear));
|
||||||
PHackZFar->SetValue(wxString(PHack_Data.PHZFar.c_str(), *wxConvCurrent));
|
PHackZFar->SetValue(StrToWxStr(PHack_Data.PHZFar));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPHackSettings::SetRefresh(wxCommandEvent& event)
|
void CPHackSettings::SetRefresh(wxCommandEvent& event)
|
||||||
|
@ -128,9 +129,9 @@ void CPHackSettings::SetRefresh(wxCommandEvent& event)
|
||||||
PHPresetsIni.Get(sIndex, "PH_ExtraParam", &bTemp);
|
PHPresetsIni.Get(sIndex, "PH_ExtraParam", &bTemp);
|
||||||
PHackExP->Set3StateValue((wxCheckBoxState)bTemp);
|
PHackExP->Set3StateValue((wxCheckBoxState)bTemp);
|
||||||
PHPresetsIni.Get(sIndex, "PH_ZNear", &sTemp);
|
PHPresetsIni.Get(sIndex, "PH_ZNear", &sTemp);
|
||||||
PHackZNear->SetValue(wxString(sTemp.c_str(), *wxConvCurrent));
|
PHackZNear->SetValue(StrToWxStr(sTemp));
|
||||||
PHPresetsIni.Get(sIndex, "PH_ZFar", &sTemp);
|
PHPresetsIni.Get(sIndex, "PH_ZFar", &sTemp);
|
||||||
PHackZFar->SetValue(wxString(sTemp.c_str(), *wxConvCurrent));
|
PHackZFar->SetValue(StrToWxStr(sTemp));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
#include "PatchAddEdit.h"
|
#include "PatchAddEdit.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
extern std::vector<PatchEngine::Patch> onFrame;
|
extern std::vector<PatchEngine::Patch> onFrame;
|
||||||
|
|
||||||
|
@ -48,7 +49,7 @@ void CPatchAddEdit::CreateGUIControls(int _selection)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
currentName = wxString(onFrame.at(_selection).name.c_str(), *wxConvCurrent);
|
currentName = StrToWxStr(onFrame.at(_selection).name);
|
||||||
tempEntries = onFrame.at(_selection).entries;
|
tempEntries = onFrame.at(_selection).entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,7 +67,7 @@ void CPatchAddEdit::CreateGUIControls(int _selection)
|
||||||
EntrySelection->SetValue((int)tempEntries.size()-1);
|
EntrySelection->SetValue((int)tempEntries.size()-1);
|
||||||
wxArrayString wxArrayStringFor_EditPatchType;
|
wxArrayString wxArrayStringFor_EditPatchType;
|
||||||
for (int i = 0; i < 3; ++i)
|
for (int i = 0; i < 3; ++i)
|
||||||
wxArrayStringFor_EditPatchType.Add(wxString::FromAscii(PatchEngine::PatchTypeStrings[i]));
|
wxArrayStringFor_EditPatchType.Add(StrToWxStr(PatchEngine::PatchTypeStrings[i]));
|
||||||
EditPatchType = new wxRadioBox(this, ID_EDITPATCH_TYPE, _("Type"), wxDefaultPosition, wxDefaultSize, wxArrayStringFor_EditPatchType, 3, wxRA_SPECIFY_COLS);
|
EditPatchType = new wxRadioBox(this, ID_EDITPATCH_TYPE, _("Type"), wxDefaultPosition, wxDefaultSize, wxArrayStringFor_EditPatchType, 3, wxRA_SPECIFY_COLS);
|
||||||
EditPatchType->SetSelection((int)tempEntries.at(0).type);
|
EditPatchType->SetSelection((int)tempEntries.at(0).type);
|
||||||
wxStaticText* EditPatchValueText = new wxStaticText(this, ID_EDITPATCH_VALUE_TEXT, _("Value:"));
|
wxStaticText* EditPatchValueText = new wxStaticText(this, ID_EDITPATCH_VALUE_TEXT, _("Value:"));
|
||||||
|
@ -121,7 +122,7 @@ void CPatchAddEdit::SavePatchData(wxCommandEvent& event)
|
||||||
if (selection == -1)
|
if (selection == -1)
|
||||||
{
|
{
|
||||||
PatchEngine::Patch newPatch;
|
PatchEngine::Patch newPatch;
|
||||||
newPatch.name = std::string(EditPatchName->GetValue().mb_str());
|
newPatch.name = WxStrToStr(EditPatchName->GetValue());
|
||||||
newPatch.entries = tempEntries;
|
newPatch.entries = tempEntries;
|
||||||
newPatch.active = true;
|
newPatch.active = true;
|
||||||
|
|
||||||
|
@ -129,7 +130,7 @@ void CPatchAddEdit::SavePatchData(wxCommandEvent& event)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
onFrame.at(selection).name = std::string(EditPatchName->GetValue().mb_str());
|
onFrame.at(selection).name = WxStrToStr(EditPatchName->GetValue());
|
||||||
onFrame.at(selection).entries = tempEntries;
|
onFrame.at(selection).entries = tempEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "ControllerEmu.h"
|
#include "ControllerEmu.h"
|
||||||
#include "IniFile.h"
|
#include "IniFile.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
UDPConfigDiag::UDPConfigDiag(wxWindow * const parent, UDPWrapper * _wrp) :
|
UDPConfigDiag::UDPConfigDiag(wxWindow * const parent, UDPWrapper * _wrp) :
|
||||||
|
@ -26,7 +28,7 @@ UDPConfigDiag::UDPConfigDiag(wxWindow * const parent, UDPWrapper * _wrp) :
|
||||||
|
|
||||||
wxBoxSizer *const port_sizer = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer *const port_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
port_sizer->Add(new wxStaticText(this, wxID_ANY, _("UDP Port:")), 0, wxALIGN_CENTER);
|
port_sizer->Add(new wxStaticText(this, wxID_ANY, _("UDP Port:")), 0, wxALIGN_CENTER);
|
||||||
port_tbox = new wxTextCtrl(this, wxID_ANY, wxString::FromUTF8(wrp->port.c_str()));
|
port_tbox = new wxTextCtrl(this, wxID_ANY, StrToWxStr(wrp->port));
|
||||||
port_sizer->Add(port_tbox, 1, wxLEFT | wxEXPAND, 5);
|
port_sizer->Add(port_tbox, 1, wxLEFT | wxEXPAND, 5);
|
||||||
|
|
||||||
enable->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &UDPConfigDiag::ChangeState, this);
|
enable->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &UDPConfigDiag::ChangeState, this);
|
||||||
|
@ -71,7 +73,7 @@ void UDPConfigDiag::ChangeUpdateFlags(wxCommandEvent & WXUNUSED(event))
|
||||||
|
|
||||||
void UDPConfigDiag::ChangeState(wxCommandEvent & WXUNUSED(event))
|
void UDPConfigDiag::ChangeState(wxCommandEvent & WXUNUSED(event))
|
||||||
{
|
{
|
||||||
wrp->udpEn=enable->GetValue();
|
wrp->udpEn = enable->GetValue();
|
||||||
wrp->port=port_tbox->GetValue().mb_str(wxConvUTF8);
|
wrp->port = WxStrToStr(port_tbox->GetValue());
|
||||||
wrp->Refresh();
|
wrp->Refresh();
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,7 +141,7 @@ wxArrayString GetListOfResolutions()
|
||||||
if (std::find(resos.begin(), resos.end(), strRes) == resos.end())
|
if (std::find(resos.begin(), resos.end(), strRes) == resos.end())
|
||||||
{
|
{
|
||||||
resos.push_back(strRes);
|
resos.push_back(strRes);
|
||||||
retlist.Add(wxString::FromAscii(res));
|
retlist.Add(StrToWxStr(res));
|
||||||
}
|
}
|
||||||
ZeroMemory(&dmi, sizeof(dmi));
|
ZeroMemory(&dmi, sizeof(dmi));
|
||||||
}
|
}
|
||||||
|
@ -180,8 +180,7 @@ wxArrayString GetListOfResolutions()
|
||||||
|
|
||||||
VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, const std::string& _ininame)
|
VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, const std::string& _ininame)
|
||||||
: wxDialog(parent, -1,
|
: wxDialog(parent, -1,
|
||||||
wxString::Format(_("Dolphin %s Graphics Configuration"),
|
wxString::Format(_("Dolphin %s Graphics Configuration"), wxGetTranslation(StrToWxStr(title))),
|
||||||
wxGetTranslation(wxString::From8BitData(title.c_str()))),
|
|
||||||
wxDefaultPosition, wxDefaultSize)
|
wxDefaultPosition, wxDefaultSize)
|
||||||
, vconfig(g_Config)
|
, vconfig(g_Config)
|
||||||
, ininame(_ininame)
|
, ininame(_ininame)
|
||||||
|
@ -212,9 +211,9 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
|
||||||
it = g_available_video_backends.begin(),
|
it = g_available_video_backends.begin(),
|
||||||
itend = g_available_video_backends.end();
|
itend = g_available_video_backends.end();
|
||||||
for (; it != itend; ++it)
|
for (; it != itend; ++it)
|
||||||
choice_backend->AppendString(wxGetTranslation(wxString::FromAscii((*it)->GetName().c_str())));
|
choice_backend->AppendString(wxGetTranslation(StrToWxStr((*it)->GetName())));
|
||||||
|
|
||||||
choice_backend->SetStringSelection(wxGetTranslation(wxString::FromAscii(g_video_backend->GetName().c_str())));
|
choice_backend->SetStringSelection(wxGetTranslation(StrToWxStr(g_video_backend->GetName())));
|
||||||
choice_backend->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &VideoConfigDiag::Event_Backend, this);
|
choice_backend->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &VideoConfigDiag::Event_Backend, this);
|
||||||
|
|
||||||
szr_basic->Add(label_backend, 1, wxALIGN_CENTER_VERTICAL, 5);
|
szr_basic->Add(label_backend, 1, wxALIGN_CENTER_VERTICAL, 5);
|
||||||
|
@ -236,7 +235,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
|
||||||
it = vconfig.backend_info.Adapters.begin(),
|
it = vconfig.backend_info.Adapters.begin(),
|
||||||
itend = vconfig.backend_info.Adapters.end();
|
itend = vconfig.backend_info.Adapters.end();
|
||||||
for (; it != itend; ++it)
|
for (; it != itend; ++it)
|
||||||
choice_adapter->AppendString(wxString::FromAscii(it->c_str()));
|
choice_adapter->AppendString(StrToWxStr(*it));
|
||||||
|
|
||||||
choice_adapter->Select(vconfig.iAdapter);
|
choice_adapter->Select(vconfig.iAdapter);
|
||||||
|
|
||||||
|
@ -259,7 +258,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
|
||||||
RegisterControl(choice_display_resolution, wxGetTranslation(display_res_desc));
|
RegisterControl(choice_display_resolution, wxGetTranslation(display_res_desc));
|
||||||
choice_display_resolution->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &VideoConfigDiag::Event_DisplayResolution, this);
|
choice_display_resolution->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &VideoConfigDiag::Event_DisplayResolution, this);
|
||||||
|
|
||||||
choice_display_resolution->SetStringSelection(wxString::FromAscii(SConfig::GetInstance().m_LocalCoreStartupParameter.strFullscreenResolution.c_str()));
|
choice_display_resolution->SetStringSelection(StrToWxStr(SConfig::GetInstance().m_LocalCoreStartupParameter.strFullscreenResolution));
|
||||||
|
|
||||||
szr_display->Add(label_display_resolution, 1, wxALIGN_CENTER_VERTICAL, 0);
|
szr_display->Add(label_display_resolution, 1, wxALIGN_CENTER_VERTICAL, 0);
|
||||||
szr_display->Add(choice_display_resolution);
|
szr_display->Add(choice_display_resolution);
|
||||||
|
@ -355,7 +354,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
|
||||||
it = vconfig.backend_info.AAModes.begin(),
|
it = vconfig.backend_info.AAModes.begin(),
|
||||||
itend = vconfig.backend_info.AAModes.end();
|
itend = vconfig.backend_info.AAModes.end();
|
||||||
for (; it != itend; ++it)
|
for (; it != itend; ++it)
|
||||||
choice_aamode->AppendString(wxGetTranslation(wxString::FromAscii(it->c_str())));
|
choice_aamode->AppendString(wxGetTranslation(StrToWxStr(*it)));
|
||||||
|
|
||||||
choice_aamode->Select(vconfig.iMultisampleMode);
|
choice_aamode->Select(vconfig.iMultisampleMode);
|
||||||
szr_enh->Add(text_aamode, 1, wxALIGN_CENTER_VERTICAL, 0);
|
szr_enh->Add(text_aamode, 1, wxALIGN_CENTER_VERTICAL, 0);
|
||||||
|
@ -380,12 +379,12 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
|
||||||
it = vconfig.backend_info.PPShaders.begin(),
|
it = vconfig.backend_info.PPShaders.begin(),
|
||||||
itend = vconfig.backend_info.PPShaders.end();
|
itend = vconfig.backend_info.PPShaders.end();
|
||||||
for (; it != itend; ++it)
|
for (; it != itend; ++it)
|
||||||
choice_ppshader->AppendString(wxString::FromAscii(it->c_str()));
|
choice_ppshader->AppendString(StrToWxStr(*it));
|
||||||
|
|
||||||
if (vconfig.sPostProcessingShader.empty())
|
if (vconfig.sPostProcessingShader.empty())
|
||||||
choice_ppshader->Select(0);
|
choice_ppshader->Select(0);
|
||||||
else
|
else
|
||||||
choice_ppshader->SetStringSelection(wxString::FromAscii(vconfig.sPostProcessingShader.c_str()));
|
choice_ppshader->SetStringSelection(StrToWxStr(vconfig.sPostProcessingShader));
|
||||||
|
|
||||||
choice_ppshader->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &VideoConfigDiag::Event_PPShader, this);
|
choice_ppshader->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &VideoConfigDiag::Event_PPShader, this);
|
||||||
|
|
||||||
|
@ -595,7 +594,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
|
||||||
void VideoConfigDiag::Event_DisplayResolution(wxCommandEvent &ev)
|
void VideoConfigDiag::Event_DisplayResolution(wxCommandEvent &ev)
|
||||||
{
|
{
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.strFullscreenResolution =
|
SConfig::GetInstance().m_LocalCoreStartupParameter.strFullscreenResolution =
|
||||||
choice_display_resolution->GetStringSelection().mb_str();
|
WxStrToStr(choice_display_resolution->GetStringSelection());
|
||||||
#if defined(HAVE_XRANDR) && HAVE_XRANDR
|
#if defined(HAVE_XRANDR) && HAVE_XRANDR
|
||||||
main_frame->m_XRRConfig->Update();
|
main_frame->m_XRRConfig->Update();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <wx/spinctrl.h>
|
#include <wx/spinctrl.h>
|
||||||
|
|
||||||
#include "MsgHandler.h"
|
#include "MsgHandler.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
template <typename W>
|
template <typename W>
|
||||||
class BoolSetting : public W
|
class BoolSetting : public W
|
||||||
|
@ -99,7 +100,7 @@ protected:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Select current backend again
|
// Select current backend again
|
||||||
choice_backend->SetStringSelection(wxString::FromAscii(g_video_backend->GetName().c_str()));
|
choice_backend->SetStringSelection(StrToWxStr(g_video_backend->GetName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,7 +130,7 @@ protected:
|
||||||
{
|
{
|
||||||
const int sel = ev.GetInt();
|
const int sel = ev.GetInt();
|
||||||
if (sel)
|
if (sel)
|
||||||
vconfig.sPostProcessingShader = ev.GetString().mb_str();
|
vconfig.sPostProcessingShader = WxStrToStr(ev.GetString());
|
||||||
else
|
else
|
||||||
vconfig.sPostProcessingShader.clear();
|
vconfig.sPostProcessingShader.clear();
|
||||||
|
|
||||||
|
|
|
@ -20,12 +20,14 @@
|
||||||
#include <wx/wx.h>
|
#include <wx/wx.h>
|
||||||
#include <wx/string.h>
|
#include <wx/string.h>
|
||||||
|
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
namespace WxUtils {
|
namespace WxUtils {
|
||||||
|
|
||||||
// Launch a file according to its mime type
|
// Launch a file according to its mime type
|
||||||
void Launch(const char *filename)
|
void Launch(const char *filename)
|
||||||
{
|
{
|
||||||
if (! ::wxLaunchDefaultBrowser(wxString(filename, *wxConvCurrent)))
|
if (! ::wxLaunchDefaultBrowser(StrToWxStr(filename)))
|
||||||
{
|
{
|
||||||
// WARN_LOG
|
// WARN_LOG
|
||||||
}
|
}
|
||||||
|
@ -34,7 +36,7 @@ void Launch(const char *filename)
|
||||||
// Launch an file explorer window on a certain path
|
// Launch an file explorer window on a certain path
|
||||||
void Explore(const char *path)
|
void Explore(const char *path)
|
||||||
{
|
{
|
||||||
wxString wxPath = wxString(path, *wxConvCurrent);
|
wxString wxPath = StrToWxStr(path);
|
||||||
// Default to file
|
// Default to file
|
||||||
if (! wxPath.Contains(wxT("://")))
|
if (! wxPath.Contains(wxT("://")))
|
||||||
{
|
{
|
||||||
|
@ -52,3 +54,14 @@ void Explore(const char *path)
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
std::string WxStrToStr(const wxString& str)
|
||||||
|
{
|
||||||
|
return str.ToUTF8().data();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString StrToWxStr(const std::string& str)
|
||||||
|
{
|
||||||
|
//return wxString::FromUTF8Unchecked(str.c_str());
|
||||||
|
return wxString::FromUTF8(str.c_str());
|
||||||
|
}
|
||||||
|
|
|
@ -18,7 +18,11 @@
|
||||||
#ifndef WXUTILS_H
|
#ifndef WXUTILS_H
|
||||||
#define WXUTILS_H
|
#define WXUTILS_H
|
||||||
|
|
||||||
namespace WxUtils {
|
#include <string>
|
||||||
|
#include <wx/string.h>
|
||||||
|
|
||||||
|
namespace WxUtils
|
||||||
|
{
|
||||||
|
|
||||||
// Launch a file according to its mime type
|
// Launch a file according to its mime type
|
||||||
void Launch(const char *filename);
|
void Launch(const char *filename);
|
||||||
|
@ -28,4 +32,7 @@ void Explore(const char *path);
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
std::string WxStrToStr(const wxString& str);
|
||||||
|
wxString StrToWxStr(const std::string& str);
|
||||||
|
|
||||||
#endif // WXUTILS
|
#endif // WXUTILS
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
#include "X11Utils.h"
|
#include "X11Utils.h"
|
||||||
|
#include "WxUtils.h"
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <spawn.h>
|
#include <spawn.h>
|
||||||
|
@ -350,7 +351,7 @@ void XRRConfiguration::AddResolutions(wxArrayString& arrayStringFor_FullscreenRe
|
||||||
if (std::find(resos.begin(), resos.end(), strRes) == resos.end())
|
if (std::find(resos.begin(), resos.end(), strRes) == resos.end())
|
||||||
{
|
{
|
||||||
resos.push_back(strRes);
|
resos.push_back(strRes);
|
||||||
arrayStringFor_FullscreenResolution.Add(wxString::FromUTF8(strRes.c_str()));
|
arrayStringFor_FullscreenResolution.Add(StrToWxStr(strRes));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
#include "DInput.h"
|
#include "DInput.h"
|
||||||
|
|
||||||
#include <StringUtil.h>
|
#include "StringUtil.h"
|
||||||
|
|
||||||
#ifdef CIFACE_USE_DINPUT_JOYSTICK
|
#ifdef CIFACE_USE_DINPUT_JOYSTICK
|
||||||
#include "DInputJoystick.h"
|
#include "DInputJoystick.h"
|
||||||
|
@ -41,24 +41,18 @@ BOOL CALLBACK DIEnumDevicesCallback(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef)
|
||||||
|
|
||||||
std::string GetDeviceName(const LPDIRECTINPUTDEVICE8 device)
|
std::string GetDeviceName(const LPDIRECTINPUTDEVICE8 device)
|
||||||
{
|
{
|
||||||
std::string out;
|
DIPROPSTRING str = {};
|
||||||
|
|
||||||
DIPROPSTRING str;
|
|
||||||
ZeroMemory(&str, sizeof(str));
|
|
||||||
str.diph.dwSize = sizeof(str);
|
str.diph.dwSize = sizeof(str);
|
||||||
str.diph.dwHeaderSize = sizeof(str.diph);
|
str.diph.dwHeaderSize = sizeof(str.diph);
|
||||||
str.diph.dwHow = DIPH_DEVICE;
|
str.diph.dwHow = DIPH_DEVICE;
|
||||||
|
|
||||||
|
std::string result;
|
||||||
if (SUCCEEDED(device->GetProperty(DIPROP_PRODUCTNAME, &str.diph)))
|
if (SUCCEEDED(device->GetProperty(DIPROP_PRODUCTNAME, &str.diph)))
|
||||||
{
|
{
|
||||||
const int size = WideCharToMultiByte(CP_UTF8, 0, str.wsz, -1, NULL, 0, NULL, NULL);
|
result = StripSpaces(UTF16ToUTF8(str.wsz));
|
||||||
char* const data = new char[size];
|
|
||||||
if (size == WideCharToMultiByte(CP_UTF8, 0, str.wsz, -1, data, size, NULL, NULL))
|
|
||||||
out.assign(data);
|
|
||||||
delete[] data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return StripSpaces(out);
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Init(std::vector<ControllerInterface::Device*>& devices, HWND hwnd)
|
void Init(std::vector<ControllerInterface::Device*>& devices, HWND hwnd)
|
||||||
|
|
|
@ -69,7 +69,8 @@ bool SaveTGA(const char* filename, int width, int height, void* pdata)
|
||||||
|
|
||||||
bool SaveData(const char* filename, const char* data)
|
bool SaveData(const char* filename, const char* data)
|
||||||
{
|
{
|
||||||
std::ofstream f(filename, std::ios::binary);
|
std::ofstream f;
|
||||||
|
OpenFStream(f, filename, std::ios::binary);
|
||||||
f << data;
|
f << data;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -252,7 +252,8 @@ void ValidatePixelShaderIDs(API_TYPE api, PIXELSHADERUIDSAFE old_id, const std::
|
||||||
static int num_failures = 0;
|
static int num_failures = 0;
|
||||||
char szTemp[MAX_PATH];
|
char szTemp[MAX_PATH];
|
||||||
sprintf(szTemp, "%spsuid_mismatch_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++);
|
sprintf(szTemp, "%spsuid_mismatch_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++);
|
||||||
std::ofstream file(szTemp);
|
std::ofstream file;
|
||||||
|
OpenFStream(file, szTemp, std::ios_base::out);
|
||||||
file << msg;
|
file << msg;
|
||||||
file << "\n\nOld shader code:\n" << old_code;
|
file << "\n\nOld shader code:\n" << old_code;
|
||||||
file << "\n\nNew shader code:\n" << new_code;
|
file << "\n\nNew shader code:\n" << new_code;
|
||||||
|
|
|
@ -279,10 +279,12 @@ void VertexManager::Flush()
|
||||||
// save the shaders
|
// save the shaders
|
||||||
char strfile[255];
|
char strfile[255];
|
||||||
sprintf(strfile, "%sps%.3d.txt", File::GetUserPath(D_DUMPFRAMES_IDX).c_str(), g_ActiveConfig.iSaveTargetId);
|
sprintf(strfile, "%sps%.3d.txt", File::GetUserPath(D_DUMPFRAMES_IDX).c_str(), g_ActiveConfig.iSaveTargetId);
|
||||||
std::ofstream fps(strfile);
|
std::ofstream fps;
|
||||||
|
OpenFStream(fps, strfile, std::ios_base::out);
|
||||||
fps << ps->strprog.c_str();
|
fps << ps->strprog.c_str();
|
||||||
sprintf(strfile, "%svs%.3d.txt", File::GetUserPath(D_DUMPFRAMES_IDX).c_str(), g_ActiveConfig.iSaveTargetId);
|
sprintf(strfile, "%svs%.3d.txt", File::GetUserPath(D_DUMPFRAMES_IDX).c_str(), g_ActiveConfig.iSaveTargetId);
|
||||||
std::ofstream fvs(strfile);
|
std::ofstream fvs;
|
||||||
|
OpenFStream(fvs, strfile, std::ios_base::out);
|
||||||
fvs << vs->strprog.c_str();
|
fvs << vs->strprog.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,8 @@ void ValidateVertexShaderIDs(API_TYPE api, VERTEXSHADERUIDSAFE old_id, const std
|
||||||
static int num_failures = 0;
|
static int num_failures = 0;
|
||||||
char szTemp[MAX_PATH];
|
char szTemp[MAX_PATH];
|
||||||
sprintf(szTemp, "%svsuid_mismatch_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++);
|
sprintf(szTemp, "%svsuid_mismatch_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++);
|
||||||
std::ofstream file(szTemp);
|
std::ofstream file;
|
||||||
|
OpenFStream(file, szTemp, std::ios_base::out);
|
||||||
file << msg;
|
file << msg;
|
||||||
file << "\n\nOld shader code:\n" << old_code;
|
file << "\n\nOld shader code:\n" << old_code;
|
||||||
file << "\n\nNew shader code:\n" << new_code;
|
file << "\n\nNew shader code:\n" << new_code;
|
||||||
|
|
|
@ -64,7 +64,8 @@ bool CompileVertexShader(const char* code, unsigned int len, D3DBlob** blob)
|
||||||
static int num_failures = 0;
|
static int num_failures = 0;
|
||||||
char szTemp[MAX_PATH];
|
char szTemp[MAX_PATH];
|
||||||
sprintf(szTemp, "%sbad_vs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++);
|
sprintf(szTemp, "%sbad_vs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++);
|
||||||
std::ofstream file(szTemp);
|
std::ofstream file;
|
||||||
|
OpenFStream(file, szTemp, std::ios_base::out);
|
||||||
file << code;
|
file << code;
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
|
@ -121,7 +122,8 @@ bool CompileGeometryShader(const char* code, unsigned int len, D3DBlob** blob,
|
||||||
static int num_failures = 0;
|
static int num_failures = 0;
|
||||||
char szTemp[MAX_PATH];
|
char szTemp[MAX_PATH];
|
||||||
sprintf(szTemp, "%sbad_gs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++);
|
sprintf(szTemp, "%sbad_gs_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++);
|
||||||
std::ofstream file(szTemp);
|
std::ofstream file;
|
||||||
|
OpenFStream(file, szTemp, std::ios_base::out);
|
||||||
file << code;
|
file << code;
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
|
@ -180,7 +182,8 @@ bool CompilePixelShader(const char* code, unsigned int len, D3DBlob** blob,
|
||||||
static int num_failures = 0;
|
static int num_failures = 0;
|
||||||
char szTemp[MAX_PATH];
|
char szTemp[MAX_PATH];
|
||||||
sprintf(szTemp, "%sbad_ps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++);
|
sprintf(szTemp, "%sbad_ps_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++);
|
||||||
std::ofstream file(szTemp);
|
std::ofstream file;
|
||||||
|
OpenFStream(file, szTemp, std::ios_base::out);
|
||||||
file << code;
|
file << code;
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue