diff --git a/360/main.c b/360/main.c index 057acca69e..aff55ad9c4 100644 --- a/360/main.c +++ b/360/main.c @@ -560,5 +560,12 @@ begin_shutdown: if(path_file_exists(SYS_CONFIG_FILE)) save_settings(); xdk360_video_deinit(); + + if(g_console.return_to_launcher) + { + SSNES_LOG("Attempt to load XEX: [%s].\n", g_console.launch_app_on_exit); + XLaunchNewImage(g_console.launch_app_on_exit, NULL); + } + return 0; } diff --git a/360/media/ssnes_libsnescore_browser.xui b/360/media/ssnes_libsnescore_browser.xui new file mode 100644 index 0000000000..216c8c73a9 --- /dev/null +++ b/360/media/ssnes_libsnescore_browser.xui @@ -0,0 +1,145 @@ + + +1280.000000 +720.000000 + + + +XuiSceneCoreFileBrowser +575.888062 +336.017609 +353.995880,209.035965,0.000000 +SSNESCoreBrowser + + + +XuiTxtTitle +326.640015 +40.000000 +28.893612,12.519989,0.000000 +Filebrowser - Select a libsnes core +0xff0f0f0f +0x800f0f0f +Arial Unicode MS +21 + + + + +XuiRomList +536.582458 +170.800018 +22.799980,81.600006,0.000000 +XuiBackButton1 +XuiBackButton1 +XuiBackButton1 +XuiBackButton1 + + + +control_ListItem +226.000000 +45.000000 +7.000000,22.000000,0.000000 +5 +false +XuiButton +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 + + + + +control_ListItem +226.000000 +45.000000 +7.000000,22.000000,0.000000 +5 +false +XuiButton +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 + + + + +control_ListItem +226.000000 +45.000000 +7.000000,22.000000,0.000000 +5 +false +XuiButton +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 + + + + + +XuiBackButton1 +219.000000 +36.000000 +338.715210,281.396820,0.000000 +XuiRomList +XuiRomList +XuiRomList +XuiRomList +Go back to menu +22593 + + + + +XuiTxtRomPath +166.559998 +28.480011 +96.000000,42.480011,0.000000 +0xff0f0f0f +0x800f0f0f + + + + +XuiLblPath +72.880005 +28.000000 +26.000000,43.000000,0.000000 +PATH: + + + + diff --git a/360/media/ssnes_main.xui b/360/media/ssnes_main.xui index 1f37610c1b..505b554147 100644 --- a/360/media/ssnes_main.xui +++ b/360/media/ssnes_main.xui @@ -15,7 +15,7 @@ XuiBtnRomBrowser 488.312012 -38.000000 +30.799988 38.127724,64.215515,0.000000 245.362122,102.247192,0.000000 XuiBtnQuit @@ -40,10 +40,10 @@ XuiBtnSettings 488.312012 -38.000000 -38.127960,201.615982,0.000000 +30.799988 +38.127960,196.615982,0.000000 XuiBtnControls -XuiBtnQuit +XuiBtnLibsnesCore Settings @@ -51,10 +51,10 @@ XuiBtnQuit 488.312012 -38.000000 -38.327736,246.007980,0.000000 +30.799988 +38.327736,287.007996,0.000000 245.162109,-84.153275,0.000000 -XuiBtnSettings +XuiBtnLibsnesCore XuiBtnRomBrowser Quit @@ -64,7 +64,7 @@ XuiLblCore 124.000000 28.000000 -12.544006,319.792023,0.000000 +12.544006,324.792023,0.000000 Libsnes core: @@ -73,7 +73,7 @@ XuiTxtCoreText 224.399963 34.000000 -134.944031,319.391998,0.000000 +134.944031,324.391998,0.000000 0xff0f0f0f 0x800f0f0f Arial Unicode MS @@ -83,8 +83,8 @@ XuiBtnQuickMenu 488.312012 -38.000000 -38.130001,111.655991,0.000000 +30.799988 +38.130001,106.655991,0.000000 XuiBtnRomBrowser XuiBtnControls Quick Menu @@ -94,12 +94,23 @@ XuiBtnControls 488.312012 -38.000000 -38.130001,156.655991,0.000000 +30.799988 +38.130001,151.655991,0.000000 XuiBtnQuickMenu XuiBtnSettings Controls + + +XuiBtnLibsnesCore +488.312012 +30.799988 +38.127960,241.615982,0.000000 +XuiBtnSettings +XuiBtnQuit +Change libsnes core + + diff --git a/360/menu.cpp b/360/menu.cpp index 7fdde89560..de8a8678ed 100644 --- a/360/menu.cpp +++ b/360/menu.cpp @@ -30,6 +30,7 @@ CSSNES app; filebrowser_t browser; +filebrowser_t tmp_browser; char strbuffer[1024]; static void return_to_game (void) @@ -51,6 +52,7 @@ HRESULT CSSNES::RegisterXuiClasses (void) { CSSNESMain::Register(); CSSNESFileBrowser::Register(); + CSSNESCoreBrowser::Register(); CSSNESQuickMenu::Register(); CSSNESSettings::Register(); return S_OK; @@ -60,16 +62,17 @@ HRESULT CSSNES::RegisterXuiClasses (void) HRESULT CSSNES::UnregisterXuiClasses (void) { CSSNESMain::Unregister(); + CSSNESCoreBrowser::Unregister(); CSSNESFileBrowser::Unregister(); CSSNESQuickMenu::Register(); CSSNESSettings::Unregister(); return S_OK; } -static void filebrowser_fetch_directory_entries(const char *path, CXuiList * romlist, +static void filebrowser_fetch_directory_entries(const char *path, filebrowser_t * browser, CXuiList * romlist, CXuiTextElement * rompath_title) { - filebrowser_push_directory(&browser, path, true); + filebrowser_push_directory(browser, path, true); unsigned long dwNum_rompath = MultiByteToWideChar(CP_ACP, 0, path, -1, NULL, 0); wchar_t * rompath_name = new wchar_t[dwNum_rompath]; @@ -77,12 +80,12 @@ static void filebrowser_fetch_directory_entries(const char *path, CXuiList * rom 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++) + romlist->InsertItems(0, browser->file_count); + for(unsigned i = 0; i < browser->file_count; i++) { - unsigned long dwNum = MultiByteToWideChar(CP_ACP, 0, browser.cur[i].d_name, -1, NULL, 0); + unsigned long 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); + MultiByteToWideChar(CP_ACP, 0, browser->cur[i].d_name, -1, entry_name, dwNum); romlist->SetText(i, entry_name); delete []entry_name; } @@ -94,7 +97,19 @@ HRESULT CSSNESFileBrowser::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) GetChildById(L"XuiBackButton1", &m_back); GetChildById(L"XuiTxtRomPath", &m_rompathtitle); - filebrowser_fetch_directory_entries(g_console.default_rom_startup_dir, &m_romlist, &m_rompathtitle); + filebrowser_fetch_directory_entries(g_console.default_rom_startup_dir, &browser, &m_romlist, &m_rompathtitle); + + return S_OK; +} + +HRESULT CSSNESCoreBrowser::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) +{ + GetChildById(L"XuiRomList", &m_romlist); + GetChildById(L"XuiBackButton1", &m_back); + GetChildById(L"XuiTxtRomPath", &m_rompathtitle); + + filebrowser_new(&tmp_browser, "game:", "xex|XEX"); + filebrowser_fetch_directory_entries("game:", &tmp_browser, &m_romlist, &m_rompathtitle); return S_OK; } @@ -212,6 +227,7 @@ HRESULT CSSNESMain::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) GetChildById(L"XuiBtnQuit", &m_quit); GetChildById(L"XuiTxtTitle", &m_title); GetChildById(L"XuiTxtCoreText", &m_core); + GetChildById(L"XuiBtnLibsnesCore", &m_change_libsnes_core); const char * core_text = snes_library_id(); char package_version[32]; @@ -252,7 +268,38 @@ HRESULT CSSNESFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandled ) memset(strbuffer, 0, sizeof(strbuffer)); wcstombs(strbuffer, (const wchar_t *)m_romlist.GetText(index), sizeof(strbuffer)); snprintf(path, sizeof(path), "%s%s\\", FILEBROWSER_GET_CURRENT_DIRECTORY_NAME(browser), strbuffer); - filebrowser_fetch_directory_entries(path, &m_romlist, &m_rompathtitle); + filebrowser_fetch_directory_entries(path, &browser, &m_romlist, &m_rompathtitle); + } + } + else if(hObjPressed == m_back) + NavigateBack(app.hMainScene); + + bHandled = TRUE; + return S_OK; +} + +HRESULT CSSNESCoreBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandled ) +{ + char path[MAX_PATH_LENGTH]; + + if(hObjPressed == m_romlist) + { + int index = m_romlist.GetCurSel(); + 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)); + sprintf(g_console.launch_app_on_exit, "%s\\%s", FILEBROWSER_GET_CURRENT_DIRECTORY_NAME(tmp_browser), strbuffer); + g_console.return_to_launcher = true; + g_console.menu_enable = false; + g_console.mode_switch = MODE_EXIT; + } + else if(tmp_browser.cur[index].d_type == FILE_ATTRIBUTE_DIRECTORY) + { + memset(strbuffer, 0, sizeof(strbuffer)); + wcstombs(strbuffer, (const wchar_t *)m_romlist.GetText(index), sizeof(strbuffer)); + snprintf(path, sizeof(path), "%s%s\\", FILEBROWSER_GET_CURRENT_DIRECTORY_NAME(tmp_browser), strbuffer); + filebrowser_fetch_directory_entries(path, &tmp_browser, &m_romlist, &m_rompathtitle); } } else if(hObjPressed == m_back) @@ -305,6 +352,16 @@ HRESULT CSSNESMain::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) NavigateForward(app.hQuickMenu); } + else if ( hObjPressed == m_change_libsnes_core ) + { + hr = XuiSceneCreate(L"file://game:/media/", L"ssnes_libsnescore_browser.xur", NULL, &app.hCoreBrowser); + + if (FAILED(hr)) + { + SSNES_ERR("Failed to load scene.\n"); + } + NavigateForward(app.hCoreBrowser); + } else if ( hObjPressed == m_settings ) { hr = XuiSceneCreate(L"file://game:/media/", L"ssnes_settings.xur", NULL, &app.hSSNESSettings); diff --git a/360/menu.h b/360/menu.h index cf6c9d5139..c743f55acc 100644 --- a/360/menu.h +++ b/360/menu.h @@ -27,6 +27,7 @@ class CSSNES : public CXuiModule public: HXUIOBJ hMainScene; HXUIOBJ hFileBrowser; + HXUIOBJ hCoreBrowser; HXUIOBJ hQuickMenu; HXUIOBJ hSSNESSettings; protected: @@ -43,6 +44,7 @@ protected: CXuiControl m_quick_menu; CXuiControl m_controls; CXuiControl m_settings; + CXuiControl m_change_libsnes_core; CXuiControl m_quit; CXuiTextElement m_title; CXuiTextElement m_core; @@ -76,6 +78,24 @@ public: XUI_IMPLEMENT_CLASS(CSSNESFileBrowser, L"SSNESFileBrowser", XUI_CLASS_SCENE) }; +class CSSNESCoreBrowser: public CXuiSceneImpl +{ +protected: + CXuiList m_romlist; + CXuiControl m_back; + CXuiTextElement m_rompathtitle; +public: + HRESULT OnInit( XUIMessageInit* pInitData, int & bHandled ); + HRESULT OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ); + + XUI_BEGIN_MSG_MAP() + XUI_ON_XM_INIT( OnInit) + XUI_ON_XM_NOTIFY_PRESS( OnNotifyPress ) + XUI_END_MSG_MAP(); + + XUI_IMPLEMENT_CLASS(CSSNESCoreBrowser, L"SSNESCoreBrowser", XUI_CLASS_SCENE) +}; + class CSSNESQuickMenu: public CXuiSceneImpl { protected: diff --git a/msvc-360/SSNES-360/SSNES-360.vcxproj b/msvc-360/SSNES-360/SSNES-360.vcxproj index 60c2f7382d..6f459668b2 100644 --- a/msvc-360/SSNES-360/SSNES-360.vcxproj +++ b/msvc-360/SSNES-360/SSNES-360.vcxproj @@ -583,6 +583,23 @@ $(OutDir)media\ssnes_quickmenu.xur; + + + Document + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur" + $(OutDir)media\ssnes_libsnescore_browser.xur; + $(OutDir)media\ssnes_libsnescore_browser.xur; + $(OutDir)media\ssnes_libsnescore_browser.xur; + $(OutDir)media\ssnes_libsnescore_browser.xur; + $(OutDir)media\ssnes_libsnescore_browser.xur; + $(OutDir)media\ssnes_libsnescore_browser.xur; + + diff --git a/msvc-360/SSNES-360/SSNES-360.vcxproj.filters b/msvc-360/SSNES-360/SSNES-360.vcxproj.filters index adb5a12590..949ca58b12 100644 --- a/msvc-360/SSNES-360/SSNES-360.vcxproj.filters +++ b/msvc-360/SSNES-360/SSNES-360.vcxproj.filters @@ -264,5 +264,8 @@ Source Files\media + + Source Files\media + \ No newline at end of file