(360) You can change between libsnes cores now from the menu

This commit is contained in:
TwinAphex51224 2012-03-05 13:06:24 +01:00
parent 762c2cb170
commit 80a680a7ee
7 changed files with 281 additions and 21 deletions

View File

@ -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;
}

View File

@ -0,0 +1,145 @@
<XuiCanvas version="000c">
<Properties>
<Width>1280.000000</Width>
<Height>720.000000</Height>
</Properties>
<XuiScene>
<Properties>
<Id>XuiSceneCoreFileBrowser</Id>
<Width>575.888062</Width>
<Height>336.017609</Height>
<Position>353.995880,209.035965,0.000000</Position>
<ClassOverride>SSNESCoreBrowser</ClassOverride>
</Properties>
<XuiText>
<Properties>
<Id>XuiTxtTitle</Id>
<Width>326.640015</Width>
<Height>40.000000</Height>
<Position>28.893612,12.519989,0.000000</Position>
<Text>Filebrowser - Select a libsnes core</Text>
<TextColor>0xff0f0f0f</TextColor>
<DropShadowColor>0x800f0f0f</DropShadowColor>
<Font>Arial Unicode MS</Font>
<TextStyle>21</TextStyle>
</Properties>
</XuiText>
<XuiCommonList>
<Properties>
<Id>XuiRomList</Id>
<Width>536.582458</Width>
<Height>170.800018</Height>
<Position>22.799980,81.600006,0.000000</Position>
<NavLeft>XuiBackButton1</NavLeft>
<NavRight>XuiBackButton1</NavRight>
<NavUp>XuiBackButton1</NavUp>
<NavDown>XuiBackButton1</NavDown>
</Properties>
<XuiListItem>
<Properties>
<Id>control_ListItem</Id>
<Width>226.000000</Width>
<Height>45.000000</Height>
<Position>7.000000,22.000000,0.000000</Position>
<Anchor>5</Anchor>
<Show>false</Show>
<Visual>XuiButton</Visual>
<InterItemSpacing>0.000000,10.000000,0.000000</InterItemSpacing>
</Properties>
</XuiListItem>
<XuiListItem>
<Properties>
<Id>control_ListItem</Id>
<Width>226.000000</Width>
<Height>45.000000</Height>
<Position>7.000000,22.000000,0.000000</Position>
<Anchor>5</Anchor>
<Show>false</Show>
<Visual>XuiButton</Visual>
<InterItemSpacing>0.000000,10.000000,0.000000</InterItemSpacing>
</Properties>
</XuiListItem>
<XuiListItem>
<Properties>
<Id>control_ListItem</Id>
<Width>226.000000</Width>
<Height>45.000000</Height>
<Position>7.000000,22.000000,0.000000</Position>
<Anchor>5</Anchor>
<Show>false</Show>
<Visual>XuiButton</Visual>
<InterItemSpacing>0.000000,10.000000,0.000000</InterItemSpacing>
</Properties>
</XuiListItem>
<XuiListItem>
<Properties>
<Id>control_ListItem</Id>
<Width>226.000000</Width>
<Height>45.000000</Height>
<Position>7.000000,22.000000,0.000000</Position>
<Anchor>5</Anchor>
<Show>false</Show>
<Visual>XuiButton</Visual>
<InterItemSpacing>0.000000,10.000000,0.000000</InterItemSpacing>
</Properties>
</XuiListItem>
<XuiListItem>
<Properties>
<Id>control_ListItem</Id>
<Width>226.000000</Width>
<Height>45.000000</Height>
<Position>7.000000,22.000000,0.000000</Position>
<Anchor>5</Anchor>
<Show>false</Show>
<Visual>XuiButton</Visual>
<InterItemSpacing>0.000000,10.000000,0.000000</InterItemSpacing>
</Properties>
</XuiListItem>
<XuiListItem>
<Properties>
<Id>control_ListItem</Id>
<Width>226.000000</Width>
<Height>45.000000</Height>
<Position>7.000000,22.000000,0.000000</Position>
<Anchor>5</Anchor>
<Show>false</Show>
<Visual>XuiButton</Visual>
<InterItemSpacing>0.000000,10.000000,0.000000</InterItemSpacing>
</Properties>
</XuiListItem>
</XuiCommonList>
<XuiBackButton>
<Properties>
<Id>XuiBackButton1</Id>
<Width>219.000000</Width>
<Height>36.000000</Height>
<Position>338.715210,281.396820,0.000000</Position>
<NavLeft>XuiRomList</NavLeft>
<NavRight>XuiRomList</NavRight>
<NavUp>XuiRomList</NavUp>
<NavDown>XuiRomList</NavDown>
<Text>Go back to menu</Text>
<PressKey>22593</PressKey>
</Properties>
</XuiBackButton>
<XuiText>
<Properties>
<Id>XuiTxtRomPath</Id>
<Width>166.559998</Width>
<Height>28.480011</Height>
<Position>96.000000,42.480011,0.000000</Position>
<TextColor>0xff0f0f0f</TextColor>
<DropShadowColor>0x800f0f0f</DropShadowColor>
</Properties>
</XuiText>
<XuiLabel>
<Properties>
<Id>XuiLblPath</Id>
<Width>72.880005</Width>
<Height>28.000000</Height>
<Position>26.000000,43.000000,0.000000</Position>
<Text>PATH:</Text>
</Properties>
</XuiLabel>
</XuiScene>
</XuiCanvas>

