diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp index d032bdf8ed..03a0d19d9a 100644 --- a/Source/Core/Core/Src/ConfigManager.cpp +++ b/Source/Core/Core/Src/ConfigManager.cpp @@ -62,6 +62,8 @@ void SConfig::SaveSettings() sprintf(tmp, "GCMPath%i", (int)i); ini.Set("General", tmp, m_ISOFolder[i]); } + + ini.Set("General", "RecersiveGCMPaths", m_RecersiveISOFolder); } @@ -165,6 +167,8 @@ void SConfig::LoadSettings() m_ISOFolder.push_back(tmpPath); } } + + ini.Get("General", "RecersiveGCMPaths", &m_RecersiveISOFolder, false); } { diff --git a/Source/Core/Core/Src/ConfigManager.h b/Source/Core/Core/Src/ConfigManager.h index 34fbab1a06..f13f8cc119 100644 --- a/Source/Core/Core/Src/ConfigManager.h +++ b/Source/Core/Core/Src/ConfigManager.h @@ -51,6 +51,7 @@ struct SConfig // gcm folder std::vectorm_ISOFolder; + bool m_RecersiveISOFolder; SCoreStartupParameter m_LocalCoreStartupParameter; diff --git a/Source/Core/DolphinWX/Src/ConfigMain.cpp b/Source/Core/DolphinWX/Src/ConfigMain.cpp index e9a29ac69a..e1cd81bb38 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.cpp +++ b/Source/Core/DolphinWX/Src/ConfigMain.cpp @@ -75,6 +75,7 @@ EVT_CHOICE(ID_WII_IPL_LNG, CConfigMain::WiiSettingsChanged) EVT_LISTBOX(ID_ISOPATHS, CConfigMain::ISOPathsSelectionChanged) EVT_BUTTON(ID_ADDISOPATH, CConfigMain::AddRemoveISOPaths) EVT_BUTTON(ID_REMOVEISOPATH, CConfigMain::AddRemoveISOPaths) +EVT_CHECKBOX(ID_RECERSIVEISOPATH, CConfigMain::RecursiveDirectoryChanged) EVT_FILEPICKER_CHANGED(ID_DEFAULTISO, CConfigMain::DefaultISOChanged) EVT_DIRPICKER_CHANGED(ID_DVDROOT, CConfigMain::DVDRootChanged) @@ -441,7 +442,8 @@ void CConfigMain::CreateGUIControls() AddISOPath = new wxButton(PathsPage, ID_ADDISOPATH, wxT("Add..."), wxDefaultPosition, wxDefaultSize, 0); RemoveISOPath = new wxButton(PathsPage, ID_REMOVEISOPATH, wxT("Remove"), wxDefaultPosition, wxDefaultSize, 0); RemoveISOPath->Enable(false); - + RecersiveISOPath = new wxCheckBox(PathsPage, ID_RECERSIVEISOPATH, wxT("Search Subfolders"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + RecersiveISOPath->SetValue(SConfig::GetInstance().m_RecersiveISOFolder); DefaultISOText = new wxStaticText(PathsPage, ID_DEFAULTISO_TEXT, wxT("Default ISO:"), wxDefaultPosition, wxDefaultSize); DefaultISO = new wxFilePickerCtrl(PathsPage, ID_DEFAULTISO, wxEmptyString, wxT("Choose a default ISO:"), wxString::Format(wxT("All GC/Wii images (gcm, iso, gcz)|*.gcm;*.iso;*.gcz|All files (%s)|%s"), wxFileSelectorDefaultWildcardStr, wxFileSelectorDefaultWildcardStr), @@ -457,6 +459,7 @@ void CConfigMain::CreateGUIControls() sbISOPaths->Add(ISOPaths, 1, wxEXPAND|wxALL, 0); sISOButtons = new wxBoxSizer(wxHORIZONTAL); + sISOButtons->Add(RecersiveISOPath, 0, wxALL, 0); sISOButtons->AddStretchSpacer(1); sISOButtons->Add(AddISOPath, 0, wxALL, 0); sISOButtons->Add(RemoveISOPath, 0, wxALL, 0); @@ -838,6 +841,12 @@ void CConfigMain::AddRemoveISOPaths(wxCommandEvent& event) SConfig::GetInstance().m_ISOFolder.push_back(std::string(ISOPaths->GetStrings()[i].ToAscii())); } +void CConfigMain::RecursiveDirectoryChanged(wxCommandEvent& WXUNUSED (event)) +{ + SConfig::GetInstance().m_RecersiveISOFolder = RecersiveISOPath->IsChecked(); + bRefreshList = true; +} + void CConfigMain::DefaultISOChanged(wxFileDirPickerEvent& WXUNUSED (event)) { SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDefaultGCM = DefaultISO->GetPath().ToAscii(); diff --git a/Source/Core/DolphinWX/Src/ConfigMain.h b/Source/Core/DolphinWX/Src/ConfigMain.h index 473b62c7b3..71698c02c1 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.h +++ b/Source/Core/DolphinWX/Src/ConfigMain.h @@ -182,6 +182,7 @@ class CConfigMain wxListBox* ISOPaths; wxButton* AddISOPath; wxButton* RemoveISOPath; + wxCheckBox* RecersiveISOPath; wxStaticText* DefaultISOText; wxFilePickerCtrl* DefaultISO; wxStaticText* DVDRootText; @@ -253,6 +254,7 @@ class CConfigMain ID_ISOPATHS, ID_ADDISOPATH, ID_REMOVEISOPATH, + ID_RECERSIVEISOPATH, ID_DEFAULTISO_TEXT, ID_DEFAULTISO, ID_DVDROOT_TEXT, @@ -286,6 +288,7 @@ class CConfigMain void ChooseEXIDevice(std::string deviceName, int deviceNum); void WiiSettingsChanged(wxCommandEvent& event); void ISOPathsSelectionChanged(wxCommandEvent& event); + void RecursiveDirectoryChanged(wxCommandEvent& event); void AddRemoveISOPaths(wxCommandEvent& event); void DefaultISOChanged(wxFileDirPickerEvent& event); void DVDRootChanged(wxFileDirPickerEvent& event); diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.cpp b/Source/Core/DolphinWX/Src/GameListCtrl.cpp index 878b59493b..03045bcfa9 100644 --- a/Source/Core/DolphinWX/Src/GameListCtrl.cpp +++ b/Source/Core/DolphinWX/Src/GameListCtrl.cpp @@ -375,6 +375,20 @@ void CGameListCtrl::ScanForISOs() m_ISOFiles.clear(); CFileSearch::XStringVector Directories(SConfig::GetInstance().m_ISOFolder); + if (SConfig::GetInstance().m_RecersiveISOFolder) + { + for (u32 i = 0; i < Directories.size(); i++) + { + File::FSTEntry FST_Temp; + File::ScanDirectoryTree(Directories.at(i).c_str(), FST_Temp); + for (u32 j = 0; j < FST_Temp.children.size(); j++) + { + if (FST_Temp.children.at(j).isDirectory) + Directories.push_back(FST_Temp.children.at(j).physicalName.c_str()); + } + } + } + CFileSearch::XStringVector Extensions; Extensions.push_back("*.iso"); Extensions.push_back("*.gcm");