diff --git a/360/main.c b/360/main.c index 3f976e6b40..3f4426a93a 100644 --- a/360/main.c +++ b/360/main.c @@ -130,6 +130,7 @@ static void set_default_settings(void) //g_console g_console.block_config_read = true; g_console.mode_switch = MODE_MENU; + strlcpy(g_console.default_rom_startup_dir, "game:\\roms\\", sizeof(g_console.default_rom_startup_dir)); } static void get_environment_settings (void) diff --git a/360/media/ssnes_filebrowser.xui b/360/media/ssnes_filebrowser.xui index 5f35f571a3..7c92b7a279 100644 --- a/360/media/ssnes_filebrowser.xui +++ b/360/media/ssnes_filebrowser.xui @@ -71,6 +71,18 @@ 0.000000,10.000000,0.000000 + + +control_ListItem +226.000000 +45.000000 +7.000000,22.000000,0.000000 +5 +false +XuiButton +0.000000,10.000000,0.000000 + + diff --git a/360/menu.cpp b/360/menu.cpp index 3e079d7648..09e79abf61 100644 --- a/360/menu.cpp +++ b/360/menu.cpp @@ -53,28 +53,36 @@ HRESULT CSSNES::UnregisterXuiClasses (void) return S_OK; } +static void filebrowser_fetch_directory_entries(const char *path, CXuiList * romlist, + CXuiTextElement * rompath_title) +{ + filebrowser_parse_directory(&browser, path, ssnes_console_get_rom_ext()); + + DWORD dwNum_rompath = MultiByteToWideChar(CP_ACP, 0, path, -1, NULL, 0); + wchar_t * rompath_name = new wchar_t[dwNum_rompath]; + MultiByteToWideChar(CP_ACP, 0, path, -1, rompath_name, dwNum_rompath); + rompath_title->SetText(rompath_name); + + romlist->DeleteItems(0, romlist->GetItemCount()); + romlist->InsertItems(0, browser.file_count); + for(unsigned i = 0; i < browser.file_count; i++) + { + DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, browser.cur[i].d_name, -1, NULL, 0); + wchar_t * entry_name = new wchar_t[dwNum]; + MultiByteToWideChar(CP_ACP, 0, browser.cur[i].d_name, -1, entry_name, dwNum); + romlist->SetText(i, entry_name); + delete []entry_name; + } +} + HRESULT CSSNESFileBrowser::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) { GetChildById(L"XuiRomList", &m_romlist); GetChildById(L"XuiBackButton1", &m_back); GetChildById(L"XuiTxtRomPath", &m_rompathtitle); - filebrowser_parse_directory(&browser, "game:\\roms\\", ssnes_console_get_rom_ext()); + filebrowser_fetch_directory_entries(g_console.default_rom_startup_dir, &m_romlist, &m_rompathtitle); - DWORD dwNum_rompath = MultiByteToWideChar(CP_ACP, 0, "game:\\roms\\", -1, NULL, 0); - wchar_t * rompath_name = new wchar_t[dwNum_rompath]; - MultiByteToWideChar(CP_ACP, 0, "game:\\roms\\", -1, rompath_name, dwNum_rompath); - m_rompathtitle.SetText(rompath_name); - - m_romlist.InsertItems(0, browser.file_count); - for(unsigned i = 0; i < browser.file_count; i++) - { - DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, browser.cur[i].d_name, -1, NULL, 0); - wchar_t * entry_name = new wchar_t[dwNum]; - MultiByteToWideChar(CP_ACP, 0, browser.cur[i].d_name, -1, entry_name, dwNum); - m_romlist.SetText(i, entry_name); - delete []entry_name; - } return S_OK; } @@ -119,21 +127,22 @@ HRESULT CSSNESFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandled ) { memset(strbuffer, 0, sizeof(strbuffer)); wcstombs(strbuffer, (const wchar_t *)m_romlist.GetText(index), sizeof(strbuffer)); - sprintf(g_console.rom_path, "game:\\roms\\%s", strbuffer); + sprintf(g_console.rom_path, "%s%s", g_console.default_rom_startup_dir, strbuffer); g_console.menu_enable = false; g_console.mode_switch = MODE_EMULATION; init_ssnes = 1; } + else if(browser.cur[index].d_type == FILE_ATTRIBUTE_DIRECTORY) + { + memset(strbuffer, 0, sizeof(strbuffer)); + wcstombs(strbuffer, (const wchar_t *)m_romlist.GetText(index), sizeof(strbuffer)); + char strbuf[512]; + snprintf(strbuf, sizeof(strbuf), "%s%s", g_console.default_rom_startup_dir, strbuffer); + filebrowser_fetch_directory_entries(strbuf, &m_romlist, &m_rompathtitle); + } } else if(hObjPressed == m_back) - { - HRESULT hr = XuiSceneNavigateBack(hSSNESSettings, hMainScene, XUSER_INDEX_FOCUS); - - if (FAILED(hr)) - { - SSNES_ERR("Failed to load scene.\n"); - } - + { NavigateBack(hMainScene); }