game name and description WIP: cache all 6 languages, so we don't need refresh cache after we changes language.
move some WIN32 code to CGameListCtrl. nakee, please check linux build, sorry I've not enough time to setup a linux dev environment. and, who can read German helps me to test game name and description display, thanks. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2090 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
4660943322
commit
9e3fed40f2
|
@ -94,55 +94,6 @@ bool IBannerLoader::CopyToStringAndCheck(std::string& _rDestination, const char*
|
|||
return(bResult);
|
||||
}
|
||||
|
||||
bool IBannerLoader::CopySJISToString( std::string& _rDestination, const char* _src )
|
||||
{
|
||||
bool returnCode = false;
|
||||
#ifdef WIN32
|
||||
// HyperIris: because dolphin using "Use Multi-Byte Character Set",
|
||||
// we must convert the SJIS chars to unicode then to our windows local by hand
|
||||
u32 unicodeNameSize = MultiByteToWideChar(932, MB_PRECOMPOSED,
|
||||
_src, (int)strlen(_src), NULL, NULL);
|
||||
if (unicodeNameSize > 0)
|
||||
{
|
||||
u16* pUnicodeStrBuffer = new u16[unicodeNameSize + 1];
|
||||
if (pUnicodeStrBuffer)
|
||||
{
|
||||
memset(pUnicodeStrBuffer, 0, (unicodeNameSize + 1) * sizeof(u16));
|
||||
if (MultiByteToWideChar(932, MB_PRECOMPOSED,
|
||||
_src, (int)strlen(_src),
|
||||
(LPWSTR)pUnicodeStrBuffer, unicodeNameSize))
|
||||
{
|
||||
u32 ansiNameSize = WideCharToMultiByte(CP_ACP, 0,
|
||||
(LPCWSTR)pUnicodeStrBuffer, unicodeNameSize,
|
||||
NULL, NULL, NULL, NULL);
|
||||
if (ansiNameSize > 0)
|
||||
{
|
||||
char* pAnsiStrBuffer = new char[ansiNameSize + 1];
|
||||
if (pAnsiStrBuffer)
|
||||
{
|
||||
memset(pAnsiStrBuffer, 0, (ansiNameSize + 1) * sizeof(char));
|
||||
if (WideCharToMultiByte(CP_ACP, 0,
|
||||
(LPCWSTR)pUnicodeStrBuffer, unicodeNameSize,
|
||||
pAnsiStrBuffer, ansiNameSize, NULL, NULL))
|
||||
{
|
||||
_rDestination = pAnsiStrBuffer;
|
||||
returnCode = true;
|
||||
}
|
||||
delete pAnsiStrBuffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
delete pUnicodeStrBuffer;
|
||||
}
|
||||
}
|
||||
#else
|
||||
// not implement other than windows
|
||||
_rDestination = _src;
|
||||
returnCode = true;
|
||||
#endif
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
bool IBannerLoader::CopyUnicodeToString( std::string& _rDestination, const u16* _src )
|
||||
{
|
||||
bool returnCode = false;
|
||||
|
@ -172,7 +123,7 @@ bool IBannerLoader::CopyUnicodeToString( std::string& _rDestination, const u16*
|
|||
#else
|
||||
// FIXME: Horribly broke on non win32
|
||||
// _rDestination = _src;
|
||||
returnCode = true;
|
||||
returnCode = false;
|
||||
#endif
|
||||
return returnCode;
|
||||
}
|
||||
|
|
|
@ -38,17 +38,17 @@ class IBannerLoader
|
|||
|
||||
virtual bool GetBanner(u32* _pBannerImage) = 0;
|
||||
|
||||
virtual bool GetName(std::string& _rName, DiscIO::IVolume::ECountry language) = 0;
|
||||
virtual bool GetName(std::string* _rName) = 0;
|
||||
|
||||
virtual bool GetCompany(std::string& _rCompany) = 0;
|
||||
|
||||
virtual bool GetDescription(std::string& _rDescription, DiscIO::IVolume::ECountry language) = 0;
|
||||
virtual bool GetDescription(std::string* _rDescription) = 0;
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
bool CopyToStringAndCheck(std::string& _rDestination, const char* _src);
|
||||
bool CopySJISToString(std::string& _rDestination, const char* _src);
|
||||
|
||||
bool CopyUnicodeToString(std::string& _rDestination, const u16* _src);
|
||||
};
|
||||
|
||||
|
|
|
@ -92,9 +92,12 @@ CBannerLoaderGC::GetBanner(u32* _pBannerImage)
|
|||
|
||||
|
||||
bool
|
||||
CBannerLoaderGC::GetName(std::string& _rName, DiscIO::IVolume::ECountry language)
|
||||
CBannerLoaderGC::GetName(std::string _rName[])
|
||||
{
|
||||
_rName = "no name";
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
_rName[i] = "no name";
|
||||
}
|
||||
|
||||
bool returnCode = false;
|
||||
|
||||
|
@ -109,21 +112,10 @@ CBannerLoaderGC::GetName(std::string& _rName, DiscIO::IVolume::ECountry language
|
|||
case CBannerLoaderGC::BANNER_BNR1:
|
||||
{
|
||||
DVDBanner* pBanner = (DVDBanner*)m_pBannerFile;
|
||||
if (DiscIO::IVolume::COUNTRY_JAP == language)
|
||||
{
|
||||
// dunno, if dolphin using unicode, it will be better = =;
|
||||
if (CopySJISToString(_rName, pBanner->comment.shortTitle))
|
||||
{
|
||||
returnCode = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (CopyToStringAndCheck(_rName, pBanner->comment.shortTitle))//language != 0 ? pBanner->comment[0].shortTitle : pBanner->comment[0].longTitle))
|
||||
{
|
||||
returnCode = true;
|
||||
}
|
||||
}
|
||||
char tempBuffer[33] = {0};
|
||||
memcpy(tempBuffer, pBanner->comment.shortTitle, 32);
|
||||
_rName[0] = tempBuffer;
|
||||
returnCode = true;
|
||||
}
|
||||
break;
|
||||
case CBannerLoaderGC::BANNER_BNR2:
|
||||
|
@ -131,10 +123,15 @@ CBannerLoaderGC::GetName(std::string& _rName, DiscIO::IVolume::ECountry language
|
|||
DVDBanner2* pBanner = (DVDBanner2*)m_pBannerFile;
|
||||
|
||||
u32 languageID = SConfig::GetInstance().m_InterfaceLanguage;
|
||||
if (CopyToStringAndCheck(_rName, pBanner->comment[languageID].shortTitle))//language != 0 ? pBanner->comment[0].shortTitle : pBanner->comment[0].longTitle))
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
returnCode = true;
|
||||
char tempBuffer[33] = {0};
|
||||
memcpy(tempBuffer, pBanner->comment[i].shortTitle, 32);
|
||||
_rName[i] = tempBuffer;
|
||||
}
|
||||
|
||||
returnCode = true;
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -165,9 +162,12 @@ CBannerLoaderGC::GetCompany(std::string& _rCompany)
|
|||
|
||||
|
||||
bool
|
||||
CBannerLoaderGC::GetDescription(std::string& _rDescription, DiscIO::IVolume::ECountry language)
|
||||
CBannerLoaderGC::GetDescription(std::string* _rDescription)
|
||||
{
|
||||
_rDescription = "";
|
||||
for (int i = 0; i< 6; i++)
|
||||
{
|
||||
_rDescription[i] = "";
|
||||
}
|
||||
|
||||
bool returnCode = false;
|
||||
|
||||
|
@ -182,32 +182,23 @@ CBannerLoaderGC::GetDescription(std::string& _rDescription, DiscIO::IVolume::ECo
|
|||
case CBannerLoaderGC::BANNER_BNR1:
|
||||
{
|
||||
DVDBanner* pBanner = (DVDBanner*)m_pBannerFile;
|
||||
if (DiscIO::IVolume::COUNTRY_JAP == language)
|
||||
{
|
||||
// dunno, if dolphin using unicode, it will be better = =;
|
||||
if (CopySJISToString(_rDescription, pBanner->comment.comment))
|
||||
{
|
||||
returnCode = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (CopyToStringAndCheck(_rDescription, pBanner->comment.comment))//language != 0 ? pBanner->comment[0].shortTitle : pBanner->comment[0].longTitle))
|
||||
{
|
||||
returnCode = true;
|
||||
}
|
||||
}
|
||||
char tempBuffer[129] = {0};
|
||||
memcpy(tempBuffer, pBanner->comment.comment, 128);
|
||||
_rDescription[0] = tempBuffer;
|
||||
returnCode = true;
|
||||
}
|
||||
break;
|
||||
case CBannerLoaderGC::BANNER_BNR2:
|
||||
{
|
||||
DVDBanner2* pBanner = (DVDBanner2*)m_pBannerFile;
|
||||
|
||||
u32 languageID = SConfig::GetInstance().m_InterfaceLanguage;
|
||||
if (CopyToStringAndCheck(_rDescription, pBanner->comment[languageID].comment))//language != 0 ? pBanner->comment[0].shortTitle : pBanner->comment[0].longTitle))
|
||||
for (int i = 0; i< 6; i++)
|
||||
{
|
||||
returnCode = true;
|
||||
char tempBuffer[129] = {0};
|
||||
memcpy(tempBuffer, pBanner->comment[i].comment, 128);
|
||||
_rDescription[i] = tempBuffer;
|
||||
}
|
||||
returnCode = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -35,11 +35,11 @@ class CBannerLoaderGC
|
|||
|
||||
virtual bool GetBanner(u32* _pBannerImage);
|
||||
|
||||
virtual bool GetName(std::string& _rName, DiscIO::IVolume::ECountry language);
|
||||
virtual bool GetName(std::string* _rName);
|
||||
|
||||
virtual bool GetCompany(std::string& _rCompany);
|
||||
|
||||
virtual bool GetDescription(std::string& _rDescription, DiscIO::IVolume::ECountry language);
|
||||
virtual bool GetDescription(std::string* _rDescription);
|
||||
|
||||
|
||||
private:
|
||||
|
|
|
@ -115,9 +115,12 @@ CBannerLoaderWii::StupidWideCharToString(u16* _pSrc, size_t _max)
|
|||
}
|
||||
|
||||
bool
|
||||
CBannerLoaderWii::GetName(std::string& _rName, DiscIO::IVolume::ECountry language)
|
||||
CBannerLoaderWii::GetName(std::string* _rName)
|
||||
{
|
||||
_rName = "no name";
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
_rName[i] = "no name";
|
||||
}
|
||||
|
||||
if (!IsValid())
|
||||
{
|
||||
|
@ -126,19 +129,17 @@ CBannerLoaderWii::GetName(std::string& _rName, DiscIO::IVolume::ECountry languag
|
|||
|
||||
// find Banner type
|
||||
SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile;
|
||||
#ifdef _WIN32
|
||||
if (DiscIO::IVolume::COUNTRY_JAP == language)
|
||||
|
||||
std::string name;
|
||||
if (CopyUnicodeToString(name, pBanner->m_Comment[0]))
|
||||
{
|
||||
return CopyUnicodeToString(_rName, pBanner->m_Comment[0]);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
// very stupid
|
||||
_rName = StupidWideCharToString(pBanner->m_Comment[0], WII_BANNER_COMMENT_SIZE);
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
_rName[i] = name;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -151,9 +152,12 @@ CBannerLoaderWii::GetCompany(std::string& _rCompany)
|
|||
|
||||
|
||||
bool
|
||||
CBannerLoaderWii::GetDescription(std::string& _rDescription, DiscIO::IVolume::ECountry language)
|
||||
CBannerLoaderWii::GetDescription(std::string* _rDescription)
|
||||
{
|
||||
_rDescription = "";
|
||||
for (int i = 0; i< 6; i++)
|
||||
{
|
||||
_rDescription[i] = "";
|
||||
}
|
||||
|
||||
if (!IsValid())
|
||||
{
|
||||
|
@ -162,17 +166,16 @@ CBannerLoaderWii::GetDescription(std::string& _rDescription, DiscIO::IVolume::EC
|
|||
|
||||
// find Banner type
|
||||
SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile;
|
||||
if (DiscIO::IVolume::COUNTRY_JAP == language)
|
||||
|
||||
std::string description;
|
||||
if (CopyUnicodeToString(description, pBanner->m_Comment[1]))
|
||||
{
|
||||
return CopyUnicodeToString(_rDescription, pBanner->m_Comment[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// very stupid
|
||||
_rDescription = StupidWideCharToString(pBanner->m_Comment[1], WII_BANNER_COMMENT_SIZE);
|
||||
for (int i = 0; i< 6; i++)
|
||||
{
|
||||
_rDescription[i] = description;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,11 +35,11 @@ class CBannerLoaderWii
|
|||
|
||||
virtual bool GetBanner(u32* _pBannerImage);
|
||||
|
||||
virtual bool GetName(std::string& _rName, DiscIO::IVolume::ECountry language);
|
||||
virtual bool GetName(std::string* _rName);
|
||||
|
||||
virtual bool GetCompany(std::string& _rCompany);
|
||||
|
||||
virtual bool GetDescription(std::string& _rDescription, DiscIO::IVolume::ECountry language);
|
||||
virtual bool GetDescription(std::string* _rDescription);
|
||||
|
||||
|
||||
private:
|
||||
|
|
|
@ -92,7 +92,7 @@ CConfigMain::CConfigMain(wxWindow* parent, wxWindowID id, const wxString& title,
|
|||
{
|
||||
// Control refreshing of the ISOs list
|
||||
bRefreshList = false;
|
||||
bRefreshCache = false;
|
||||
|
||||
// Load Wii SYSCONF
|
||||
FullSYSCONFPath = FULL_WII_USER_DIR "shared2/sys/SYSCONF";
|
||||
pStream = NULL;
|
||||
|
@ -532,7 +532,7 @@ void CConfigMain::CreateGUIControls()
|
|||
|
||||
void CConfigMain::OnClose(wxCloseEvent& WXUNUSED (event))
|
||||
{
|
||||
EndModal((bRefreshList || bRefreshCache) ? wxID_OK : wxID_CLOSE);
|
||||
EndModal((bRefreshList) ? wxID_OK : wxID_CLOSE);
|
||||
|
||||
// First check that we did successfully populate m_SYSCONF earlier, otherwise don't
|
||||
// save anything, it will be a corrupted file
|
||||
|
@ -592,7 +592,6 @@ void CConfigMain::CoreSettingsChanged(wxCommandEvent& event)
|
|||
case ID_INTERFACE_LANG:
|
||||
SConfig::GetInstance().m_InterfaceLanguage = (INTERFACE_LANGUAGE)InterfaceLang->GetSelection();
|
||||
bRefreshList = true;
|
||||
bRefreshCache = true;
|
||||
break;
|
||||
|
||||
case ID_ALLWAYS_HLEBIOS: // Core
|
||||
|
|
|
@ -43,7 +43,6 @@ class CConfigMain
|
|||
void OnConfig(wxCommandEvent& event);
|
||||
|
||||
bool bRefreshList;
|
||||
bool bRefreshCache;
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
@ -511,7 +511,7 @@ void CFrame::OnConfigMain(wxCommandEvent& WXUNUSED (event))
|
|||
{
|
||||
CConfigMain ConfigMain(this);
|
||||
if (ConfigMain.ShowModal() == wxID_OK)
|
||||
m_GameListCtrl->Update(ConfigMain.bRefreshCache);
|
||||
m_GameListCtrl->Update();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "Globals.h"
|
||||
|
||||
#include <wx/imaglist.h>
|
||||
#include <wx/fontmap.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
|
@ -45,15 +46,32 @@ std::string CGameListCtrl::m_currentFilename;
|
|||
static int currentColumn = 0;
|
||||
bool operator < (const GameListItem &one, const GameListItem &other)
|
||||
{
|
||||
int indexOne = 0;
|
||||
int indexOther = 0;
|
||||
|
||||
switch (one.GetCountry())
|
||||
{
|
||||
case DiscIO::IVolume::COUNTRY_JAP:;
|
||||
case DiscIO::IVolume::COUNTRY_USA:indexOne = 0; break;
|
||||
default: indexOne = (int)SConfig::GetInstance().m_InterfaceLanguage;
|
||||
}
|
||||
|
||||
switch (other.GetCountry())
|
||||
{
|
||||
case DiscIO::IVolume::COUNTRY_JAP:;
|
||||
case DiscIO::IVolume::COUNTRY_USA:indexOther = 0; break;
|
||||
default: indexOther = (int)SConfig::GetInstance().m_InterfaceLanguage;
|
||||
}
|
||||
|
||||
switch(currentColumn)
|
||||
{
|
||||
case CGameListCtrl::COLUMN_TITLE: return strcasecmp(one.GetName().c_str(), other.GetName().c_str()) < 0;
|
||||
case CGameListCtrl::COLUMN_TITLE: return strcasecmp(one.GetName(indexOne).c_str(), other.GetName(indexOther).c_str()) < 0;
|
||||
case CGameListCtrl::COLUMN_COMPANY: return strcasecmp(one.GetCompany().c_str(), other.GetCompany().c_str()) < 0;
|
||||
case CGameListCtrl::COLUMN_NOTES: return strcasecmp(one.GetDescription().c_str(), other.GetDescription().c_str()) < 0;
|
||||
case CGameListCtrl::COLUMN_NOTES: return strcasecmp(one.GetDescription(indexOne).c_str(), other.GetDescription(indexOther).c_str()) < 0;
|
||||
case CGameListCtrl::COLUMN_COUNTRY: return (one.GetCountry() < other.GetCountry());
|
||||
case CGameListCtrl::COLUMN_SIZE: return (one.GetFileSize() < other.GetFileSize());
|
||||
case CGameListCtrl::COLUMN_ISSUES: return strcasecmp(one.GetIssues().c_str(), other.GetIssues().c_str()) < 0;
|
||||
default: return strcasecmp(one.GetName().c_str(), other.GetName().c_str()) < 0;
|
||||
default: return strcasecmp(one.GetName(indexOne).c_str(), other.GetName(indexOther).c_str()) < 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -125,7 +143,7 @@ void CGameListCtrl::BrowseForDirectory()
|
|||
}
|
||||
}
|
||||
|
||||
void CGameListCtrl::Update(bool bUpdateCache)
|
||||
void CGameListCtrl::Update()
|
||||
{
|
||||
if (m_imageListSmall)
|
||||
{
|
||||
|
@ -135,7 +153,7 @@ void CGameListCtrl::Update(bool bUpdateCache)
|
|||
|
||||
Hide();
|
||||
|
||||
ScanForISOs(bUpdateCache);
|
||||
ScanForISOs();
|
||||
|
||||
ClearAll();
|
||||
|
||||
|
@ -233,9 +251,44 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
|
|||
// title: 0xFF0000
|
||||
// company: 0x007030
|
||||
|
||||
SetItem(_Index, COLUMN_TITLE, wxString::FromAscii(rISOFile.GetName().c_str()), -1);
|
||||
switch (rISOFile.GetCountry())
|
||||
{
|
||||
case DiscIO::IVolume::COUNTRY_JAP:
|
||||
{
|
||||
// keep these codes, when we move to wx unicode...
|
||||
//wxCSConv convFrom(wxFontMapper::GetEncodingName(wxFONTENCODING_SHIFT_JIS));
|
||||
//wxCSConv convTo(wxFontMapper::GetEncodingName(wxFONTENCODING_DEFAULT));
|
||||
//SetItem(_Index, COLUMN_TITLE, wxString(wxString(rISOFile.GetName()).wc_str(convFrom) , convTo), -1);
|
||||
//SetItem(_Index, COLUMN_NOTES, wxString(wxString(rISOFile.GetDescription()).wc_str(convFrom) , convTo), -1);
|
||||
wxString name;
|
||||
if (CopySJISToString(name, rISOFile.GetName(0).c_str()))
|
||||
{
|
||||
SetItem(_Index, COLUMN_TITLE, name, -1);
|
||||
}
|
||||
|
||||
wxString description;
|
||||
if (CopySJISToString(description, rISOFile.GetDescription(0).c_str()))
|
||||
{
|
||||
SetItem(_Index, COLUMN_NOTES, description, -1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DiscIO::IVolume::COUNTRY_USA:
|
||||
SetItem(_Index, COLUMN_TITLE, wxString(rISOFile.GetName(0).c_str()), -1);
|
||||
SetItem(_Index, COLUMN_NOTES, wxString(rISOFile.GetDescription(0).c_str()), -1);
|
||||
break;
|
||||
default:
|
||||
SetItem(_Index, COLUMN_TITLE,
|
||||
//wxString::FromAscii(rISOFile.GetName((int)SConfig::GetInstance().m_InterfaceLanguage).c_str()), -1);
|
||||
wxString(rISOFile.GetName((int)SConfig::GetInstance().m_InterfaceLanguage).c_str()), -1);
|
||||
SetItem(_Index, COLUMN_NOTES,
|
||||
//wxString::FromAscii(rISOFile.GetDescription((int)SConfig::GetInstance().m_InterfaceLanguage).c_str()), -1);
|
||||
wxString(rISOFile.GetDescription((int)SConfig::GetInstance().m_InterfaceLanguage).c_str()), -1);
|
||||
break;
|
||||
}
|
||||
|
||||
SetItem(_Index, COLUMN_COMPANY, wxString::FromAscii(rISOFile.GetCompany().c_str()), -1);
|
||||
SetItem(_Index, COLUMN_NOTES, wxString::FromAscii(rISOFile.GetDescription().c_str()), -1);
|
||||
|
||||
SetItem(_Index, COLUMN_SIZE, NiceSizeFormat(rISOFile.GetFileSize()), -1);
|
||||
|
||||
// Load the INI file for columns that read from it
|
||||
|
@ -363,7 +416,7 @@ void CGameListCtrl::SetBackgroundColor()
|
|||
}
|
||||
}
|
||||
|
||||
void CGameListCtrl::ScanForISOs(bool bUpdateCache)
|
||||
void CGameListCtrl::ScanForISOs()
|
||||
{
|
||||
m_ISOFiles.clear();
|
||||
CFileSearch::XStringVector Directories(SConfig::GetInstance().m_ISOFolder);
|
||||
|
@ -407,7 +460,7 @@ void CGameListCtrl::ScanForISOs(bool bUpdateCache)
|
|||
{
|
||||
break;
|
||||
}
|
||||
GameListItem ISOFile(rFilenames[i], bUpdateCache);
|
||||
GameListItem ISOFile(rFilenames[i]);
|
||||
if (ISOFile.IsValid())
|
||||
{
|
||||
m_ISOFiles.push_back(ISOFile);
|
||||
|
@ -446,14 +499,31 @@ int wxCALLBACK wxListCompare(long item1, long item2, long sortData)
|
|||
sortData = -sortData;
|
||||
}
|
||||
|
||||
int indexOne = 0;
|
||||
int indexOther = 0;
|
||||
|
||||
switch (iso1->GetCountry())
|
||||
{
|
||||
case DiscIO::IVolume::COUNTRY_JAP:;
|
||||
case DiscIO::IVolume::COUNTRY_USA:indexOne = 0; break;
|
||||
default: indexOne = (int)SConfig::GetInstance().m_InterfaceLanguage;
|
||||
}
|
||||
|
||||
switch (iso2->GetCountry())
|
||||
{
|
||||
case DiscIO::IVolume::COUNTRY_JAP:;
|
||||
case DiscIO::IVolume::COUNTRY_USA:indexOther = 0; break;
|
||||
default: indexOther = (int)SConfig::GetInstance().m_InterfaceLanguage;
|
||||
}
|
||||
|
||||
switch(sortData)
|
||||
{
|
||||
case CGameListCtrl::COLUMN_TITLE:
|
||||
return strcasecmp(iso1->GetName().c_str(),iso2->GetName().c_str()) *t;
|
||||
return strcasecmp(iso1->GetName(indexOne).c_str(),iso2->GetName(indexOther).c_str()) *t;
|
||||
case CGameListCtrl::COLUMN_COMPANY:
|
||||
return strcasecmp(iso1->GetCompany().c_str(),iso2->GetCompany().c_str()) *t;
|
||||
case CGameListCtrl::COLUMN_NOTES:
|
||||
return strcasecmp(iso1->GetDescription().c_str(),iso2->GetDescription().c_str()) *t;
|
||||
return strcasecmp(iso1->GetDescription(indexOne).c_str(),iso2->GetDescription(indexOther).c_str()) *t;
|
||||
case CGameListCtrl::COLUMN_ISSUES:
|
||||
return strcasecmp(iso1->GetIssues().c_str(),iso2->GetIssues().c_str()) *t;
|
||||
case CGameListCtrl::COLUMN_COUNTRY:
|
||||
|
@ -839,3 +909,52 @@ void CGameListCtrl::UnselectAll()
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
bool CGameListCtrl::CopySJISToString( wxString& _rDestination, const char* _src )
|
||||
{
|
||||
bool returnCode = false;
|
||||
#ifdef WIN32
|
||||
// HyperIris: because dolphin using "Use Multi-Byte Character Set",
|
||||
// we must convert the SJIS chars to unicode then to our windows local by hand
|
||||
u32 unicodeNameSize = MultiByteToWideChar(932, MB_PRECOMPOSED,
|
||||
_src, (int)strlen(_src), NULL, NULL);
|
||||
if (unicodeNameSize > 0)
|
||||
{
|
||||
u16* pUnicodeStrBuffer = new u16[unicodeNameSize + 1];
|
||||
if (pUnicodeStrBuffer)
|
||||
{
|
||||
memset(pUnicodeStrBuffer, 0, (unicodeNameSize + 1) * sizeof(u16));
|
||||
if (MultiByteToWideChar(932, MB_PRECOMPOSED,
|
||||
_src, (int)strlen(_src),
|
||||
(LPWSTR)pUnicodeStrBuffer, unicodeNameSize))
|
||||
{
|
||||
u32 ansiNameSize = WideCharToMultiByte(CP_ACP, 0,
|
||||
(LPCWSTR)pUnicodeStrBuffer, unicodeNameSize,
|
||||
NULL, NULL, NULL, NULL);
|
||||
if (ansiNameSize > 0)
|
||||
{
|
||||
char* pAnsiStrBuffer = new char[ansiNameSize + 1];
|
||||
if (pAnsiStrBuffer)
|
||||
{
|
||||
memset(pAnsiStrBuffer, 0, (ansiNameSize + 1) * sizeof(char));
|
||||
if (WideCharToMultiByte(CP_ACP, 0,
|
||||
(LPCWSTR)pUnicodeStrBuffer, unicodeNameSize,
|
||||
pAnsiStrBuffer, ansiNameSize, NULL, NULL))
|
||||
{
|
||||
_rDestination = pAnsiStrBuffer;
|
||||
returnCode = true;
|
||||
}
|
||||
delete pAnsiStrBuffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
delete pUnicodeStrBuffer;
|
||||
}
|
||||
}
|
||||
#else
|
||||
// not implement other than windows
|
||||
//_rDestination = _src;
|
||||
//returnCode = true;
|
||||
#endif
|
||||
return returnCode;
|
||||
}
|
|
@ -31,7 +31,7 @@ public:
|
|||
CGameListCtrl(wxWindow* parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, long style);
|
||||
~CGameListCtrl();
|
||||
|
||||
void Update(bool bUpdateCache = false);
|
||||
void Update();
|
||||
void BrowseForDirectory();
|
||||
const GameListItem *GetSelectedISO();
|
||||
const GameListItem *GetISO(int index) const;
|
||||
|
@ -60,7 +60,7 @@ private:
|
|||
void InitBitmaps();
|
||||
void InsertItemInReportView(long _Index);
|
||||
void SetBackgroundColor();
|
||||
void ScanForISOs(bool bUpdateCache);
|
||||
void ScanForISOs();
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
||||
|
@ -90,6 +90,9 @@ private:
|
|||
static size_t m_numberItem;
|
||||
static void CompressCB(const char* text, float percent, void* arg);
|
||||
static void MultiCompressCB(const char* text, float percent, void* arg);
|
||||
|
||||
// hyperiris: put it here will be nice, if we moce to wx unicode, it simple to fix
|
||||
bool CopySJISToString(wxString& _rDestination, const char* _src);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -32,14 +32,14 @@
|
|||
#include "ChunkFile.h"
|
||||
#include "../resources/no_banner.cpp"
|
||||
|
||||
#define CACHE_REVISION 0x105
|
||||
#define CACHE_REVISION 0x106
|
||||
|
||||
#define DVD_BANNER_WIDTH 96
|
||||
#define DVD_BANNER_HEIGHT 32
|
||||
|
||||
static u32 g_ImageTemp[DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT];
|
||||
|
||||
GameListItem::GameListItem(const std::string& _rFileName, bool bUpdateCache)
|
||||
GameListItem::GameListItem(const std::string& _rFileName)
|
||||
: m_FileName(_rFileName)
|
||||
, m_FileSize(0)
|
||||
, m_Valid(false)
|
||||
|
@ -48,7 +48,7 @@ GameListItem::GameListItem(const std::string& _rFileName, bool bUpdateCache)
|
|||
, m_ImageSize(0)
|
||||
{
|
||||
|
||||
if ((bUpdateCache == false) && LoadFromCache())
|
||||
if (LoadFromCache())
|
||||
{
|
||||
m_Valid = true;
|
||||
}
|
||||
|
@ -58,11 +58,11 @@ GameListItem::GameListItem(const std::string& _rFileName, bool bUpdateCache)
|
|||
|
||||
if (pVolume != NULL)
|
||||
{
|
||||
m_Name = _rFileName;
|
||||
m_Name[0] = _rFileName;
|
||||
m_Country = pVolume->GetCountry();
|
||||
m_FileSize = File::GetSize(_rFileName.c_str());
|
||||
m_VolumeSize = pVolume->GetSize();
|
||||
m_Name = pVolume->GetName();
|
||||
m_Name[0] = pVolume->GetName();
|
||||
m_UniqueID = pVolume->GetUniqueID();
|
||||
m_BlobCompressed = DiscIO::IsCompressedBlob(_rFileName.c_str());
|
||||
|
||||
|
@ -77,9 +77,9 @@ GameListItem::GameListItem(const std::string& _rFileName, bool bUpdateCache)
|
|||
{
|
||||
if (pBannerLoader->IsValid())
|
||||
{
|
||||
pBannerLoader->GetName(m_Name, m_Country); //m_Country == DiscIO::IVolume::COUNTRY_JAP ? 1 : 0);
|
||||
pBannerLoader->GetName(m_Name); //m_Country == DiscIO::IVolume::COUNTRY_JAP ? 1 : 0);
|
||||
pBannerLoader->GetCompany(m_Company);
|
||||
pBannerLoader->GetDescription(m_Description, m_Country);
|
||||
pBannerLoader->GetDescription(m_Description);
|
||||
if (pBannerLoader->GetBanner(g_ImageTemp))
|
||||
{
|
||||
m_ImageSize = DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT * 3;
|
||||
|
@ -149,9 +149,11 @@ void GameListItem::SaveToCache()
|
|||
|
||||
void GameListItem::DoState(PointerWrap &p)
|
||||
{
|
||||
p.Do(m_Name);
|
||||
p.Do(m_Name[0]); p.Do(m_Name[1]); p.Do(m_Name[2]);
|
||||
p.Do(m_Name[3]); p.Do(m_Name[4]); p.Do(m_Name[5]);
|
||||
p.Do(m_Company);
|
||||
p.Do(m_Description);
|
||||
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_UniqueID);
|
||||
p.Do(m_FileSize);
|
||||
p.Do(m_VolumeSize);
|
||||
|
@ -170,3 +172,21 @@ std::string GameListItem::CreateCacheFilename()
|
|||
fullname += Filename;
|
||||
return fullname;
|
||||
}
|
||||
|
||||
const std::string& GameListItem::GetDescription(int index) const
|
||||
{
|
||||
if ((index >=0) && (index < 6))
|
||||
{
|
||||
return m_Description[index];
|
||||
}
|
||||
return m_Description[0];
|
||||
}
|
||||
|
||||
const std::string& GameListItem::GetName(int index) const
|
||||
{
|
||||
if ((index >=0) && (index < 6))
|
||||
{
|
||||
return m_Name[index];
|
||||
}
|
||||
return m_Name[0];
|
||||
}
|
||||
|
|
|
@ -24,14 +24,14 @@ class PointerWrap;
|
|||
class GameListItem
|
||||
{
|
||||
public:
|
||||
GameListItem(const std::string& _rFileName, bool bUpdateCache = false);
|
||||
GameListItem(const std::string& _rFileName);
|
||||
~GameListItem();
|
||||
|
||||
bool IsValid() const {return m_Valid;}
|
||||
const std::string& GetFileName() const {return m_FileName;}
|
||||
const std::string& GetName() const {return m_Name;}
|
||||
const std::string& GetName(int index) const;
|
||||
const std::string& GetCompany() const {return m_Company;}
|
||||
const std::string& GetDescription() const {return m_Description;}
|
||||
const std::string& GetDescription(int index) const;
|
||||
const std::string& GetUniqueID() const {return m_UniqueID;}
|
||||
DiscIO::IVolume::ECountry GetCountry() const {return m_Country;}
|
||||
const std::string& GetIssues() const {return m_Issues;}
|
||||
|
@ -43,12 +43,11 @@ public:
|
|||
#endif
|
||||
|
||||
void DoState(PointerWrap &p);
|
||||
|
||||
private:
|
||||
std::string m_FileName;
|
||||
std::string m_Name;
|
||||
std::string m_Name[6];
|
||||
std::string m_Company;
|
||||
std::string m_Description;
|
||||
std::string m_Description[6];
|
||||
std::string m_UniqueID;
|
||||
std::string m_Issues;
|
||||
|
||||
|
|
|
@ -113,10 +113,14 @@ CISOProperties::CISOProperties(const std::string fileName, wxWindow* parent, wxW
|
|||
//m_Version;
|
||||
//if (OpenISO_.GetBNRVersion() == "BNR1")
|
||||
m_Lang->Enable(false);
|
||||
m_ShortName->SetValue(wxString(OpenISO_.GetName().c_str(), wxConvUTF8));
|
||||
|
||||
// hyperiris: temp fix, need real work
|
||||
m_ShortName->SetValue(wxString(OpenISO_.GetName(0).c_str(), wxConvUTF8));
|
||||
//m_LongName->SetValue(wxString(OpenISO_.GetLongName().c_str(), wxConvUTF8));
|
||||
m_Maker->SetValue(wxString(OpenISO_.GetCompany().c_str(), wxConvUTF8));//dev too
|
||||
m_Comment->SetValue(wxString(OpenISO_.GetDescription().c_str(), wxConvUTF8));
|
||||
|
||||
// hyperiris: temp fix, need real work
|
||||
m_Comment->SetValue(wxString(OpenISO_.GetDescription(0).c_str(), wxConvUTF8));
|
||||
m_Banner->SetBitmap(OpenISO_.GetImage());
|
||||
m_Banner->Connect(wxID_ANY, wxEVT_RIGHT_DOWN,
|
||||
wxMouseEventHandler(CISOProperties::RightClickOnBanner), (wxObject*)NULL, this);
|
||||
|
@ -128,7 +132,9 @@ CISOProperties::CISOProperties(const std::string fileName, wxWindow* parent, wxW
|
|||
|
||||
std::string filename, extension;
|
||||
SplitPath(fileName, 0, &filename, &extension);
|
||||
SetTitle(wxString::Format(_("%s%s: %s - %s"), filename.c_str(), extension.c_str(), OpenISO_.GetUniqueID().c_str(), OpenISO_.GetName().c_str()));
|
||||
|
||||
// hyperiris: temp fix, need real work
|
||||
SetTitle(wxString::Format(_("%s%s: %s - %s"), filename.c_str(), extension.c_str(), OpenISO_.GetUniqueID().c_str(), OpenISO_.GetName(0).c_str()));
|
||||
}
|
||||
|
||||
CISOProperties::~CISOProperties()
|
||||
|
|
Loading…
Reference in New Issue