mirror of
https://github.com/libretro/RetroArch
synced 2025-03-23 19:21:03 +00:00
(Xbox 1) Uses filebrowser code now - now lists subdirs as well
This commit is contained in:
parent
49bbacdaf1
commit
629dfe4a15
@ -149,10 +149,11 @@ void filebrowser_iterate(filebrowser_t *filebrowser, filebrowser_action_t action
|
||||
case FILEBROWSER_ACTION_SCROLL_DOWN_SMOOTH:
|
||||
filebrowser->current_dir.ptr = (min(filebrowser->current_dir.ptr + 50,
|
||||
filebrowser->current_dir.list->size-1));
|
||||
if(!filebrowser->current_dir.ptr) filebrowser->current_dir.ptr = 0;
|
||||
if(!filebrowser->current_dir.ptr)
|
||||
filebrowser->current_dir.ptr = 0;
|
||||
break;
|
||||
case FILEBROWSER_ACTION_OK:
|
||||
filebrowser_push_directory(filebrowser, filebrowser_get_current_path(filebrowser), true);
|
||||
filebrowser_push_directory(filebrowser, filebrowser_get_current_path(filebrowser), true);
|
||||
break;
|
||||
case FILEBROWSER_ACTION_CANCEL:
|
||||
filebrowser_pop_directory(filebrowser);
|
||||
|
@ -288,8 +288,6 @@ MENU
|
||||
#include "../../xbox1/frontend/RetroLaunch/IoSupport.cpp"
|
||||
#include "../../xbox1/frontend/RetroLaunch/MenuMain.cpp"
|
||||
#include "../../xbox1/frontend/RetroLaunch/MenuManager.cpp"
|
||||
#include "../../xbox1/frontend/RetroLaunch/Rom.cpp"
|
||||
#include "../../xbox1/frontend/RetroLaunch/RomList.cpp"
|
||||
#include "../../xbox1/frontend/RetroLaunch/Surface.cpp"
|
||||
#elif defined(GEKKO)
|
||||
#include "../../wii/frontend/rgui.c"
|
||||
|
@ -358,9 +358,11 @@ void rarch_settings_set_default (const input_driver_t *input)
|
||||
g_console.mode_switch = MODE_MENU;
|
||||
g_console.screen_orientation = ORIENTATION_NORMAL;
|
||||
g_console.current_resolution_id = 0;
|
||||
#ifdef _XBOX360
|
||||
#if defined(_XBOX360)
|
||||
//Ugly but necessary hack
|
||||
strlcpy(g_console.default_rom_startup_dir, "game:", sizeof(g_console.default_rom_startup_dir));
|
||||
#elif defined(_XBOX1)
|
||||
strlcpy(g_console.default_rom_startup_dir, "D:", sizeof(g_console.default_rom_startup_dir));
|
||||
#else
|
||||
strlcpy(g_console.default_rom_startup_dir, default_paths.filesystem_root_dir, sizeof(g_console.default_rom_startup_dir));
|
||||
#endif
|
||||
|
@ -22,7 +22,7 @@
|
||||
Optimization="3"
|
||||
OptimizeForProcessor="2"
|
||||
AdditionalIncludeDirectories=""$(SolutionDir)\msvc-stdint";"$(SolutionDir)\msvc-71""
|
||||
PreprocessorDefinitions="_DEBUG;_XBOX;_XBOX1;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.6\";__STDC_CONSTANT_MACROS;HAVE_ZLIB;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_CONFIGFILE;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8"
|
||||
PreprocessorDefinitions="_DEBUG;_XBOX;_XBOX1;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.6\";__STDC_CONSTANT_MACROS;HAVE_ZLIB;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_CONFIGFILE;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="0"
|
||||
RuntimeLibrary="1"
|
||||
@ -72,7 +72,7 @@
|
||||
OmitFramePointers="TRUE"
|
||||
OptimizeForProcessor="2"
|
||||
AdditionalIncludeDirectories=""$(SolutionDir)\msvc-stdint";"$(SolutionDir)\msvc-71""
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.6\";__STDC_CONSTANT_MACROS;HAVE_ZLIB;PROFILE;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_CONFIGFILE;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8"
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.6\";__STDC_CONSTANT_MACROS;HAVE_ZLIB;PROFILE;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_CONFIGFILE;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="0"
|
||||
BufferSecurityCheck="TRUE"
|
||||
@ -126,7 +126,7 @@
|
||||
OmitFramePointers="TRUE"
|
||||
OptimizeForProcessor="2"
|
||||
AdditionalIncludeDirectories=""$(SolutionDir)\msvc-stdint";"$(SolutionDir)\msvc-71""
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.6\";__STDC_CONSTANT_MACROS;HAVE_ZLIB;PROFILE;FASTCAP;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_CONFIGFILE;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8"
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.6\";__STDC_CONSTANT_MACROS;HAVE_ZLIB;PROFILE;FASTCAP;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_CONFIGFILE;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="0"
|
||||
BufferSecurityCheck="TRUE"
|
||||
@ -187,7 +187,7 @@
|
||||
EnableFiberSafeOptimizations="TRUE"
|
||||
OptimizeForProcessor="2"
|
||||
AdditionalIncludeDirectories=""$(SolutionDir)\msvc-stdint";"$(SolutionDir)\msvc-71""
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.6\";__STDC_CONSTANT_MACROS;HAVE_ZLIB;HAVE_GRIFFIN;inline=_inline;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_CONFIGFILE;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8"
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.6\";__STDC_CONSTANT_MACROS;HAVE_ZLIB;HAVE_GRIFFIN;inline=_inline;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_CONFIGFILE;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="0"
|
||||
BufferSecurityCheck="TRUE"
|
||||
@ -240,7 +240,7 @@
|
||||
OmitFramePointers="TRUE"
|
||||
OptimizeForProcessor="2"
|
||||
AdditionalIncludeDirectories=""$(SolutionDir)\msvc-stdint";"$(SolutionDir)\msvc-71""
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.6\";__STDC_CONSTANT_MACROS;HAVE_ZLIB;LTCG;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_CONFIGFILE;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8"
|
||||
PreprocessorDefinitions="NDEBUG;_XBOX;_XBOX1;RARCH_CONSOLE;HAVE_XINPUT_XBOX1;PACKAGE_VERSION=\"0.9.6\";__STDC_CONSTANT_MACROS;HAVE_ZLIB;LTCG;HAVE_GRIFFIN;HAVE_RARCH_MAIN_WRAP;HAVE_LIBRETRO_MANAGEMENT;HAVE_RARCH_EXEC;HAVE_DEFAULT_RETROPAD_INPUT;HAVE_CONFIGFILE;HAVE_VID_CONTEXT;HAVE_DSOUND;HAVE_D3D8;HAVE_FILEBROWSER"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="0"
|
||||
BufferSecurityCheck="TRUE"
|
||||
|
@ -14,11 +14,20 @@
|
||||
*/
|
||||
|
||||
#include "MenuMain.h"
|
||||
#include "RomList.h"
|
||||
|
||||
#include "../../console/rarch_console.h"
|
||||
#include "../../general.h"
|
||||
|
||||
#include "../../console/fileio/file_browser.h"
|
||||
|
||||
#define NUM_ENTRY_PER_PAGE 17
|
||||
|
||||
extern filebrowser_t browser;
|
||||
|
||||
uint16_t input_st;
|
||||
uint16_t trigger_state;
|
||||
static uint16_t old_input_st = 0;
|
||||
|
||||
CMenuMain g_menuMain;
|
||||
|
||||
CMenuMain::CMenuMain()
|
||||
@ -40,7 +49,7 @@ CMenuMain::~CMenuMain()
|
||||
|
||||
bool CMenuMain::Create()
|
||||
{
|
||||
RARCH_LOG("CMenuMain::Create().");
|
||||
RARCH_LOG("CMenuMain::Create().\n");
|
||||
|
||||
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data;
|
||||
|
||||
@ -94,9 +103,6 @@ bool CMenuMain::Create()
|
||||
//The offset in the romlist
|
||||
m_romListOffset = 0;
|
||||
|
||||
if(m_romListEndRender > g_romList.GetRomListSize() - 1)
|
||||
m_romListEndRender = g_romList.GetRomListSize() - 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -124,28 +130,79 @@ void CMenuMain::Render()
|
||||
|
||||
//Begin with the rom selector panel
|
||||
//FIXME: Width/Height needs to be current Rom texture width/height (or should we just leave it at a fixed size?)
|
||||
m_menuMainRomSelectPanel.Render(m_menuMainRomSelectPanel_x, m_menuMainRomSelectPanel_y, m_menuMainRomSelectPanel_w, m_menuMainRomSelectPanel_h);
|
||||
|
||||
int32_t dwSpacing = 0;
|
||||
|
||||
for (int i = m_romListBeginRender; i <= m_romListEndRender; i++)
|
||||
filebrowser_t *b = &browser;
|
||||
unsigned file_count = b->current_dir.list->size;
|
||||
int current_index, page_number, page_base, i;
|
||||
float currentX, currentY, ySpacing;
|
||||
|
||||
current_index = b->current_dir.ptr;
|
||||
page_number = current_index / NUM_ENTRY_PER_PAGE;
|
||||
page_base = page_number * NUM_ENTRY_PER_PAGE;
|
||||
|
||||
currentX = m_menuMainRomListPos_x;
|
||||
currentY = m_menuMainRomListPos_y;
|
||||
ySpacing = m_menuMainRomListSpacing;
|
||||
|
||||
for (i = page_base; i < file_count && i < page_base + NUM_ENTRY_PER_PAGE; ++i)
|
||||
{
|
||||
const wchar_t *rom_basename = g_romList.GetRomAt(i + m_romListOffset)->GetFileName();
|
||||
char fname_tmp[256];
|
||||
fill_pathname_base(fname_tmp, b->current_dir.list->elems[i].data, sizeof(fname_tmp));
|
||||
currentY = currentY + ySpacing;
|
||||
const char *rom_basename = fname_tmp;
|
||||
wchar_t rom_basename_w[256];
|
||||
|
||||
//check if this is the currently selected file
|
||||
const char *current_pathname = filebrowser_get_current_path(b);
|
||||
if(strcmp(current_pathname, b->current_dir.list->elems[i].data) == 0)
|
||||
{
|
||||
m_menuMainRomSelectPanel.Render(currentX, currentY, m_menuMainRomSelectPanel_w, m_menuMainRomSelectPanel_h);
|
||||
}
|
||||
|
||||
convert_char_to_wchar(rom_basename_w, rom_basename, sizeof(rom_basename_w));
|
||||
d3d->d3d_render_device->GetBackBuffer(-1, D3DBACKBUFFER_TYPE_MONO, &d3d->pFrontBuffer);
|
||||
d3d->d3d_render_device->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &d3d->pBackBuffer);
|
||||
d3d->debug_font->TextOut(d3d->pFrontBuffer, rom_basename, (unsigned)-1, m_menuMainRomListPos_x, m_menuMainRomListPos_y + dwSpacing);
|
||||
d3d->debug_font->TextOut(d3d->pBackBuffer, rom_basename, (unsigned)-1, m_menuMainRomListPos_x, m_menuMainRomListPos_y + dwSpacing);
|
||||
d3d->debug_font->TextOut(d3d->pFrontBuffer, rom_basename_w, (unsigned)-1, currentX, currentY);
|
||||
d3d->debug_font->TextOut(d3d->pBackBuffer, rom_basename_w, (unsigned)-1, currentX, currentY);
|
||||
d3d->pFrontBuffer->Release();
|
||||
d3d->pBackBuffer->Release();
|
||||
dwSpacing += m_menuMainRomListSpacing;
|
||||
}
|
||||
}
|
||||
|
||||
static uint16_t old_input_state = 0;
|
||||
typedef enum {
|
||||
MENU_ROMSELECT_ACTION_OK,
|
||||
MENU_ROMSELECT_ACTION_GOTO_SETTINGS,
|
||||
MENU_ROMSELECT_ACTION_NOOP,
|
||||
} menu_romselect_action_t;
|
||||
|
||||
void CMenuMain::ProcessInput()
|
||||
static void menu_romselect_iterate(filebrowser_t *filebrowser, menu_romselect_action_t action)
|
||||
{
|
||||
uint16_t input_state = 0;
|
||||
switch(action)
|
||||
{
|
||||
case MENU_ROMSELECT_ACTION_OK:
|
||||
if(filebrowser_get_current_path_isdir(filebrowser))
|
||||
{
|
||||
/*if 'filename' is in fact '..' - then pop back directory instead of adding '..' to filename path */
|
||||
//hacky - need to fix this
|
||||
//if(browser.current_dir.ptr == 0)
|
||||
// filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_CANCEL);
|
||||
//else
|
||||
filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_OK);
|
||||
}
|
||||
else
|
||||
rarch_console_load_game_wrap(filebrowser_get_current_path(filebrowser), g_console.zip_extract_mode, S_DELAY_45);
|
||||
break;
|
||||
case MENU_ROMSELECT_ACTION_GOTO_SETTINGS:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void control_update_wrap(void)
|
||||
{
|
||||
input_st = 0;
|
||||
input_xinput.poll(NULL);
|
||||
|
||||
static const struct retro_keybind *binds[MAX_PLAYERS] = {
|
||||
@ -161,82 +218,65 @@ void CMenuMain::ProcessInput()
|
||||
|
||||
for (unsigned i = 0; i < RARCH_FIRST_META_KEY; i++)
|
||||
{
|
||||
input_state |= input_xinput.input_state(NULL, binds, false,
|
||||
input_st |= input_xinput.input_state(NULL, binds, false,
|
||||
RETRO_DEVICE_JOYPAD, 0, i) ? (1 << i) : 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t trigger_state = input_state & ~old_input_state;
|
||||
static void browser_update(filebrowser_t * b, const char *extensions)
|
||||
{
|
||||
filebrowser_action_t action = FILEBROWSER_ACTION_NOOP;
|
||||
|
||||
if(trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_DOWN))
|
||||
if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_DOWN))
|
||||
action = FILEBROWSER_ACTION_DOWN;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_UP))
|
||||
action = FILEBROWSER_ACTION_UP;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT))
|
||||
action = FILEBROWSER_ACTION_RIGHT;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT))
|
||||
action = FILEBROWSER_ACTION_LEFT;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_R))
|
||||
action = FILEBROWSER_ACTION_SCROLL_DOWN;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_R2))
|
||||
action = FILEBROWSER_ACTION_SCROLL_DOWN_SMOOTH;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_L2))
|
||||
action = FILEBROWSER_ACTION_SCROLL_UP_SMOOTH;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_L))
|
||||
action = FILEBROWSER_ACTION_SCROLL_UP;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_A))
|
||||
action = FILEBROWSER_ACTION_CANCEL;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_START))
|
||||
{
|
||||
if(m_romListSelectedRom < g_romList.GetRomListSize())
|
||||
{
|
||||
if(m_menuMainRomSelectPanel_y < (m_menuMainRomListPos_y + (m_menuMainRomListSpacing * m_romListEndRender)))
|
||||
{
|
||||
m_menuMainRomSelectPanel_y += m_menuMainRomListSpacing;
|
||||
m_romListSelectedRom++;
|
||||
RARCH_LOG("SELECTED ROM: %d.\n", m_romListSelectedRom);
|
||||
}
|
||||
|
||||
if(m_menuMainRomSelectPanel_y > (m_menuMainRomListPos_y + (m_menuMainRomListSpacing * (m_romListEndRender))))
|
||||
{
|
||||
m_menuMainRomSelectPanel_y -= m_menuMainRomListSpacing;
|
||||
m_romListSelectedRom++;
|
||||
if(m_romListSelectedRom > g_romList.GetRomListSize() - 1)
|
||||
m_romListSelectedRom = g_romList.GetRomListSize() - 1;
|
||||
|
||||
RARCH_LOG("SELECTED ROM AFTER CORRECTION: %d.\n", m_romListSelectedRom);
|
||||
|
||||
if(m_romListSelectedRom < g_romList.GetRomListSize() - 1 && m_romListOffset < g_romList.GetRomListSize() - 1 - m_romListEndRender - 1)
|
||||
{
|
||||
m_romListOffset++;
|
||||
RARCH_LOG("OFFSET: %d.\n", m_romListOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
action = FILEBROWSER_ACTION_RESET;
|
||||
filebrowser_set_root(b, "/");
|
||||
strlcpy(b->extensions, extensions, sizeof(b->extensions));
|
||||
}
|
||||
|
||||
if(trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_UP))
|
||||
{
|
||||
if(m_romListSelectedRom > -1)
|
||||
{
|
||||
if(m_menuMainRomSelectPanel_y > (m_menuMainRomListPos_y - m_menuMainRomListSpacing))
|
||||
{
|
||||
m_menuMainRomSelectPanel_y -= m_menuMainRomListSpacing;
|
||||
m_romListSelectedRom--;
|
||||
RARCH_LOG("SELECTED ROM: %d.\n", m_romListSelectedRom);
|
||||
}
|
||||
if(action != FILEBROWSER_ACTION_NOOP)
|
||||
filebrowser_iterate(b, action);
|
||||
}
|
||||
|
||||
if(m_menuMainRomSelectPanel_y < (m_menuMainRomListPos_y - m_menuMainRomListSpacing))
|
||||
{
|
||||
m_menuMainRomSelectPanel_y += m_menuMainRomListSpacing;
|
||||
m_romListSelectedRom--;
|
||||
if(m_romListSelectedRom < 0)
|
||||
m_romListSelectedRom = 0;
|
||||
void CMenuMain::ProcessInput()
|
||||
{
|
||||
control_update_wrap();
|
||||
|
||||
RARCH_LOG("SELECTED ROM AFTER CORRECTION: %d.\n", m_romListSelectedRom);
|
||||
trigger_state = input_st & ~old_input_st;
|
||||
|
||||
if(m_romListSelectedRom > 0 && m_romListOffset > 0)
|
||||
{
|
||||
m_romListOffset--;
|
||||
RARCH_LOG("OFFSET: %d.\n", m_romListOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Press A to launch
|
||||
if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_B) || trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_START))
|
||||
{
|
||||
char rom_filename[PATH_MAX];
|
||||
convert_wchar_to_char(rom_filename, g_romList.GetRomAt(m_romListSelectedRom)->GetFileName(), sizeof(rom_filename));
|
||||
rarch_console_load_game_wrap(rom_filename, g_console.zip_extract_mode, S_DELAY_1);
|
||||
}
|
||||
|
||||
if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_R3))
|
||||
browser_update(&browser, rarch_console_get_rom_ext());
|
||||
|
||||
menu_romselect_action_t action = MENU_ROMSELECT_ACTION_NOOP;
|
||||
|
||||
if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_B))
|
||||
action = MENU_ROMSELECT_ACTION_OK;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_R3))
|
||||
{
|
||||
LD_LAUNCH_DASHBOARD LaunchData = { XLD_LAUNCH_DASHBOARD_MAIN_MENU };
|
||||
XLaunchNewImage( NULL, (LAUNCH_DATA*)&LaunchData );
|
||||
}
|
||||
|
||||
if (action != MENU_ROMSELECT_ACTION_NOOP)
|
||||
menu_romselect_iterate(&browser, action);
|
||||
|
||||
old_input_st = input_st;
|
||||
}
|
||||
|
||||
|
@ -1,41 +0,0 @@
|
||||
/**
|
||||
* Surreal 64 Launcher (C) 2003
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version. This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details. You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. To contact the
|
||||
* authors: email: buttza@hotmail.com, lantus@lantus-x.com
|
||||
*/
|
||||
|
||||
#include "Rom.h"
|
||||
|
||||
Rom::Rom()
|
||||
{
|
||||
m_bLoaded = false;
|
||||
}
|
||||
|
||||
Rom::~Rom(void)
|
||||
{
|
||||
}
|
||||
|
||||
bool Rom::Load(const char *szFilename)
|
||||
{
|
||||
if (m_bLoaded)
|
||||
return true;
|
||||
|
||||
convert_char_to_wchar(m_szFilename, szFilename, sizeof(m_szFilename));
|
||||
m_bLoaded = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const wchar_t *Rom::GetFileName()
|
||||
{
|
||||
return m_szFilename;
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
/**
|
||||
* Surreal 64 Launcher (C) 2003
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version. This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details. You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. To contact the
|
||||
* authors: email: buttza@hotmail.com, lantus@lantus-x.com
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
class Rom
|
||||
{
|
||||
public:
|
||||
Rom();
|
||||
~Rom();
|
||||
|
||||
bool Load(const char *szFilename);
|
||||
|
||||
const wchar_t *GetFileName();
|
||||
private:
|
||||
wchar_t m_szFilename[256];
|
||||
bool m_bLoaded;
|
||||
};
|
@ -1,160 +0,0 @@
|
||||
/**
|
||||
* RetroLaunch 2012
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version. This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details. You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. To contact the
|
||||
* authors: Surreal64 CE Team (http://www.emuxtras.net)
|
||||
*/
|
||||
#include <algorithm>
|
||||
#include "RomList.h"
|
||||
|
||||
RomList g_romList;
|
||||
|
||||
bool RLessThan(Rom *elem1, Rom *elem2)
|
||||
{
|
||||
return (elem1->GetFileName() < elem2->GetFileName());
|
||||
}
|
||||
|
||||
RomList::RomList(void)
|
||||
{
|
||||
m_iBaseIndex = 0;
|
||||
m_bLoaded = false;
|
||||
m_szRomPath = "D:\\";
|
||||
}
|
||||
|
||||
RomList::~RomList(void)
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
|
||||
void RomList::Refresh()
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
|
||||
bool RomList::IsLoaded()
|
||||
{
|
||||
return m_bLoaded;
|
||||
}
|
||||
|
||||
void RomList::AddRomToList(Rom *rom, int mode)
|
||||
{
|
||||
std::vector<Rom *> *pList;
|
||||
|
||||
pList = &m_romList;
|
||||
|
||||
// look to see if the rom is already in the list, we dont want duplicates
|
||||
for (int i = 0; i < static_cast<int>(pList->size()); i++)
|
||||
{
|
||||
if (rom == (*pList)[i])
|
||||
return;
|
||||
}
|
||||
|
||||
pList->push_back(rom);
|
||||
std::sort(pList->begin(), pList->end(), RLessThan);
|
||||
}
|
||||
|
||||
void RomList::RemoveRomFromList(Rom *rom, int mode)
|
||||
{
|
||||
std::vector<Rom *> *pList;
|
||||
std::vector<Rom *>::iterator i;
|
||||
|
||||
pList = &m_romList;
|
||||
|
||||
// look to see if the rom is already in the list, we dont want duplicates
|
||||
for (i = pList->begin(); i != pList->end(); i++)
|
||||
{
|
||||
if (rom == *i)
|
||||
{
|
||||
pList->erase(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int RomList::GetBaseIndex()
|
||||
{
|
||||
if (m_iBaseIndex > GetRomListSize() - 1)
|
||||
m_iBaseIndex = GetRomListSize() - 1;
|
||||
if (m_iBaseIndex < 0)
|
||||
m_iBaseIndex = 0;
|
||||
|
||||
return m_iBaseIndex;
|
||||
}
|
||||
|
||||
void RomList::SetBaseIndex(int index)
|
||||
{
|
||||
if (index > GetRomListSize() - 1)
|
||||
index = GetRomListSize() - 1;
|
||||
if (index < 0)
|
||||
index = 0;
|
||||
|
||||
m_iBaseIndex = index;
|
||||
}
|
||||
|
||||
int RomList::GetRomListSize()
|
||||
{
|
||||
return m_romList.size();
|
||||
}
|
||||
|
||||
Rom *RomList::GetRomAt(int index)
|
||||
{
|
||||
return m_romList[index];
|
||||
}
|
||||
|
||||
void RomList::Build()
|
||||
{
|
||||
WIN32_FIND_DATA fd;
|
||||
|
||||
HANDLE hFF = FindFirstFile((m_szRomPath + "*.*").c_str(), &fd);
|
||||
|
||||
do
|
||||
{
|
||||
char ext[_MAX_EXT];
|
||||
|
||||
// get the filename extension
|
||||
_splitpath((m_szRomPath + fd.cFileName).c_str(),
|
||||
NULL, NULL, NULL, ext);
|
||||
|
||||
if (
|
||||
stricmp(ext, ".bin") == 0
|
||||
|| stricmp(ext, ".cue") == 0
|
||||
|| stricmp(ext, ".iso") == 0
|
||||
|| stricmp(ext, ".mdf") == 0
|
||||
|| stricmp(ext, ".gba") == 0
|
||||
)
|
||||
{
|
||||
Rom *rom = new Rom();
|
||||
bool bSuccess = rom->Load((m_szRomPath + fd.cFileName).c_str());
|
||||
|
||||
if (bSuccess)
|
||||
m_romList.push_back(rom);
|
||||
else
|
||||
delete rom;
|
||||
}
|
||||
} while (FindNextFile(hFF, &fd));
|
||||
|
||||
sort(m_romList.begin(), m_romList.end(), RLessThan);
|
||||
|
||||
m_bLoaded = true;
|
||||
}
|
||||
|
||||
void RomList::Destroy()
|
||||
{
|
||||
m_bLoaded = false;
|
||||
m_iBaseIndex = 0;
|
||||
|
||||
std::vector<Rom *>::iterator i;
|
||||
|
||||
for (i = m_romList.begin(); i != m_romList.end(); i++)
|
||||
delete *i;
|
||||
|
||||
m_romList.clear();
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
/**
|
||||
* RetroLaunch 2012
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version. This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details. You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. To contact the
|
||||
* authors: Surreal64 CE Team (http://www.emuxtras.net)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include "Rom.h"
|
||||
|
||||
class RomList
|
||||
{
|
||||
public:
|
||||
RomList(void);
|
||||
~RomList(void);
|
||||
|
||||
void Refresh();
|
||||
void Build();
|
||||
|
||||
bool IsLoaded();
|
||||
|
||||
void AddRomToList(Rom *rom, int mode);
|
||||
void RemoveRomFromList(Rom *rom, int mode);
|
||||
|
||||
int GetBaseIndex();
|
||||
void SetBaseIndex(int index);
|
||||
|
||||
int GetRomListSize();
|
||||
|
||||
Rom *GetRomAt(int index);
|
||||
|
||||
int m_iBaseIndex;
|
||||
|
||||
std::vector<Rom *> m_romList;
|
||||
|
||||
private:
|
||||
void Destroy();
|
||||
|
||||
private:
|
||||
bool m_bLoaded;
|
||||
std::string m_szRomPath;
|
||||
};
|
||||
|
||||
extern RomList g_romList;
|
@ -16,7 +16,10 @@
|
||||
|
||||
#include "RetroLaunch/IoSupport.h"
|
||||
#include "RetroLaunch/MenuManager.h"
|
||||
#include "RetroLaunch/RomList.h"
|
||||
|
||||
#include "../../console/fileio/file_browser.h"
|
||||
|
||||
filebrowser_t browser;
|
||||
|
||||
int menu_init(void)
|
||||
{
|
||||
@ -32,9 +35,9 @@ int menu_init(void)
|
||||
g_IOSupport.Mount("F:", "Harddisk0\\Partition6");
|
||||
g_IOSupport.Mount("G:", "Harddisk0\\Partition7");
|
||||
|
||||
// Load the rom list if it isn't already loaded
|
||||
if (!g_romList.IsLoaded())
|
||||
g_romList.Build();
|
||||
strlcpy(browser.extensions, rarch_console_get_rom_ext(), sizeof(browser.extensions));
|
||||
filebrowser_set_root(&browser, g_console.default_rom_startup_dir);
|
||||
filebrowser_iterate(&browser, FILEBROWSER_ACTION_RESET);
|
||||
|
||||
// Build menu here (Menu state -> Main Menu)
|
||||
g_menuManager.Create();
|
||||
@ -44,7 +47,10 @@ int menu_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void menu_free(void) {}
|
||||
void menu_free(void)
|
||||
{
|
||||
filebrowser_free(&browser);
|
||||
}
|
||||
|
||||
void menu_loop(void)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user