Use GetClientRect in the GameListCtrl OnSize function, but removed the +5 padding. This seems to look best on windows and linux. Unfortunately wxWidgets on linux doesn't account for visibility of the vertical scrollbar in this or any calculation I have found.
Also fixed an issue with the saving of the log/console window size. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6013 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
c88689381f
commit
840bd3613f
|
@ -597,7 +597,7 @@ void CFrame::OnDropDownToolbarSelect(wxCommandEvent& event)
|
|||
Tmp.Name = dlg.GetValue().mb_str();
|
||||
Tmp.Perspective = m_Mgr->SavePerspective();
|
||||
|
||||
ActivePerspective = Perspectives.size();
|
||||
ActivePerspective = (u32)Perspectives.size();
|
||||
Perspectives.push_back(Tmp);
|
||||
|
||||
UpdateCurrentPerspective();
|
||||
|
|
|
@ -60,32 +60,50 @@ bool operator < (const GameListItem &one, const GameListItem &other)
|
|||
|
||||
switch (one.GetCountry())
|
||||
{
|
||||
case DiscIO::IVolume::COUNTRY_JAPAN:;
|
||||
case DiscIO::IVolume::COUNTRY_USA:indexOne = 0; break;
|
||||
default: indexOne = (int)SConfig::GetInstance().m_InterfaceLanguage;
|
||||
case DiscIO::IVolume::COUNTRY_JAPAN:
|
||||
case DiscIO::IVolume::COUNTRY_USA:
|
||||
indexOne = 0;
|
||||
break;
|
||||
default:
|
||||
indexOne = SConfig::GetInstance().m_InterfaceLanguage;
|
||||
}
|
||||
|
||||
switch (other.GetCountry())
|
||||
{
|
||||
case DiscIO::IVolume::COUNTRY_JAPAN:;
|
||||
case DiscIO::IVolume::COUNTRY_USA:indexOther = 0; break;
|
||||
default: indexOther = (int)SConfig::GetInstance().m_InterfaceLanguage;
|
||||
case DiscIO::IVolume::COUNTRY_JAPAN:
|
||||
case DiscIO::IVolume::COUNTRY_USA:
|
||||
indexOther = 0;
|
||||
break;
|
||||
default:
|
||||
indexOther = SConfig::GetInstance().m_InterfaceLanguage;
|
||||
}
|
||||
|
||||
switch(currentColumn)
|
||||
{
|
||||
case CGameListCtrl::COLUMN_TITLE: return strcasecmp(one.GetName(indexOne).c_str(), other.GetName(indexOther).c_str()) < 0;
|
||||
case CGameListCtrl::COLUMN_TITLE:
|
||||
return strcasecmp(one.GetName(indexOne).c_str(),
|
||||
other.GetName(indexOther).c_str()) < 0;
|
||||
case CGameListCtrl::COLUMN_NOTES:
|
||||
{
|
||||
// On Gamecube we show the company string, while it's empty on other platforms, so we show the description instead
|
||||
std::string cmp1 = (one.GetPlatform() == GameListItem::GAMECUBE_DISC) ? one.GetCompany() : one.GetDescription(indexOne);
|
||||
std::string cmp2 = (other.GetPlatform() == GameListItem::GAMECUBE_DISC) ? other.GetCompany() : other.GetDescription(indexOther);
|
||||
// On Gamecube we show the company string, while it's empty on
|
||||
// other platforms, so we show the description instead
|
||||
std::string cmp1 =
|
||||
(one.GetPlatform() == GameListItem::GAMECUBE_DISC) ?
|
||||
one.GetCompany() : one.GetDescription(indexOne);
|
||||
std::string cmp2 =
|
||||
(other.GetPlatform() == GameListItem::GAMECUBE_DISC) ?
|
||||
other.GetCompany() : other.GetDescription(indexOther);
|
||||
return strcasecmp(cmp1.c_str(), cmp2.c_str()) < 0;
|
||||
}
|
||||
case CGameListCtrl::COLUMN_COUNTRY: return (one.GetCountry() < other.GetCountry());
|
||||
case CGameListCtrl::COLUMN_SIZE: return (one.GetFileSize() < other.GetFileSize());
|
||||
case CGameListCtrl::COLUMN_PLATFORM: return (one.GetPlatform() < other.GetPlatform());
|
||||
default: return strcasecmp(one.GetName(indexOne).c_str(), other.GetName(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_PLATFORM:
|
||||
return (one.GetPlatform() < other.GetPlatform());
|
||||
default:
|
||||
return strcasecmp(one.GetName(indexOne).c_str(),
|
||||
other.GetName(indexOther).c_str()) < 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -118,7 +136,8 @@ BEGIN_EVENT_TABLE(CGameListCtrl, wxListCtrl)
|
|||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
CGameListCtrl::CGameListCtrl(wxWindow* parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, long style)
|
||||
CGameListCtrl::CGameListCtrl(wxWindow* parent, const wxWindowID id, const
|
||||
wxPoint& pos, const wxSize& size, long style)
|
||||
: wxListCtrl(parent, id, pos, size, style), toolTip(0)
|
||||
{
|
||||
}
|
||||
|
@ -183,14 +202,15 @@ void CGameListCtrl::BrowseForDirectory()
|
|||
wxGetHomeDir(&dirHome);
|
||||
|
||||
// browse
|
||||
wxDirDialog dialog(this, _("Browse for a directory to add"), dirHome, wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST);
|
||||
wxDirDialog dialog(this, _("Browse for a directory to add"), dirHome,
|
||||
wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST);
|
||||
|
||||
if (dialog.ShowModal() == wxID_OK)
|
||||
{
|
||||
std::string sPath(dialog.GetPath().mb_str());
|
||||
std::vector<std::string>::iterator itResult = std::find(
|
||||
SConfig::GetInstance().m_ISOFolder.begin(), SConfig::GetInstance().m_ISOFolder.end(), sPath
|
||||
);
|
||||
SConfig::GetInstance().m_ISOFolder.begin(),
|
||||
SConfig::GetInstance().m_ISOFolder.end(), sPath);
|
||||
|
||||
if (itResult == SConfig::GetInstance().m_ISOFolder.end())
|
||||
{
|
||||
|
@ -234,8 +254,9 @@ void CGameListCtrl::Update()
|
|||
InsertColumn(COLUMN_BANNER, _("Banner"));
|
||||
InsertColumn(COLUMN_TITLE, _("Title"));
|
||||
|
||||
// Instead of showing the notes + the company, which is unknown with wii titles
|
||||
// We show in the same column : company for GC games and description for wii/wad games
|
||||
// Instead of showing the notes + the company, which is unknown with
|
||||
// wii titles We show in the same column : company for GC games and
|
||||
// description for wii/wad games
|
||||
InsertColumn(COLUMN_NOTES, _("Notes"));
|
||||
InsertColumn(COLUMN_COUNTRY, _(""));
|
||||
InsertColumn(COLUMN_SIZE, _("Size"));
|
||||
|
@ -268,8 +289,9 @@ void CGameListCtrl::Update()
|
|||
else
|
||||
{
|
||||
wxString errorString;
|
||||
// We just check for one hide setting to be enabled, as we may only have GC games
|
||||
// for example, and hide them, so we should show the second message instead
|
||||
// We just check for one hide setting to be enabled, as we may only
|
||||
// have GC games for example, and hide them, so we should show the
|
||||
// second message instead
|
||||
if ((SConfig::GetInstance().m_ListGC &&
|
||||
SConfig::GetInstance().m_ListWii &&
|
||||
SConfig::GetInstance().m_ListWad) &&
|
||||
|
@ -277,11 +299,13 @@ void CGameListCtrl::Update()
|
|||
SConfig::GetInstance().m_ListUsa &&
|
||||
SConfig::GetInstance().m_ListPal))
|
||||
{
|
||||
errorString = _("Dolphin could not find any GC/Wii ISOs. Doubleclick here to browse for files...");
|
||||
errorString = wxT("Dolphin could not find any GC/Wii ISOs. ")
|
||||
wxT("Doubleclick here to browse for files...");
|
||||
}
|
||||
else
|
||||
{
|
||||
errorString = _("Dolphin is currently set to hide all games. Doubleclick here to show all games...");
|
||||
errorString = wxT("Dolphin is currently set to hide all games. ")
|
||||
wxT("Doubleclick here to show all games...");
|
||||
}
|
||||
InsertColumn(0, _("No ISOs or WADS found"));
|
||||
long index = InsertItem(0, errorString);
|
||||
|
@ -342,7 +366,8 @@ void CGameListCtrl::OnPaintDrawImages(wxPaintEvent& event)
|
|||
{
|
||||
// Retrieve the topmost shown item and get drawing offsets
|
||||
long top = GetTopItem();
|
||||
int flagOffset = GetColumnWidth(0) + GetColumnWidth(1) + GetColumnWidth(2) + GetColumnWidth(3);
|
||||
int flagOffset = GetColumnWidth(0) + GetColumnWidth(1) +
|
||||
GetColumnWidth(2) + GetColumnWidth(3);
|
||||
int stateOffset = flagOffset + GetColumnWidth(4) + GetColumnWidth(5);
|
||||
|
||||
// Only redraw shown lines
|
||||
|
@ -353,12 +378,16 @@ void CGameListCtrl::OnPaintDrawImages(wxPaintEvent& event)
|
|||
int itemY = itemRect.GetTop();
|
||||
const GameListItem& rISOFile = m_ISOFiles[GetItemData(i)];
|
||||
|
||||
m_imageListSmall->Draw(m_PlatformImageIndex[rISOFile.GetPlatform()], dc, itemRect.GetX()+3, itemY);
|
||||
m_imageListSmall->Draw(m_FlagImageIndex[rISOFile.GetCountry()], dc, flagOffset, itemY);
|
||||
m_imageListSmall->Draw(m_PlatformImageIndex[rISOFile.GetPlatform()],
|
||||
dc, itemRect.GetX()+3, itemY);
|
||||
m_imageListSmall->Draw(m_FlagImageIndex[rISOFile.GetCountry()],
|
||||
dc, flagOffset, itemY);
|
||||
|
||||
ini.Load((std::string(File::GetUserPath(D_GAMECONFIG_IDX)) + (rISOFile.GetUniqueID()) + ".ini").c_str());
|
||||
ini.Load((std::string(File::GetUserPath(D_GAMECONFIG_IDX)) +
|
||||
(rISOFile.GetUniqueID()) + ".ini").c_str());
|
||||
ini.Get("EmuState", "EmulationStateId", &nState);
|
||||
m_imageListSmall->Draw(m_EmuStateImageIndex[nState], dc, stateOffset, itemY);
|
||||
m_imageListSmall->Draw(m_EmuStateImageIndex[nState],
|
||||
dc, stateOffset, itemY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -382,7 +411,8 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
|
|||
|
||||
// Insert a first row with the platform image, that will be used as the Index
|
||||
#ifndef _WIN32
|
||||
long ItemIndex = InsertItem(_Index, wxEmptyString, m_PlatformImageIndex[rISOFile.GetPlatform()]);
|
||||
long ItemIndex = InsertItem(_Index, wxEmptyString,
|
||||
m_PlatformImageIndex[rISOFile.GetPlatform()]);
|
||||
#else
|
||||
long ItemIndex = InsertItem(_Index, wxEmptyString, -1);
|
||||
#endif
|
||||
|
@ -408,9 +438,11 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
|
|||
case DiscIO::IVolume::COUNTRY_JAPAN:
|
||||
{
|
||||
wxString name = wxString(rISOFile.GetName(0).c_str(), SJISConv);
|
||||
m_gameList.append(StringFromFormat("%s (J)\n", (const char*)name.c_str()));
|
||||
m_gameList.append(StringFromFormat("%s (J)\n", name.c_str()));
|
||||
SetItem(_Index, COLUMN_TITLE, name, -1);
|
||||
SetItem(_Index, COLUMN_NOTES, wxString(company.size() ? company.c_str() : rISOFile.GetDescription(0).c_str(), SJISConv), -1);
|
||||
SetItem(_Index, COLUMN_NOTES, wxString(company.size() ?
|
||||
company.c_str() : rISOFile.GetDescription(0).c_str(),
|
||||
SJISConv), -1);
|
||||
}
|
||||
break;
|
||||
case DiscIO::IVolume::COUNTRY_USA:
|
||||
|
@ -418,28 +450,38 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
|
|||
SetItem(_Index, COLUMN_TITLE,
|
||||
wxString::From8BitData(rISOFile.GetName(0).c_str()), -1);
|
||||
SetItem(_Index, COLUMN_NOTES,
|
||||
wxString::From8BitData(company.size() ? company.c_str() : rISOFile.GetDescription(0).c_str()), -1);
|
||||
wxString::From8BitData(company.size() ?
|
||||
company.c_str() : rISOFile.GetDescription(0).c_str()), -1);
|
||||
break;
|
||||
default:
|
||||
m_gameList.append(StringFromFormat("%s (E)\n", rISOFile.GetName((int)SConfig::GetInstance().m_InterfaceLanguage).c_str()));
|
||||
m_gameList.append(StringFromFormat("%s (E)\n",
|
||||
rISOFile.GetName(SConfig::GetInstance().m_InterfaceLanguage).c_str()));
|
||||
SetItem(_Index, COLUMN_TITLE,
|
||||
wxString::From8BitData(rISOFile.GetName((int)SConfig::GetInstance().m_InterfaceLanguage).c_str()), -1);
|
||||
SetItem(_Index, COLUMN_NOTES, wxString::From8BitData(
|
||||
company.size() ? company.c_str() : rISOFile.GetDescription((int)SConfig::GetInstance().m_InterfaceLanguage).c_str()), -1);
|
||||
wxString::From8BitData(
|
||||
rISOFile.GetName(SConfig::GetInstance().m_InterfaceLanguage).c_str()),
|
||||
-1);
|
||||
SetItem(_Index, COLUMN_NOTES,
|
||||
wxString::From8BitData(company.size() ?
|
||||
company.c_str() :
|
||||
rISOFile.GetDescription(SConfig::GetInstance().m_InterfaceLanguage).c_str()),
|
||||
-1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else // It's a Wad file
|
||||
{
|
||||
m_gameList.append(StringFromFormat("%s (WAD)\n", rISOFile.GetName(0).c_str()));
|
||||
SetItem(_Index, COLUMN_TITLE, wxString(rISOFile.GetName(0).c_str(), SJISConv), -1);
|
||||
SetItem(_Index, COLUMN_NOTES, wxString(rISOFile.GetDescription(0).c_str(), SJISConv), -1);
|
||||
SetItem(_Index, COLUMN_TITLE,
|
||||
wxString(rISOFile.GetName(0).c_str(), SJISConv), -1);
|
||||
SetItem(_Index, COLUMN_NOTES,
|
||||
wxString(rISOFile.GetDescription(0).c_str(), SJISConv), -1);
|
||||
}
|
||||
|
||||
#ifndef _WIN32
|
||||
// Load the INI file for columns that read from it
|
||||
IniFile ini;
|
||||
ini.Load((std::string(File::GetUserPath(D_GAMECONFIG_IDX)) + (rISOFile.GetUniqueID()) + ".ini").c_str());
|
||||
ini.Load((std::string(File::GetUserPath(D_GAMECONFIG_IDX)) +
|
||||
(rISOFile.GetUniqueID()) + ".ini").c_str());
|
||||
|
||||
// Emulation status
|
||||
int nState;
|
||||
|
@ -476,7 +518,10 @@ void CGameListCtrl::SetBackgroundColor()
|
|||
{
|
||||
for(long i = 0; i < GetItemCount(); i++)
|
||||
{
|
||||
wxColour color = (i & 1) ? blend50(wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT), wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)) : wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
|
||||
wxColour color = (i & 1) ?
|
||||
blend50(wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT),
|
||||
wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)) :
|
||||
wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
|
||||
CGameListCtrl::SetItemBackgroundColour(i, color);
|
||||
}
|
||||
}
|
||||
|
@ -501,14 +546,16 @@ void CGameListCtrl::ScanForISOs()
|
|||
for (u32 k = 0; k < Directories.size(); k++)
|
||||
{
|
||||
NormalizeDirSep(&Directories.at(k));
|
||||
if (strcmp(Directories.at(k).c_str(), FST_Temp.children.at(j).physicalName.c_str()) == 0)
|
||||
if (strcmp(Directories.at(k).c_str(),
|
||||
FST_Temp.children.at(j).physicalName.c_str()) == 0)
|
||||
{
|
||||
duplicate = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!duplicate)
|
||||
Directories.push_back(FST_Temp.children.at(j).physicalName.c_str());
|
||||
Directories.push_back(
|
||||
FST_Temp.children.at(j).physicalName.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -536,7 +583,6 @@ void CGameListCtrl::ScanForISOs()
|
|||
(int)rFilenames.size(), // range
|
||||
this, // parent
|
||||
wxPD_APP_MODAL |
|
||||
// wxPD_AUTO_HIDE | -- try this as well
|
||||
wxPD_ELAPSED_TIME |
|
||||
wxPD_ESTIMATED_TIME |
|
||||
wxPD_REMAINING_TIME |
|
||||
|
@ -559,9 +605,7 @@ void CGameListCtrl::ScanForISOs()
|
|||
// Update with the progress (i) and the message (msg)
|
||||
bool Cont = dialog.Update(i, msg);
|
||||
if (!Cont)
|
||||
{
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
GameListItem ISOFile(rFilenames[i]);
|
||||
if (ISOFile.IsValid())
|
||||
|
@ -615,7 +659,8 @@ void CGameListCtrl::ScanForISOs()
|
|||
break;
|
||||
}
|
||||
|
||||
if (list) m_ISOFiles.push_back(ISOFile);
|
||||
if (list)
|
||||
m_ISOFiles.push_back(ISOFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -628,7 +673,8 @@ void CGameListCtrl::ScanForISOs()
|
|||
for (u32 i = 0; i < drives.size() && i < 24; i++)
|
||||
{
|
||||
Drive[i] = new GameListItem(drives[i].c_str());
|
||||
if (Drive[i]->IsValid()) m_ISOFiles.push_back(*Drive[i]);
|
||||
if (Drive[i]->IsValid())
|
||||
m_ISOFiles.push_back(*Drive[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -649,9 +695,9 @@ const GameListItem *CGameListCtrl::GetISO(int index) const
|
|||
CGameListCtrl *caller;
|
||||
int wxCALLBACK wxListCompare(long item1, long item2, long sortData)
|
||||
{
|
||||
//return 1 if item1 > item2
|
||||
//return -1 if item1 < item2
|
||||
//0 for identity
|
||||
// return 1 if item1 > item2
|
||||
// return -1 if item1 < item2
|
||||
// return 0 for identity
|
||||
const GameListItem *iso1 = caller->GetISO(item1);
|
||||
const GameListItem *iso2 = caller->GetISO(item2);
|
||||
|
||||
|
@ -668,52 +714,74 @@ int wxCALLBACK wxListCompare(long item1, long item2, long sortData)
|
|||
|
||||
switch (iso1->GetCountry())
|
||||
{
|
||||
case DiscIO::IVolume::COUNTRY_JAPAN:;
|
||||
case DiscIO::IVolume::COUNTRY_USA:indexOne = 0; break;
|
||||
default: indexOne = (int)SConfig::GetInstance().m_InterfaceLanguage;
|
||||
case DiscIO::IVolume::COUNTRY_JAPAN:
|
||||
case DiscIO::IVolume::COUNTRY_USA:
|
||||
indexOne = 0;
|
||||
break;
|
||||
default:
|
||||
indexOne = SConfig::GetInstance().m_InterfaceLanguage;
|
||||
}
|
||||
|
||||
switch (iso2->GetCountry())
|
||||
{
|
||||
case DiscIO::IVolume::COUNTRY_JAPAN:;
|
||||
case DiscIO::IVolume::COUNTRY_USA:indexOther = 0; break;
|
||||
default: indexOther = (int)SConfig::GetInstance().m_InterfaceLanguage;
|
||||
case DiscIO::IVolume::COUNTRY_JAPAN:
|
||||
case DiscIO::IVolume::COUNTRY_USA:
|
||||
indexOther = 0;
|
||||
break;
|
||||
default:
|
||||
indexOther = SConfig::GetInstance().m_InterfaceLanguage;
|
||||
}
|
||||
|
||||
switch(sortData)
|
||||
{
|
||||
case CGameListCtrl::COLUMN_TITLE:
|
||||
return strcasecmp(iso1->GetName(indexOne).c_str(),iso2->GetName(indexOther).c_str()) *t;
|
||||
return strcasecmp(iso1->GetName(indexOne).c_str(),
|
||||
iso2->GetName(indexOther).c_str()) * t;
|
||||
case CGameListCtrl::COLUMN_NOTES:
|
||||
{
|
||||
std::string cmp1 = (iso1->GetPlatform() == GameListItem::GAMECUBE_DISC) ? iso1->GetCompany() : iso1->GetDescription(indexOne);
|
||||
std::string cmp2 = (iso2->GetPlatform() == GameListItem::GAMECUBE_DISC) ? iso2->GetCompany() : iso2->GetDescription(indexOther);
|
||||
return strcasecmp(cmp1.c_str(), cmp2.c_str()) *t;
|
||||
std::string cmp1 =
|
||||
(iso1->GetPlatform() == GameListItem::GAMECUBE_DISC) ?
|
||||
iso1->GetCompany() : iso1->GetDescription(indexOne);
|
||||
std::string cmp2 =
|
||||
(iso2->GetPlatform() == GameListItem::GAMECUBE_DISC) ?
|
||||
iso2->GetCompany() : iso2->GetDescription(indexOther);
|
||||
return strcasecmp(cmp1.c_str(), cmp2.c_str()) * t;
|
||||
}
|
||||
case CGameListCtrl::COLUMN_COUNTRY:
|
||||
if(iso1->GetCountry() > iso2->GetCountry()) return 1 *t;
|
||||
if(iso1->GetCountry() < iso2->GetCountry()) return -1 *t;
|
||||
if(iso1->GetCountry() > iso2->GetCountry())
|
||||
return 1 * t;
|
||||
if(iso1->GetCountry() < iso2->GetCountry())
|
||||
return -1 * t;
|
||||
return 0;
|
||||
case CGameListCtrl::COLUMN_SIZE:
|
||||
if (iso1->GetFileSize() > iso2->GetFileSize()) return 1 *t;
|
||||
if (iso1->GetFileSize() < iso2->GetFileSize()) return -1 *t;
|
||||
if (iso1->GetFileSize() > iso2->GetFileSize())
|
||||
return 1 * t;
|
||||
if (iso1->GetFileSize() < iso2->GetFileSize())
|
||||
return -1 * t;
|
||||
return 0;
|
||||
case CGameListCtrl::COLUMN_PLATFORM:
|
||||
if(iso1->GetPlatform() > iso2->GetPlatform()) return 1 *t;
|
||||
if(iso1->GetPlatform() < iso2->GetPlatform()) return -1 *t;
|
||||
if(iso1->GetPlatform() > iso2->GetPlatform())
|
||||
return 1 * t;
|
||||
if(iso1->GetPlatform() < iso2->GetPlatform())
|
||||
return -1 * t;
|
||||
return 0;
|
||||
case CGameListCtrl::COLUMN_EMULATION_STATE:
|
||||
IniFile ini; int nState1 = 0, nState2 = 0;
|
||||
std::string GameIni1 = std::string(File::GetUserPath(D_GAMECONFIG_IDX)) + iso1->GetUniqueID() + ".ini";
|
||||
std::string GameIni2 = std::string(File::GetUserPath(D_GAMECONFIG_IDX)) + iso2->GetUniqueID() + ".ini";
|
||||
IniFile ini;
|
||||
int nState1 = 0, nState2 = 0;
|
||||
std::string GameIni1 = std::string(File::GetUserPath(D_GAMECONFIG_IDX)) +
|
||||
iso1->GetUniqueID() + ".ini";
|
||||
std::string GameIni2 = std::string(File::GetUserPath(D_GAMECONFIG_IDX)) +
|
||||
iso2->GetUniqueID() + ".ini";
|
||||
|
||||
ini.Load(GameIni1.c_str());
|
||||
ini.Get("EmuState", "EmulationStateId", &nState1);
|
||||
ini.Load(GameIni2.c_str());
|
||||
ini.Get("EmuState", "EmulationStateId", &nState2);
|
||||
|
||||
if(nState1 > nState2) return 1 *t;
|
||||
if(nState1 < nState2) return -1 *t;
|
||||
if(nState1 > nState2)
|
||||
return 1 * t;
|
||||
if(nState1 < nState2)
|
||||
return -1 * t;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -778,12 +846,14 @@ void CGameListCtrl::OnKeyPress(wxListEvent& event)
|
|||
sLoop++;
|
||||
|
||||
UnselectAll();
|
||||
SetItemState(i, wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED);
|
||||
SetItemState(i, wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED,
|
||||
wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED);
|
||||
EnsureVisible(i);
|
||||
break;
|
||||
}
|
||||
|
||||
// If we get past the last game in the list, we'll have to go back to the first one.
|
||||
// If we get past the last game in the list,
|
||||
// we'll have to go back to the first one.
|
||||
if (i+1 == (int)m_ISOFiles.size() && sLoop > 0 && Loop > 0)
|
||||
i = -1;
|
||||
}
|
||||
|
@ -794,7 +864,8 @@ void CGameListCtrl::OnKeyPress(wxListEvent& event)
|
|||
// This shows a little tooltip with the current Game's emulation state
|
||||
void CGameListCtrl::OnMouseMotion(wxMouseEvent& event)
|
||||
{
|
||||
int flags; long subitem = 0;
|
||||
int flags;
|
||||
long subitem = 0;
|
||||
long item = HitTest(event.GetPosition(), flags, &subitem);
|
||||
static int lastItem = -1;
|
||||
|
||||
|
@ -802,7 +873,8 @@ void CGameListCtrl::OnMouseMotion(wxMouseEvent& event)
|
|||
{
|
||||
if (subitem == COLUMN_EMULATION_STATE)
|
||||
{
|
||||
if (toolTip || lastItem == item || this != FindFocus()) {
|
||||
if (toolTip || lastItem == item || this != FindFocus())
|
||||
{
|
||||
event.Skip();
|
||||
return;
|
||||
}
|
||||
|
@ -810,10 +882,18 @@ void CGameListCtrl::OnMouseMotion(wxMouseEvent& event)
|
|||
const GameListItem& rISO = m_ISOFiles[GetItemData(item)];
|
||||
|
||||
IniFile ini;
|
||||
ini.Load((std::string(File::GetUserPath(D_GAMECONFIG_IDX)) + (rISO.GetUniqueID()) + ".ini").c_str());
|
||||
ini.Load((std::string(File::GetUserPath(D_GAMECONFIG_IDX)) +
|
||||
(rISO.GetUniqueID()) + ".ini").c_str());
|
||||
|
||||
// Emulation status
|
||||
std::string emuState[5] = {"Broken", "Intro", "In-Game", "Playable", "Perfect"}, issues;
|
||||
std::string emuState[5] = {
|
||||
"Broken",
|
||||
"Intro",
|
||||
"In-Game",
|
||||
"Playable",
|
||||
"Perfect"
|
||||
};
|
||||
std::string issues;
|
||||
|
||||
int nState;
|
||||
ini.Get("EmuState", "EmulationStateId", &nState);
|
||||
|
@ -830,14 +910,17 @@ void CGameListCtrl::OnMouseMotion(wxMouseEvent& event)
|
|||
if (nState > 0 && nState < 6)
|
||||
{
|
||||
char temp[2048];
|
||||
sprintf(temp, "^ %s%s%s", emuState[nState -1].c_str(), issues.size() > 0 ? " :\n" : "", issues.c_str());
|
||||
sprintf(temp, "^ %s%s%s", emuState[nState -1].c_str(),
|
||||
issues.size() > 0 ? " :\n" : "", issues.c_str());
|
||||
toolTip = new wxEmuStateTip(this, wxString(temp, *wxConvCurrent), &toolTip);
|
||||
}
|
||||
else
|
||||
toolTip = new wxEmuStateTip(this, wxT("Not Set"), &toolTip);
|
||||
|
||||
toolTip->SetBoundingRect(wxRect(mx - GetColumnWidth(subitem), my, GetColumnWidth(subitem), Rect.GetHeight()));
|
||||
toolTip->SetPosition(wxPoint(mx - GetColumnWidth(subitem), my - 5 + Rect.GetHeight()));
|
||||
toolTip->SetBoundingRect(wxRect(mx - GetColumnWidth(subitem),
|
||||
my, GetColumnWidth(subitem), Rect.GetHeight()));
|
||||
toolTip->SetPosition(wxPoint(mx - GetColumnWidth(subitem),
|
||||
my - 5 + Rect.GetHeight()));
|
||||
|
||||
lastItem = item;
|
||||
}
|
||||
|
@ -851,7 +934,8 @@ void CGameListCtrl::OnLeftClick(wxMouseEvent& event)
|
|||
// Focus the clicked item.
|
||||
int flags;
|
||||
long item = HitTest(event.GetPosition(), flags);
|
||||
if ((item != wxNOT_FOUND) && (GetSelectedItemCount() == 0) && (!event.ControlDown()) && (!event.ShiftDown()))
|
||||
if ((item != wxNOT_FOUND) && (GetSelectedItemCount() == 0) &&
|
||||
(!event.ControlDown()) && (!event.ShiftDown()))
|
||||
{
|
||||
SetItemState(item, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED );
|
||||
SetItemState(item, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED);
|
||||
|
@ -927,13 +1011,9 @@ void CGameListCtrl::OnRightClick(wxMouseEvent& event)
|
|||
const GameListItem * CGameListCtrl::GetSelectedISO()
|
||||
{
|
||||
if (m_ISOFiles.size() == 0)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
else if (GetSelectedItemCount() == 0)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
long item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
|
||||
|
@ -991,27 +1071,26 @@ void CGameListCtrl::OnExportSave(wxCommandEvent& WXUNUSED (event))
|
|||
}
|
||||
}
|
||||
|
||||
// =======================================================
|
||||
// Save this file as the default file
|
||||
// -------------
|
||||
void CGameListCtrl::OnSetDefaultGCM(wxCommandEvent& event)
|
||||
{
|
||||
const GameListItem *iso = GetSelectedISO();
|
||||
if (!iso) return;
|
||||
|
||||
if (event.IsChecked()) // Write the new default value and save it the ini file
|
||||
if (event.IsChecked())
|
||||
{
|
||||
SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDefaultGCM = iso->GetFileName();
|
||||
// Write the new default value and save it the ini file
|
||||
SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDefaultGCM =
|
||||
iso->GetFileName();
|
||||
SConfig::GetInstance().SaveSettings();
|
||||
}
|
||||
else // Othwerise blank the value and save it
|
||||
else
|
||||
{
|
||||
// Othwerise blank the value and save it
|
||||
SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDefaultGCM = "";
|
||||
SConfig::GetInstance().SaveSettings();
|
||||
}
|
||||
}
|
||||
// =============
|
||||
|
||||
|
||||
void CGameListCtrl::OnDeleteGCM(wxCommandEvent& WXUNUSED (event))
|
||||
{
|
||||
|
@ -1020,7 +1099,8 @@ void CGameListCtrl::OnDeleteGCM(wxCommandEvent& WXUNUSED (event))
|
|||
const GameListItem *iso = GetSelectedISO();
|
||||
if (!iso)
|
||||
return;
|
||||
if (wxMessageBox(_("Are you sure you want to delete this file?\nIt will be gone forever!"),
|
||||
if (wxMessageBox(wxT("Are you sure you want to delete this file?\n")
|
||||
wxT("It will be gone forever!"),
|
||||
wxMessageBoxCaptionStr, wxYES_NO | wxICON_EXCLAMATION) == wxYES)
|
||||
{
|
||||
File::Delete(iso->GetFileName().c_str());
|
||||
|
@ -1029,7 +1109,8 @@ void CGameListCtrl::OnDeleteGCM(wxCommandEvent& WXUNUSED (event))
|
|||
}
|
||||
else
|
||||
{
|
||||
if (wxMessageBox(_("Are you sure you want to delete these files?\nThey will be gone forever!"),
|
||||
if (wxMessageBox(wxT("Are you sure you want to delete these files?\n")
|
||||
wxT("They will be gone forever!"),
|
||||
wxMessageBoxCaptionStr, wxYES_NO | wxICON_EXCLAMATION) == wxYES)
|
||||
{
|
||||
int selected = GetSelectedItemCount();
|
||||
|
@ -1066,7 +1147,6 @@ void CGameListCtrl::OnInstallWAD(wxCommandEvent& WXUNUSED (event))
|
|||
1000, // range
|
||||
this, // parent
|
||||
wxPD_APP_MODAL |
|
||||
// wxPD_AUTO_HIDE | -- try this as well
|
||||
wxPD_ELAPSED_TIME |
|
||||
wxPD_ESTIMATED_TIME |
|
||||
wxPD_REMAINING_TIME |
|
||||
|
@ -1081,7 +1161,9 @@ void CGameListCtrl::OnInstallWAD(wxCommandEvent& WXUNUSED (event))
|
|||
void CGameListCtrl::MultiCompressCB(const char* text, float percent, void* arg)
|
||||
{
|
||||
percent = (((float)m_currentItem) + percent) / (float)m_numberItem;
|
||||
wxString textString(StringFromFormat("%s (%i/%i) - %s", m_currentFilename.c_str(), (int)m_currentItem+1, (int)m_numberItem, text).c_str(), *wxConvCurrent);
|
||||
wxString textString(StringFromFormat("%s (%i/%i) - %s",
|
||||
m_currentFilename.c_str(), (int)m_currentItem+1,
|
||||
(int)m_numberItem, text).c_str(), *wxConvCurrent);
|
||||
|
||||
((wxProgressDialog*)arg)->Update((int)(percent*1000), textString);
|
||||
}
|
||||
|
@ -1101,16 +1183,17 @@ void CGameListCtrl::CompressSelection(bool _compress)
|
|||
wxString dirHome;
|
||||
wxGetHomeDir(&dirHome);
|
||||
|
||||
wxDirDialog browseDialog(this, _("Browse for output directory"), dirHome, wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST);
|
||||
wxDirDialog browseDialog(this, _("Browse for output directory"), dirHome,
|
||||
wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST);
|
||||
if (browseDialog.ShowModal() != wxID_OK)
|
||||
return;
|
||||
|
||||
wxProgressDialog progressDialog(_compress ? _("Compressing ISO") : _("Decompressing ISO"),
|
||||
wxProgressDialog progressDialog(_compress ?
|
||||
_("Compressing ISO") : _("Decompressing ISO"),
|
||||
_("Working..."),
|
||||
1000, // range
|
||||
this, // parent
|
||||
wxPD_APP_MODAL |
|
||||
// wxPD_AUTO_HIDE | -- try this as well
|
||||
wxPD_ELAPSED_TIME |
|
||||
wxPD_ESTIMATED_TIME |
|
||||
wxPD_REMAINING_TIME |
|
||||
|
@ -1134,9 +1217,14 @@ void CGameListCtrl::CompressSelection(bool _compress)
|
|||
FileName.append(".gcz");
|
||||
|
||||
std::string OutputFileName;
|
||||
BuildCompleteFilename(OutputFileName, (const char *)browseDialog.GetPath().mb_str(wxConvUTF8), FileName);
|
||||
BuildCompleteFilename(OutputFileName,
|
||||
(const char *)browseDialog.GetPath().mb_str(wxConvUTF8),
|
||||
FileName);
|
||||
|
||||
DiscIO::CompressFileToBlob(iso->GetFileName().c_str(), OutputFileName.c_str(), (iso->GetPlatform() == GameListItem::WII_DISC) ? 1 : 0, 16384, &MultiCompressCB, &progressDialog);
|
||||
DiscIO::CompressFileToBlob(iso->GetFileName().c_str(),
|
||||
OutputFileName.c_str(),
|
||||
(iso->GetPlatform() == GameListItem::WII_DISC) ? 1 : 0,
|
||||
16384, &MultiCompressCB, &progressDialog);
|
||||
}
|
||||
else if (iso->IsCompressed() && !_compress)
|
||||
{
|
||||
|
@ -1144,18 +1232,17 @@ void CGameListCtrl::CompressSelection(bool _compress)
|
|||
SplitPath(iso->GetFileName(), NULL, &FileName, NULL);
|
||||
m_currentFilename = FileName;
|
||||
if (iso->GetPlatform() == GameListItem::WII_DISC)
|
||||
{
|
||||
FileName.append(".iso");
|
||||
}
|
||||
else
|
||||
{
|
||||
FileName.append(".gcm");
|
||||
}
|
||||
|
||||
std::string OutputFileName;
|
||||
BuildCompleteFilename(OutputFileName, (const char *)browseDialog.GetPath().mb_str(wxConvUTF8), FileName);
|
||||
BuildCompleteFilename(OutputFileName,
|
||||
(const char *)browseDialog.GetPath().mb_str(wxConvUTF8),
|
||||
FileName);
|
||||
|
||||
DiscIO::DecompressBlobToFile(iso->GetFileName().c_str(), OutputFileName.c_str(), &MultiCompressCB, &progressDialog);
|
||||
DiscIO::DecompressBlobToFile(iso->GetFileName().c_str(),
|
||||
OutputFileName.c_str(), &MultiCompressCB, &progressDialog);
|
||||
}
|
||||
m_currentItem++;
|
||||
}
|
||||
|
@ -1164,7 +1251,8 @@ void CGameListCtrl::CompressSelection(bool _compress)
|
|||
|
||||
void CGameListCtrl::CompressCB(const char* text, float percent, void* arg)
|
||||
{
|
||||
((wxProgressDialog*)arg)->Update((int)(percent*1000), wxString(text, *wxConvCurrent));
|
||||
((wxProgressDialog*)arg)->
|
||||
Update((int)(percent*1000), wxString(text, *wxConvCurrent));
|
||||
}
|
||||
|
||||
void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event))
|
||||
|
@ -1181,13 +1269,10 @@ void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event))
|
|||
if (iso->IsCompressed())
|
||||
{
|
||||
if (iso->GetPlatform() == GameListItem::WII_DISC)
|
||||
{
|
||||
Ext = wxT("*.iso");
|
||||
}
|
||||
else
|
||||
{
|
||||
Ext = wxT("*.gcm");
|
||||
}
|
||||
|
||||
path = wxFileSelector(
|
||||
_T("Save decompressed ISO"),
|
||||
wxEmptyString, wxString(FileName.c_str(), *wxConvCurrent), wxEmptyString,
|
||||
|
@ -1203,10 +1288,8 @@ void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event))
|
|||
this);
|
||||
|
||||
if (!path)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
path = wxFileSelector(
|
||||
|
@ -1222,17 +1305,15 @@ void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event))
|
|||
this);
|
||||
|
||||
if (!path)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
wxProgressDialog dialog(iso->IsCompressed() ? _T("Decompressing ISO") : _T("Compressing ISO"),
|
||||
wxProgressDialog dialog(iso->IsCompressed() ?
|
||||
_T("Decompressing ISO") : _T("Compressing ISO"),
|
||||
_T("Working..."),
|
||||
1000, // range
|
||||
this, // parent
|
||||
wxPD_APP_MODAL |
|
||||
// wxPD_AUTO_HIDE | -- try this as well
|
||||
wxPD_ELAPSED_TIME |
|
||||
wxPD_ESTIMATED_TIME |
|
||||
wxPD_REMAINING_TIME |
|
||||
|
@ -1243,9 +1324,13 @@ void CGameListCtrl::OnCompressGCM(wxCommandEvent& WXUNUSED (event))
|
|||
dialog.CenterOnParent();
|
||||
|
||||
if (iso->IsCompressed())
|
||||
DiscIO::DecompressBlobToFile(iso->GetFileName().c_str(), path.char_str(), &CompressCB, &dialog);
|
||||
DiscIO::DecompressBlobToFile(iso->GetFileName().c_str(),
|
||||
path.char_str(), &CompressCB, &dialog);
|
||||
else
|
||||
DiscIO::CompressFileToBlob(iso->GetFileName().c_str(), path.char_str(), (iso->GetPlatform() == GameListItem::WII_DISC) ? 1 : 0, 16384, &CompressCB, &dialog);
|
||||
DiscIO::CompressFileToBlob(iso->GetFileName().c_str(),
|
||||
path.char_str(),
|
||||
(iso->GetPlatform() == GameListItem::WII_DISC) ? 1 : 0,
|
||||
16384, &CompressCB, &dialog);
|
||||
|
||||
Update();
|
||||
}
|
||||
|
@ -1261,12 +1346,10 @@ void CGameListCtrl::OnSize(wxSizeEvent& event)
|
|||
|
||||
void CGameListCtrl::AutomaticColumnWidth()
|
||||
{
|
||||
wxRect rc(GetParent()->GetRect());
|
||||
wxRect rc(GetClientRect());
|
||||
|
||||
if (GetColumnCount() == 1)
|
||||
{
|
||||
SetColumnWidth(0, rc.GetWidth());
|
||||
}
|
||||
else if (GetColumnCount() > 4)
|
||||
{
|
||||
int resizable = rc.GetWidth() - (
|
||||
|
@ -1274,11 +1357,10 @@ void CGameListCtrl::AutomaticColumnWidth()
|
|||
+ GetColumnWidth(COLUMN_COUNTRY)
|
||||
+ GetColumnWidth(COLUMN_SIZE)
|
||||
+ GetColumnWidth(COLUMN_EMULATION_STATE)
|
||||
+ GetColumnWidth(COLUMN_PLATFORM)
|
||||
+ 5); // some pad to keep the horizontal scrollbar away :)
|
||||
+ GetColumnWidth(COLUMN_PLATFORM));
|
||||
|
||||
// We hide the Company column if the window is too small
|
||||
if (resizable / 2 > 200)
|
||||
// We hide the Notes column if the window is too small
|
||||
if (resizable > 400)
|
||||
{
|
||||
SetColumnWidth(COLUMN_TITLE, resizable / 2);
|
||||
SetColumnWidth(COLUMN_NOTES, resizable / 2);
|
||||
|
|
|
@ -46,6 +46,7 @@ BEGIN_EVENT_TABLE(CLogWindow, wxPanel)
|
|||
EVT_CHECKBOX(IDM_WRITEWINDOW, CLogWindow::OnOptionsCheck)
|
||||
EVT_CHECKLISTBOX(IDM_LOGCHECKS, CLogWindow::OnLogCheck)
|
||||
EVT_TIMER(IDTM_UPDATELOG, CLogWindow::OnLogTimer)
|
||||
EVT_SIZE(CLogWindow::OnSize)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
CLogWindow::CLogWindow(CFrame *parent, wxWindowID id, const wxPoint& pos,
|
||||
|
@ -170,14 +171,28 @@ void CLogWindow::OnClose(wxCloseEvent& event)
|
|||
event.Skip();
|
||||
}
|
||||
|
||||
void CLogWindow::OnSize(wxSizeEvent& event)
|
||||
{
|
||||
if (!Parent->g_pCodeWindow &&
|
||||
Parent->m_Mgr->GetPane(wxT("Pane 1")).IsShown())
|
||||
{
|
||||
x = Parent->m_Mgr->GetPane(wxT("Pane 1")).rect.GetWidth();
|
||||
y = Parent->m_Mgr->GetPane(wxT("Pane 1")).rect.GetHeight();
|
||||
winpos = Parent->m_Mgr->GetPane(wxT("Pane 1")).dock_direction;
|
||||
}
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void CLogWindow::SaveSettings()
|
||||
{
|
||||
IniFile ini;
|
||||
ini.Load(File::GetUserPath(F_LOGGERCONFIG_IDX));
|
||||
|
||||
if (!Parent->g_pCodeWindow)
|
||||
{
|
||||
ini.Set("LogWindow", "x", Parent->m_Mgr->GetPane(wxT("Pane 1")).rect.GetWidth());
|
||||
ini.Set("LogWindow", "y", Parent->m_Mgr->GetPane(wxT("Pane 1")).rect.GetHeight());
|
||||
ini.Set("LogWindow", "pos", Parent->m_Mgr->GetPane(wxT("Pane 1")).dock_direction);
|
||||
ini.Set("LogWindow", "x", x);
|
||||
ini.Set("LogWindow", "y", y);
|
||||
ini.Set("LogWindow", "pos", winpos);
|
||||
}
|
||||
ini.Set("Options", "Verbosity", m_verbosity->GetSelection() + 1);
|
||||
ini.Set("Options", "Font", m_FontChoice->GetSelection());
|
||||
|
|
|
@ -97,6 +97,7 @@ private:
|
|||
void CreateGUIControls();
|
||||
void PopulateRight(); void UnPopulateRight();
|
||||
void OnClose(wxCloseEvent& event);
|
||||
void OnSize(wxSizeEvent& event);
|
||||
void OnSubmit(wxCommandEvent& event);
|
||||
void OnOptionsCheck(wxCommandEvent& event);
|
||||
void OnLogCheck(wxCommandEvent& event);
|
||||
|
|
Loading…
Reference in New Issue