View File

@ -15,7 +15,7 @@
<Properties>
<Id>XuiBtnRomBrowser</Id>
<Width>488.312012</Width>
<Height>38.000000</Height>
<Height>30.799988</Height>
<Position>38.127724,64.215515,0.000000</Position>
<Pivot>245.362122,102.247192,0.000000</Pivot>
<NavUp>XuiBtnQuit</NavUp>
@ -40,10 +40,10 @@
<Properties>
<Id>XuiBtnSettings</Id>
<Width>488.312012</Width>
<Height>38.000000</Height>
<Position>38.127960,201.615982,0.000000</Position>
<Height>30.799988</Height>
<Position>38.127960,196.615982,0.000000</Position>
<NavUp>XuiBtnControls</NavUp>
<NavDown>XuiBtnQuit</NavDown>
<NavDown>XuiBtnLibsnesCore</NavDown>
<Text>Settings</Text>
</Properties>
</XuiButton>
@ -51,10 +51,10 @@
<Properties>
<Id>XuiBtnQuit</Id>
<Width>488.312012</Width>
<Height>38.000000</Height>
<Position>38.327736,246.007980,0.000000</Position>
<Height>30.799988</Height>
<Position>38.327736,287.007996,0.000000</Position>
<Pivot>245.162109,-84.153275,0.000000</Pivot>
<NavUp>XuiBtnSettings</NavUp>
<NavUp>XuiBtnLibsnesCore</NavUp>
<NavDown>XuiBtnRomBrowser</NavDown>
<Text>Quit</Text>
</Properties>
@ -64,7 +64,7 @@
<Id>XuiLblCore</Id>
<Width>124.000000</Width>
<Height>28.000000</Height>
<Position>12.544006,319.792023,0.000000</Position>
<Position>12.544006,324.792023,0.000000</Position>
<Text>Libsnes core:</Text>
</Properties>
</XuiLabel>
@ -73,7 +73,7 @@
<Id>XuiTxtCoreText</Id>
<Width>224.399963</Width>
<Height>34.000000</Height>
<Position>134.944031,319.391998,0.000000</Position>
<Position>134.944031,324.391998,0.000000</Position>
<TextColor>0xff0f0f0f</TextColor>
<DropShadowColor>0x800f0f0f</DropShadowColor>
<Font>Arial Unicode MS</Font>
@ -83,8 +83,8 @@
<Properties>
<Id>XuiBtnQuickMenu</Id>
<Width>488.312012</Width>
<Height>38.000000</Height>
<Position>38.130001,111.655991,0.000000</Position>
<Height>30.799988</Height>
<Position>38.130001,106.655991,0.000000</Position>
<NavUp>XuiBtnRomBrowser</NavUp>
<NavDown>XuiBtnControls</NavDown>
<Text>Quick Menu</Text>
@ -94,12 +94,23 @@
<Properties>
<Id>XuiBtnControls</Id>
<Width>488.312012</Width>
<Height>38.000000</Height>
<Position>38.130001,156.655991,0.000000</Position>
<Height>30.799988</Height>
<Position>38.130001,151.655991,0.000000</Position>
<NavUp>XuiBtnQuickMenu</NavUp>
<NavDown>XuiBtnSettings</NavDown>
<Text>Controls</Text>
</Properties>
</XuiButton>
<XuiButton>
<Properties>
<Id>XuiBtnLibsnesCore</Id>
<Width>488.312012</Width>
<Height>30.799988</Height>
<Position>38.127960,241.615982,0.000000</Position>
<NavUp>XuiBtnSettings</NavUp>
<NavDown>XuiBtnQuit</NavDown>
<Text>Change libsnes core</Text>
</Properties>
</XuiButton>
</XuiScene>
</XuiCanvas>

View File

@ -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);

View File

@ -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:

View File

@ -583,6 +583,23 @@
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_LTCG|Xbox 360'">$(OutDir)media\ssnes_quickmenu.xur;</Outputs>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\360\media\ssnes_libsnescore_browser.xui">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='CodeAnalysis|Xbox 360'">xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Xbox 360'">xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Profile|Xbox 360'">xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Profile_FastCap|Xbox 360'">xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Xbox 360'">xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_LTCG|Xbox 360'">xui2bin /D /NOLOGO "%(RelativeDir)ssnes_libsnescore_browser.xui" "$(OutDir)media\ssnes_libsnescore_browser.xur"</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='CodeAnalysis|Xbox 360'">$(OutDir)media\ssnes_libsnescore_browser.xur;</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Xbox 360'">$(OutDir)media\ssnes_libsnescore_browser.xur;</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Profile|Xbox 360'">$(OutDir)media\ssnes_libsnescore_browser.xur;</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Profile_FastCap|Xbox 360'">$(OutDir)media\ssnes_libsnescore_browser.xur;</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Xbox 360'">$(OutDir)media\ssnes_libsnescore_browser.xur;</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_LTCG|Xbox 360'">$(OutDir)media\ssnes_libsnescore_browser.xur;</Outputs>
</CustomBuild>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

View File

@ -264,5 +264,8 @@
<CustomBuild Include="..\..\360\media\ssnes_quickmenu.xui">
<Filter>Source Files\media</Filter>
</CustomBuild>
<CustomBuild Include="..\..\360\media\ssnes_libsnescore_browser.xui">
<Filter>Source Files\media</Filter>
</CustomBuild>
</ItemGroup>
</Project>