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