From 1e0b0bf84dd98be78182a06ef7819e4100c54994 Mon Sep 17 00:00:00 2001 From: LPFaint99 Date: Fri, 10 Dec 2010 07:11:05 +0000 Subject: [PATCH] Fixes/Cleanup for the MemcardManager. Notable Changes: Fixes right click menu in linux. Fixes Issue 2412. sram.raw file is no longer required to format a memcard Update to use new ini sections, automatically remove default settings from ini file enable pages setting no longer requires memcard manager to be reopened to take effect it is no longer possible to switch to a negative page number git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6546 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Core/Src/HW/Sram.h | 1 + Source/Core/DolphinWX/Src/MemcardManager.cpp | 341 ++++++------------ Source/Core/DolphinWX/Src/MemcardManager.h | 37 +- .../DolphinWX/Src/MemoryCards/GCMemcard.cpp | 13 +- 4 files changed, 143 insertions(+), 249 deletions(-) diff --git a/Source/Core/Core/Src/HW/Sram.h b/Source/Core/Core/Src/HW/Sram.h index 0d8a480cbd..c01b319f33 100644 --- a/Source/Core/Core/Src/HW/Sram.h +++ b/Source/Core/Core/Src/HW/Sram.h @@ -76,4 +76,5 @@ union SRAM }; }; #pragma pack(pop) +extern SRAM sram_dump; #endif diff --git a/Source/Core/DolphinWX/Src/MemcardManager.cpp b/Source/Core/DolphinWX/Src/MemcardManager.cpp index f19d01a66b..b70cfbd4bc 100644 --- a/Source/Core/DolphinWX/Src/MemcardManager.cpp +++ b/Source/Core/DolphinWX/Src/MemcardManager.cpp @@ -18,9 +18,7 @@ #include "MemcardManager.h" #include "Common.h" #include "wx/mstream.h" -#include "WxUtils.h" -#define DEFAULTS wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator #define ARROWS slot ? _T("") : ARROW[slot], slot ? ARROW[slot] : _T("") const u8 hdr[] = { @@ -108,18 +106,17 @@ CMemcardManager::CMemcardManager(wxWindow* parent, wxWindowID id, const wxString { memoryCard[SLOT_A]=NULL; memoryCard[SLOT_B]=NULL; - if (MemcardManagerIni.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX))) + + if (!LoadSettings()) { - MemcardManagerIni.Get("MemcardManager", "Items per page", &itemsPerPage, 16); - MemcardManagerIni.Get("MemcardManager", "DefaultMemcardA", &(DefaultMemcard[SLOT_A]), "."); - MemcardManagerIni.Get("MemcardManager", "DefaultMemcardB", &(DefaultMemcard[SLOT_B]), "."); - MemcardManagerIni.Get("MemcardManager", "DefaultIOFolder", &DefaultIOPath, "/Users/GC"); + itemsPerPage = 16; + mcmSettings.usePages = true; + for (int i = 0; i < NUMBER_OF_COLUMN; i++) + { + mcmSettings.column[i] = (i <= COLUMN_FIRSTBLOCK)? true:false; + } } - else itemsPerPage = 16; maxPages = (128 / itemsPerPage) - 1; -#ifdef MCM_DEBUG_FRAME - MemcardManagerDebug = NULL; -#endif CreateGUIControls(); } @@ -135,80 +132,55 @@ CMemcardManager::~CMemcardManager() delete memoryCard[SLOT_B]; memoryCard[SLOT_B] = NULL; } -#ifdef MCM_DEBUG_FRAME - if (MemcardManagerDebug) - { - MemcardManagerDebug->Destroy(); - delete MemcardManagerDebug; - MemcardManagerDebug = NULL; - } -#endif - MemcardManagerIni.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); - MemcardManagerIni.Set("MemcardManager", "Items per page", itemsPerPage); - - if (!DefaultMemcard[SLOT_A].empty() && (strcmp(DefaultMemcard[SLOT_A].c_str(), "."))) - MemcardManagerIni.Set("MemcardManager", "DefaultMemcardA", DefaultMemcard[SLOT_A]); - else - MemcardManagerIni.DeleteKey("MemcardManager", "DefaultMemcardA"); - if (!DefaultMemcard[SLOT_B].empty() && (strcmp(DefaultMemcard[SLOT_B].c_str(), "."))) - MemcardManagerIni.Set("MemcardManager", "DefaultMemcardB", DefaultMemcard[SLOT_B]); - else - MemcardManagerIni.DeleteKey("MemcardManager", "DefaultMemcardB"); - MemcardManagerIni.Save(File::GetUserPath(F_DOLPHINCONFIG_IDX)); + SaveSettings(); } -CMemcardManager::CMemcardListCtrl::CMemcardListCtrl(wxWindow* parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, long style) - : wxListCtrl(parent, id, pos, size, style) +bool CMemcardManager::LoadSettings() { if (MemcardManagerIni.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX))) { - MemcardManagerIni.Get("MemcardManager", "Use Pages", &usePages, true); - MemcardManagerIni.Get("MemcardManager", "cBanner", &column[COLUMN_BANNER], true); - MemcardManagerIni.Get("MemcardManager", "cTitle", &column[COLUMN_TITLE], true); - MemcardManagerIni.Get("MemcardManager", "cComment", &column[COLUMN_COMMENT], true); - MemcardManagerIni.Get("MemcardManager", "cIcon", &column[COLUMN_ICON], true); - MemcardManagerIni.Get("MemcardManager", "cBlocks", &column[COLUMN_BLOCKS], true); - MemcardManagerIni.Get("MemcardManager", "cFirst Block", &column[COLUMN_FIRSTBLOCK], true); -#ifdef DEBUG_MCM - MemcardManagerIni.Get("MemcardManager", "cDebug", &column[NUMBER_OF_COLUMN], false); -#else - column[NUMBER_OF_COLUMN] = false; -#endif + iniMemcardSection = MemcardManagerIni.GetOrCreateSection("MemcardManager"); + iniMemcardSection->Get("Items per page", &itemsPerPage, 16); + iniMemcardSection->Get("DefaultMemcardA", &(DefaultMemcard[SLOT_A]), ""); + iniMemcardSection->Get("DefaultMemcardB", &(DefaultMemcard[SLOT_B]), ""); + iniMemcardSection->Get("DefaultIOFolder", &DefaultIOPath, "/Users/GC"); + + iniMemcardSection->Get("Use Pages", &mcmSettings.usePages, true); + iniMemcardSection->Get("cBanner", &mcmSettings.column[COLUMN_BANNER], true); + iniMemcardSection->Get("cTitle", &mcmSettings.column[COLUMN_TITLE], true); + iniMemcardSection->Get("cComment", &mcmSettings.column[COLUMN_COMMENT], true); + iniMemcardSection->Get("cIcon", &mcmSettings.column[COLUMN_ICON], true); + iniMemcardSection->Get("cBlocks", &mcmSettings.column[COLUMN_BLOCKS], true); + iniMemcardSection->Get("cFirst Block", &mcmSettings.column[COLUMN_FIRSTBLOCK], true); + + mcmSettings.column[NUMBER_OF_COLUMN] = false; + for(int i = COLUMN_GAMECODE; i < NUMBER_OF_COLUMN; i++) { - column[i] = column[NUMBER_OF_COLUMN]; + mcmSettings.column[i] = mcmSettings.column[NUMBER_OF_COLUMN]; } + return true; } - else - { - usePages = true; - for (int i = 0; i < NUMBER_OF_COLUMN; i++) - { - if ( i > COLUMN_FIRSTBLOCK) column[i] = false; - else column[i] = true; - } - } - twoCardsLoaded = false; - prevPage = false; - nextPage = false; - + return false; } -CMemcardManager::CMemcardListCtrl::~CMemcardListCtrl() +bool CMemcardManager::SaveSettings() { MemcardManagerIni.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX)); + iniMemcardSection = MemcardManagerIni.GetOrCreateSection("MemcardManager"); + iniMemcardSection->Set("Items per page", itemsPerPage, 16); + iniMemcardSection->Set("DefaultMemcardA", DefaultMemcard[SLOT_A], ""); + iniMemcardSection->Set("DefaultMemcardB", DefaultMemcard[SLOT_B], ""); - MemcardManagerIni.Set("MemcardManager", "Use Pages", usePages); - MemcardManagerIni.Set("MemcardManager", "cBanner", column[COLUMN_BANNER]); - MemcardManagerIni.Set("MemcardManager", "cTitle", column[COLUMN_TITLE]); - MemcardManagerIni.Set("MemcardManager", "cComment", column[COLUMN_COMMENT]); - MemcardManagerIni.Set("MemcardManager", "cIcon", column[COLUMN_ICON]); - MemcardManagerIni.Set("MemcardManager", "cBlocks", column[COLUMN_BLOCKS]); - MemcardManagerIni.Set("MemcardManager", "cFirst Block", column[COLUMN_FIRSTBLOCK]); -#ifdef DEBUG_MCM - MemcardManagerIni.Set("MemcardManager", "cDebug", column[NUMBER_OF_COLUMN]); -#endif - MemcardManagerIni.Save(File::GetUserPath(F_DOLPHINCONFIG_IDX)); + iniMemcardSection->Set("Use Pages", mcmSettings.usePages, true); + iniMemcardSection->Set("cBanner", mcmSettings.column[COLUMN_BANNER], true); + iniMemcardSection->Set("cTitle", mcmSettings.column[COLUMN_TITLE], true); + iniMemcardSection->Set("cComment", mcmSettings.column[COLUMN_COMMENT], true); + iniMemcardSection->Set("cIcon", mcmSettings.column[COLUMN_ICON], true); + iniMemcardSection->Set("cBlocks", mcmSettings.column[COLUMN_BLOCKS], true); + iniMemcardSection->Set("cFirst Block", mcmSettings.column[COLUMN_FIRSTBLOCK], true); + + return MemcardManagerIni.Save(File::GetUserPath(F_DOLPHINCONFIG_IDX)); } void CMemcardManager::CreateGUIControls() @@ -217,22 +189,22 @@ void CMemcardManager::CreateGUIControls() const wxChar* ARROW[2] = {_T("<-"), _T("->")}; - m_ConvertToGci = new wxButton(this, ID_CONVERTTOGCI, wxT("Convert to GCI"), DEFAULTS); + m_ConvertToGci = new wxButton(this, ID_CONVERTTOGCI, wxT("Convert to GCI")); for (int slot = SLOT_A; slot < SLOT_B + 1; slot++) { m_CopyFrom[slot] = new wxButton(this, ID_COPYFROM_A + slot, - wxString::Format(wxT("%1$sCopy%1$s"), ARROW[slot ? 0 : 1]), DEFAULTS); + wxString::Format(wxT("%1$sCopy%1$s"), ARROW[slot ? 0 : 1])); m_SaveImport[slot] = new wxButton(this, ID_SAVEIMPORT_A + slot, - wxString::Format(wxT("%sImport GCI%s"), ARROWS), DEFAULTS); + wxString::Format(wxT("%sImport GCI%s"), ARROWS)); m_SaveExport[slot] = new wxButton(this, ID_SAVEEXPORT_A + slot, - wxString::Format(wxT("%sExport GCI%s"), ARROWS), DEFAULTS); + wxString::Format(wxT("%sExport GCI%s"), ARROWS)); m_Delete[slot] = new wxButton(this, ID_DELETE_A + slot, - wxString::Format(wxT("%sDelete%s"), ARROWS), DEFAULTS); + wxString::Format(wxT("%sDelete%s"), ARROWS)); - m_PrevPage[slot] = new wxButton(this, ID_PREVPAGE_A + slot, wxT("Prev Page"), DEFAULTS); - m_NextPage[slot] = new wxButton(this, ID_NEXTPAGE_A + slot, wxT("Next Page"), DEFAULTS); + m_PrevPage[slot] = new wxButton(this, ID_PREVPAGE_A + slot, wxT("Prev Page")); + m_NextPage[slot] = new wxButton(this, ID_NEXTPAGE_A + slot, wxT("Next Page")); t_Status[slot] = new wxStaticText(this, 0, wxEmptyString, wxDefaultPosition,wxDefaultSize, 0, wxEmptyString); @@ -247,7 +219,7 @@ void CMemcardManager::CreateGUIControls() wxT("Gamecube Memory Cards (*.raw,*.gcp)|*.raw;*.gcp"), wxDefaultPosition, wxDefaultSize, wxFLP_USE_TEXTCTRL|wxFLP_OPEN); m_MemcardList[slot] = new CMemcardListCtrl(this, ID_MEMCARDLIST_A + slot, wxDefaultPosition, wxSize(350,400), - wxLC_REPORT | wxSUNKEN_BORDER | wxLC_ALIGN_LEFT | wxLC_SINGLE_SEL); + wxLC_REPORT | wxSUNKEN_BORDER | wxLC_ALIGN_LEFT | wxLC_SINGLE_SEL, mcmSettings); m_MemcardList[slot]->AssignImageList(new wxImageList(96,32),wxIMAGE_LIST_SMALL); @@ -292,10 +264,10 @@ void CMemcardManager::CreateGUIControls() m_SaveImport[i]->Disable(); m_SaveExport[i]->Disable(); m_Delete[i]->Disable(); - if (strcmp(DefaultMemcard[i].c_str(), ".")) + if (DefaultMemcard[i].length()) { m_MemcardPath[i]->SetPath(wxString::From8BitData(DefaultMemcard[i].c_str())); - ChangePath(ID_MEMCARDPATH_A + i); + ChangePath(i); } } } @@ -307,56 +279,52 @@ void CMemcardManager::OnClose(wxCloseEvent& WXUNUSED (event)) void CMemcardManager::OnPathChange(wxFileDirPickerEvent& event) { - ChangePath(event.GetId()); + ChangePath(event.GetId() - ID_MEMCARDPATH_A); } -void CMemcardManager::ChangePath(int id) +void CMemcardManager::ChangePath(int slot) { - int slot = SLOT_B; - int slot2 = SLOT_A; - switch (id) + int slot2 = (slot == SLOT_A) ? SLOT_B : SLOT_A; + page[slot] = FIRSTPAGE; + if (mcmSettings.usePages && m_PrevPage[slot]->IsEnabled()) { - case ID_MEMCARDPATH_A: - slot = SLOT_A; - slot2 = SLOT_B; - case ID_MEMCARDPATH_B: - page[slot] = FIRSTPAGE; - if (m_MemcardList[slot]->usePages && m_PrevPage[slot]->IsEnabled()) - { - m_PrevPage[slot]->Disable(); - m_MemcardList[slot]->prevPage = false; - } - if (!strcasecmp(m_MemcardPath[slot2]->GetPath().mb_str(), m_MemcardPath[slot]->GetPath().mb_str())) - { - if(!m_MemcardPath[slot]->GetPath().IsEmpty()) + m_PrevPage[slot]->Disable(); + m_MemcardList[slot]->prevPage = false; + } + if (!strcasecmp(m_MemcardPath[slot2]->GetPath().mb_str(), m_MemcardPath[slot]->GetPath().mb_str())) + { + if(m_MemcardPath[slot]->GetPath().length()) PanicAlert("Memcard already opened"); - } - else if (ReloadMemcard(m_MemcardPath[slot]->GetPath().mb_str(), slot)) + } + else + { + if (m_MemcardPath[slot]->GetPath().length() && ReloadMemcard(m_MemcardPath[slot]->GetPath().mb_str(), slot)) { - m_MemcardList[slot2]->twoCardsLoaded = true; + mcmSettings.twoCardsLoaded = true; m_SaveImport[slot]->Enable(); m_SaveExport[slot]->Enable(); m_Delete[slot]->Enable(); - break; } - if (memoryCard[slot]) + else { - delete memoryCard[slot]; - memoryCard[slot] = NULL; + if (memoryCard[slot]) + { + delete memoryCard[slot]; + memoryCard[slot] = NULL; + } + mcmSettings.twoCardsLoaded = false; + m_MemcardPath[slot]->SetPath(wxEmptyString); + m_MemcardList[slot]->ClearAll(); + t_Status[slot]->SetLabel(wxEmptyString); + m_SaveImport[slot]->Disable(); + m_SaveExport[slot]->Disable(); + m_Delete[slot]->Disable(); + if (mcmSettings.usePages) + { + m_PrevPage[slot]->Disable(); + m_NextPage[slot]->Disable(); + } } - m_MemcardList[slot2]->twoCardsLoaded = false; - m_MemcardPath[slot]->SetPath(wxEmptyString); - m_MemcardList[slot]->ClearAll(); - t_Status[slot]->SetLabel(wxEmptyString); - m_SaveImport[slot]->Disable(); - m_SaveExport[slot]->Disable(); - m_Delete[slot]->Disable(); - if (m_MemcardList[slot]->usePages) - { - m_PrevPage[slot]->Disable(); - m_NextPage[slot]->Disable(); - } - break; } if (m_Delete[SLOT_A]->IsEnabled() && m_Delete[SLOT_B]->IsEnabled()) { @@ -412,39 +380,40 @@ void CMemcardManager::OnPageChange(wxCommandEvent& event) void CMemcardManager::OnMenuChange(wxCommandEvent& event) { - switch(event.GetId()) + int _id = event.GetId(); + switch(_id) { + case ID_MEMCARDPATH_A: + case ID_MEMCARDPATH_B: + DefaultMemcard[_id - ID_MEMCARDPATH_A] = m_MemcardPath[_id - ID_MEMCARDPATH_A]->GetPath().mb_str(); + return; case ID_USEPAGES: - m_MemcardList[SLOT_A]->usePages = !m_MemcardList[SLOT_A]->usePages; - m_MemcardList[SLOT_B]->usePages = !m_MemcardList[SLOT_B]->usePages; - if (!m_MemcardList[SLOT_A]->usePages) + mcmSettings.usePages = !mcmSettings.usePages; + if (!mcmSettings.usePages) { m_PrevPage[SLOT_A]->Disable(); m_PrevPage[SLOT_B]->Disable(); m_NextPage[SLOT_A]->Disable(); m_NextPage[SLOT_B]->Disable(); - page[SLOT_A] = page[SLOT_B] = FIRSTPAGE; + m_MemcardList[SLOT_A]->prevPage = + m_MemcardList[SLOT_B]->prevPage = false; + page[SLOT_A] = + page[SLOT_B] = FIRSTPAGE; } break; - case ID_MEMCARDPATH_A: - DefaultMemcard[SLOT_A] = m_MemcardPath[SLOT_A]->GetPath().mb_str(); - break; - case ID_MEMCARDPATH_B: - DefaultMemcard[SLOT_B] = m_MemcardPath[SLOT_B]->GetPath().mb_str(); - break; case NUMBER_OF_COLUMN: - for( int i = COLUMN_GAMECODE; i < NUMBER_OF_COLUMN; i++) + for (int i = COLUMN_GAMECODE; i <= NUMBER_OF_COLUMN; i++) { - m_MemcardList[SLOT_A]->column[i] = !m_MemcardList[SLOT_A]->column[i]; - m_MemcardList[SLOT_B]->column[i] = !m_MemcardList[SLOT_B]->column[i]; + mcmSettings.column[i] = !mcmSettings.column[i]; } + break; default: - m_MemcardList[SLOT_A]->column[event.GetId()] = !m_MemcardList[SLOT_A]->column[event.GetId()]; - m_MemcardList[SLOT_B]->column[event.GetId()] = !m_MemcardList[SLOT_B]->column[event.GetId()]; - if (memoryCard[SLOT_A]) ReloadMemcard(m_MemcardPath[SLOT_A]->GetPath().mb_str(), SLOT_A); - if (memoryCard[SLOT_B]) ReloadMemcard(m_MemcardPath[SLOT_B]->GetPath().mb_str(), SLOT_B); + mcmSettings.column[_id] = !mcmSettings.column[_id]; break; } + + if (memoryCard[SLOT_A]) ReloadMemcard(m_MemcardPath[SLOT_A]->GetPath().mb_str(), SLOT_A); + if (memoryCard[SLOT_B]) ReloadMemcard(m_MemcardPath[SLOT_B]->GetPath().mb_str(), SLOT_B); } bool CMemcardManager::CopyDeleteSwitch(u32 error, int slot) { @@ -668,19 +637,6 @@ bool CMemcardManager::ReloadMemcard(const char *fileName, int card) m_MemcardList[card]->InsertColumn(COLUMN_ICON, _T("Icon")); m_MemcardList[card]->InsertColumn(COLUMN_BLOCKS, _T("Blocks")); m_MemcardList[card]->InsertColumn(COLUMN_FIRSTBLOCK, _T("First Block")); -#ifdef DEBUG_MCM - m_MemcardList[card]->InsertColumn(COLUMN_GAMECODE, _T("GameCode")); - m_MemcardList[card]->InsertColumn(COLUMN_MAKERCODE, _T("MakerCode")); - m_MemcardList[card]->InsertColumn(COLUMN_BIFLAGS, _T("BIFLAGS")); - m_MemcardList[card]->InsertColumn(COLUMN_FILENAME, _T("FILENAME")); - m_MemcardList[card]->InsertColumn(COLUMN_MODTIME, _T("MODTIME")); - m_MemcardList[card]->InsertColumn(COLUMN_IMAGEADD, _T("IMAGEADD")); - m_MemcardList[card]->InsertColumn(COLUMN_ICONFMT, _T("ICONFMT")); - m_MemcardList[card]->InsertColumn(COLUMN_ANIMSPEED, _T("ANIMSPEED")); - m_MemcardList[card]->InsertColumn(COLUMN_PERMISSIONS, _T("PERMISSIONS")); - m_MemcardList[card]->InsertColumn(COLUMN_COPYCOUNTER, _T("COPYCOUNTER")); - m_MemcardList[card]->InsertColumn(COLUMN_COMMENTSADDRESS, _T("COMMENTSADDRESS")); -#endif wxImageList *list = m_MemcardList[card]->GetImageList(wxIMAGE_LIST_SMALL); list->RemoveAll(); @@ -736,9 +692,11 @@ bool CMemcardManager::ReloadMemcard(const char *fileName, int card) images[i*2+1] = list->Add(icon); } } - int pagesMax = 128; - if (m_MemcardList[card]->usePages) pagesMax = (page[card] + 1) * itemsPerPage; - for (j = page[card] * itemsPerPage;(j < nFiles) && (j < pagesMax); j++) + + int pagesMax = (mcmSettings.usePages) ? + (page[card] + 1) * itemsPerPage : 128; + + for (j = page[card] * itemsPerPage; (j < nFiles) && (j < pagesMax); j++) { char title[DENTRY_STRLEN]; char comment[DENTRY_STRLEN]; @@ -779,49 +737,9 @@ bool CMemcardManager::ReloadMemcard(const char *fileName, int card) m_MemcardList[card]->SetItemImage(index, images[j*2]); m_MemcardList[card]->SetItemColumnImage(index, COLUMN_ICON, images[j*2+1]); } -#ifdef DEBUG_MCM - char gC[5]; - if (!memoryCard[card]->DEntry_GameCode(j, gC)) gC[0]=0; - m_MemcardList[card]->SetItem(index, COLUMN_GAMECODE, wxString::FromAscii(gC)); - - char mC[3]; - if (!memoryCard[card]->DEntry_Markercode(j, mC)) mC[0]=0; - m_MemcardList[card]->SetItem(index, COLUMN_MAKERCODE, wxString::FromAscii(mC)); - - char bI[9]; - if (!memoryCard[card]->DEntry_BIFlags(j, bI)) bI[0]=0; - m_MemcardList[card]->SetItem(index, COLUMN_BIFLAGS, wxString::FromAscii(bI)); - - char fN[32]; - if (!memoryCard[card]->DEntry_FileName(j, fN)) fN[0]=0; - m_MemcardList[card]->SetItem(index, COLUMN_FILENAME, wxString::FromAscii(fN)); - - tString.Printf(wxT("%04X"), memoryCard[card]->DEntry_ModTime(j)); - m_MemcardList[card]->SetItem(index, COLUMN_MODTIME, tString); - - tString.Printf(wxT("%04X"), memoryCard[card]->DEntry_ImageOffset(j)); - m_MemcardList[card]->SetItem(index, COLUMN_IMAGEADD, tString); - - char iF[17]; - if (!memoryCard[card]->DEntry_IconFmt(j, iF)) iF[0]=0; - m_MemcardList[card]->SetItem(index, COLUMN_ICONFMT, wxString::FromAscii(iF)); - - tString.Printf(wxT("%02X"), memoryCard[card]->DEntry_AnimSpeed(j)); - m_MemcardList[card]->SetItem(index, COLUMN_ANIMSPEED, tString); - - char per[40]; - if (!memoryCard[card]->DEntry_Permissions(j, per)) per[0]=0; - m_MemcardList[card]->SetItem(index, COLUMN_PERMISSIONS, wxString::FromAscii(per)); - - tString.Printf(wxT("%0X"), memoryCard[card]->DEntry_CopyCounter(j)); - m_MemcardList[card]->SetItem(index, COLUMN_COPYCOUNTER, tString); - - tString.Printf(wxT("%04X"), memoryCard[card]->DEntry_CommentsAddress(j)); - m_MemcardList[card]->SetItem(index, COLUMN_COMMENTSADDRESS, tString); -#endif } - if (m_MemcardList[card]->usePages) + if (mcmSettings.usePages) { if (nFiles <= itemsPerPage) { @@ -844,7 +762,7 @@ bool CMemcardManager::ReloadMemcard(const char *fileName, int card) // Automatic column width and then show the list for (int i = 0; i < NUMBER_OF_COLUMN; i++) { - if (m_MemcardList[card]->column[i]) + if (mcmSettings.column[i]) m_MemcardList[card]->SetColumnWidth(i, wxLIST_AUTOSIZE); else m_MemcardList[card]->SetColumnWidth(i, 0); @@ -855,19 +773,6 @@ bool CMemcardManager::ReloadMemcard(const char *fileName, int card) memoryCard[card]->GetFreeBlocks(), DIRLEN - nFiles); t_Status[card]->SetLabel(wxLabel); - -#ifdef MCM_DEBUG_FRAME - if(MemcardManagerDebug == NULL) - { - MemcardManagerDebug = new CMemcardManagerDebug((wxFrame *)NULL, wxDefaultPosition, wxSize(950, 400)); - - } - if (MemcardManagerDebug != NULL) - { - MemcardManagerDebug->Show(); - MemcardManagerDebug->updatePanels(memoryCard, card); - } -#endif return true; } @@ -886,15 +791,14 @@ void CMemcardManager::CMemcardListCtrl::OnRightClick(wxMouseEvent& event) } SetItemState(item, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED); - int slot = event.GetId() - ID_MEMCARDLIST_A; + int slot = GetId() - ID_MEMCARDLIST_A; popupMenu->Append(ID_COPYFROM_A + slot, wxString::Format(wxT("Copy to Memcard %c"), 'B' - slot)); popupMenu->Append(ID_DELETE_A + slot, wxT("Delete Save")); popupMenu->Append(ID_SAVEIMPORT_A + slot, wxT("Import Save")); popupMenu->Append(ID_SAVEEXPORT_A + slot, wxT("Export Save")); popupMenu->Append(ID_EXPORTALL_A + slot, wxT("Export all saves")); - if (!twoCardsLoaded) - popupMenu->FindItem(ID_COPYFROM_A + slot)->Enable(false); + popupMenu->FindItem(ID_COPYFROM_A + slot)->Enable(__mcmSettings.twoCardsLoaded); popupMenu->AppendSeparator(); @@ -904,12 +808,9 @@ void CMemcardManager::CMemcardListCtrl::OnRightClick(wxMouseEvent& event) popupMenu->Append(ID_MEMCARDPATH_A + slot, wxString::Format(wxT("Set as default Memcard %c"), 'A' + slot)); popupMenu->AppendCheckItem(ID_USEPAGES, wxT("Enable pages")); - if (!prevPage || !usePages) - popupMenu->FindItem(ID_PREVPAGE_A + slot)->Enable(false); - if (!nextPage || !usePages) - popupMenu->FindItem(ID_NEXTPAGE_A + slot)->Enable(false); - if(usePages) - popupMenu->FindItem(ID_USEPAGES)->Check(); + popupMenu->FindItem(ID_PREVPAGE_A + slot)->Enable(prevPage && __mcmSettings.usePages); + popupMenu->FindItem(ID_NEXTPAGE_A + slot)->Enable(nextPage && __mcmSettings.usePages); + popupMenu->FindItem(ID_USEPAGES)->Check(__mcmSettings.usePages); popupMenu->AppendSeparator(); @@ -921,12 +822,8 @@ void CMemcardManager::CMemcardListCtrl::OnRightClick(wxMouseEvent& event) for (int i = COLUMN_BANNER; i <= COLUMN_BLOCKS; i++) { - if (column[i]) popupMenu->FindItem(i)->Check(); + popupMenu->FindItem(i)->Check(__mcmSettings.column[i]); } -#ifdef DEBUG_MCM - popupMenu->AppendCheckItem(NUMBER_OF_COLUMN, wxT("Debug Memcard")); - if (column[NUMBER_OF_COLUMN]) popupMenu->FindItem(NUMBER_OF_COLUMN)->Check(); -#endif } PopupMenu(popupMenu); } diff --git a/Source/Core/DolphinWX/Src/MemcardManager.h b/Source/Core/DolphinWX/Src/MemcardManager.h index 32f7e82dcf..cbe5aa6d18 100644 --- a/Source/Core/DolphinWX/Src/MemcardManager.h +++ b/Source/Core/DolphinWX/Src/MemcardManager.h @@ -39,15 +39,6 @@ #define E_UNK "Unknown error" #define FIRSTPAGE 0 -#ifdef MEMCMAN -#undef CONFIG_FILE -#define CONFIG_FILE "./MemcardManager.ini" -#define DEBUG_MCM -#define MCM_DEBUG_FRAME -#include "MCMdebug.h" -#endif - - class CMemcardManager : public wxDialog { public: @@ -65,9 +56,7 @@ class CMemcardManager : public wxDialog std::string DefaultMemcard[2], DefaultIOPath; IniFile MemcardManagerIni; -#ifdef MCM_DEBUG_FRAME - CMemcardManagerDebug * MemcardManagerDebug; -#endif + IniFile::Section* iniMemcardSection; wxBoxSizer *sMain, *sButtons, @@ -143,19 +132,25 @@ class CMemcardManager : public wxDialog void OnPathChange(wxFileDirPickerEvent& event); void ChangePath(int id); bool CopyDeleteSwitch(u32 error, int slot); + bool LoadSettings(); + bool SaveSettings(); + + struct _mcmSettings + { + bool twoCardsLoaded, + usePages, + column[NUMBER_OF_COLUMN+1]; + }mcmSettings; class CMemcardListCtrl : public wxListCtrl { public: - IniFile MemcardManagerIni; - - CMemcardListCtrl(wxWindow* parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, long style); - ~CMemcardListCtrl(); - bool twoCardsLoaded, - usePages, - prevPage, - nextPage, - column[NUMBER_OF_COLUMN+1]; + CMemcardListCtrl(wxWindow* parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, long style, _mcmSettings& _mcmSetngs) + : wxListCtrl(parent, id, pos, size, style), __mcmSettings(_mcmSetngs){;} + ~CMemcardListCtrl(){;} + _mcmSettings & __mcmSettings; + bool prevPage, + nextPage; private: DECLARE_EVENT_TABLE() void OnRightClick(wxMouseEvent& event); diff --git a/Source/Core/DolphinWX/Src/MemoryCards/GCMemcard.cpp b/Source/Core/DolphinWX/Src/MemoryCards/GCMemcard.cpp index 7eab3d4eeb..c4d947580b 100644 --- a/Source/Core/DolphinWX/Src/MemoryCards/GCMemcard.cpp +++ b/Source/Core/DolphinWX/Src/MemoryCards/GCMemcard.cpp @@ -1156,14 +1156,15 @@ bool GCMemcard::Format(bool sjis, bool New, int slot, u16 SizeMb, bool hdrOnly) if ((SizeMb != MemCard2043Mb) || (data_size != mc_data_size)) return false; pStream = fopen(File::GetUserPath(F_GCSRAM_IDX), "rb"); - if (pStream == NULL) + if (pStream) { - PanicAlert("Could not open SRAM file"); - return false; + fread(&m_SRAM, 1, 64, pStream); + fclose(pStream); + } + else + { + m_SRAM = sram_dump; } - fread(&m_SRAM, 1, 64, pStream); - fclose(pStream); - time = CEXIIPL::GetGCTime(); rand = Common::swap64(time);