Merge branch '63-add-badges-decals-e-g-for-favorites-completed-games-non-working-games-collections-and-folders' into 575-theme-add-a-modern-clean-switch-like-theme-as-an-official-theme-in-es-de-to-choose-from
66
CHANGELOG.md
|
@ -10,25 +10,28 @@
|
||||||
|
|
||||||
### Detailed list of changes
|
### Detailed list of changes
|
||||||
|
|
||||||
* Added alternative emulators support where additional emulators can be defined in es_systems.xml and be selected
|
* Added alternative emulators support where additional emulators can be defined in es_systems.xml and be selected system-wide or per game via the user interface
|
||||||
system-wide or per game via the user interface
|
* Populated the bundled es_systems.xml files with alternative emulator entries for must RetroArch cores
|
||||||
* Added a virtual keyboard partly based on code from batocera-emulationstation
|
* Added a virtual keyboard partly based on code from batocera-emulationstation
|
||||||
* Added the ability to make complementary game system customizations without having to replace the entire bundled
|
* Added the ability to make complementary game system customizations without having to replace the entire bundled es_systems.xml file
|
||||||
es_systems.xml file
|
* Added support for an optional \<systemsortname\> tag for es_systems.xml that can be used to override the default \<fullname\> systems sorting
|
||||||
|
* Improved the gamelist filter screen to not allow filtering of values where there is no actual data to filter, e.g. Favorites for a system with no favorite games
|
||||||
|
* Grayed out all fields in the gamelist filter screen where there is no data to filter, previously some fields were removed entirely and some could still be used
|
||||||
|
* Added the ability to filter on blank/unknown values for Genre, Player, Developer, Publisher and Alternative emulator.
|
||||||
|
* Added a filter for "Alternative emulator" and sorted the filters in the same order as the metadata editor fields
|
||||||
* Added a menu option to change the application exit key combination
|
* Added a menu option to change the application exit key combination
|
||||||
* Expanded the themeable options for "helpsystem" to support custom button graphics, dimmed text and icon colors,
|
* Expanded the themeable options for "helpsystem" to support custom button graphics, dimmed text and icon colors, upper/lower/camel case and custom spacing
|
||||||
upper/lower/camel case and custom spacing
|
|
||||||
* Added support for using the left and right trigger buttons in the help prompts
|
* Added support for using the left and right trigger buttons in the help prompts
|
||||||
* Removed the "Choose" entry from the help prompts in the gamelist view
|
* Removed the "Choose" entry from the help prompts in the gamelist view
|
||||||
* Changed the "Toggle screensaver" help entry in the system view to simply "Screensaver"
|
* Changed the "Toggle screensaver" help entry in the system view to simply "Screensaver"
|
||||||
* Added support for upscaling bitmap images using linear filtering
|
* Added support for upscaling bitmap images using linear filtering
|
||||||
* Changed the marquee image upscale filtering from nearest neighbor to linear for the launch screen and the gamelist
|
* Changed the marquee image upscale filtering from nearest neighbor to linear for the launch screen and the gamelist views
|
||||||
views
|
|
||||||
* Moved the Media Viewer and Screensaver settings higher in the UI Settings menu
|
* Moved the Media Viewer and Screensaver settings higher in the UI Settings menu
|
||||||
* Moved the game media directory setting to the top of the Other Settings menu, following the new Alternative Emulators
|
* Moved the game media directory setting to the top of the Other Settings menu, following the new Alternative Emulators entry
|
||||||
entry
|
|
||||||
* Added a blinking cursor to TextEditComponent
|
* Added a blinking cursor to TextEditComponent
|
||||||
* Changed the filter description "Text filter (game name)" to "Game name"
|
* Changed the filter description "Text filter (game name)" to "Game name"
|
||||||
|
* Added support for multi-select total count and exclusive multi-select to OptionListComponent
|
||||||
|
* Achieved a massive speed improvement for OptionListComponent by not resizing each added MenuComponent row (most notable in the filter GUI)
|
||||||
* Added support for a new type of "flat style" button to ButtonComponent
|
* Added support for a new type of "flat style" button to ButtonComponent
|
||||||
* Added support for correctly navigating arbitrarily sized ComponentGrid entries, i.e. those spanning multiple cells
|
* Added support for correctly navigating arbitrarily sized ComponentGrid entries, i.e. those spanning multiple cells
|
||||||
* Bundled the bold font version of Fontfabric Akrobat
|
* Bundled the bold font version of Fontfabric Akrobat
|
||||||
|
@ -36,8 +39,8 @@
|
||||||
* Replaced all built-in matrix and vector data types and functions with GLM library equivalents
|
* Replaced all built-in matrix and vector data types and functions with GLM library equivalents
|
||||||
* Replaced some additional math functions and moved the remaining built-in functions to a math utility namespace
|
* Replaced some additional math functions and moved the remaining built-in functions to a math utility namespace
|
||||||
* Added a function to generate MD5 hashes
|
* Added a function to generate MD5 hashes
|
||||||
* Moved the "complex" mode functionality from GuiComplexTextEditPopup into GuiTextEditPopup and removed the source files
|
* Moved the "complex" mode functionality from GuiComplexTextEditPopup into GuiTextEditPopup and removed the source files for the former
|
||||||
for the former
|
* Replaced the String::Utils::trim function with better code and removed some inline text trimming throughout the application
|
||||||
* Increased the warning level for Clang/LLVM and GCC by adding -Wall, -Wpedantic and some additional flags
|
* Increased the warning level for Clang/LLVM and GCC by adding -Wall, -Wpedantic and some additional flags
|
||||||
* Fixed a lot of compiler warnings introduced by the -Wall and -Wpedantic flags
|
* Fixed a lot of compiler warnings introduced by the -Wall and -Wpedantic flags
|
||||||
* Changed the language standard from C++14 to C++17
|
* Changed the language standard from C++14 to C++17
|
||||||
|
@ -46,35 +49,24 @@
|
||||||
|
|
||||||
### Bug fixes
|
### Bug fixes
|
||||||
|
|
||||||
* When multi-scraping in interactive mode with "Auto-accept single game matches" enabled, the game name could not be
|
* When multi-scraping in interactive mode with "Auto-accept single game matches" enabled, the game name could not be refined if there were no games found
|
||||||
refined if there were no games found
|
* When multi-scraping in interactive mode, the game counter was not decreased when skipping games, making it impossible to skip the final games in the queue
|
||||||
* When multi-scraping in interactive mode, the game counter was not decreased when skipping games, making it impossible
|
|
||||||
to skip the final games in the queue
|
|
||||||
* When multi-scraping in interactive mode, "No games found" results could be accepted using the "A" button
|
* When multi-scraping in interactive mode, "No games found" results could be accepted using the "A" button
|
||||||
* When scraping in interactive mode, any refining done using the "Y" button shortcut would not be shown when doing
|
* When scraping in interactive mode, any refining done using the "Y" button shortcut would not be shown when doing another refine using the "Refine search" button
|
||||||
another refine using the "Refine search" button
|
* Removing games from custom collections did not remove their filter index entries
|
||||||
* Input consisting of only whitespace characters would get accepted by TextEditComponent which led to various strange
|
* Input consisting of only whitespace characters would get accepted by TextEditComponent which led to various strange behaviors
|
||||||
behaviors
|
* Leading and trailing whitespace characters would not get trimmed from the collection name when creating a new custom collection
|
||||||
* Leading and trailing whitespace characters would not get trimmed from the collection name when creating a new custom
|
|
||||||
collection
|
|
||||||
* Leading and trailing whitespace characters would get included in scraper search refines and TheGamesDB searches
|
* Leading and trailing whitespace characters would get included in scraper search refines and TheGamesDB searches
|
||||||
* Game name (text) filters were matching the system names for collection systems if the "Show system names in
|
* Game name (text) filters were matching the system names for collection systems if the "Show system names in collections" setting was enabled
|
||||||
collections" setting was enabled
|
* Brackets such as () and [] were filtered from game names in collection systems if the "Show system names in collections" setting was enabled
|
||||||
* Brackets such as () and [] were filtered from game names in collection systems if the "Show system names in
|
|
||||||
collections" setting was enabled
|
|
||||||
* When navigating menus, the separator lines and menu components did not align properly and moved up and down slightly
|
* When navigating menus, the separator lines and menu components did not align properly and moved up and down slightly
|
||||||
* When scrolling in menus, pressing other buttons than "Up" or "Down" did not stop the scrolling which caused all sorts
|
* When scrolling in menus, pressing other buttons than "Up" or "Down" did not stop the scrolling which caused all sorts of weird behavior
|
||||||
of weird behavior
|
* With the menu scale-up effect enabled and entering a submenu before the parent menu was completely scaled up, the parent would get stuck at a semi-scaled size
|
||||||
* With the menu scale-up effect enabled and entering a submenu before the parent menu was completely scaled up, the
|
* Disabling a collection while its gamelist was displayed would lead to a slide transition from a black screen if a gamelist on startup had been set
|
||||||
parent would get stuck at a semi-scaled size
|
* When marking a game to not be counted in the metadata editor and the game was part of a custom collection, no collection disabling notification was displayed
|
||||||
* Disabling a collection while its gamelist was displayed would lead to a slide transition from a black screen if a
|
|
||||||
gamelist on startup had been set
|
|
||||||
* When marking a game to not be counted in the metadata editor and the game was part of a custom collection, no
|
|
||||||
collection disabling notification was displayed
|
|
||||||
* Horizontal sizing of the TextComponent input field was not consistent across different screen resolutions
|
* Horizontal sizing of the TextComponent input field was not consistent across different screen resolutions
|
||||||
* The "sortname" window header was incorrectly spelled when editing this type of entry in the metadata editor
|
* The "sortname" window header was incorrectly spelled when editing this type of entry in the metadata editor
|
||||||
* When the last row of a menu had its text color changed, this color was completely desaturated when navigating to a
|
* When the last row of a menu had its text color changed, this color was completely desaturated when navigating to a button below the list
|
||||||
button below the list
|
|
||||||
|
|
||||||
## Version 1.1.0
|
## Version 1.1.0
|
||||||
|
|
||||||
|
@ -352,6 +344,4 @@ Many bugs have been fixed, and numerous features that were only partially implem
|
||||||
|
|
||||||
* There is an issue with launching games on Windows when using AMD and Intel GPUs. This causes the emulator to just output a blank screen. There is a workaround available for this which is enabled by default and that can be disabled via the menu option "AMD and Intel GPU game launch workaround". The drawback of this workaround is that a white instead of a black screen will be displayed when launching games. If using an Nvidia GPU, it should be safe to disable this option for a slightly better user experience. An alternative workaround is to enable the option "Run in background (while game is launched)".
|
* There is an issue with launching games on Windows when using AMD and Intel GPUs. This causes the emulator to just output a blank screen. There is a workaround available for this which is enabled by default and that can be disabled via the menu option "AMD and Intel GPU game launch workaround". The drawback of this workaround is that a white instead of a black screen will be displayed when launching games. If using an Nvidia GPU, it should be safe to disable this option for a slightly better user experience. An alternative workaround is to enable the option "Run in background (while game is launched)".
|
||||||
|
|
||||||
* On macOS Big Sur (and possibly other OS versions) when connecting a DualShock 4 controller either via Bluetooth or using a USB cable, two separate controller devices are registered in parallel. This is a bug in either macOS or the DualShock driver and it makes it seem as if ES-DE is registering double button presses when actually two separate controller devices are generating identical input. A workaround if using Bluetooth mode is to plug in the USB cable just after connecting the controller, wait a second or two and then remove the cable again. This will remove the cabled device, leaving only the Bluetooth device active. Another workaround is to enable the setting "Only accept input from first controller" in the ES-DE input device settings. The reason why this bug may not be visible in some other games and applications is that ES-DE enables and auto-configures all connected controllers.
|
|
||||||
|
|
||||||
* On Windows when using high DPI displays, if not running ES-DE on the primary monitor and the display where it runs does not have the same scaling percentage as the primary monitor, then the ES-DE resolution will not be properly set. The application will still work and if running in fullscreen mode it may not even be noticeable. This issue is caused by a bug in SDL where the primary display scaling is always used for calculating the display bounds and as such it needs to be fixed in that library. If using the same scaling percentage across all monitors, or if not using high DPI monitors at all, then this issue will not occur.
|
* On Windows when using high DPI displays, if not running ES-DE on the primary monitor and the display where it runs does not have the same scaling percentage as the primary monitor, then the ES-DE resolution will not be properly set. The application will still work and if running in fullscreen mode it may not even be noticeable. This issue is caused by a bug in SDL where the primary display scaling is always used for calculating the display bounds and as such it needs to be fixed in that library. If using the same scaling percentage across all monitors, or if not using high DPI monitors at all, then this issue will not occur.
|
||||||
|
|
226
CMakeLists.txt
|
@ -26,7 +26,7 @@ set(LINUX_CPACK_GENERATOR "DEB" CACHE STRING "CPack generator, DEB or RPM")
|
||||||
|
|
||||||
# Add local find modules to the CMake path.
|
# Add local find modules to the CMake path.
|
||||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake/Utils
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake/Utils
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/CMake/Packages)
|
${CMAKE_CURRENT_SOURCE_DIR}/CMake/Packages)
|
||||||
|
|
||||||
# Define the options.
|
# Define the options.
|
||||||
option(GLES "Set to ON if targeting Embedded OpenGL" ${GLES})
|
option(GLES "Set to ON if targeting Embedded OpenGL" ${GLES})
|
||||||
|
@ -36,11 +36,11 @@ option(CEC "Set to ON to enable CEC" ${CEC})
|
||||||
option(VLC_PLAYER "Set to ON to build the VLC-based video player" ${VLC_PLAYER})
|
option(VLC_PLAYER "Set to ON to build the VLC-based video player" ${VLC_PLAYER})
|
||||||
option(CLANG_TIDY "Set to ON to build using the clang-tidy static analyzer" ${CLANG_TIDY})
|
option(CLANG_TIDY "Set to ON to build using the clang-tidy static analyzer" ${CLANG_TIDY})
|
||||||
|
|
||||||
if (CLANG_TIDY)
|
if(CLANG_TIDY)
|
||||||
find_program(CLANG_TIDY_BINARY NAMES clang-tidy)
|
find_program(CLANG_TIDY_BINARY NAMES clang-tidy)
|
||||||
if (CLANG_TIDY_BINARY STREQUAL "CLANG_TIDY_BINARY-NOTFOUND")
|
if(CLANG_TIDY_BINARY STREQUAL "CLANG_TIDY_BINARY-NOTFOUND")
|
||||||
message("-- CLANG_TIDY was set but the clang-tidy binary was not found")
|
message("-- CLANG_TIDY was set but the clang-tidy binary was not found")
|
||||||
else ()
|
else()
|
||||||
message("-- Building with the clang-tidy static analyzer")
|
message("-- Building with the clang-tidy static analyzer")
|
||||||
set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=*,\
|
set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=*,\
|
||||||
-fuchsia-*,\
|
-fuchsia-*,\
|
||||||
|
@ -76,12 +76,12 @@ set_property(CACHE GLSYSTEM PROPERTY STRINGS "Desktop OpenGL" "Embedded OpenGL")
|
||||||
#---------------------------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------------------------
|
||||||
# Package dependencies.
|
# Package dependencies.
|
||||||
|
|
||||||
if (GLSYSTEM MATCHES "Desktop OpenGL")
|
if(GLSYSTEM MATCHES "Desktop OpenGL")
|
||||||
set(OpenGL_GL_PREFERENCE "GLVND")
|
set(OpenGL_GL_PREFERENCE "GLVND")
|
||||||
find_package(OpenGL REQUIRED)
|
find_package(OpenGL REQUIRED)
|
||||||
else ()
|
else()
|
||||||
find_package(OpenGLES REQUIRED)
|
find_package(OpenGLES REQUIRED)
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
# Skip package dependency checks if we're on Windows.
|
# Skip package dependency checks if we're on Windows.
|
||||||
if(NOT WIN32)
|
if(NOT WIN32)
|
||||||
|
@ -103,73 +103,73 @@ if(CEC)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Add ALSA for Linux.
|
# Add ALSA for Linux.
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
find_package(ALSA REQUIRED)
|
find_package(ALSA REQUIRED)
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------------------------
|
||||||
# Compiler and linker settings.
|
# Compiler and linker settings.
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
message("-- Compiler is Clang/LLVM")
|
message("-- Compiler is Clang/LLVM")
|
||||||
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0.0)
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0.0)
|
||||||
message(SEND_ERROR "You need at least Clang 5.0.0 to compile EmulationStation-DE")
|
message(SEND_ERROR "You need at least Clang 5.0.0 to compile EmulationStation-DE")
|
||||||
endif ()
|
endif()
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
message("-- Compiler is GNU/GCC")
|
message("-- Compiler is GNU/GCC")
|
||||||
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.1)
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.1)
|
||||||
message(SEND_ERROR "You need at least GCC 7.1 to compile EmulationStation-DE")
|
message(SEND_ERROR "You need at least GCC 7.1 to compile EmulationStation-DE")
|
||||||
endif ()
|
endif()
|
||||||
if (WIN32)
|
if(WIN32)
|
||||||
set(CMAKE_CXX_FLAGS "-mwindows ${CMAKE_CXX_FLAGS}")
|
set(CMAKE_CXX_FLAGS "-mwindows ${CMAKE_CXX_FLAGS}")
|
||||||
endif ()
|
endif()
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
message("-- Compiler is MSVC")
|
message("-- Compiler is MSVC")
|
||||||
# If using the MSVC compiler on Windows, disable the built-in min() and max() macros.
|
# If using the MSVC compiler on Windows, disable the built-in min() and max() macros.
|
||||||
add_definitions(-DNOMINMAX)
|
add_definitions(-DNOMINMAX)
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
if (CMAKE_BUILD_TYPE)
|
if(CMAKE_BUILD_TYPE)
|
||||||
message("-- Build type is ${CMAKE_BUILD_TYPE}")
|
message("-- Build type is ${CMAKE_BUILD_TYPE}")
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
# Set up compiler and linker flags for debug, profiling or release builds.
|
# Set up compiler and linker flags for debug, profiling or release builds.
|
||||||
if(CMAKE_BUILD_TYPE MATCHES Debug)
|
if(CMAKE_BUILD_TYPE MATCHES Debug)
|
||||||
# Enable the C++17 standard and disable optimizations as it's a debug build.
|
# Enable the C++17 standard and disable optimizations as it's a debug build.
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17 /Od /DEBUG:FULL")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17 /Od /DEBUG:FULL")
|
||||||
else ()
|
else()
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O0 -Wall -Wpedantic -Wsign-compare -Wnarrowing -Wmissing-field-initializers -Wunused-macros")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O0 -Wall -Wpedantic -Wsign-compare -Wnarrowing -Wmissing-field-initializers -Wunused-macros")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O0")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O0")
|
||||||
endif ()
|
endif()
|
||||||
# If using Clang, then add additional debug data needed by GDB.
|
# If using Clang, then add additional debug data needed by GDB.
|
||||||
# Comment this out if you're using LLDB for debugging as this flag makes the binary
|
# Comment this out if you're using LLDB for debugging as this flag makes the binary
|
||||||
# much larger and the application much slower. On macOS this setting is never enabled
|
# much larger and the application much slower. On macOS this setting is never enabled
|
||||||
# as LLDB is the default debugger on this OS.
|
# as LLDB is the default debugger on this OS.
|
||||||
if (NOT APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
if(NOT APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_DEBUG")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_DEBUG")
|
||||||
endif ()
|
endif()
|
||||||
elseif(CMAKE_BUILD_TYPE MATCHES Profiling)
|
elseif(CMAKE_BUILD_TYPE MATCHES Profiling)
|
||||||
# For the profiling build, we enable optimizations and supply the required profiler flags.
|
# For the profiling build, we enable optimizations and supply the required profiler flags.
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17 /O2 /DEBUG:FULL")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17 /O2 /DEBUG:FULL")
|
||||||
else ()
|
else()
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O2 -pg -g -Wall -Wpedantic -Wsign-compare -Wnarrowing -Wmissing-field-initializers -Wunused-macros")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O2 -pg -g -Wall -Wpedantic -Wsign-compare -Wnarrowing -Wmissing-field-initializers -Wunused-macros")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2 -pg")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2 -pg")
|
||||||
endif ()
|
endif()
|
||||||
else()
|
else()
|
||||||
# Enable the C++17 standard and enable optimizations as it's a release build.
|
# Enable the C++17 standard and enable optimizations as it's a release build.
|
||||||
# This will also disable all assert() macros. Strip the binary too.
|
# This will also disable all assert() macros. Strip the binary too.
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG /std:c++17 /O2 /DEBUG:NONE")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG /std:c++17 /O2 /DEBUG:NONE")
|
||||||
else ()
|
else()
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O2 -DNDEBUG -Wall -Wpedantic -Wsign-compare -Wnarrowing -Wmissing-field-initializers -Wunused-macros")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O2 -DNDEBUG -Wall -Wpedantic -Wsign-compare -Wnarrowing -Wmissing-field-initializers -Wunused-macros")
|
||||||
if (APPLE)
|
if(APPLE)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2")
|
||||||
else ()
|
else()
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2 -s")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2 -s")
|
||||||
endif ()
|
endif()
|
||||||
endif ()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# The following removes half of the ranlib warnings on macOS regarding no symbols for files
|
# The following removes half of the ranlib warnings on macOS regarding no symbols for files
|
||||||
|
@ -180,26 +180,26 @@ if(APPLE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
if (MACOS_CODESIGN_IDENTITY)
|
if(MACOS_CODESIGN_IDENTITY)
|
||||||
message("-- Code signing certificate identity: " ${MACOS_CODESIGN_IDENTITY})
|
message("-- Code signing certificate identity: " ${MACOS_CODESIGN_IDENTITY})
|
||||||
endif ()
|
endif()
|
||||||
if (CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.14)
|
if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.14)
|
||||||
message("-- macOS version 10.13 or lower has been set, so if code signing is enabled, Hardened Runtime will not be used")
|
message("-- macOS version 10.13 or lower has been set, so if code signing is enabled, Hardened Runtime will not be used")
|
||||||
endif ()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------------------------
|
||||||
# Preprocessor directives.
|
# Preprocessor directives.
|
||||||
|
|
||||||
if (GLSYSTEM MATCHES "Desktop OpenGL")
|
if(GLSYSTEM MATCHES "Desktop OpenGL")
|
||||||
add_definitions(-DUSE_OPENGL_21)
|
add_definitions(-DUSE_OPENGL_21)
|
||||||
else ()
|
else()
|
||||||
add_definitions(-DUSE_OPENGLES_10)
|
add_definitions(-DUSE_OPENGLES_10)
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
if (VLC_PLAYER)
|
if(VLC_PLAYER)
|
||||||
add_definitions(-DBUILD_VLC_PLAYER)
|
add_definitions(-DBUILD_VLC_PLAYER)
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
if(DEFINED BCMHOST OR RPI)
|
if(DEFINED BCMHOST OR RPI)
|
||||||
add_definitions(-D_RPI_)
|
add_definitions(-D_RPI_)
|
||||||
|
@ -217,13 +217,13 @@ add_definitions(-DGLM_FORCE_XYZW_ONLY)
|
||||||
# we use /usr on Linux, /usr/pkg on NetBSD and /usr/local on FreeBSD and OpenBSD.
|
# we use /usr on Linux, /usr/pkg on NetBSD and /usr/local on FreeBSD and OpenBSD.
|
||||||
if(NOT WIN32 AND NOT APPLE)
|
if(NOT WIN32 AND NOT APPLE)
|
||||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
set(CMAKE_INSTALL_PREFIX "/usr" CACHE INTERNAL "CMAKE_INSTALL_PREFIX")
|
set(CMAKE_INSTALL_PREFIX "/usr" CACHE INTERNAL "CMAKE_INSTALL_PREFIX")
|
||||||
elseif (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
|
elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
|
||||||
set(CMAKE_INSTALL_PREFIX "/usr/pkg" CACHE INTERNAL "CMAKE_INSTALL_PREFIX")
|
set(CMAKE_INSTALL_PREFIX "/usr/pkg" CACHE INTERNAL "CMAKE_INSTALL_PREFIX")
|
||||||
else ()
|
else()
|
||||||
set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE INTERNAL "CMAKE_INSTALL_PREFIX")
|
set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE INTERNAL "CMAKE_INSTALL_PREFIX")
|
||||||
endif ()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
message("-- Installation prefix is set to " ${CMAKE_INSTALL_PREFIX})
|
message("-- Installation prefix is set to " ${CMAKE_INSTALL_PREFIX})
|
||||||
add_definitions(-DES_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
|
add_definitions(-DES_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
|
||||||
|
@ -239,16 +239,16 @@ endif()
|
||||||
# Include files.
|
# Include files.
|
||||||
|
|
||||||
set(COMMON_INCLUDE_DIRS ${CURL_INCLUDE_DIR}
|
set(COMMON_INCLUDE_DIRS ${CURL_INCLUDE_DIR}
|
||||||
${FFMPEG_INCLUDE_DIRS}
|
${FFMPEG_INCLUDE_DIRS}
|
||||||
${FreeImage_INCLUDE_DIRS}
|
${FreeImage_INCLUDE_DIRS}
|
||||||
${FREETYPE_INCLUDE_DIRS}
|
${FREETYPE_INCLUDE_DIRS}
|
||||||
${PUGIXML_INCLUDE_DIRS}
|
${PUGIXML_INCLUDE_DIRS}
|
||||||
${RAPIDJSON_INCLUDE_DIRS}
|
${RAPIDJSON_INCLUDE_DIRS}
|
||||||
${SDL2_INCLUDE_DIR}
|
${SDL2_INCLUDE_DIR}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/external/CImg
|
${CMAKE_CURRENT_SOURCE_DIR}/external/CImg
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/external/glm
|
${CMAKE_CURRENT_SOURCE_DIR}/external/glm
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/external/nanosvg/src
|
${CMAKE_CURRENT_SOURCE_DIR}/external/nanosvg/src
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/es-core/src)
|
${CMAKE_CURRENT_SOURCE_DIR}/es-core/src)
|
||||||
if(VLC_PLAYER)
|
if(VLC_PLAYER)
|
||||||
set(COMMON_INCLUDE_DIRS ${COMMON_INCLUDE_DIRS} ${VLC_INCLUDE_DIR})
|
set(COMMON_INCLUDE_DIRS ${COMMON_INCLUDE_DIRS} ${VLC_INCLUDE_DIR})
|
||||||
endif()
|
endif()
|
||||||
|
@ -276,69 +276,69 @@ if(DEFINED libCEC_FOUND)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# For Linux, add the ALSA include directory.
|
# For Linux, add the ALSA include directory.
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
list(APPEND COMMON_INCLUDE_DIRS ${ALSA_INCLUDE_DIRS})
|
list(APPEND COMMON_INCLUDE_DIRS ${ALSA_INCLUDE_DIRS})
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
if (DEFINED BCMHOST OR RPI)
|
if(DEFINED BCMHOST OR RPI)
|
||||||
list(APPEND COMMON_INCLUDE_DIRS "${CMAKE_FIND_ROOT_PATH}/opt/vc/include"
|
list(APPEND COMMON_INCLUDE_DIRS "${CMAKE_FIND_ROOT_PATH}/opt/vc/include"
|
||||||
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos"
|
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos"
|
||||||
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vmcs_host/linux"
|
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vmcs_host/linux"
|
||||||
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos/pthreads")
|
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos/pthreads")
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------------------------
|
||||||
# Dependency libraries.
|
# Dependency libraries.
|
||||||
|
|
||||||
if (NOT WIN32)
|
if(NOT WIN32)
|
||||||
set(COMMON_LIBRARIES ${CURL_LIBRARIES}
|
set(COMMON_LIBRARIES ${CURL_LIBRARIES}
|
||||||
${FFMPEG_LIBRARIES}
|
${FFMPEG_LIBRARIES}
|
||||||
${FreeImage_LIBRARIES}
|
${FreeImage_LIBRARIES}
|
||||||
${FREETYPE_LIBRARIES}
|
${FREETYPE_LIBRARIES}
|
||||||
${PUGIXML_LIBRARIES}
|
${PUGIXML_LIBRARIES}
|
||||||
${SDL2_LIBRARY})
|
${SDL2_LIBRARY})
|
||||||
if (VLC_PLAYER)
|
if(VLC_PLAYER)
|
||||||
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${VLC_LIBRARIES})
|
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${VLC_LIBRARIES})
|
||||||
endif ()
|
endif()
|
||||||
elseif (WIN32)
|
elseif(WIN32)
|
||||||
if (DEFINED MSVC)
|
if(DEFINED MSVC)
|
||||||
set(COMMON_LIBRARIES "${PROJECT_SOURCE_DIR}/avcodec.lib"
|
set(COMMON_LIBRARIES "${PROJECT_SOURCE_DIR}/avcodec.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/avfilter.lib"
|
"${PROJECT_SOURCE_DIR}/avfilter.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/avformat.lib"
|
"${PROJECT_SOURCE_DIR}/avformat.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/avutil.lib"
|
"${PROJECT_SOURCE_DIR}/avutil.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/swresample.lib"
|
"${PROJECT_SOURCE_DIR}/swresample.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/swscale.lib"
|
"${PROJECT_SOURCE_DIR}/swscale.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/FreeImage.lib"
|
"${PROJECT_SOURCE_DIR}/FreeImage.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/glew32.lib"
|
"${PROJECT_SOURCE_DIR}/glew32.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/libcurl-x64.lib"
|
"${PROJECT_SOURCE_DIR}/libcurl-x64.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/freetype.lib"
|
"${PROJECT_SOURCE_DIR}/freetype.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/pugixml.lib"
|
"${PROJECT_SOURCE_DIR}/pugixml.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/SDL2main.lib"
|
"${PROJECT_SOURCE_DIR}/SDL2main.lib"
|
||||||
"${PROJECT_SOURCE_DIR}/SDL2.lib"
|
"${PROJECT_SOURCE_DIR}/SDL2.lib"
|
||||||
"Winmm.dll")
|
"Winmm.dll")
|
||||||
if (VLC_PLAYER)
|
if(VLC_PLAYER)
|
||||||
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} "${PROJECT_SOURCE_DIR}/libvlc.lib")
|
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} "${PROJECT_SOURCE_DIR}/libvlc.lib")
|
||||||
endif ()
|
endif()
|
||||||
else ()
|
else()
|
||||||
set(COMMON_LIBRARIES "${PROJECT_SOURCE_DIR}/avcodec-58.dll"
|
set(COMMON_LIBRARIES "${PROJECT_SOURCE_DIR}/avcodec-58.dll"
|
||||||
"${PROJECT_SOURCE_DIR}/avfilter-7.dll"
|
"${PROJECT_SOURCE_DIR}/avfilter-7.dll"
|
||||||
"${PROJECT_SOURCE_DIR}/avformat-58.dll"
|
"${PROJECT_SOURCE_DIR}/avformat-58.dll"
|
||||||
"${PROJECT_SOURCE_DIR}/avutil-56.dll"
|
"${PROJECT_SOURCE_DIR}/avutil-56.dll"
|
||||||
"${PROJECT_SOURCE_DIR}/swresample-3.dll"
|
"${PROJECT_SOURCE_DIR}/swresample-3.dll"
|
||||||
"${PROJECT_SOURCE_DIR}/swscale-5.dll"
|
"${PROJECT_SOURCE_DIR}/swscale-5.dll"
|
||||||
"${PROJECT_SOURCE_DIR}/FreeImage.dll"
|
"${PROJECT_SOURCE_DIR}/FreeImage.dll"
|
||||||
"${PROJECT_SOURCE_DIR}/glew32.dll"
|
"${PROJECT_SOURCE_DIR}/glew32.dll"
|
||||||
"${PROJECT_SOURCE_DIR}/libcurl-x64.dll"
|
"${PROJECT_SOURCE_DIR}/libcurl-x64.dll"
|
||||||
"${PROJECT_SOURCE_DIR}/libfreetype.dll"
|
"${PROJECT_SOURCE_DIR}/libfreetype.dll"
|
||||||
"${PROJECT_SOURCE_DIR}/libpugixml.dll"
|
"${PROJECT_SOURCE_DIR}/libpugixml.dll"
|
||||||
"${PROJECT_SOURCE_DIR}/libSDL2main.a"
|
"${PROJECT_SOURCE_DIR}/libSDL2main.a"
|
||||||
"${PROJECT_SOURCE_DIR}/SDL2.dll"
|
"${PROJECT_SOURCE_DIR}/SDL2.dll"
|
||||||
"mingw32"
|
"mingw32"
|
||||||
"Winmm.dll")
|
"Winmm.dll")
|
||||||
if (VLC_PLAYER)
|
if(VLC_PLAYER)
|
||||||
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} "${PROJECT_SOURCE_DIR}/libvlc.dll")
|
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} "${PROJECT_SOURCE_DIR}/libvlc.dll")
|
||||||
endif ()
|
endif()
|
||||||
endif ()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
|
@ -366,9 +366,9 @@ if(DEFINED libCEC_FOUND)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Add ALSA for Linux libraries.
|
# Add ALSA for Linux libraries.
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
list(APPEND COMMON_LIBRARIES ${ALSA_LIBRARY})
|
list(APPEND COMMON_LIBRARIES ${ALSA_LIBRARY})
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
if(DEFINED BCMHOST)
|
if(DEFINED BCMHOST)
|
||||||
link_directories("${CMAKE_FIND_ROOT_PATH}/opt/vc/lib")
|
link_directories("${CMAKE_FIND_ROOT_PATH}/opt/vc/lib")
|
||||||
|
@ -378,11 +378,11 @@ elseif(RPI)
|
||||||
list(APPEND COMMON_LIBRARIES ${OPENGLES_LIBRARIES})
|
list(APPEND COMMON_LIBRARIES ${OPENGLES_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (GLSYSTEM MATCHES "Desktop OpenGL")
|
if(GLSYSTEM MATCHES "Desktop OpenGL")
|
||||||
list(APPEND COMMON_LIBRARIES ${OPENGL_LIBRARIES})
|
list(APPEND COMMON_LIBRARIES ${OPENGL_LIBRARIES})
|
||||||
else ()
|
else()
|
||||||
list(APPEND COMMON_LIBRARIES EGL ${OPENGLES_LIBRARIES})
|
list(APPEND COMMON_LIBRARIES EGL ${OPENGLES_LIBRARIES})
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------------------------
|
||||||
# Build directories.
|
# Build directories.
|
||||||
|
|
|
@ -60,6 +60,7 @@ https://rapidjson.org
|
||||||
SDL \
|
SDL \
|
||||||
https://www.libsdl.org
|
https://www.libsdl.org
|
||||||
|
|
||||||
|
|
||||||
# Code
|
# Code
|
||||||
|
|
||||||
Some code (like the virtual keyboard) was borrowed from Batocera.linux \
|
Some code (like the virtual keyboard) was borrowed from Batocera.linux \
|
||||||
|
@ -71,6 +72,7 @@ https://www.bzflag.org
|
||||||
A few of the GLSL shaders were borrowed from the RetroArch project \
|
A few of the GLSL shaders were borrowed from the RetroArch project \
|
||||||
https://www.retroarch.com
|
https://www.retroarch.com
|
||||||
|
|
||||||
|
|
||||||
# Resources
|
# Resources
|
||||||
|
|
||||||
Akrobat font \
|
Akrobat font \
|
||||||
|
|
111
INSTALL-DEV.md
|
@ -125,9 +125,7 @@ pkg_add vlc
|
||||||
|
|
||||||
In the same manner as for FreeBSD, Clang/LLVM and cURL should already be installed by default.
|
In the same manner as for FreeBSD, Clang/LLVM and cURL should already be installed by default.
|
||||||
|
|
||||||
RapidJSON is not part of the OpenBSD ports/package collection as of v6.8, so you need to compile it yourself. At the
|
RapidJSON is not part of the OpenBSD ports/package collection as of v6.8, so you need to compile it yourself. At the time of writing, the latest release v1.1.0 does not compile on OpenBSD, so you need to use the latest available code from the master branch:
|
||||||
time of writing, the latest release v1.1.0 does not compile on OpenBSD, so you need to use the latest available code
|
|
||||||
from the master branch:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
git clone https://github.com/Tencent/rapidjson.git
|
git clone https://github.com/Tencent/rapidjson.git
|
||||||
|
@ -867,7 +865,6 @@ nmake
|
||||||
```
|
```
|
||||||
|
|
||||||
MinGW:
|
MinGW:
|
||||||
|
|
||||||
```
|
```
|
||||||
cmake -G "MinGW Makefiles" -DBUILD_SHARED_LIBS=ON .
|
cmake -G "MinGW Makefiles" -DBUILD_SHARED_LIBS=ON .
|
||||||
make
|
make
|
||||||
|
@ -877,13 +874,14 @@ make
|
||||||
|
|
||||||
For RapidJSON you don't need to compile anything, you just need the include files.
|
For RapidJSON you don't need to compile anything, you just need the include files.
|
||||||
|
|
||||||
At the time of writing, the latest release v1.1.0 generates some compiler warnings on Windows, but this can be avoided
|
At the time of writing, the latest release v1.1.0 generates some compiler warnings on Windows, but this can be avoided by using the latest available code from the master branch:
|
||||||
by using the latest available code from the master branch:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
git clone git://github.com/Tencent/rapidjson.git
|
git clone git://github.com/Tencent/rapidjson.git
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Clone the ES-DE repository:**
|
**Clone the ES-DE repository:**
|
||||||
|
|
||||||
This works the same as on Unix or macOS, just run the following:
|
This works the same as on Unix or macOS, just run the following:
|
||||||
|
@ -1398,44 +1396,24 @@ For the following options, the es_settings.xml file is immediately updated/saved
|
||||||
--show-hidden-games
|
--show-hidden-games
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## es_systems.xml
|
## es_systems.xml
|
||||||
|
|
||||||
The es_systems.xml file contains the game systems configuration data for ES-DE, written in XML format. This defines the
|
The es_systems.xml file contains the game systems configuration data for ES-DE, written in XML format. This defines the system name, the full system name, the ROM path, the allowed file extensions, the launch command, the platform (for scraping) and the theme to use.
|
||||||
system name, the full system name, the ROM path, the allowed file extensions, the launch command, the platform (for
|
|
||||||
scraping) and the theme to use.
|
|
||||||
|
|
||||||
ES-DE ships with a comprehensive `es_systems.xml` file and most users will probably never need to make any
|
ES-DE ships with a comprehensive `es_systems.xml` file and most users will probably never need to make any customizations. But there may be special circumstances such as wanting to use different emulators for some game systems or perhaps to add additional systems altogether.
|
||||||
customizations. But there may be special circumstances such as wanting to use different emulators for some game systems
|
|
||||||
or perhaps to add additional systems altogether.
|
|
||||||
|
|
||||||
To accomplish this, ES-DE supports customizations via a separate es_systems.xml file that is to be placed in
|
To accomplish this, ES-DE supports customizations via a separate es_systems.xml file that is to be placed in the `custom_systems` folder in the application home directory, i.e. `~/.emulationstation/custom_systems/es_systems.xml`. (The tilde symbol `~` translates to `$HOME` on Unix and macOS, and to `%HOMEPATH%` on Windows unless overridden via the --home command line option.)
|
||||||
the `custom_systems` folder in the application home directory, i.e. `~/.emulationstation/custom_systems/es_systems.xml`
|
|
||||||
. (The tilde symbol `~` translates to `$HOME` on Unix and macOS, and to `%HOMEPATH%` on Windows unless overridden via
|
|
||||||
the --home command line option.)
|
|
||||||
|
|
||||||
This custom file functionality is designed to be complementary to the bundled es_systems.xml file, meaning you should
|
This custom file functionality is designed to be complementary to the bundled es_systems.xml file, meaning you should only add entries to the custom configuration file for game systems that you actually want to add or override. So to for example customize a single system, this file should only contain a single `<system>` tag. The structure of the custom file is identical to the bundled file with the exception of an additional optional tag named `<loadExclusive/>`. If this is placed in the custom es_systems.xml file, ES-DE will not load the bundled file. This is normally not recommended and should only be used for special situations. At the end of this section you can find an example of a custom es_systems.xml file.
|
||||||
only add entries to the custom configuration file for game systems that you actually want to add or override. So to for
|
|
||||||
example customize a single system, this file should only contain a single `<system>` tag. The structure of the custom
|
|
||||||
file is identical to the bundled file with the exception of an additional optional tag named `<loadExclusive/>`. If this
|
|
||||||
is placed in the custom es_systems.xml file, ES-DE will not load the bundled file. This is normally not recommended and
|
|
||||||
should only be used for special situations. At the end of this section you can find an example of a custom
|
|
||||||
es_systems.xml file.
|
|
||||||
|
|
||||||
The bundled es_systems.xml file is located in the resources directory that is part of the application installation. For
|
The bundled es_systems.xml file is located in the resources directory that is part of the application installation. For example this could be `/usr/share/emulationstation/resources/systems/unix/es_systems.xml` on Unix, `/Applications/EmulationStation Desktop Edition.app/Contents/Resources/resources/systems/macos/es_systems.xml` on macOS or `C:\Program Files\EmulationStation-DE\resources\systems\windows\es_systems.xml` on Windows. The actual location may differ from these examples of course, depending on where ES-DE has been installed.
|
||||||
example this could be `/usr/share/emulationstation/resources/systems/unix/es_systems.xml` on
|
|
||||||
Unix, `/Applications/EmulationStation Desktop Edition.app/Contents/Resources/resources/systems/macos/es_systems.xml` on
|
|
||||||
macOS or `C:\Program Files\EmulationStation-DE\resources\systems\windows\es_systems.xml` on Windows. The actual location
|
|
||||||
may differ from these examples of course, depending on where ES-DE has been installed.
|
|
||||||
|
|
||||||
It doesn't matter in which order you define the systems as they will be sorted by the full system name inside the
|
It doesn't matter in which order you define the systems as they will be sorted by the `<fullname>` tag or by the optional `<systemsortname>` tag when displayed inside the application. But it's still a good idea to add the systems in alphabetical order to make the configuration file easier to maintain.
|
||||||
application, but it's still probably a good idea to add them in alphabetical order to make the file easier to maintain.
|
|
||||||
|
|
||||||
Keep in mind that you have to set up your emulators separately from ES-DE as the es_systems.xml file assumes that your
|
Keep in mind that you have to set up your emulators separately from ES-DE as the es_systems.xml file assumes that your emulator environment is properly configured.
|
||||||
emulator environment is properly configured.
|
|
||||||
|
|
||||||
Below is an overview of the file layout with various examples. For the command tag, the newer es_find_rules.xml logic
|
Below is an overview of the file layout with various examples. For the command tag, the newer es_find_rules.xml logic described later in this document removes the need for most of the legacy options, but they are still supported for special configurations and for backward compatibility with old configuration files.
|
||||||
described later in this document removes the need for most of the legacy options, but they are still supported for
|
|
||||||
special configurations and for backward compatibility with old configuration files.
|
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
|
@ -1452,6 +1430,12 @@ special configurations and for backward compatibility with old configuration fil
|
||||||
<!-- The full system name, used for sorting the systems, for selecting the systems to multi-scrape etc. -->
|
<!-- The full system name, used for sorting the systems, for selecting the systems to multi-scrape etc. -->
|
||||||
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
||||||
|
|
||||||
|
<!-- By default the systems are sorted by their full names, but this can be overridden by setting the optional
|
||||||
|
<systemsortname> tag to an arbitrary value. As far as sorting is concerned, the effect will be identical to
|
||||||
|
changing the <fullname> tag. Apart for system sorting, this tag has no effect and its actual value will not
|
||||||
|
be displayed anywhere within the appliction. -->
|
||||||
|
<systemsortname>Super Nintendo</systemsortname>
|
||||||
|
|
||||||
<!-- The path to look for ROMs in. '~' will be expanded to $HOME or %HOMEPATH%, depending on the operating system.
|
<!-- The path to look for ROMs in. '~' will be expanded to $HOME or %HOMEPATH%, depending on the operating system.
|
||||||
The optional %ROMPATH% variable will expand to the path defined in the setting ROMDirectory in es_settings.xml.
|
The optional %ROMPATH% variable will expand to the path defined in the setting ROMDirectory in es_settings.xml.
|
||||||
All subdirectories (and non-recursive links) will be included. -->
|
All subdirectories (and non-recursive links) will be included. -->
|
||||||
|
@ -1466,13 +1450,15 @@ special configurations and for backward compatibility with old configuration fil
|
||||||
file. This is the recommended way to configure the launch command. -->
|
file. This is the recommended way to configure the launch command. -->
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
||||||
|
|
||||||
<!-- It's possible to define alternative emulators by adding additional command tags for a system. When doing this,
|
<!-- It's possible to define alternative emulators by adding additional command tags for a system. When doing this, the
|
||||||
the "label" attribute is mandatory for all tags. It's these labels that will be shown in the user interface when
|
"label" attribute is mandatory for all tags. It's these labels that will be shown in the user interface when selecting the
|
||||||
selecting the alternative emulators either system-wide or per game. The first row will be the default emulator. -->
|
alternative emulator either system-wide or per game. The first row will be the default emulator. -->
|
||||||
<command label="Nestopia UE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nestopia_libretro.so %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
||||||
<command label="FCEUmm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fceumm_libretro.so %ROM%</command>
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM%</command>
|
||||||
<command label="Mesen">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen_libretro.so %ROM%</command>
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
||||||
<command label="QuickNES">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/quicknes_libretro.so %ROM%</command>
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM%</command>
|
||||||
|
<command label="Beetle Supafaust">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supafaust_libretro.so %ROM%</command>
|
||||||
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM%</command>
|
||||||
|
|
||||||
<!-- This example for Unix will search for RetroArch in the PATH environment variable and it also has an absolute path to
|
<!-- This example for Unix will search for RetroArch in the PATH environment variable and it also has an absolute path to
|
||||||
the snes9x_libretro core, If there are spaces in the path or file name, you must enclose them in quotation marks, such as
|
the snes9x_libretro core, If there are spaces in the path or file name, you must enclose them in quotation marks, such as
|
||||||
|
@ -1590,9 +1576,7 @@ And finally one for Windows:
|
||||||
</system>
|
</system>
|
||||||
```
|
```
|
||||||
|
|
||||||
As well, here's an example for Unix of a custom es_systems.xml file placed in ~/.emulationstation/custom_systems/ that
|
As well, here's an example for Unix of a custom es_systems.xml file placed in ~/.emulationstation/custom_systems/ that overrides a single game system from the bundled configuration file:
|
||||||
overrides a single game system from the bundled configuration file:
|
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<!-- This is a custom ES-DE game systems configuration file for Unix -->
|
<!-- This is a custom ES-DE game systems configuration file for Unix -->
|
||||||
|
@ -1609,8 +1593,7 @@ overrides a single game system from the bundled configuration file:
|
||||||
</systemList>
|
</systemList>
|
||||||
```
|
```
|
||||||
|
|
||||||
If adding the `<loadExclusive/>` tag to the file, the bundled es_systems.xml file will not be processed. For this
|
If adding the `<loadExclusive/>` tag to the file, the bundled es_systems.xml file will not be processed. For this example it wouldn't be a very good idea as NES would then be the only platform that could be used in ES-DE.
|
||||||
example it wouldn't be a very good idea as NES would then be the only platform that could be used in ES-DE.
|
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
|
@ -1629,15 +1612,43 @@ example it wouldn't be a very good idea as NES would then be the only platform t
|
||||||
</systemList>
|
</systemList>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Here is yet another example with the addition of the `snes` system where some file extensions and alternative emulator entries have been removed, and the full name and sorting have been modified.
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!-- This is a custom ES-DE game systems configuration file for Unix -->
|
||||||
|
<systemList>
|
||||||
|
<system>
|
||||||
|
<name>nes</name>
|
||||||
|
<fullname>Nintendo Entertainment System</fullname>
|
||||||
|
<path>%ROMPATH%/nes</path>
|
||||||
|
<extension>.nes .NES .zip .ZIP</extension>
|
||||||
|
<command>/usr/games/fceux %ROM%</command>
|
||||||
|
<platform>nes</platform>
|
||||||
|
<theme>nes</theme>
|
||||||
|
</system>
|
||||||
|
<system>
|
||||||
|
<name>snes</name>
|
||||||
|
<fullname>Super Nintendo</fullname>
|
||||||
|
<systemsortname>Nintendo SNES (Super Nintendo)</systemsortname>
|
||||||
|
<path>%ROMPATH%/snes</path>
|
||||||
|
<extension>.smc .SMC .sfc .SFC .swc .SWC .bin .BIN .mgd .MGD .7z .7Z .zip .ZIP</extension>
|
||||||
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
||||||
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
||||||
|
<platform>snes</platform>
|
||||||
|
<theme>snes</theme>
|
||||||
|
</system>
|
||||||
|
</systemList>
|
||||||
|
```
|
||||||
|
|
||||||
## es_find_rules.xml
|
## es_find_rules.xml
|
||||||
|
|
||||||
This file makes it possible to define rules for where to search for the emulator binaries and emulator cores.
|
This file makes it possible to define rules for where to search for the emulator binaries and emulator cores.
|
||||||
|
|
||||||
The file is located in the resources directory in the same location as the es_systems.xml file, but a customized copy
|
The file is located in the resources directory in the same location as the es_systems.xml file, but a customized copy can be placed in ~/.emulationstation/custom_systems, which will override the bundled file.
|
||||||
can be placed in ~/.emulationstation/custom_systems, which will override the bundled file.
|
|
||||||
|
|
||||||
Here's an example es_find_rules.xml file for Unix:
|
Here's an example es_find_rules.xml file for Unix:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<!-- This is the ES-DE find rules configuration file for Unix -->
|
<!-- This is the ES-DE find rules configuration file for Unix -->
|
||||||
|
|
|
@ -466,6 +466,8 @@ or to specify only a portion of the value of a theme property:
|
||||||
- The "genre" metadata.
|
- The "genre" metadata.
|
||||||
* `text name="md_players"` - ALL
|
* `text name="md_players"` - ALL
|
||||||
- The "players" metadata (number of players the game supports).
|
- The "players" metadata (number of players the game supports).
|
||||||
|
* `badges name="md_badges"` - ALL
|
||||||
|
- The "badges" metadata. Displayed as a group of badges that indicate boolean metadata such as favorite, broken.
|
||||||
* `datetime name="md_lastplayed"` - ALL
|
* `datetime name="md_lastplayed"` - ALL
|
||||||
- The "lastplayed" metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago").
|
- The "lastplayed" metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago").
|
||||||
* `text name="md_playcount"` - ALL
|
* `text name="md_playcount"` - ALL
|
||||||
|
@ -521,6 +523,8 @@ or to specify only a portion of the value of a theme property:
|
||||||
- The "genre" metadata.
|
- The "genre" metadata.
|
||||||
* `text name="md_players"` - ALL
|
* `text name="md_players"` - ALL
|
||||||
- The "players" metadata (number of players the game supports).
|
- The "players" metadata (number of players the game supports).
|
||||||
|
* `badges name="md_badges"` - ALL
|
||||||
|
- The "badges" metadata. Displayed as a group of badges that indicate boolean metadata such as favorite, broken.
|
||||||
* `datetime name="md_lastplayed"` - ALL
|
* `datetime name="md_lastplayed"` - ALL
|
||||||
- The "lastplayed" metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago").
|
- The "lastplayed" metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago").
|
||||||
* `text name="md_playcount"` - ALL
|
* `text name="md_playcount"` - ALL
|
||||||
|
@ -576,6 +580,8 @@ or to specify only a portion of the value of a theme property:
|
||||||
- The "genre" metadata.
|
- The "genre" metadata.
|
||||||
* `text name="md_players"` - ALL
|
* `text name="md_players"` - ALL
|
||||||
- The "players" metadata (number of players the game supports).
|
- The "players" metadata (number of players the game supports).
|
||||||
|
* `badges name="md_badges"` - ALL
|
||||||
|
- The "badges" metadata. Displayed as a group of badges that indicate boolean metadata such as favorite, broken.
|
||||||
* `datetime name="md_lastplayed"` - ALL
|
* `datetime name="md_lastplayed"` - ALL
|
||||||
- The "lastplayed" metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago").
|
- The "lastplayed" metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago").
|
||||||
* `text name="md_playcount"` - ALL
|
* `text name="md_playcount"` - ALL
|
||||||
|
@ -909,6 +915,45 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice
|
||||||
`button_back_XBOX360`,
|
`button_back_XBOX360`,
|
||||||
`button_start_XBOX360`.
|
`button_start_XBOX360`.
|
||||||
|
|
||||||
|
#### badges
|
||||||
|
|
||||||
|
* `pos` - type: NORMALIZED_PAIR.
|
||||||
|
* `size` - type: NORMALIZED_PAIR.
|
||||||
|
- Possible combinations:
|
||||||
|
- `w h` - Dimensions of the badges container. The badges will be scaled to fit within these dimensions.
|
||||||
|
* `origin` - type: NORMALIZED_PAIR.
|
||||||
|
- Where on the component `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the component exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themeable, "ORIGIN" is implied.
|
||||||
|
* `direction` - type: STRING.
|
||||||
|
- Valid values are "row" or "column". Controls the primary layout direction (line axis) for the badges. Lines will fill up in the specified direction.
|
||||||
|
* `align` - type: STRING.
|
||||||
|
- Valid values are "start", "center", "end", or "stretch". Controls orthogonal alignment to the line axis. "stretch" will stretch the badges to fill-up the line width.
|
||||||
|
* `itemsPerLine` - type: FLOAT.
|
||||||
|
- Number of badges that fit on a line. When more badges are available a new line will be started.
|
||||||
|
* `lines` - type: FLOAT.
|
||||||
|
- The number of lines available.
|
||||||
|
* `itemMargin` - type: NORMALIZED_PAIR.
|
||||||
|
- The margins between badges. Possible combinations:
|
||||||
|
- `x y` - horizontal and vertical margins.
|
||||||
|
* `slots` - type: STRING.
|
||||||
|
- The badge types that should be displayed. Should be specified as a dist of strings separated by spaces. The order will be followed when placing badges on the screen.
|
||||||
|
- Available badges are:
|
||||||
|
- "favorite": Will be shown when the game is marked as favorite.
|
||||||
|
- "completed": Will be shown when the game is marked as completed.
|
||||||
|
- "kidgame": Will be shown when the game is marked as a kids game.
|
||||||
|
- "broken": Will be shown when the game is marked as broken.
|
||||||
|
- "altemulator": Will be shown when an alternative emulator is setup for the game.
|
||||||
|
* `customBadgeIcon` - type: PATH.
|
||||||
|
- A badge icon override. Specify the badge type in the attribute `badge`. The available badges are:
|
||||||
|
`favorite`,
|
||||||
|
`completed`,
|
||||||
|
`kidgame`,
|
||||||
|
`broken`,
|
||||||
|
`altemulator`
|
||||||
|
* `visible` - type: BOOLEAN.
|
||||||
|
- If true, component will be rendered, otherwise rendering will be skipped. Can be used to hide elements from a particular view.
|
||||||
|
* `zIndex` - type: FLOAT.
|
||||||
|
- z-index value for component. Components will be rendered in order of z-index value from low to high.
|
||||||
|
|
||||||
#### carousel
|
#### carousel
|
||||||
|
|
||||||
* `type` - type: STRING.
|
* `type` - type: STRING.
|
||||||
|
|
352
USERGUIDE-DEV.md
|
@ -73,37 +73,17 @@ There's not really much to say about these operating systems, just install ES-DE
|
||||||
|
|
||||||
Upon first startup, ES-DE will create its `~/.emulationstation` home directory.
|
Upon first startup, ES-DE will create its `~/.emulationstation` home directory.
|
||||||
|
|
||||||
On Unix this means /home/\<username\>/.emulationstation/, on macOS /Users/\<username\>/.emulationstation/ and on Windows
|
On Unix this means /home/\<username\>/.emulationstation/, on macOS /Users/\<username\>/.emulationstation/ and on Windows C:\Users\\<username\>\\.emulationstation\
|
||||||
C:\Users\\<username\>\\.emulationstation\
|
|
||||||
|
|
||||||
**Note:** As of ES-DE v1.1 there is no internationalization support, which means that the application will always
|
**Note:** As of ES-DE v1.1 there is no internationalization support, which means that the application will always require the physical rather than the localized path to your home directory. For instance on macOS configured for the Swedish language /Users/myusername will be the physical path but /Användare/myusername is the localized path that is actually shown in the user interface. The same is true on Windows where the directories would be C:\Users\myusername and C:\Användare\myusername respectively. If attempting to enter the localized path for any directory-related setting, ES-DE will not be able to find it. But it's always possible to use the tilde `~` symbol when referring to your home directory, which ES-DE will expand to the physical location regardless of what language you have configured for your operating system. If you're using an English-localized system, this whole point is irrelevant as the physical and localized paths are then identical.
|
||||||
require the physical rather than the localized path to your home directory. For instance on macOS configured for the
|
|
||||||
Swedish language /Users/myusername will be the physical path but /Användare/myusername is the localized path that is
|
|
||||||
actually shown in the user interface. The same is true on Windows where the directories would be C:\Users\myusername and
|
|
||||||
C:\Användare\myusername respectively. If attempting to enter the localized path for any directory-related setting, ES-DE
|
|
||||||
will not be able to find it. But it's always possible to use the tilde `~` symbol when referring to your home directory,
|
|
||||||
which ES-DE will expand to the physical location regardless of what language you have configured for your operating
|
|
||||||
system. If you're using an English-localized system, this whole point is irrelevant as the physical and localized paths
|
|
||||||
are then identical.
|
|
||||||
|
|
||||||
It's possible to override the home directory path using the --home command line option, but this is normally required
|
It's possible to override the home directory path using the --home command line option, but this is normally required only for very special situations so we can safely ignore that option for now.
|
||||||
only for very special situations so we can safely ignore that option for now.
|
|
||||||
|
|
||||||
Also on first startup the configuration file `es_settings.xml` will be generated in the ES-DE home directory, containing
|
Also on first startup the configuration file `es_settings.xml` will be generated in the ES-DE home directory, containing all the application settings at their default values. Following this, a file named `es_systems.xml` will be loaded from the resources directory (which is part of the ES-DE installation). This file contains the game system definitions including which emulator to use per platform. For some systems there are also alternative emulators defined which can be applied system-wide or per game. How that works is explained later in this guide. A customized systems configuration file can also be used, as described in the next section.
|
||||||
all the application settings at their default values. Following this, a file named `es_systems.xml` will be loaded from
|
|
||||||
the resources directory (which is part of the ES-DE installation). This file contains the game system definitions
|
|
||||||
including which emulator to use per platform. For some systems there are also alternative emulators defined which can be
|
|
||||||
applied system-wide or per game. How that works is explained later in this guide. A customized systems configuration
|
|
||||||
file can also be used, as described in the next section.
|
|
||||||
|
|
||||||
There's an application log file created in the ES-DE home directory named `es_log.txt`, please refer to this in case of
|
There's an application log file created in the ES-DE home directory named `es_log.txt`, please refer to this in case of any issues as it should hopefully provide information on what went wrong. Starting ES-DE with the --debug flag provides even more detailed information.
|
||||||
any issues as it should hopefully provide information on what went wrong. Starting ES-DE with the --debug flag provides
|
|
||||||
even more detailed information.
|
|
||||||
|
|
||||||
After ES-DE finds at least one game file, it will populate that game system and the application will start. If there are
|
After ES-DE finds at least one game file, it will populate that game system and the application will start. If there are no game files, a dialog will be shown explaining that you need to install your game files into your ROMs directory. You will also be given a choice to change that ROMs directory path if you don't want to use the default one. As well you have the option to generate the complete game systems directory structure based on information in es_systems.xml.
|
||||||
no game files, a dialog will be shown explaining that you need to install your game files into your ROMs directory. You
|
|
||||||
will also be given a choice to change that ROMs directory path if you don't want to use the default one. As well you
|
|
||||||
have the option to generate the complete game systems directory structure based on information in es_systems.xml.
|
|
||||||
|
|
||||||
When generating the directory structure, a file named systeminfo.txt will be created in each game system folder which will provide you with some information about the system. Here's an example for the _gc_ system as seen on macOS:
|
When generating the directory structure, a file named systeminfo.txt will be created in each game system folder which will provide you with some information about the system. Here's an example for the _gc_ system as seen on macOS:
|
||||||
```
|
```
|
||||||
|
@ -126,11 +106,9 @@ Theme folder:
|
||||||
gc
|
gc
|
||||||
```
|
```
|
||||||
|
|
||||||
The primary use of this file is to see which RetroArch core the system needs, which you will have to install manually
|
The primary use of this file is to see which RetroArch core the system needs, which you will have to install manually from inside the RetroArch user interface. Also the supported file extensions can be quite useful to know.
|
||||||
from inside the RetroArch user interface. Also the supported file extensions can be quite useful to know.
|
|
||||||
|
|
||||||
In addition to this, a file named systems.txt will be created in the root of the ROMs directory which shows the mapping
|
In addition to this, a file named systems.txt will be created in the root of the ROMs directory which shows the mapping between the directory names and the full system names.
|
||||||
between the directory names and the full system names.
|
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
|
@ -140,59 +118,44 @@ genesis: Sega Genesis
|
||||||
gx4000: Amstrad GX4000
|
gx4000: Amstrad GX4000
|
||||||
```
|
```
|
||||||
|
|
||||||
If a custom es_systems.xml file is present in ~/.emulationstation/custom_systems/ any entries from this file will have
|
If a custom es_systems.xml file is present in ~/.emulationstation/custom_systems/ any entries from this file will have their names trailed by the text _(custom system)_. So if the GameCube system in the example above would be present in the custom systems configuration file, the system would be shown as `gc (custom system)` instead of simply `gc`. This is only applicable for the systems.txt and systeminfo.txt files, the trailing text is not applied or used anywhere else in the application.
|
||||||
their names trailed by the text _(custom system)_. So if the GameCube system in the example above would be present in
|
|
||||||
the custom systems configuration file, the system would be shown as `gc (custom system)` instead of simply `gc`. This is
|
|
||||||
only applicable for the systems.txt and systeminfo.txt files, the trailing text is not applied or used anywhere else in
|
|
||||||
the application.
|
|
||||||
|
|
||||||
Note that neither the systeminfo.txt files or the systems.txt file are needed to run ES-DE, they're only generated as a
|
Note that neither the systeminfo.txt files or the systems.txt file are needed to run ES-DE, they're only generated as a convenience to help with the setup.
|
||||||
convenience to help with the setup.
|
|
||||||
|
|
||||||
There will be a lot of directories created if using the es_systems.xml file bundled with the installation, so it may be
|
There will be a lot of directories created if using the es_systems.xml file bundled with the installation, so it may be a good idea to remove the ones you don't need. It's recommended to move them to another location to be able to use them later if more systems should be added. For example a directory named _DISABLED could be created inside the ROMs folder (i.e. ~/ROMs/_DISABLED) and all game system directories you don't need could be moved there. Doing this reduces the application startup time as ES-DE would otherwise need to scan for game files for all these systems.
|
||||||
a good idea to remove the ones you don't need. It's recommended to move them to another location to be able to use them
|
|
||||||
later if more systems should be added. For example a directory named _DISABLED could be created inside the ROMs folder (
|
|
||||||
i.e. ~/ROMs/_DISABLED) and all game system directories you don't need could be moved there. Doing this reduces the
|
|
||||||
application startup time as ES-DE would otherwise need to scan for game files for all these systems.
|
|
||||||
|
|
||||||
![alt text](images/es-de_ui_easy_setup.png "ES-DE Easy Setup")
|
![alt text](images/es-de_ui_easy_setup.png "ES-DE Easy Setup")
|
||||||
_This is the dialog shown if no game files were found. It lets you configure the ROM directory if you don't want to use
|
_This is the dialog shown if no game files were found. It lets you configure the ROM directory if you don't want to use the default one, and you can also generate the game systems directory structure. Note that the directory is the physical path, and that your operating system may present this as a localized path if you are using a language other than English._
|
||||||
the default one, and you can also generate the game systems directory structure. Note that the directory is the physical
|
|
||||||
path, and that your operating system may present this as a localized path if you are using a language other than
|
|
||||||
English._
|
## Specific notes for macOS
|
||||||
|
|
||||||
|
On macOS, the first time you launch a game from within ES-DE, the operating system will present you with a security option with the following description:
|
||||||
|
|
||||||
|
`"EmulationStation Desktop Edition" would like to access files in your Documents folder.`
|
||||||
|
|
||||||
|
If you don't allow this, you will not be able to place system BIOS ROMs in the RetroArch default system directory `~/Documents/RetroArch/system` even if you've already given RetroArch access to this folder. This is so because RetroArch runs as a subprocess to ES-DE and therefore inherits the security settings from the parent application. Attempting to launch a game without enabling the access will simply display an error message in the emulator that the BIOS files are missing. This of course only applies to emulators that require BIOS ROMs, all other games should work fine regardless of this security setting.
|
||||||
|
|
||||||
|
If you accidentally refused ES-DE the folder access, you can fix this by opening _System Preferences_, selecting _Security & Privacy_ and within the GUI choose _Files and Folders_. The option you need to enable is _Documents Folder_ under _EmulationStation Desktop Edition_.
|
||||||
|
|
||||||
|
Another issue on macOS 11 Big Sur (and possibly other OS versions) is that when connecting a DualShock 4 controller either via Bluetooth or using a USB cable, two separate controller devices are registered in parallel. This is a bug in either macOS or the DualShock driver and it makes it seem as if ES-DE is registering double button presses when actually two separate controller devices are generating identical input. A workaround if using Bluetooth mode is to plug in the USB cable just after connecting the controller, wait a second or two and then remove the cable again. This will remove the cabled device, leaving only the Bluetooth device active. Another workaround is to enable the setting _Only accept input from first controller_ in the ES-DE input device settings. The reason why this bug may not be visible in some other games and applications is that ES-DE enables and auto-configures all connected controllers.
|
||||||
|
|
||||||
## Game system customizations
|
## Game system customizations
|
||||||
|
|
||||||
The game systems configuration file `es_systems.xml` is located in the ES-DE resources directory which is part of the
|
The game systems configuration file `es_systems.xml` is located in the ES-DE resources directory which is part of the application installation. As such this file is not intended to be modified directly. If system customizations are required, a separate es_systems.xml file should instead be placed in the `custom_systems` folder in the ES-DE home directory, i.e. `~/.emulationstation/custom_systems/es_systems.xml`.
|
||||||
application installation. As such this file is not intended to be modified directly. If system customizations are
|
|
||||||
required, a separate es_systems.xml file should instead be placed in the `custom_systems` folder in the ES-DE home
|
|
||||||
directory, i.e. `~/.emulationstation/custom_systems/es_systems.xml`.
|
|
||||||
|
|
||||||
Although it's possible to make a copy of the bundled configuration file, to modify it and then place it in this
|
Although it's possible to make a copy of the bundled configuration file, to modify it and then place it in this directory, that is not how the system customization is designed to be done. Instead the intention is that the file in the custom_systems directory complements the bundled configuration, meaning only systems that are to be modified should be included.
|
||||||
directory, that is not how the system customization is designed to be done. Instead the intention is that the file in
|
|
||||||
the custom_systems directory complements the bundled configuration, meaning only systems that are to be modified should
|
|
||||||
be included.
|
|
||||||
|
|
||||||
For example you may want to replace the emulator launch command, modify the full name or change the supported file
|
For example you may want to replace the emulator launch command, modify the full name or change the supported file extensions for a single system. In this case it wouldn't make sense to copy the complete bundled file and just apply these minor modifications, instead an es_systems.xml file only containing the configuration for that single system should be placed in the custom_systems directory.
|
||||||
extensions for a single system. In this case it wouldn't make sense to copy the complete bundled file and just apply
|
|
||||||
these minor modifications, instead an es_systems.xml file only containing the configuration for that single system
|
The instructions for how to customize the es_systems.xml file can be found in [INSTALL-DEV.md](INSTALL-DEV.md#es_systemsxml). There you can also find some examples of custom files that you can copy into ~/.emulationstation/custom_systems/ and modify as required.
|
||||||
should be placed in the custom_systems directory.
|
|
||||||
|
|
||||||
The instructions for how to customize the es_systems.xml file can be found
|
|
||||||
in [INSTALL-DEV.md](INSTALL-DEV.md#es_systemsxml). There you can also find an example of a custom file that you can copy
|
|
||||||
into ~/.emulationstation/custom_systems/ and modify as required.
|
|
||||||
|
|
||||||
## Migrating from other EmulationStation forks
|
## Migrating from other EmulationStation forks
|
||||||
|
|
||||||
**IMPORTANT!!! IMPORTANT!!! IMPORTANT!!!**
|
**IMPORTANT!!! IMPORTANT!!! IMPORTANT!!!**
|
||||||
|
|
||||||
ES-DE is designed to be backward compatible to a certain degree, that is, it should be able to read data from
|
ES-DE is designed to be backward compatible to a certain degree, that is, it should be able to read data from other/previous EmulationStation versions such as the RetroPie fork. But the opposite is not true and it's a one-way ticket for your gamelist.xml files and your custom collection files when migrating to ES-DE as they will be modified in ways that previous ES versions will see as data loss. For instance ES-DE does not use image tags inside the gamelist.xml files to find game media but instead matches the media to the names of the game/ROM files. So it will not save any such tags back to the gamelist files during updates, effectively removing the display of the game media if the files are opened in another ES fork.
|
||||||
other/previous EmulationStation versions such as the RetroPie fork. But the opposite is not true and it's a one-way
|
|
||||||
ticket for your gamelist.xml files and your custom collection files when migrating to ES-DE as they will be modified in
|
|
||||||
ways that previous ES versions will see as data loss. For instance ES-DE does not use image tags inside the gamelist.xml
|
|
||||||
files to find game media but instead matches the media to the names of the game/ROM files. So it will not save any such
|
|
||||||
tags back to the gamelist files during updates, effectively removing the display of the game media if the files are
|
|
||||||
opened in another ES fork.
|
|
||||||
|
|
||||||
Due to this, always make backups of at least the following directories before testing ES-DE for the first time:
|
Due to this, always make backups of at least the following directories before testing ES-DE for the first time:
|
||||||
|
|
||||||
|
@ -228,9 +191,9 @@ If you experience double button presses with your DualShock 4 controller on macO
|
||||||
|
|
||||||
When starting ES-DE with the default settings, you will see the System view first. From here you can navigate your game systems and enter their respective gamelists.
|
When starting ES-DE with the default settings, you will see the System view first. From here you can navigate your game systems and enter their respective gamelists.
|
||||||
|
|
||||||
Depending on the theme, the system navigation carousel can be either horizontal or vertical. The default theme rbsimple-DE provides horizontal navigation, i.e. you browse your systems by scrolling left or right.
|
Depending on the theme, the system navigation carousel can be horizontal, vertical or displayed as a wheel. The default theme rbsimple-DE provides horizontal navigation, i.e. you browse your systems by scrolling left or right.
|
||||||
|
|
||||||
The game systems are sorted by their full names, as defined in the es_systems.xml file.
|
The game systems are sorted by their full names by default, as defined in the es_systems.xml file. It's however possible to set a custom sortname per system, as explained in the [INSTALL-DEV.md](INSTALL-DEV.md#es_systemsxml) document.
|
||||||
|
|
||||||
![alt text](images/es-de_system_view.png "ES-DE System View")
|
![alt text](images/es-de_system_view.png "ES-DE System View")
|
||||||
_The **System view** is the default starting point for the application, it's here that you browse through your game systems._
|
_The **System view** is the default starting point for the application, it's here that you browse through your game systems._
|
||||||
|
@ -426,8 +389,7 @@ The platform name for the Commodore 64 is `c64`, so the following structure woul
|
||||||
~/ROMs/c64/Multidisk/Pirates/Pirates!.m3u
|
~/ROMs/c64/Multidisk/Pirates/Pirates!.m3u
|
||||||
```
|
```
|
||||||
|
|
||||||
It's highly recommended to create `.m3u` playlist files for multi-disc images as this normally automates disk swapping
|
It's highly recommended to create `.m3u` playlist files for multi-disc images as this normally automates disk swapping in the emulator. It's then this .m3u file that should be selected for launching the game.
|
||||||
in the emulator. It's then this .m3u file that should be selected for launching the game.
|
|
||||||
|
|
||||||
The .m3u file simply contains a list of the game files, for example in the case of Last Ninja 2.m3u:
|
The .m3u file simply contains a list of the game files, for example in the case of Last Ninja 2.m3u:
|
||||||
|
|
||||||
|
@ -480,13 +442,9 @@ Apart from the potential difficulty in locating the emulator binary, there are s
|
||||||
|
|
||||||
#### Commodore Amiga
|
#### Commodore Amiga
|
||||||
|
|
||||||
There are multiple ways to run Amiga games, but the recommended approach is to use WHDLoad. The best way is to use hard
|
There are multiple ways to run Amiga games, but the recommended approach is to use WHDLoad. The best way is to use hard disk images in `.hdf` or `.hdz` format, meaning there will be a single file per game. This makes it just as easy to play Amiga games as any console with game ROMs.
|
||||||
disk images in `.hdf` or `.hdz` format, meaning there will be a single file per game. This makes it just as easy to play
|
|
||||||
Amiga games as any console with game ROMs.
|
|
||||||
|
|
||||||
An alternative would be to use `.adf` images as not all games may be available with WHDLoad support. For this, you can
|
An alternative would be to use `.adf` images as not all games may be available with WHDLoad support. For this, you can either put single-disc images in the root folder or in a dedicated adf directory, or multiple-disk games in separate folders. It's highly recommended to create `.m3u` playlist files for multi-disc images as described earlier.
|
||||||
either put single-disc images in the root folder or in a dedicated adf directory, or multiple-disk games in separate
|
|
||||||
folders. It's highly recommended to create `.m3u` playlist files for multi-disc images as described earlier.
|
|
||||||
|
|
||||||
Here's an example of what the file structure could look like:
|
Here's an example of what the file structure could look like:
|
||||||
|
|
||||||
|
@ -926,8 +884,7 @@ If this setting is enabled and a folder has its flag set to be excluded from the
|
||||||
|
|
||||||
**Scrape actual folders** _(Multi-scraper only)_
|
**Scrape actual folders** _(Multi-scraper only)_
|
||||||
|
|
||||||
Enabling this option causes folders themselves to be included by the scraper. This is useful for DOS games or any
|
Enabling this option causes folders themselves to be included by the scraper. This is useful for DOS games or any multi-disc games where there is a folder for each individual game.
|
||||||
multi-disc games where there is a folder for each individual game.
|
|
||||||
|
|
||||||
**Auto-retry on peer verification errors** _(ScreenScraper only)_
|
**Auto-retry on peer verification errors** _(ScreenScraper only)_
|
||||||
|
|
||||||
|
@ -999,50 +956,27 @@ Whether to sort your favorite games above your other games in the gamelists.
|
||||||
|
|
||||||
**Add star markings to favorite games**
|
**Add star markings to favorite games**
|
||||||
|
|
||||||
With this setting enabled, there is a star symbol added at the beginning of the game name in the gamelist views. It's
|
With this setting enabled, there is a star symbol added at the beginning of the game name in the gamelist views. It's strongly recommended to keep this setting enabled if the option to sort favorite games above non-favorites has been enabled. If not, favorite games would be sorted on top of the gamelist with no visual indication that they are favorites, which would be quite confusing.
|
||||||
strongly recommended to keep this setting enabled if the option to sort favorite games above non-favorites has been
|
|
||||||
enabled. If not, favorite games would be sorted on top of the gamelist with no visual indication that they are
|
|
||||||
favorites, which would be quite confusing.
|
|
||||||
|
|
||||||
**Use plain ASCII for special gamelist characters**
|
**Use plain ASCII for special gamelist characters**
|
||||||
|
|
||||||
There are some special characters in ES-DE such as the favorites star, the folder icon and the tickmark (seen when
|
There are some special characters in ES-DE such as the favorites star, the folder icon and the tickmark (seen when editing custom collections) that are displayed using symbols from the bundled Font Awesome. This normally looks perfectly fine, but on some specific theme sets with very pixelated fonts such as [es-themes-snes-mini](https://github.com/ruckage/es-theme-snes-mini) and [es-themes-workbench](https://github.com/ehettervik/es-theme-workbench) these symbols look terrible. For such themes, this option is available, which will use plain ASCII characters instead of the Font Awesome symbols. For the favorites an asterisk `*` will be used, for folders a hash sign `#` will be used and for the tickmark an exclamation mark `!` will be used. This only applies to the gamelist view, in all other places in the application the Font Awesome symbols are retained. Make sure to disable this option if not using such a pixelated theme as it looks equally terrible to enable this option on themes where it's not supposed to be used.
|
||||||
editing custom collections) that are displayed using symbols from the bundled Font Awesome. This normally looks
|
|
||||||
perfectly fine, but on some specific theme sets with very pixelated fonts such
|
|
||||||
as [es-themes-snes-mini](https://github.com/ruckage/es-theme-snes-mini)
|
|
||||||
and [es-themes-workbench](https://github.com/ehettervik/es-theme-workbench) these symbols look terrible. For such
|
|
||||||
themes, this option is available, which will use plain ASCII characters instead of the Font Awesome symbols. For the
|
|
||||||
favorites an asterisk `*` will be used, for folders a hash sign `#` will be used and for the tickmark an exclamation
|
|
||||||
mark `!` will be used. This only applies to the gamelist view, in all other places in the application the Font Awesome
|
|
||||||
symbols are retained. Make sure to disable this option if not using such a pixelated theme as it looks equally terrible
|
|
||||||
to enable this option on themes where it's not supposed to be used.
|
|
||||||
|
|
||||||
**Enable quick list scrolling overlay**
|
**Enable quick list scrolling overlay**
|
||||||
|
|
||||||
With this option enabled, there will be an overlay displayed when scrolling the gamelists quickly, i.e. when holding
|
With this option enabled, there will be an overlay displayed when scrolling the gamelists quickly, i.e. when holding down the _Up_, _Down_, _Left shoulder_ or _Right shoulder_ buttons for some time. The overlay will darken the background slightly and display the first two characters of the game names. If the game is a favorite and the setting to sort favorites above non-favorites has been enabled, a star will be shown instead.
|
||||||
down the _Up_, _Down_, _Left shoulder_ or _Right shoulder_ buttons for some time. The overlay will darken the background
|
|
||||||
slightly and display the first two characters of the game names. If the game is a favorite and the setting to sort
|
|
||||||
favorites above non-favorites has been enabled, a star will be shown instead.
|
|
||||||
|
|
||||||
**Enable virtual keyboard**
|
**Enable virtual keyboard**
|
||||||
|
|
||||||
This enables a virtual (on-screen) keyboard that can be used at various places throughout the application to input text
|
This enables a virtual (on-screen) keyboard that can be used at various places throughout the application to input text and numbers using a controller. The Shift and Alt keys can be toggled individually or combined together to access many special characters. The general use of the virtual keyboard should hopefully be self-explanatory.
|
||||||
and numbers using a controller. The Shift and Alt keys can be toggled individually or combined together to access many
|
|
||||||
special characters. The general use of the virtual keyboard should hopefully be self-explanatory.
|
|
||||||
|
|
||||||
**Enable toggle favorites button**
|
**Enable toggle favorites button**
|
||||||
|
|
||||||
This setting enables the _Y_ button for quickly toggling a game as favorite. Although this may be convenient at times,
|
This setting enables the _Y_ button for quickly toggling a game as favorite. Although this may be convenient at times, it's also quite easy to accidentally remove a favorite tagging of a game when using the application more casually. As such it could sometimes make sense to disable this functionality. It's of course still possible to mark a game as favorite using the metadata editor when this setting is disabled. The option does not affect the use of the _Y_ button to add or remove games when editing custom collections.
|
||||||
it's also quite easy to accidentally remove a favorite tagging of a game when using the application more casually. As
|
|
||||||
such it could sometimes make sense to disable this functionality. It's of course still possible to mark a game as
|
|
||||||
favorite using the metadata editor when this setting is disabled. The option does not affect the use of the _Y_ button
|
|
||||||
to add or remove games when editing custom collections.
|
|
||||||
|
|
||||||
**Enable random system or game button**
|
**Enable random system or game button**
|
||||||
|
|
||||||
This enables or disables the ability to jump to a random system or game. It's mapped to the thumbstick click button,
|
This enables or disables the ability to jump to a random system or game. It's mapped to the thumbstick click button, either the left or right thumbstick will work. The help prompts will also visually indicate whether this option is enabled or not.
|
||||||
either the left or right thumbstick will work. The help prompts will also visually indicate whether this option is
|
|
||||||
enabled or not.
|
|
||||||
|
|
||||||
**Enable gamelist filters**
|
**Enable gamelist filters**
|
||||||
|
|
||||||
|
@ -1320,11 +1254,7 @@ If this option is disabled, hidden files and folders within the ROMs directory t
|
||||||
|
|
||||||
**Show hidden games (requires restart)**
|
**Show hidden games (requires restart)**
|
||||||
|
|
||||||
You can mark games as hidden in the metadata editor, which is useful for instance for DOS games where you may not want
|
You can mark games as hidden in the metadata editor, which is useful for instance for DOS games where you may not want to see some batch files and executables inside ES-DE, or for multi-disc games where you may only want to show the .m3u playlists and not the individual game files. By disabling this option these files will not be processed at all when ES-DE starts up. If you enable the option you will see the files, but their name entries will be almost transparent in the gamelist view to visually indicate that they are hidden.
|
||||||
to see some batch files and executables inside ES-DE, or for multi-disc games where you may only want to show the .m3u
|
|
||||||
playlists and not the individual game files. By disabling this option these files will not be processed at all when
|
|
||||||
ES-DE starts up. If you enable the option you will see the files, but their name entries will be almost transparent in
|
|
||||||
the gamelist view to visually indicate that they are hidden.
|
|
||||||
|
|
||||||
**Enable custom event scripts**
|
**Enable custom event scripts**
|
||||||
|
|
||||||
|
@ -1414,32 +1344,31 @@ The following filters can be applied:
|
||||||
|
|
||||||
**Game name**
|
**Game name**
|
||||||
|
|
||||||
**Favorites**
|
**Rating**
|
||||||
|
|
||||||
|
**Developer**
|
||||||
|
|
||||||
|
**Publisher**
|
||||||
|
|
||||||
**Genre**
|
**Genre**
|
||||||
|
|
||||||
**Players**
|
**Players**
|
||||||
|
|
||||||
**Publisher / Developer**
|
**Favorite**
|
||||||
|
|
||||||
**Rating**
|
|
||||||
|
|
||||||
**Kidgame**
|
|
||||||
|
|
||||||
**Completed**
|
**Completed**
|
||||||
|
|
||||||
|
**Kidgame**
|
||||||
|
|
||||||
|
**Hidden** _If the "Show hidden games" option is enabled_
|
||||||
|
|
||||||
**Broken**
|
**Broken**
|
||||||
|
|
||||||
**Hidden**
|
**Alternative emulator**
|
||||||
|
|
||||||
With the exception of the game name text filter, all available filter values are assembled from metadata from the actual
|
With the exception of the game name text filter, all available filter values are assembled from metadata from the actual gamelist, so if there is no data to filter for the specific field, the text _Nothing to filter_ will be displayed. This for example happens for the _Completed_ filter if there are no games marked as having been completed in the current gamelist.
|
||||||
gamelist, so if there for instance are no games marked as completed, the Completed filter will only have the selectable
|
|
||||||
option False, i.e. True will be missing.
|
|
||||||
|
|
||||||
Be aware that although folders can have most of the metadata values set, the filters are only applied to files (this is
|
Be aware that although folders can have most of the metadata values set, the filters are only applied to files (this is also true for the game name text filter). So if you for example set a filter to only display your favorite games, any folder that contains a favorite game will be displayed, and other folders which are themselves marked as favorites but that do not contain any favorite games will be hidden.
|
||||||
also true for the game name text filter). So if you for example set a filter to only display your favorite games, any
|
|
||||||
folder that contains a favorite game will be displayed, and other folders which are themselves marked as favorites but
|
|
||||||
that do not contain any favorite games will be hidden.
|
|
||||||
|
|
||||||
The filters are always applied for the complete game system, including all folder content.
|
The filters are always applied for the complete game system, including all folder content.
|
||||||
|
|
||||||
|
@ -1517,11 +1446,7 @@ A flag to mark whether the game is suitable for children. This will be applied a
|
||||||
|
|
||||||
**Hidden**
|
**Hidden**
|
||||||
|
|
||||||
A flag to indicate that the game is hidden. If the corresponding option has been set in the main menu, the game will not
|
A flag to indicate that the game is hidden. If the corresponding option has been set in the main menu, the game will not be shown. Useful for example for DOS games to hide batch scripts and unnecessary binaries or to hide the actual game files for multi-disc games. If a file or folder is flagged as hidden but the corresponding option to hide hidden games has not been enabled, then the opacity of the text will be lowered significantly to make it clear that it's a hidden entry.
|
||||||
be shown. Useful for example for DOS games to hide batch scripts and unnecessary binaries or to hide the actual game
|
|
||||||
files for multi-disc games. If a file or folder is flagged as hidden but the corresponding option to hide hidden games
|
|
||||||
has not been enabled, then the opacity of the text will be lowered significantly to make it clear that it's a hidden
|
|
||||||
entry.
|
|
||||||
|
|
||||||
**Broken/not working**
|
**Broken/not working**
|
||||||
|
|
||||||
|
@ -1529,27 +1454,15 @@ A flag to indicate whether the game is broken. Useful for MAME games for instanc
|
||||||
|
|
||||||
**Exclude from game counter** _(files only)_
|
**Exclude from game counter** _(files only)_
|
||||||
|
|
||||||
A flag to indicate whether the game should be excluded from being counted. If this is set for a game, it will not be
|
A flag to indicate whether the game should be excluded from being counted. If this is set for a game, it will not be included in the game counter shown per system on the system view, and it will not be included in the system information field in the gamelist view. As well, it will be excluded from all automatic and custom collections. This option is quite useful for multi-file games such as multi-disc Amiga or Commodore 64 games, or for DOS games where you want to exclude setup programs and similar but still need them available in ES-DE and therefore can't hide them. Files that have this flag set will have a lower opacity in the gamelists, making them easy to spot.
|
||||||
included in the game counter shown per system on the system view, and it will not be included in the system information
|
|
||||||
field in the gamelist view. As well, it will be excluded from all automatic and custom collections. This option is quite
|
|
||||||
useful for multi-file games such as multi-disc Amiga or Commodore 64 games, or for DOS games where you want to exclude
|
|
||||||
setup programs and similar but still need them available in ES-DE and therefore can't hide them. Files that have this
|
|
||||||
flag set will have a lower opacity in the gamelists, making them easy to spot.
|
|
||||||
|
|
||||||
**Exclude from multi-scraper**
|
**Exclude from multi-scraper**
|
||||||
|
|
||||||
Whether to exclude the file from the multi-scraper. This is quite useful in order to avoid scraping all the disks for
|
Whether to exclude the file from the multi-scraper. This is quite useful in order to avoid scraping all the disks for multi-disc games for example. There is an option in the scraper settings to ignore this flag, but by default the multi-scraper will respect it.
|
||||||
multi-disc games for example. There is an option in the scraper settings to ignore this flag, but by default the
|
|
||||||
multi-scraper will respect it.
|
|
||||||
|
|
||||||
**Hide metadata fields**
|
**Hide metadata fields**
|
||||||
|
|
||||||
This option will hide most metadata fields in the gamelist view. The intention is to be able to hide the fields for
|
This option will hide most metadata fields in the gamelist view. The intention is to be able to hide the fields for situations such as general folders (Multi-disc, Cartridges etc.) and for setup programs and similar (e.g. SETUP.EXE or INSTALL.BAT for DOS games). It could also be used on the game files for multi-disc games where perhaps only the .m3u playlist should have any metadata values. The only fields shown with this option enabled are the game name and description. Using the description it's possible to write some comments regarding the file or folder, should you want to. It's also possible to display game images and videos with this setting enabled.
|
||||||
situations such as general folders (Multi-disc, Cartridges etc.) and for setup programs and similar (e.g. SETUP.EXE or
|
|
||||||
INSTALL.BAT for DOS games). It could also be used on the game files for multi-disc games where perhaps only the .m3u
|
|
||||||
playlist should have any metadata values. The only fields shown with this option enabled are the game name and
|
|
||||||
description. Using the description it's possible to write some comments regarding the file or folder, should you want
|
|
||||||
to. It's also possible to display game images and videos with this setting enabled.
|
|
||||||
|
|
||||||
**Times played** _(files only)_
|
**Times played** _(files only)_
|
||||||
|
|
||||||
|
@ -1735,82 +1648,35 @@ Refer to the [INSTALL-DEV.md](INSTALL-DEV.md#command-line-options) document for
|
||||||
|
|
||||||
## Supported game systems
|
## Supported game systems
|
||||||
|
|
||||||
**Note:** The following list is what the default es_systems.xml files and the rbsimple-DE theme supports. This theme set
|
**Note:** The following list is what the default es_systems.xml files and the rbsimple-DE theme supports. This theme set is very comprehensive, so if you're using another theme, it may be that some or many of these systems are not supported. ES-DE will still work but the game system will unthemed which looks very ugly.
|
||||||
is very comprehensive, so if you're using another theme, it may be that some or many of these systems are not supported.
|
|
||||||
ES-DE will still work but the game system will unthemed which looks very ugly.
|
|
||||||
|
|
||||||
Note as well that the list and corresponding es_systems.xml templates may not reflect what is readily available for all
|
Note as well that the list and corresponding es_systems.xml templates may not reflect what is readily available for all supported operating system. This is especially true on Unix/Linux if installing RetroArch via the OS repository instead of using the Snap or Flatpak distributions (or compiling from source code) as the repository versions are normally quite crippled.
|
||||||
supported operating system. This is especially true on Unix/Linux if installing RetroArch via the OS repository instead
|
|
||||||
of using the Snap or Flatpak distributions (or compiling from source code) as the repository versions are normally quite
|
|
||||||
crippled.
|
|
||||||
|
|
||||||
The column **System name** corresponds to the directory where you should put your game files, e.g. `~/ROMs/c64`
|
The column **System name** corresponds to the directory where you should put your game files, e.g. `~/ROMs/c64` or `~/ROMs/megadrive`.
|
||||||
or `~/ROMs/megadrive`.
|
|
||||||
|
|
||||||
Regional differences are handled by simply using the game system name corresponding to your region. For example for Sega
|
Regional differences are handled by simply using the game system name corresponding to your region. For example for Sega Mega Drive, _megadrive_ would be used by most people in the world, although persons from North America would use _genesis_ instead. The same is true for _pcengine_ vs _tg16_ etc. This only affects the theme selection and the corresponding theme graphics, the same emulator and scraper settings are still used for the regional variants although that can of course be customized in the es_systems.xml file if you wish.
|
||||||
Mega Drive, _megadrive_ would be used by most people in the world, although persons from North America would use _
|
|
||||||
genesis_ instead. The same is true for _pcengine_ vs _tg16_ etc. This only affects the theme selection and the
|
|
||||||
corresponding theme graphics, the same emulator and scraper settings are still used for the regional variants although
|
|
||||||
that can of course be customized in the es_systems.xml file if you wish.
|
|
||||||
|
|
||||||
Sometimes the name of the console is (more or less) the same for multiple regions, and in those cases the region has
|
Sometimes the name of the console is (more or less) the same for multiple regions, and in those cases the region has been added as a suffix to the game system name. For instance `na` for North America has been added to `snes` (Super Nintendo) giving the system name `snesna`. The same goes for Japan, as in `megacd` and `megacdjp`. Again, this only affects the theme and theme graphics.
|
||||||
been added as a suffix to the game system name. For instance `na` for North America has been added to `snes` (Super
|
|
||||||
Nintendo) giving the system name `snesna`. The same goes for Japan, as in `megacd` and `megacdjp`. Again, this only
|
|
||||||
affects the theme and theme graphics.
|
|
||||||
|
|
||||||
For the **Full name** column, text inside square brackets [] are comments and not part of the actual system name.
|
For the **Full name** column, text inside square brackets [] are comments and not part of the actual system name.
|
||||||
|
|
||||||
The **Default emulator** column lists the primary emulator as configured in es_systems.xml. If this differs between
|
The **Default emulator** column lists the primary emulator as configured in es_systems.xml. If this differs between Unix, macOS and Windows then it's specified in square brackets, such as [UW] for Unix and Windows and [M] for macOS. If not all of the three platforms are specified it means that the system is not available on the missing platforms. For example Lutris which is only avaialable on Unix is marked with only a _[U]_. Unless explicitly marked as **(Standalone)**, each emulator is a RetroArch core.
|
||||||
Unix, macOS and Windows then it's specified in square brackets, such as [UW] for Unix and Windows and [M] for macOS. If
|
|
||||||
not all of the three platforms are specified it means that the system is not available on the missing platforms. For
|
|
||||||
example Lutris which is only avaialable on Unix is marked with only a _[U]_. Unless explicitly marked as **(
|
|
||||||
Standalone)**, each emulator is a RetroArch core.
|
|
||||||
|
|
||||||
The **Alternative emulators** column lists additional emulators configured in es_systems.xml that can be selected per
|
The **Alternative emulators** column lists additional emulators configured in es_systems.xml that can be selected per system and per game, as explained earlier in this guide. This does not necessarily include everything in existence, as for some platforms there are a lot of emulators to choose from. In those cases the included emulators is a curated selection. In the same manner as the _Default emulator_ column, differences between Unix, macOS and Windows are marked using square brackets. Unless explicitly marked as **(Standalone)**, echo emulator is a RetroArch core.
|
||||||
system and per game, as explained earlier in this guide. This does not necessarily include everything in existence, as
|
|
||||||
for some platforms there are a lot of emulators to choose from. In those cases the included emulators is a curated
|
|
||||||
selection. In the same manner as the _Default emulator_ column, differences between Unix, macOS and Windows are marked
|
|
||||||
using square brackets. Unless explicitly marked as **(Standalone)**, echo emulator is a RetroArch core.
|
|
||||||
|
|
||||||
The **Needs BIOS** column indicates if additional BIOS/system ROMs are required, as should be explained by the emulator
|
The **Needs BIOS** column indicates if additional BIOS/system ROMs are required, as should be explained by the emulator documentation. Good starting points for such documentation are [https://docs.libretro.com](https://docs.libretro.com) and [https://docs.libretro.com/library/bios](https://docs.libretro.com/library/bios)
|
||||||
documentation. Good starting points for such documentation are [https://docs.libretro.com](https://docs.libretro.com)
|
|
||||||
and [https://docs.libretro.com/library/bios](https://docs.libretro.com/library/bios)
|
|
||||||
|
|
||||||
For additional details regarding which game file extensions are supported per system, refer to the es_systems.xml
|
For additional details regarding which game file extensions are supported per system, refer to the es_systems.xml files [unix/es_systems.xml](resources/systems/unix/es_systems.xml), [macos/es_systems.xml](resources/systems/macos/es_systems.xml) and [windows/es_systems.xml](resources/systems/windows/es_systems.xml). Normally the extensions setup in these files should cover everything that the emulators support. Note that for systems that have alternative emulators defined, the list of extensions is a combination of what is supported by all the emulators. This approach is necessary as you want to be able to see all games for each system while potentially testing and switching between different emulators, either system-wide or on a per game basis.
|
||||||
files [unix/es_systems.xml](resources/systems/unix/es_systems.xml)
|
|
||||||
, [macos/es_systems.xml](resources/systems/macos/es_systems.xml)
|
|
||||||
and [windows/es_systems.xml](resources/systems/windows/es_systems.xml). Normally the extensions setup in these files
|
|
||||||
should cover everything that the emulators support. Note that for systems that have alternative emulators defined, the
|
|
||||||
list of extensions is a combination of what is supported by all the emulators. This approach is necessary as you want to
|
|
||||||
be able to see all games for each system while potentially testing and switching between different emulators, either
|
|
||||||
system-wide or on a per game basis.
|
|
||||||
|
|
||||||
If you generated the ROMs directory structure when first starting ES-DE, the systeminfo.txt files located in each game
|
If you generated the ROMs directory structure when first starting ES-DE, the systeminfo.txt files located in each game system directory will also contain the information about the emulator core and supported file extensions.
|
||||||
system directory will also contain the information about the emulator core and supported file extensions.
|
|
||||||
|
|
||||||
For CD-based systems it's generally recommended to use CHD files (extension .chd) as this saves space due to compression
|
For CD-based systems it's generally recommended to use CHD files (extension .chd) as this saves space due to compression compared to BIN/CUE, IMG, ISO etc. The CHD format is also supported by most emulators. You can convert to CHD from various formats using the MAME `chdman` utility, for example `chdman createcd -i mygame.iso -o mygame.chd`. Sometimes chdman has issues converting from the IMG and BIN formats, and in this case it's possible to first convert to ISO using `ccd2iso`, such as `ccd2iso mygame.img mygame.iso`.
|
||||||
compared to BIN/CUE, IMG, ISO etc. The CHD format is also supported by most emulators. You can convert to CHD from
|
|
||||||
various formats using the MAME `chdman` utility, for example `chdman createcd -i mygame.iso -o mygame.chd`. Sometimes
|
|
||||||
chdman has issues converting from the IMG and BIN formats, and in this case it's possible to first convert to ISO
|
|
||||||
using `ccd2iso`, such as `ccd2iso mygame.img mygame.iso`.
|
|
||||||
|
|
||||||
MAME emulation is a bit special as the choice of emulator depends on which ROM set you're using. It's recommended to go
|
MAME emulation is a bit special as the choice of emulator depends on which ROM set you're using. It's recommended to go for the latest available set, as MAME is constantly improved with more complete and accurate emulation. Therefore the `arcade` system is configured to use _MAME - Current_ by default, which as the name implies will be the latest available MAME version. But if you have a really slow computer you may want to use another ROM set such as the popular 0.78. In this case, you can either select _MAME 2003-Plus_ as an alternative emulator, or you can use the `mame` system which comes configured with this emulator as the default. There are more MAME versions available as alternative emulators, as you can see in the table below.
|
||||||
for the latest available set, as MAME is constantly improved with more complete and accurate emulation. Therefore
|
|
||||||
the `arcade` system is configured to use _MAME - Current_ by default, which as the name implies will be the latest
|
|
||||||
available MAME version. But if you have a really slow computer you may want to use another ROM set such as the popular
|
|
||||||
0.78. In this case, you can either select _MAME 2003-Plus_ as an alternative emulator, or you can use the `mame` system
|
|
||||||
which comes configured with this emulator as the default. There are more MAME versions available as alternative
|
|
||||||
emulators, as you can see in the table below.
|
|
||||||
|
|
||||||
There are also other MAME forks and derivates available such as MAME4ALL, AdvanceMAME, FinalBurn Alpha and FinalBurn Neo
|
There are also other MAME forks and derivates available such as MAME4ALL, AdvanceMAME, FinalBurn Alpha and FinalBurn Neo but it's beyond the scope of this document to describe those in detail. For more information, refer to the [RetroPie arcade documentation](https://retropie.org.uk/docs/Arcade) which has a good overview of the various MAME alternatives.
|
||||||
but it's beyond the scope of this document to describe those in detail. For more information, refer to
|
|
||||||
the [RetroPie arcade documentation](https://retropie.org.uk/docs/Arcade) which has a good overview of the various MAME
|
|
||||||
alternatives.
|
|
||||||
|
|
||||||
In general .zip or .7z files are recommended for smaller-sized games like those from older systems (assuming the
|
In general .zip or .7z files are recommended for smaller-sized games like those from older systems (assuming the emulator supports it). But for CD-based systems it's not a good approach as uncompressing the larger CD images takes quite some time, leading to slow game launches. As explained above, converting CD images to CHD files is a better solution for achieving file compression while still enjoying fast game launches.
|
||||||
emulator supports it). But for CD-based systems it's not a good approach as uncompressing the larger CD images takes
|
|
||||||
quite some time, leading to slow game launches. As explained above, converting CD images to CHD files is a better
|
|
||||||
solution for achieving file compression while still enjoying fast game launches.
|
|
||||||
|
|
||||||
Consider the table below a work in progress as it's obvioulsy not fully populated yet!
|
Consider the table below a work in progress as it's obvioulsy not fully populated yet!
|
||||||
|
|
||||||
|
@ -1822,13 +1688,13 @@ All emulators are RetroArch cores unless marked as **(Standalone**)
|
||||||
| System name | Full name | Default emulator | Alternative emulators | Needs BIOS | Recommended game setup |
|
| System name | Full name | Default emulator | Alternative emulators | Needs BIOS | Recommended game setup |
|
||||||
| :-------------------- | :--------------------------------------------- | :-------------------------------- | :-------------------------------- | :----------- | :----------------------------------- |
|
| :-------------------- | :--------------------------------------------- | :-------------------------------- | :-------------------------------- | :----------- | :----------------------------------- |
|
||||||
| 3do | 3DO | 4DO | | | |
|
| 3do | 3DO | 4DO | | | |
|
||||||
| 64dd | Nintendo 64DD | Mupen64Plus-Next [UW],<br>ParaLLEl N64 [M] | ParaLLEl N64 [UW] | | |
|
| 64dd | Nintendo 64DD | Mupen64Plus-Next [UW],<br>ParaLLEl N64 [M] | ParaLLEl N64 [UW] | | |
|
||||||
| ags | Adventure Game Studio game engine | | | | |
|
| ags | Adventure Game Studio game engine | | | | |
|
||||||
| amiga | Commodore Amiga | PUAE | | Yes | WHDLoad hard disk image in .hdf or .hdz format in root folder, or diskette image in .adf format in root folder if single-disc, or in separate folder with .m3u playlist if multi-disc |
|
| amiga | Commodore Amiga | PUAE | | Yes | WHDLoad hard disk image in .hdf or .hdz format in root folder, or diskette image in .adf format in root folder if single-disc, or in separate folder with .m3u playlist if multi-disc |
|
||||||
| amiga600 | Commodore Amiga 600 | PUAE | | Yes | WHDLoad hard disk image in .hdf or .hdz format in root folder, or diskette image in .adf format in root folder if single-disc, or in separate folder with .m3u playlist if multi-disc |
|
| amiga600 | Commodore Amiga 600 | PUAE | | Yes | WHDLoad hard disk image in .hdf or .hdz format in root folder, or diskette image in .adf format in root folder if single-disc, or in separate folder with .m3u playlist if multi-disc |
|
||||||
| amiga1200 | Commodore Amiga 1200 | PUAE | | Yes | WHDLoad hard disk image in .hdf or .hdz format in root folder, or diskette image in .adf format in root folder if single-disc, or in separate folder with .m3u playlist if multi-disc |
|
| amiga1200 | Commodore Amiga 1200 | PUAE | | Yes | WHDLoad hard disk image in .hdf or .hdz format in root folder, or diskette image in .adf format in root folder if single-disc, or in separate folder with .m3u playlist if multi-disc |
|
||||||
| amigacd32 | Commodore Amiga CD32 | PUAE | | | |
|
| amigacd32 | Commodore Amiga CD32 | PUAE | | | |
|
||||||
| amstradcpc | Amstrad CPC | Caprice32 | | | |
|
| amstradcpc | Amstrad CPC | Caprice32 | CrocoDS | | |
|
||||||
| apple2 | Apple II | | | | |
|
| apple2 | Apple II | | | | |
|
||||||
| apple2gs | Apple IIGS | | | | |
|
| apple2gs | Apple IIGS | | | | |
|
||||||
| arcade | Arcade | MAME - Current | MAME 2000,<br>MAME 2003-Plus,<br>MAME 2010,<br>FinalBurn Neo,<br>FB Alpha 2012 | Depends | Single archive file following MAME name standard in root folder |
|
| arcade | Arcade | MAME - Current | MAME 2000,<br>MAME 2003-Plus,<br>MAME 2010,<br>FinalBurn Neo,<br>FB Alpha 2012 | Depends | Single archive file following MAME name standard in root folder |
|
||||||
|
@ -1839,12 +1705,12 @@ All emulators are RetroArch cores unless marked as **(Standalone**)
|
||||||
| atari800 | Atari 800 | Atari800 | | | |
|
| atari800 | Atari 800 | Atari800 | | | |
|
||||||
| atarijaguar | Atari Jaguar | Virtual Jaguar | | | |
|
| atarijaguar | Atari Jaguar | Virtual Jaguar | | | |
|
||||||
| atarijaguarcd | Atari Jaguar CD | Virtual Jaguar | | | |
|
| atarijaguarcd | Atari Jaguar CD | Virtual Jaguar | | | |
|
||||||
| atarilynx | Atari Lynx | Beetle Lynx | | | |
|
| atarilynx | Atari Lynx | Handy | Beetle Lynx | | |
|
||||||
| atarist | Atari ST [also STE and Falcon] | Hatari | | | |
|
| atarist | Atari ST [also STE and Falcon] | Hatari | | | |
|
||||||
| atarixe | Atari XE | Atari800 | | | |
|
| atarixe | Atari XE | Atari800 | | | |
|
||||||
| atomiswave | Atomiswave | Flycast | | | |
|
| atomiswave | Atomiswave | Flycast | | | |
|
||||||
| bbcmicro | BBC Micro | | | | |
|
| bbcmicro | BBC Micro | | | | |
|
||||||
| c64 | Commodore 64 | VICE x64sc Accurate | VICE x64 Fast,<br>VICE x64 SuperCPU,<br>VICE x128,<br>Frodo | No | Single disk, tape r cartridge image in root folder and/or multi-disc images in separate folder |
|
| c64 | Commodore 64 | VICE x64sc Accurate | VICE x64 Fast,<br>VICE x64 SuperCPU,<br>VICE x128,<br>Frodo | No | Single disk, tape or cartridge image in root folder and/or multi-disc images in separate folder |
|
||||||
| cavestory | Cave Story (NXEngine) | NXEngine | | | |
|
| cavestory | Cave Story (NXEngine) | NXEngine | | | |
|
||||||
| cdtv | Commodore CDTV | | | | |
|
| cdtv | Commodore CDTV | | | | |
|
||||||
| chailove | ChaiLove game engine | ChaiLove | | | |
|
| chailove | ChaiLove game engine | ChaiLove | | | |
|
||||||
|
@ -1862,52 +1728,51 @@ All emulators are RetroArch cores unless marked as **(Standalone**)
|
||||||
| fbneo | FinalBurn Neo | FinalBurn Neo | | Yes | Single archive file following MAME name standard in root folder |
|
| fbneo | FinalBurn Neo | FinalBurn Neo | | Yes | Single archive file following MAME name standard in root folder |
|
||||||
| fds | Nintendo Famicom Disk System | Nestopia UE | | Yes | Single archive or ROM file in root folder |
|
| fds | Nintendo Famicom Disk System | Nestopia UE | | Yes | Single archive or ROM file in root folder |
|
||||||
| gameandwatch | Nintendo Game and Watch | GW | | | |
|
| gameandwatch | Nintendo Game and Watch | GW | | | |
|
||||||
| gamegear | Sega Game Gear | Genesis Plus GX | | | |
|
| gamegear | Sega Game Gear | Gearsystem | SMS Plus GX,<br>Genesis Plus GX,<br>Genesis Plus GX Wide | | |
|
||||||
| gb | Nintendo Game Boy | bsnes | | | |
|
| gb | Nintendo Game Boy | SameBoy | Gambatte,<br>Gearboy,<br>TGB Dual,<br>Mesen-S,<br>bsnes | | |
|
||||||
| gba | Nintendo Game Boy Advance | Beetle GBA | | | |
|
| gba | Nintendo Game Boy Advance | mGBA | VBA-M,<br>VBA Next,<br>gpSP | | |
|
||||||
| gbc | Nintendo Game Boy Color | bsnes | | | |
|
| gbc | Nintendo Game Boy Color | SameBoy | Gambatte,<br>Gearboy,<br>TGB Dual,<br>Mesen-S,<br>bsnes | | |
|
||||||
| gc | Nintendo GameCube | Dolphin | | | |
|
| gc | Nintendo GameCube | Dolphin | | | |
|
||||||
| genesis | Sega Genesis | Genesis Plus GX | Genesis Plus GX Wide,<br>PicoDrive,<br>BlastEm | No | Single archive or ROM file in root folder |
|
| genesis | Sega Genesis | Genesis Plus GX | Genesis Plus GX Wide,<br>PicoDrive,<br>BlastEm | No | Single archive or ROM file in root folder |
|
||||||
| gx4000 | Amstrad GX4000 | | | | |
|
| gx4000 | Amstrad GX4000 | | | | |
|
||||||
| intellivision | Mattel Electronics Intellivision | FreeIntv | | | |
|
| intellivision | Mattel Electronics Intellivision | FreeIntv | | | |
|
||||||
| kodi | Kodi home theatre software | N/A | | No | |
|
| kodi | Kodi home theatre software | N/A | | No | |
|
||||||
| lutris | Lutris open gaming platform | Lutris application **(
|
| lutris | Lutris open gaming platform | Lutris application **(Standalone)** [U] | | No | Shell script in root folder |
|
||||||
Standalone)** [U] | | No | Shell script in root folder |
|
|
||||||
| lutro | Lutro game engine | Lutro | | | |
|
| lutro | Lutro game engine | Lutro | | | |
|
||||||
| macintosh | Apple Macintosh | | | | |
|
| macintosh | Apple Macintosh | | | | |
|
||||||
| mame | Multiple Arcade Machine Emulator | MAME 2003-Plus | MAME 2000,<br>MAME 2010,<br>MAME - Current,<br>FinalBurn Neo,<br>FB Alpha 2012 | Depends | Single archive file following MAME name standard in root folder |
|
| mame | Multiple Arcade Machine Emulator | MAME 2003-Plus | MAME 2000,<br>MAME 2010,<br>MAME - Current,<br>FinalBurn Neo,<br>FB Alpha 2012 | Depends | Single archive file following MAME name standard in root folder |
|
||||||
| mame-advmame | AdvanceMAME | | | Depends | Single archive file following MAME name standard in root folder |
|
| mame-advmame | AdvanceMAME | | | Depends | Single archive file following MAME name standard in root folder |
|
||||||
| mame-mame4all | MAME4ALL | | | Depends | Single archive file following MAME name standard in root folder |
|
| mame-mame4all | MAME4ALL | | | Depends | Single archive file following MAME name standard in root folder |
|
||||||
| mastersystem | Sega Master System | Genesis Plus GX | Genesis Plus GX Wide,<br>SMS Plus GX,<br>Gearsystem,<br>PicoDrive | No | Single archive or ROM file in root folder |
|
| mastersystem | Sega Master System | Genesis Plus GX | Genesis Plus GX Wide,<br>SMS Plus GX,<br>Gearsystem,<br>PicoDrive | No | Single archive or ROM file in root folder |
|
||||||
| megacd | Sega Mega-CD | Genesis Plus GX | | | |
|
| megacd | Sega Mega-CD | Genesis Plus GX | Genesis Plus GX Wide,<br>PicoDrive | | |
|
||||||
| megacdjp | Sega Mega-CD [Japan] | Genesis Plus GX | | | |
|
| megacdjp | Sega Mega-CD [Japan] | Genesis Plus GX | Genesis Plus GX Wide,<br>PicoDrive | | |
|
||||||
| megadrive | Sega Mega Drive | Genesis Plus GX | Genesis Plus GX Wide,<br>PicoDrive,<br>BlastEm | No | Single archive or ROM file in root folder |
|
| megadrive | Sega Mega Drive | Genesis Plus GX | Genesis Plus GX Wide,<br>PicoDrive,<br>BlastEm | No | Single archive or ROM file in root folder |
|
||||||
| mess | Multi Emulator Super System | MESS 2015 | | | |
|
| mess | Multi Emulator Super System | MESS 2015 | | | |
|
||||||
| moonlight | Moonlight game streaming | | | | |
|
| moonlight | Moonlight game streaming | | | | |
|
||||||
| moto | Thomson MO/TO series | Theodore | | | |
|
| moto | Thomson MO/TO series | Theodore | | | |
|
||||||
| msx | MSX | blueMSX | | | |
|
| msx | MSX | blueMSX | fMSX | | |
|
||||||
| msx1 | MSX1 | blueMSX | | | |
|
| msx1 | MSX1 | blueMSX | fMSX | | |
|
||||||
| msx2 | MSX2 | blueMSX | | | |
|
| msx2 | MSX2 | blueMSX | fMSX | | |
|
||||||
| msxturbor | MSX Turbo R | blueMSX | | | |
|
| msxturbor | MSX Turbo R | blueMSX | | | |
|
||||||
| multivision | Othello Multivision | Gearsystem | | | |
|
| multivision | Othello Multivision | Gearsystem | | | |
|
||||||
| naomi | Sega NAOMI | Flycast | | | |
|
| naomi | Sega NAOMI | Flycast | | | |
|
||||||
| naomigd | Sega NAOMI GD-ROM | Flycast | | | |
|
| naomigd | Sega NAOMI GD-ROM | Flycast | | | |
|
||||||
| n3ds | Nintendo 3DS | Citra | | | |
|
| n3ds | Nintendo 3DS | Citra [UW] | Citra 2018 [UW] | | |
|
||||||
| n64 | Nintendo 64 | Mupen64Plus-Next [UW],<br>ParaLLEl N64 [M] | ParaLLEl N64 [UW] | No | Single archive or ROM file in root folder |
|
| n64 | Nintendo 64 | Mupen64Plus-Next [UW],<br>ParaLLEl N64 [M] | ParaLLEl N64 [UW] | No | Single archive or ROM file in root folder |
|
||||||
| nds | Nintendo DS | melonDS | | | |
|
| nds | Nintendo DS | DeSmuME | DeSmuME 2015,<br>melonDS | | |
|
||||||
| neogeo | SNK Neo Geo | FinalBurn Neo | | Yes | Single archive file following MAME name standard in root folder |
|
| neogeo | SNK Neo Geo | FinalBurn Neo | | Yes | Single archive file following MAME name standard in root folder |
|
||||||
| neogeocd | SNK Neo Geo CD | NeoCD | | Yes | Single archive in root folder (which includes the CD image and ripped audio) |
|
| neogeocd | SNK Neo Geo CD | NeoCD | | Yes | Single archive in root folder (which includes the CD image and ripped audio) |
|
||||||
| neogeocdjp | SNK Neo Geo CD [Japan] | NeoCD | | Yes | Single archive in root folder (which includes the CD image and ripped audio) |
|
| neogeocdjp | SNK Neo Geo CD [Japan] | NeoCD | | Yes | Single archive in root folder (which includes the CD image and ripped audio) |
|
||||||
| nes | Nintendo Entertainment System | Nestopia UE | FCEUmm,<br>Mesen,<br>QuickNES | No | Single archive or ROM file in root folder |
|
| nes | Nintendo Entertainment System | Nestopia UE | FCEUmm,<br>Mesen,<br>QuickNES | No | Single archive or ROM file in root folder |
|
||||||
| ngp | SNK Neo Geo Pocket | Beetle NeoPop | | | |
|
| ngp | SNK Neo Geo Pocket | Beetle NeoPop | RACE | | |
|
||||||
| ngpc | SNK Neo Geo Pocket Color | Beetle NeoPop | | | |
|
| ngpc | SNK Neo Geo Pocket Color | Beetle NeoPop | RACE | | |
|
||||||
| odyssey2 | Magnavox Odyssey2 | O2EM | | | |
|
| odyssey2 | Magnavox Odyssey2 | O2EM | | | |
|
||||||
| openbor | OpenBOR game engine | | | | |
|
| openbor | OpenBOR game engine | | | | |
|
||||||
| oric | Tangerine Computer Systems Oric | | | | |
|
| oric | Tangerine Computer Systems Oric | | | | |
|
||||||
| palm | Palm OS | Mu | | | |
|
| palm | Palm OS | Mu | | | |
|
||||||
| pc | IBM PC | DOSBox-Core | DOSBox-Pure,<br>DOSBox-SVN | No | In separate folder (one folder per game, with complete file structure retained) |
|
| pc | IBM PC | DOSBox-Core | DOSBox-Pure,<br>DOSBox-SVN | No | In separate folder (one folder per game, with complete file structure retained) |
|
||||||
| pc88 | NEC PC-8800 series | QUASI88 | | | |
|
| pc88 | NEC PC-8800 series | QUASI88 | | | |
|
||||||
| pc98 | NEC PC-9800 series | Neko Project II Kai | | | |
|
| pc98 | NEC PC-9800 series | Neko Project II Kai | Neko Project II | | |
|
||||||
| pcengine | NEC PC Engine | Beetle PCE | Beetle PCE FAST | No | Single archive or ROM file in root folder |
|
| pcengine | NEC PC Engine | Beetle PCE | Beetle PCE FAST | No | Single archive or ROM file in root folder |
|
||||||
| pcenginecd | NEC PC Engine CD | Beetle PCE | Beetle PCE FAST | Yes | |
|
| pcenginecd | NEC PC Engine CD | Beetle PCE | Beetle PCE FAST | Yes | |
|
||||||
| pcfx | NEC PC-FX | Beetle PC-FX | | | |
|
| pcfx | NEC PC-FX | Beetle PC-FX | | | |
|
||||||
|
@ -1921,26 +1786,24 @@ Standalone)** [U] | | No | Shell scr
|
||||||
| psx | Sony PlayStation | Beetle PSX | Beetle PSX HW,<br>PCSX ReARMed,<br>DuckStation | Yes | .chd file in root folder for single-disc games, .m3u playlist in root folder for multi-disc games |
|
| psx | Sony PlayStation | Beetle PSX | Beetle PSX HW,<br>PCSX ReARMed,<br>DuckStation | Yes | .chd file in root folder for single-disc games, .m3u playlist in root folder for multi-disc games |
|
||||||
| residualvm | ResidualVM game engine | | | | |
|
| residualvm | ResidualVM game engine | | | | |
|
||||||
| samcoupe | SAM Coupé | SimCoupe | | | |
|
| samcoupe | SAM Coupé | SimCoupe | | | |
|
||||||
| satellaview | Nintendo Satellaview | Snes9x - Current | | | |
|
| satellaview | Nintendo Satellaview | Snes9x - Current | Snes9x 2010,<br>bsnes,<br>bsnes-mercury Accuracy,<br>Mesen-S | | |
|
||||||
| saturn | Sega Saturn | Beetle Saturn | | | |
|
| saturn | Sega Saturn | Beetle Saturn | Kronos [UW],<br>YabaSanshiro [UW],<br>Yabause | | |
|
||||||
| saturnjp | Sega Saturn [Japan] | Beetle Saturn | | | |
|
| saturnjp | Sega Saturn [Japan] | Beetle Saturn | Kronos [UW],<br>YabaSanshiro [UW],<br>Yabause | | |
|
||||||
| scummvm | ScummVM game engine | ScummVM | | No | In separate folder (one folder per game, with complete file structure retained) |
|
| scummvm | ScummVM game engine | ScummVM | | No | In separate folder (one folder per game, with complete file structure retained) |
|
||||||
| sega32x | Sega Mega Drive 32X | PicoDrive | | No | Single archive or ROM file in root folder |
|
| sega32x | Sega Mega Drive 32X | PicoDrive | | No | Single archive or ROM file in root folder |
|
||||||
| sega32xjp | Sega Super 32X [Japan] | PicoDrive | | No | Single archive or ROM file in root folder |
|
| sega32xjp | Sega Super 32X [Japan] | PicoDrive | | No | Single archive or ROM file in root folder |
|
||||||
| sega32xna | Sega Genesis 32X [North America] | PicoDrive | | No | Single archive or ROM file in root folder |
|
| sega32xna | Sega Genesis 32X [North America] | PicoDrive | | No | Single archive or ROM file in root folder |
|
||||||
| segacd | Sega CD | Genesis Plus GX | | | |
|
| segacd | Sega CD | Genesis Plus GX | Genesis Plus GX Wide,<br>PicoDrive | | |
|
||||||
| sg-1000 | Sega SG-1000 | Genesis Plus GX | | | |
|
| sg-1000 | Sega SG-1000 | Gearsystem | Genesis Plus GX,<br>Genesis Plus GX Wide,<br>blueMSX | | |
|
||||||
| snes | Nintendo SNES (Super Nintendo) | Snes9x - Current | Snes9x 2010,<br>bsnes,<br>bsnes-mercury Accuracy,<br>Beetle Supafaust [UW],<br>Mesen-S | No | Single archive or ROM file in root folder |
|
| snes | Nintendo SNES (Super Nintendo) | Snes9x - Current | Snes9x 2010,<br>bsnes,<br>bsnes-mercury Accuracy,<br>Beetle Supafaust [UW],<br>Mesen-S | No | Single archive or ROM file in root folder |
|
||||||
| snesna | Nintendo SNES (Super Nintendo) [North America] | Snes9x - Current | Snes9x 2010,<br>bsnes,<br>bsnes-mercury Accuracy,<br>Beetle Supafaust [UW],<br>Mesen-S | No | Single archive or ROM file in root folder |
|
| snesna | Nintendo SNES (Super Nintendo) [North America] | Snes9x - Current | Snes9x 2010,<br>bsnes,<br>bsnes-mercury Accuracy,<br>Beetle Supafaust [UW],<br>Mesen-S | No | Single archive or ROM file in root folder |
|
||||||
| solarus | Solarus game engine | | | | |
|
| solarus | Solarus game engine | | | | |
|
||||||
| spectravideo | Spectravideo | blueMSX | | | |
|
| spectravideo | Spectravideo | blueMSX | | | |
|
||||||
| steam | Valve Steam | Steam application **(
|
| steam | Valve Steam | Steam application **(Standalone)** | | No | Shell script/batch file in root folder |
|
||||||
Standalone)** | | No | Shell script/batch file in root folder |
|
|
||||||
| stratagus | Stratagus game engine | | | | |
|
| stratagus | Stratagus game engine | | | | |
|
||||||
| sufami | Bandai SuFami Turbo | Snes9x - Current | | | |
|
| sufami | Bandai SuFami Turbo | Snes9x - Current | Snes9x 2010,<br>bsnes,<br>bsnes-mercury Accuracy | | |
|
||||||
| supergrafx | NEC SuperGrafx | Beetle SuperGrafx | Beetle PCE | | |
|
| supergrafx | NEC SuperGrafx | Beetle SuperGrafx | Beetle PCE | | |
|
||||||
| switch | Nintendo Switch | Yuzu **(
|
| switch | Nintendo Switch | Yuzu **(Standalone)** [UW] | | Yes | |
|
||||||
Standalone)** [UW] | | Yes | |
|
|
||||||
| tanodragon | Tano Dragon | | | | |
|
| tanodragon | Tano Dragon | | | | |
|
||||||
| tg16 | NEC TurboGrafx-16 | Beetle PCE | Beetle PCE FAST | No | Single archive or ROM file in root folder |
|
| tg16 | NEC TurboGrafx-16 | Beetle PCE | Beetle PCE FAST | No | Single archive or ROM file in root folder |
|
||||||
| tg-cd | NEC TurboGrafx-CD | Beetle PCE | Beetle PCE FAST | Yes | |
|
| tg-cd | NEC TurboGrafx-CD | Beetle PCE | Beetle PCE FAST | Yes | |
|
||||||
|
@ -1950,7 +1813,7 @@ Standalone)** [UW] | | Yes |
|
||||||
| trs-80 | Tandy TRS-80 | | | | |
|
| trs-80 | Tandy TRS-80 | | | | |
|
||||||
| uzebox | Uzebox | Uzem | | | |
|
| uzebox | Uzebox | Uzem | | | |
|
||||||
| vectrex | Vectrex | vecx | | | |
|
| vectrex | Vectrex | vecx | | | |
|
||||||
| videopac | Philips Videopac G7000 (Magnavox Odyssey2) | O2EM | | | |
|
| videopac | Philips Videopac G7000 | O2EM | | | |
|
||||||
| virtualboy | Nintendo Virtual Boy | Beetle VB | | | |
|
| virtualboy | Nintendo Virtual Boy | Beetle VB | | | |
|
||||||
| wii | Nintendo Wii | Dolphin | | | |
|
| wii | Nintendo Wii | Dolphin | | | |
|
||||||
| wiiu | Nintendo Wii U | | | | |
|
| wiiu | Nintendo Wii U | | | | |
|
||||||
|
@ -1962,5 +1825,4 @@ Standalone)** [UW] | | Yes |
|
||||||
| xbox360 | Microsoft Xbox 360 | | | | |
|
| xbox360 | Microsoft Xbox 360 | | | | |
|
||||||
| zmachine | Infocom Z-machine | | | | |
|
| zmachine | Infocom Z-machine | | | | |
|
||||||
| zx81 | Sinclair ZX81 | EightyOne | | | |
|
| zx81 | Sinclair ZX81 | EightyOne | | | |
|
||||||
| zxspectrum | Sinclair ZX Spectrum | Fuse | | | | | Amstrad GX4000 | | | | |
|
| zxspectrum | Sinclair ZX Spectrum | Fuse | | | |
|
||||||
|
|
||||||
|
|
57
USERGUIDE.md
|
@ -124,6 +124,19 @@ There will be a lot of directories created if using the es_systems.xml file bund
|
||||||
_This is the dialog shown if no game files were found. It lets you configure the ROM directory if you don't want to use the default one, and you can also generate the game systems directory structure. Note that the directory is the physical path, and that your operating system may present this as a localized path if you are using a language other than English._
|
_This is the dialog shown if no game files were found. It lets you configure the ROM directory if you don't want to use the default one, and you can also generate the game systems directory structure. Note that the directory is the physical path, and that your operating system may present this as a localized path if you are using a language other than English._
|
||||||
|
|
||||||
|
|
||||||
|
## Specific notes for macOS
|
||||||
|
|
||||||
|
On macOS, the first time you launch a game from within ES-DE, the operating system will present you with a security option with the following description:
|
||||||
|
|
||||||
|
`"EmulationStation Desktop Edition" would like to access files in your Documents folder.`
|
||||||
|
|
||||||
|
If you don't allow this, you will not be able to place system BIOS ROMs in the RetroArch default system directory `~/Documents/RetroArch/system` even if you've already given RetroArch access to this folder. This is so because RetroArch runs as a subprocess to ES-DE and therefore inherits the security settings from the parent application. Attempting to launch a game without enabling the access will simply display an error message in the emulator that the BIOS files are missing. This of course only applies to emulators that require BIOS ROMs, all other games should work fine regardless of this security setting.
|
||||||
|
|
||||||
|
If you accidentally refused ES-DE the folder access, you can fix this by opening _System Preferences_, selecting _Security & Privacy_ and within the GUI choose _Files and Folders_. The option you need to enable is _Documents Folder_ under _EmulationStation Desktop Edition_.
|
||||||
|
|
||||||
|
Another issue on macOS 11 Big Sur (and possibly other OS versions) is that when connecting a DualShock 4 controller either via Bluetooth or using a USB cable, two separate controller devices are registered in parallel. This is a bug in either macOS or the DualShock driver and it makes it seem as if ES-DE is registering double button presses when actually two separate controller devices are generating identical input. A workaround if using Bluetooth mode is to plug in the USB cable just after connecting the controller, wait a second or two and then remove the cable again. This will remove the cabled device, leaving only the Bluetooth device active. Another workaround is to enable the setting _Only accept input from first controller_ in the ES-DE input device settings. The reason why this bug may not be visible in some other games and applications is that ES-DE enables and auto-configures all connected controllers.
|
||||||
|
|
||||||
|
|
||||||
## Customizing the systems configuration file
|
## Customizing the systems configuration file
|
||||||
|
|
||||||
The `es_systems.xml` file is located in the ES-DE resources directory which is part of the application installation. As such this file is not intended to be modified directly. If a customized file is needed, this should instead be placed in the `custom_systems` folder in the ES-DE home directory, i.e. `~/.emulationstation/custom_systems/es_systems.xml`. You can find information on the file structure and how to adapt the configuration in the [INSTALL.md](INSTALL.md#es_systemsxml) document.
|
The `es_systems.xml` file is located in the ES-DE resources directory which is part of the application installation. As such this file is not intended to be modified directly. If a customized file is needed, this should instead be placed in the `custom_systems` folder in the ES-DE home directory, i.e. `~/.emulationstation/custom_systems/es_systems.xml`. You can find information on the file structure and how to adapt the configuration in the [INSTALL.md](INSTALL.md#es_systemsxml) document.
|
||||||
|
@ -364,8 +377,7 @@ The platform name for the Commodore 64 is `c64`, so the following structure woul
|
||||||
~/ROMs/c64/Multidisk/Pirates/Pirates!.m3u
|
~/ROMs/c64/Multidisk/Pirates/Pirates!.m3u
|
||||||
```
|
```
|
||||||
|
|
||||||
It's highly recommended to create `.m3u` playlist files for multi-disc images as this normally automates disk swapping
|
It's highly recommended to create `.m3u` playlist files for multi-disc images as this normally automates disk swapping in the emulator. It's then this .m3u file that should be selected for launching the game.
|
||||||
in the emulator. It's then this .m3u file that should be selected for launching the game.
|
|
||||||
|
|
||||||
The .m3u file simply contains a list of the game files, for example in the case of Last Ninja 2.m3u:
|
The .m3u file simply contains a list of the game files, for example in the case of Last Ninja 2.m3u:
|
||||||
|
|
||||||
|
@ -418,13 +430,9 @@ Apart from the potential difficulty in locating the emulator binary, there are s
|
||||||
|
|
||||||
#### Commodore Amiga
|
#### Commodore Amiga
|
||||||
|
|
||||||
There are multiple ways to run Amiga games, but the recommended approach is to use WHDLoad. The best way is to use hard
|
There are multiple ways to run Amiga games, but the recommended approach is to use WHDLoad. The best way is to use hard disk images in `.hdf` or `.hdz` format, meaning there will be a single file per game. This makes it just as easy to play Amiga games as any console with game ROMs.
|
||||||
disk images in `.hdf` or `.hdz` format, meaning there will be a single file per game. This makes it just as easy to play
|
|
||||||
Amiga games as any console with game ROMs.
|
|
||||||
|
|
||||||
An alternative would be to use `.adf` images as not all games may be available with WHDLoad support. For this, you can
|
An alternative would be to use `.adf` images as not all games may be available with WHDLoad support. For this, you can either put single-disk images in the root folder or in a dedicated adf directory, or multiple-disk games in separate folders. It's highly recommended to create `.m3u` playlist files for multi-disc images as described earlier.
|
||||||
either put single-disk images in the root folder or in a dedicated adf directory, or multiple-disk games in separate
|
|
||||||
folders. It's highly recommended to create `.m3u` playlist files for multi-disc images as described earlier.
|
|
||||||
|
|
||||||
Here's an example of what the file structure could look like:
|
Here's an example of what the file structure could look like:
|
||||||
|
|
||||||
|
@ -864,8 +872,7 @@ If this setting is enabled and a folder has its flag set to be excluded from the
|
||||||
|
|
||||||
**Scrape actual folders** _(Multi-scraper only)_
|
**Scrape actual folders** _(Multi-scraper only)_
|
||||||
|
|
||||||
Enabling this option causes folders themselves to be included by the scraper. This is useful for DOS games or any
|
Enabling this option causes folders themselves to be included by the scraper. This is useful for DOS games or any multi-disc games where there is a folder for each individual game.
|
||||||
multi-disc games where there is a folder for each individual game.
|
|
||||||
|
|
||||||
**Auto-retry on peer verification errors** _(ScreenScraper only)_
|
**Auto-retry on peer verification errors** _(ScreenScraper only)_
|
||||||
|
|
||||||
|
@ -1212,11 +1219,7 @@ If this option is disabled, hidden files and folders within the ROMs directory t
|
||||||
|
|
||||||
**Show hidden games (requires restart)**
|
**Show hidden games (requires restart)**
|
||||||
|
|
||||||
You can mark games as hidden in the metadata editor, which is useful for instance for DOS games where you may not want
|
You can mark games as hidden in the metadata editor, which is useful for instance for DOS games where you may not want to see some batch files and executables inside ES-DE, or for multi-disc games where you may only want to show the .m3u playlists and not the individual game files. By disabling this option these files will not be processed at all when ES-DE starts up. If you enable the option you will see the files, but their name entries will be almost transparent in the gamelist view to visually indicate that they are hidden.
|
||||||
to see some batch files and executables inside ES-DE, or for multi-disc games where you may only want to show the .m3u
|
|
||||||
playlists and not the individual game files. By disabling this option these files will not be processed at all when
|
|
||||||
ES-DE starts up. If you enable the option you will see the files, but their name entries will be almost transparent in
|
|
||||||
the gamelist view to visually indicate that they are hidden.
|
|
||||||
|
|
||||||
**Enable custom event scripts**
|
**Enable custom event scripts**
|
||||||
|
|
||||||
|
@ -1404,11 +1407,7 @@ A flag to mark whether the game is suitable for children. This will be applied a
|
||||||
|
|
||||||
**Hidden**
|
**Hidden**
|
||||||
|
|
||||||
A flag to indicate that the game is hidden. If the corresponding option has been set in the main menu, the game will not
|
A flag to indicate that the game is hidden. If the corresponding option has been set in the main menu, the game will not be shown. Useful for example for DOS games to hide batch scripts and unnecessary binaries or to hide the actual game files for multi-disc games. If a file or folder is flagged as hidden but the corresponding option to hide hidden games has not been enabled, then the opacity of the text will be lowered significantly to make it clear that it's a hidden entry.
|
||||||
be shown. Useful for example for DOS games to hide batch scripts and unnecessary binaries or to hide the actual game
|
|
||||||
files for multi-disc games. If a file or folder is flagged as hidden but the corresponding option to hide hidden games
|
|
||||||
has not been enabled, then the opacity of the text will be lowered significantly to make it clear that it's a hidden
|
|
||||||
entry.
|
|
||||||
|
|
||||||
**Broken/not working**
|
**Broken/not working**
|
||||||
|
|
||||||
|
@ -1416,27 +1415,15 @@ A flag to indicate whether the game is broken. Useful for MAME games for instanc
|
||||||
|
|
||||||
**Exclude from game counter** _(files only)_
|
**Exclude from game counter** _(files only)_
|
||||||
|
|
||||||
A flag to indicate whether the game should be excluded from being counted. If this is set for a game, it will not be
|
A flag to indicate whether the game should be excluded from being counted. If this is set for a game, it will not be included in the game counter shown per system on the system view, and it will not be included in the system information field in the gamelist view. As well, it will be excluded from all automatic and custom collections. This option is quite useful for multi-file games such as multi-disc Amiga or Commodore 64 games, or for DOS games where you want to exclude setup programs and similar but still need them available in ES-DE and therefore can't hide them. Files that have this flag set will have a lower opacity in the gamelists, making them easy to spot.
|
||||||
included in the game counter shown per system on the system view, and it will not be included in the system information
|
|
||||||
field in the gamelist view. As well, it will be excluded from all automatic and custom collections. This option is quite
|
|
||||||
useful for multi-file games such as multi-disc Amiga or Commodore 64 games, or for DOS games where you want to exclude
|
|
||||||
setup programs and similar but still need them available in ES-DE and therefore can't hide them. Files that have this
|
|
||||||
flag set will have a lower opacity in the gamelists, making them easy to spot.
|
|
||||||
|
|
||||||
**Exclude from multi-scraper**
|
**Exclude from multi-scraper**
|
||||||
|
|
||||||
Whether to exclude the file from the multi-scraper. This is quite useful in order to avoid scraping all the disks for
|
Whether to exclude the file from the multi-scraper. This is quite useful in order to avoid scraping all the disks for multi-disc games for example. There is an option in the scraper settings to ignore this flag, but by default the multi-scraper will respect it.
|
||||||
multi-disc games for example. There is an option in the scraper settings to ignore this flag, but by default the
|
|
||||||
multi-scraper will respect it.
|
|
||||||
|
|
||||||
**Hide metadata fields**
|
**Hide metadata fields**
|
||||||
|
|
||||||
This option will hide most metadata fields in the gamelist view. The intention is to be able to hide the fields for
|
This option will hide most metadata fields in the gamelist view. The intention is to be able to hide the fields for situations such as general folders (Multi-disc, Cartridges etc.) and for setup programs and similar (e.g. SETUP.EXE or INSTALL.BAT for DOS games). It could also be used on the game files for multi-disc games where perhaps only the .m3u playlist should have any metadata values. The only fields shown with this option enabled are the game name and description. Using the description it's possible to write some comments regarding the file or folder, should you want to. It's also possible to display game images and videos with this setting enabled.
|
||||||
situations such as general folders (Multi-disc, Cartridges etc.) and for setup programs and similar (e.g. SETUP.EXE or
|
|
||||||
INSTALL.BAT for DOS games). It could also be used on the game files for multi-disc games where perhaps only the .m3u
|
|
||||||
playlist should have any metadata values. The only fields shown with this option enabled are the game name and
|
|
||||||
description. Using the description it's possible to write some comments regarding the file or folder, should you want
|
|
||||||
to. It's also possible to display game images and videos with this setting enabled.
|
|
||||||
|
|
||||||
**Launch command** _(files only)_
|
**Launch command** _(files only)_
|
||||||
|
|
||||||
|
|
|
@ -10,106 +10,106 @@
|
||||||
project("emulationstation-de")
|
project("emulationstation-de")
|
||||||
|
|
||||||
set(ES_HEADERS
|
set(ES_HEADERS
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/CollectionSystemsManager.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/CollectionSystemsManager.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/EmulationStation.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/EmulationStation.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/MediaViewer.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/MediaViewer.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/MiximageGenerator.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/MiximageGenerator.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/SystemScreensaver.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/SystemScreensaver.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.h
|
||||||
|
|
||||||
# GUIs
|
# GUIs
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiAlternativeEmulators.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiAlternativeEmulators.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiCollectionSystemsOptions.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiCollectionSystemsOptions.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistFilter.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistFilter.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInfoPopup.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInfoPopup.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiLaunchScreen.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiLaunchScreen.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMediaViewerOptions.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMediaViewerOptions.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiOfflineGenerator.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiOfflineGenerator.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMenu.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMenu.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperSearch.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperSearch.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScreensaverOptions.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScreensaverOptions.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.h
|
||||||
|
|
||||||
# Scrapers
|
# Scrapers
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraper.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraper.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraperResources.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraperResources.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.h
|
||||||
|
|
||||||
# Views
|
# Views
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/DetailedGameListView.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/DetailedGameListView.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGameListView.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGameListView.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/VideoGameListView.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/VideoGameListView.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/UIModeController.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/UIModeController.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h
|
||||||
)
|
)
|
||||||
|
|
||||||
set(ES_SOURCES
|
set(ES_SOURCES
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/CollectionSystemsManager.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/CollectionSystemsManager.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/MediaViewer.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/MediaViewer.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/MiximageGenerator.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/MiximageGenerator.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/SystemScreensaver.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/SystemScreensaver.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp
|
||||||
|
|
||||||
# GUIs
|
# GUIs
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiAlternativeEmulators.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiAlternativeEmulators.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiCollectionSystemsOptions.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiCollectionSystemsOptions.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistFilter.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistFilter.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInfoPopup.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInfoPopup.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiLaunchScreen.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiLaunchScreen.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMediaViewerOptions.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMediaViewerOptions.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiOfflineGenerator.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiOfflineGenerator.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMenu.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMenu.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperSearch.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperSearch.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScreensaverOptions.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScreensaverOptions.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.cpp
|
||||||
|
|
||||||
# Scrapers
|
# Scrapers
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraper.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraper.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraperResources.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraperResources.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.cpp
|
||||||
|
|
||||||
# Views
|
# Views
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/DetailedGameListView.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/DetailedGameListView.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGameListView.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGameListView.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/VideoGameListView.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/VideoGameListView.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/UIModeController.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/UIModeController.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
LIST(APPEND ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation.rc)
|
LIST(APPEND ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation.rc)
|
||||||
|
@ -134,55 +134,55 @@ endif()
|
||||||
# Setup for installation and package generation.
|
# Setup for installation and package generation.
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
install(TARGETS EmulationStation RUNTIME DESTINATION .)
|
install(TARGETS EmulationStation RUNTIME DESTINATION .)
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
install(FILES ../avcodec-58.dll
|
install(FILES ../avcodec-58.dll
|
||||||
../avfilter-7.dll
|
../avfilter-7.dll
|
||||||
../avformat-58.dll
|
../avformat-58.dll
|
||||||
../avutil-56.dll
|
../avutil-56.dll
|
||||||
../postproc-55.dll
|
../postproc-55.dll
|
||||||
../swresample-3.dll
|
../swresample-3.dll
|
||||||
../swscale-5.dll
|
../swscale-5.dll
|
||||||
../FreeImage.dll
|
../FreeImage.dll
|
||||||
../freetype.dll
|
../freetype.dll
|
||||||
../glew32.dll
|
../glew32.dll
|
||||||
../libcrypto-1_1-x64.dll
|
../libcrypto-1_1-x64.dll
|
||||||
../libcurl-x64.dll
|
../libcurl-x64.dll
|
||||||
../libssl-1_1-x64.dll
|
../libssl-1_1-x64.dll
|
||||||
../MSVCP140.dll
|
../MSVCP140.dll
|
||||||
../pugixml.dll
|
../pugixml.dll
|
||||||
../SDL2.dll
|
../SDL2.dll
|
||||||
../VCOMP140.DLL
|
../VCOMP140.DLL
|
||||||
../VCRUNTIME140.dll
|
../VCRUNTIME140.dll
|
||||||
../VCRUNTIME140_1.dll
|
../VCRUNTIME140_1.dll
|
||||||
DESTINATION .)
|
DESTINATION .)
|
||||||
if (VLC_PLAYER)
|
if(VLC_PLAYER)
|
||||||
install(FILES ../libvlc.dll ../libvlccore.dll DESTINATION .)
|
install(FILES ../libvlc.dll ../libvlccore.dll DESTINATION .)
|
||||||
endif ()
|
endif()
|
||||||
else ()
|
else()
|
||||||
install(FILES ../avcodec-58.dll
|
install(FILES ../avcodec-58.dll
|
||||||
../avfilter-7.dll
|
../avfilter-7.dll
|
||||||
../avformat-58.dll
|
../avformat-58.dll
|
||||||
../avutil-56.dll
|
../avutil-56.dll
|
||||||
../postproc-55.dll
|
../postproc-55.dll
|
||||||
../swresample-3.dll
|
../swresample-3.dll
|
||||||
../swscale-5.dll
|
../swscale-5.dll
|
||||||
../FreeImage.dll
|
../FreeImage.dll
|
||||||
../glew32.dll
|
../glew32.dll
|
||||||
../libcrypto-1_1-x64.dll
|
../libcrypto-1_1-x64.dll
|
||||||
../libcurl-x64.dll
|
../libcurl-x64.dll
|
||||||
../libfreetype.dll
|
../libfreetype.dll
|
||||||
../libpugixml.dll
|
../libpugixml.dll
|
||||||
../libssl-1_1-x64.dll
|
../libssl-1_1-x64.dll
|
||||||
../SDL2.dll
|
../SDL2.dll
|
||||||
../vcomp140.dll
|
../vcomp140.dll
|
||||||
DESTINATION .)
|
DESTINATION .)
|
||||||
if (VLC_PLAYER)
|
if(VLC_PLAYER)
|
||||||
install(FILES ../libvlc.dll ../libvlccore.dll DESTINATION .)
|
install(FILES ../libvlc.dll ../libvlccore.dll DESTINATION .)
|
||||||
endif ()
|
endif()
|
||||||
endif ()
|
endif()
|
||||||
if (VLC_PLAYER)
|
if(VLC_PLAYER)
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/plugins DESTINATION .)
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/plugins DESTINATION .)
|
||||||
endif ()
|
endif()
|
||||||
install(FILES ../LICENSE DESTINATION .)
|
install(FILES ../LICENSE DESTINATION .)
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/licenses DESTINATION .)
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/licenses DESTINATION .)
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes DESTINATION .)
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes DESTINATION .)
|
||||||
|
@ -206,81 +206,81 @@ elseif(APPLE)
|
||||||
# on your system (e.g. if using libSDL2-2.1.0.dylib instead of libSDL2-2.0.0.dylib).
|
# on your system (e.g. if using libSDL2-2.1.0.dylib instead of libSDL2-2.0.0.dylib).
|
||||||
# This problem definitely needs to be resolved properly at a later date.
|
# This problem definitely needs to be resolved properly at a later date.
|
||||||
add_custom_command(TARGET EmulationStation POST_BUILD COMMAND ${CMAKE_INSTALL_NAME_TOOL}
|
add_custom_command(TARGET EmulationStation POST_BUILD COMMAND ${CMAKE_INSTALL_NAME_TOOL}
|
||||||
-change /usr/local/lib/libavcodec.58.dylib @rpath/libavcodec.58.dylib
|
-change /usr/local/lib/libavcodec.58.dylib @rpath/libavcodec.58.dylib
|
||||||
-change /usr/local/lib/libavfilter.7.dylib @rpath/libavfilter.7.dylib
|
-change /usr/local/lib/libavfilter.7.dylib @rpath/libavfilter.7.dylib
|
||||||
-change /usr/local/lib/libavformat.58.dylib @rpath/libavformat.58.dylib
|
-change /usr/local/lib/libavformat.58.dylib @rpath/libavformat.58.dylib
|
||||||
-change /usr/local/lib/libavutil.56.dylib @rpath/libavutil.56.dylib
|
-change /usr/local/lib/libavutil.56.dylib @rpath/libavutil.56.dylib
|
||||||
-change /usr/local/lib/libswresample.3.dylib @rpath/libswresample.3.dylib
|
-change /usr/local/lib/libswresample.3.dylib @rpath/libswresample.3.dylib
|
||||||
-change /usr/local/lib/libswscale.5.dylib @rpath/libswscale.5.dylib
|
-change /usr/local/lib/libswscale.5.dylib @rpath/libswscale.5.dylib
|
||||||
-change /usr/local/opt/freeimage/lib/libfreeimage.dylib @rpath/libfreeimage.dylib
|
-change /usr/local/opt/freeimage/lib/libfreeimage.dylib @rpath/libfreeimage.dylib
|
||||||
-change /usr/local/opt/freetype/lib/libfreetype.6.dylib @rpath/libfreetype.6.dylib
|
-change /usr/local/opt/freetype/lib/libfreetype.6.dylib @rpath/libfreetype.6.dylib
|
||||||
-change /usr/local/opt/libpng/lib/libpng16.16.dylib @rpath/libpng16.16.dylib
|
-change /usr/local/opt/libpng/lib/libpng16.16.dylib @rpath/libpng16.16.dylib
|
||||||
-change /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib @rpath/libSDL2-2.0.0.dylib
|
-change /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib @rpath/libSDL2-2.0.0.dylib
|
||||||
$<TARGET_FILE:EmulationStation>)
|
$<TARGET_FILE:EmulationStation>)
|
||||||
|
|
||||||
set(APPLE_DYLIB_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE
|
set(APPLE_DYLIB_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE
|
||||||
GROUP_READ GROUP_EXECUTE
|
GROUP_READ GROUP_EXECUTE
|
||||||
WORLD_READ WORLD_EXECUTE)
|
WORLD_READ WORLD_EXECUTE)
|
||||||
|
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libavcodec.58.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libavcodec.58.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libavfilter.7.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libavfilter.7.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libavformat.58.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libavformat.58.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libavutil.56.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libavutil.56.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libpostproc.55.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libpostproc.55.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libswresample.3.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libswresample.3.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libswscale.5.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libswscale.5.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libfdk-aac.2.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libfdk-aac.2.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libfreeimage.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libfreeimage.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libfreetype.6.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libfreetype.6.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libpng16.16.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libpng16.16.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libSDL2-2.0.0.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libSDL2-2.0.0.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
|
|
||||||
if (VLC_PLAYER)
|
if(VLC_PLAYER)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libvlc.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libvlc.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/libvlccore.dylib
|
install(FILES ${CMAKE_SOURCE_DIR}/libvlccore.dylib
|
||||||
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS)
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/plugins
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/plugins
|
||||||
DESTINATION ../MacOS)
|
DESTINATION ../MacOS)
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION ../Resources)
|
install(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION ../Resources)
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/resources DESTINATION ../Resources)
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/resources DESTINATION ../Resources)
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes DESTINATION ../Resources)
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes DESTINATION ../Resources)
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/licenses DESTINATION ../Resources)
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/licenses DESTINATION ../Resources)
|
||||||
else ()
|
else()
|
||||||
install(TARGETS emulationstation RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
install(TARGETS emulationstation RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/emulationstation.6.gz
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/emulationstation.6.gz
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man6)
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man6)
|
||||||
else ()
|
else()
|
||||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/emulationstation.6.gz
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/emulationstation.6.gz
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/man/man6)
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/man/man6)
|
||||||
endif ()
|
endif()
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/LICENSE
|
install(FILES ${CMAKE_SOURCE_DIR}/LICENSE
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation)
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation)
|
||||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/emulationstation.desktop
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/emulationstation.desktop
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications)
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications)
|
||||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/emulationstation.svg
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/emulationstation.svg
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pixmaps)
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pixmaps)
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/licenses
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/licenses
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation)
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation)
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation)
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation)
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/resources
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/resources
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation)
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(InstallRequiredSystemLibraries)
|
include(InstallRequiredSystemLibraries)
|
||||||
|
@ -317,13 +317,13 @@ endif()
|
||||||
# Settings per operating system and generator type.
|
# Settings per operating system and generator type.
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(CPACK_GENERATOR "Bundle")
|
set(CPACK_GENERATOR "Bundle")
|
||||||
if (CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.14)
|
if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.14)
|
||||||
set(CPACK_PACKAGE_FILE_NAME "EmulationStation-DE-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}_legacy")
|
set(CPACK_PACKAGE_FILE_NAME "EmulationStation-DE-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}_legacy")
|
||||||
set(CPACK_DMG_VOLUME_NAME "EmulationStation Desktop Edition ${CPACK_PACKAGE_VERSION}_legacy")
|
set(CPACK_DMG_VOLUME_NAME "EmulationStation Desktop Edition ${CPACK_PACKAGE_VERSION}_legacy")
|
||||||
else ()
|
else()
|
||||||
set(CPACK_PACKAGE_FILE_NAME "EmulationStation-DE-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}")
|
set(CPACK_PACKAGE_FILE_NAME "EmulationStation-DE-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}")
|
||||||
set(CPACK_DMG_VOLUME_NAME "EmulationStation Desktop Edition ${CPACK_PACKAGE_VERSION}")
|
set(CPACK_DMG_VOLUME_NAME "EmulationStation Desktop Edition ${CPACK_PACKAGE_VERSION}")
|
||||||
endif ()
|
endif()
|
||||||
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE.icns")
|
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE.icns")
|
||||||
set(CPACK_DMG_DS_STORE "${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE_DS_Store")
|
set(CPACK_DMG_DS_STORE "${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE_DS_Store")
|
||||||
set(CPACK_BUNDLE_NAME "EmulationStation Desktop Edition")
|
set(CPACK_BUNDLE_NAME "EmulationStation Desktop Edition")
|
||||||
|
@ -331,9 +331,9 @@ if(APPLE)
|
||||||
set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE_Info.plist")
|
set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE_Info.plist")
|
||||||
if(MACOS_CODESIGN_IDENTITY)
|
if(MACOS_CODESIGN_IDENTITY)
|
||||||
set(CPACK_BUNDLE_APPLE_CERT_APP "Developer ID Application: ${MACOS_CODESIGN_IDENTITY}")
|
set(CPACK_BUNDLE_APPLE_CERT_APP "Developer ID Application: ${MACOS_CODESIGN_IDENTITY}")
|
||||||
if (CMAKE_OSX_DEPLOYMENT_TARGET VERSION_GREATER 10.13)
|
if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_GREATER 10.13)
|
||||||
set(CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER "--deep --force --options runtime")
|
set(CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER "--deep --force --options runtime")
|
||||||
endif ()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
elseif(WIN32)
|
elseif(WIN32)
|
||||||
set(CPACK_GENERATOR "NSIS")
|
set(CPACK_GENERATOR "NSIS")
|
||||||
|
@ -354,9 +354,9 @@ elseif(WIN32)
|
||||||
else()
|
else()
|
||||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY "emulationstation_${CMAKE_PACKAGE_VERSION}")
|
set(CPACK_PACKAGE_INSTALL_DIRECTORY "emulationstation_${CMAKE_PACKAGE_VERSION}")
|
||||||
set(CPACK_PACKAGE_EXECUTABLES "emulationstation" "emulationstation")
|
set(CPACK_PACKAGE_EXECUTABLES "emulationstation" "emulationstation")
|
||||||
if (LINUX_CPACK_GENERATOR STREQUAL "DEB")
|
if(LINUX_CPACK_GENERATOR STREQUAL "DEB")
|
||||||
set(CPACK_GENERATOR "DEB")
|
set(CPACK_GENERATOR "DEB")
|
||||||
endif ()
|
endif()
|
||||||
set(CPACK_DEBIAN_FILE_NAME "emulationstation-de-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}.deb")
|
set(CPACK_DEBIAN_FILE_NAME "emulationstation-de-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}.deb")
|
||||||
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Leon Styhre <leon@leonstyhre.com>")
|
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Leon Styhre <leon@leonstyhre.com>")
|
||||||
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://es-de.org")
|
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://es-de.org")
|
||||||
|
@ -366,9 +366,9 @@ else()
|
||||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "vlc")
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "vlc")
|
||||||
endif()
|
endif()
|
||||||
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
||||||
if (LINUX_CPACK_GENERATOR STREQUAL "RPM")
|
if(LINUX_CPACK_GENERATOR STREQUAL "RPM")
|
||||||
set(CPACK_GENERATOR "RPM")
|
set(CPACK_GENERATOR "RPM")
|
||||||
endif ()
|
endif()
|
||||||
set(CPACK_RPM_FILE_NAME "emulationstation-de-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}.rpm")
|
set(CPACK_RPM_FILE_NAME "emulationstation-de-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}.rpm")
|
||||||
set(CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION})
|
set(CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION})
|
||||||
set(CPACK_RPM_PACKAGE_LICENSE "MIT")
|
set(CPACK_RPM_PACKAGE_LICENSE "MIT")
|
||||||
|
|
|
@ -377,21 +377,21 @@ void CollectionSystemsManager::updateCollectionSystem(FileData* file, Collection
|
||||||
// If the countasgame flag has been set to false, then remove the game.
|
// If the countasgame flag has been set to false, then remove the game.
|
||||||
if (curSys->isGroupedCustomCollection()) {
|
if (curSys->isGroupedCustomCollection()) {
|
||||||
ViewController::get()
|
ViewController::get()
|
||||||
->getGameListView(curSys->getRootFolder()->getParent()->getSystem())
|
->getGameListView(curSys->getRootFolder()->getParent()->getSystem())
|
||||||
.get()
|
.get()
|
||||||
->remove(collectionEntry, false);
|
->remove(collectionEntry, false);
|
||||||
FileData *parentRootFolder =
|
FileData* parentRootFolder =
|
||||||
rootFolder->getParent()->getSystem()->getRootFolder();
|
rootFolder->getParent()->getSystem()->getRootFolder();
|
||||||
parentRootFolder->sort(parentRootFolder->getSortTypeFromString(
|
parentRootFolder->sort(parentRootFolder->getSortTypeFromString(
|
||||||
parentRootFolder->getSortTypeString()),
|
parentRootFolder->getSortTypeString()),
|
||||||
mFavoritesSorting);
|
mFavoritesSorting);
|
||||||
GuiInfoPopup *s = new GuiInfoPopup(
|
GuiInfoPopup* s = new GuiInfoPopup(
|
||||||
mWindow,
|
mWindow,
|
||||||
"DISABLED '" +
|
"DISABLED '" +
|
||||||
Utils::String::toUpper(
|
Utils::String::toUpper(
|
||||||
Utils::String::removeParenthesis(file->getName())) +
|
Utils::String::removeParenthesis(file->getName())) +
|
||||||
"' IN '" + Utils::String::toUpper(sysData.system->getName()) + "'",
|
"' IN '" + Utils::String::toUpper(sysData.system->getName()) + "'",
|
||||||
4000);
|
4000);
|
||||||
mWindow->setInfoPopup(s);
|
mWindow->setInfoPopup(s);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -550,26 +550,22 @@ bool CollectionSystemsManager::isThemeCustomCollectionCompatible(
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CollectionSystemsManager::getValidNewCollectionName(std::string inName, int index) {
|
std::string CollectionSystemsManager::getValidNewCollectionName(std::string inName, int index)
|
||||||
|
{
|
||||||
std::string name = inName;
|
std::string name = inName;
|
||||||
|
|
||||||
// Trim leading and trailing whitespaces.
|
// Trim leading and trailing whitespaces.
|
||||||
name.erase(name.begin(), std::find_if(name.begin(), name.end(), [](char c) {
|
name = Utils::String::trim(name);
|
||||||
return !std::isspace(static_cast<unsigned char>(c));
|
|
||||||
}));
|
|
||||||
name.erase(std::find_if(name.rbegin(), name.rend(),
|
|
||||||
[](char c) { return !std::isspace(static_cast<unsigned char>(c)); })
|
|
||||||
.base(),
|
|
||||||
name.end());
|
|
||||||
|
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
size_t remove = std::string::npos;
|
size_t remove = std::string::npos;
|
||||||
// Get valid name.
|
// Get valid name.
|
||||||
while ((remove = name.find_first_not_of(
|
while ((remove = name.find_first_not_of(
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-[]()' ")) !=
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-[]()' ")) !=
|
||||||
std::string::npos)
|
std::string::npos)
|
||||||
name.erase(remove, 1);
|
name.erase(remove, 1);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
name += " (" + std::to_string(index) + ")";
|
name += " (" + std::to_string(index) + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -696,6 +692,7 @@ bool CollectionSystemsManager::toggleGameInCollection(FileData* file)
|
||||||
adding = false;
|
adding = false;
|
||||||
// If we found it, we need to remove it.
|
// If we found it, we need to remove it.
|
||||||
FileData* collectionEntry = children.at(key);
|
FileData* collectionEntry = children.at(key);
|
||||||
|
fileIndex->removeFromIndex(collectionEntry);
|
||||||
ViewController::get()
|
ViewController::get()
|
||||||
->getGameListView(systemViewToUpdate)
|
->getGameListView(systemViewToUpdate)
|
||||||
.get()
|
.get()
|
||||||
|
@ -923,7 +920,7 @@ SystemData* CollectionSystemsManager::addNewCustomCollection(std::string name)
|
||||||
CollectionSystemDecl decl = mCollectionSystemDeclsIndex[myCollectionsName];
|
CollectionSystemDecl decl = mCollectionSystemDeclsIndex[myCollectionsName];
|
||||||
decl.themeFolder = name;
|
decl.themeFolder = name;
|
||||||
decl.name = name;
|
decl.name = name;
|
||||||
decl.longName = name;
|
decl.fullName = name;
|
||||||
|
|
||||||
return createNewCollectionEntry(name, decl, true, true);
|
return createNewCollectionEntry(name, decl, true, true);
|
||||||
}
|
}
|
||||||
|
@ -1111,7 +1108,7 @@ SystemData* CollectionSystemsManager::createNewCollectionEntry(std::string name,
|
||||||
bool index,
|
bool index,
|
||||||
bool custom)
|
bool custom)
|
||||||
{
|
{
|
||||||
SystemData* newSys = new SystemData(name, sysDecl.longName, mCollectionEnvData,
|
SystemData* newSys = new SystemData(name, sysDecl.fullName, "", mCollectionEnvData,
|
||||||
sysDecl.themeFolder, true, custom);
|
sysDecl.themeFolder, true, custom);
|
||||||
|
|
||||||
CollectionSystemData newCollectionData;
|
CollectionSystemData newCollectionData;
|
||||||
|
@ -1331,7 +1328,8 @@ void CollectionSystemsManager::addEnabledCollectionsToDisplayedSystems(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> CollectionSystemsManager::getSystemsFromConfig() {
|
std::vector<std::string> CollectionSystemsManager::getSystemsFromConfig()
|
||||||
|
{
|
||||||
std::vector<std::string> systems;
|
std::vector<std::string> systems;
|
||||||
std::vector<std::string> configPaths = SystemData::getConfigPath(false);
|
std::vector<std::string> configPaths = SystemData::getConfigPath(false);
|
||||||
|
|
||||||
|
@ -1339,7 +1337,7 @@ std::vector<std::string> CollectionSystemsManager::getSystemsFromConfig() {
|
||||||
// file under ~/.emulationstation/custom_systems as we really want to include all the themes
|
// file under ~/.emulationstation/custom_systems as we really want to include all the themes
|
||||||
// supported by ES-DE. Otherwise a user may accidentally create a custom collection that
|
// supported by ES-DE. Otherwise a user may accidentally create a custom collection that
|
||||||
// corresponds to a supported theme.
|
// corresponds to a supported theme.
|
||||||
for (auto path: configPaths) {
|
for (auto path : configPaths) {
|
||||||
if (!Utils::FileSystem::exists(path))
|
if (!Utils::FileSystem::exists(path))
|
||||||
return systems;
|
return systems;
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ enum CollectionSystemType {
|
||||||
struct CollectionSystemDecl {
|
struct CollectionSystemDecl {
|
||||||
CollectionSystemType type;
|
CollectionSystemType type;
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string longName;
|
std::string fullName;
|
||||||
std::string themeFolder;
|
std::string themeFolder;
|
||||||
bool isCustom;
|
bool isCustom;
|
||||||
};
|
};
|
||||||
|
|
|
@ -30,11 +30,18 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
FileData::FileData(FileType type,
|
FileData::FileData(FileType type,
|
||||||
const std::string &path,
|
const std::string& path,
|
||||||
SystemEnvironmentData *envData,
|
SystemEnvironmentData* envData,
|
||||||
SystemData *system)
|
SystemData* system)
|
||||||
: metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA), mSourceFileData(nullptr), mParent(nullptr),
|
: metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA)
|
||||||
mType(type), mPath(path), mEnvData(envData), mSystem(system), mOnlyFolders(false), mDeletionFlag(false)
|
, mSourceFileData(nullptr)
|
||||||
|
, mParent(nullptr)
|
||||||
|
, mType(type)
|
||||||
|
, mPath(path)
|
||||||
|
, mEnvData(envData)
|
||||||
|
, mSystem(system)
|
||||||
|
, mOnlyFolders(false)
|
||||||
|
, mDeletionFlag(false)
|
||||||
{
|
{
|
||||||
// Metadata needs at least a name field (since that's what getName() will return).
|
// Metadata needs at least a name field (since that's what getName() will return).
|
||||||
if (metadata.get("name").empty()) {
|
if (metadata.get("name").empty()) {
|
||||||
|
@ -735,10 +742,11 @@ FileData::SortType FileData::getSortTypeFromString(std::string desc)
|
||||||
return FileSorts::SortTypes.at(0);
|
return FileSorts::SortTypes.at(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileData::launchGame(Window *window) {
|
void FileData::launchGame(Window* window)
|
||||||
|
{
|
||||||
LOG(LogInfo) << "Launching game \"" << this->metadata.get("name") << "\"...";
|
LOG(LogInfo) << "Launching game \"" << this->metadata.get("name") << "\"...";
|
||||||
|
|
||||||
SystemData *gameSystem = nullptr;
|
SystemData* gameSystem = nullptr;
|
||||||
std::string command = "";
|
std::string command = "";
|
||||||
std::string alternativeEmulator;
|
std::string alternativeEmulator;
|
||||||
|
|
||||||
|
@ -1347,8 +1355,8 @@ const std::string& CollectionFileData::getName()
|
||||||
if (mDirty) {
|
if (mDirty) {
|
||||||
mCollectionFileName = mSourceFileData->metadata.get("name");
|
mCollectionFileName = mSourceFileData->metadata.get("name");
|
||||||
mCollectionFileName.append(" [")
|
mCollectionFileName.append(" [")
|
||||||
.append(Utils::String::toUpper(mSourceFileData->getSystem()->getName()))
|
.append(Utils::String::toUpper(mSourceFileData->getSystem()->getName()))
|
||||||
.append("]");
|
.append("]");
|
||||||
mDirty = false;
|
mDirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
#include "utils/StringUtil.h"
|
#include "utils/StringUtil.h"
|
||||||
#include "views/UIModeController.h"
|
#include "views/UIModeController.h"
|
||||||
|
#include "views/ViewController.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
|
@ -20,24 +21,36 @@
|
||||||
#define INCLUDE_UNKNOWN false;
|
#define INCLUDE_UNKNOWN false;
|
||||||
|
|
||||||
FileFilterIndex::FileFilterIndex()
|
FileFilterIndex::FileFilterIndex()
|
||||||
: mFilterByText(false), mTextRemoveSystem(false), mFilterByFavorites(false), mFilterByGenre(false),
|
: mFilterByText(false)
|
||||||
mFilterByPlayers(false), mFilterByPubDev(false), mFilterByRatings(false), mFilterByKidGame(false),
|
, mTextRemoveSystem(false)
|
||||||
mFilterByCompleted(false), mFilterByBroken(false), mFilterByHidden(false)
|
, mFilterByRatings(false)
|
||||||
|
, mFilterByDeveloper(false)
|
||||||
|
, mFilterByPublisher(false)
|
||||||
|
, mFilterByGenre(false)
|
||||||
|
, mFilterByPlayers(false)
|
||||||
|
, mFilterByFavorites(false)
|
||||||
|
, mFilterByCompleted(false)
|
||||||
|
, mFilterByKidGame(false)
|
||||||
|
, mFilterByHidden(false)
|
||||||
|
, mFilterByBroken(false)
|
||||||
|
, mFilterByAltemulator(false)
|
||||||
{
|
{
|
||||||
clearAllFilters();
|
clearAllFilters();
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
FilterDataDecl filterDecls[] = {
|
FilterDataDecl filterDecls[] = {
|
||||||
//type //allKeys //filteredBy //filteredKeys //primaryKey //hasSecondaryKey //secondaryKey //menuLabel
|
//type //allKeys //filteredBy //filteredKeys //primaryKey //hasSecondaryKey //secondaryKey //menuLabel
|
||||||
{FAVORITES_FILTER, &mFavoritesIndexAllKeys, &mFilterByFavorites, &mFavoritesIndexFilteredKeys, "favorite", false, "", "FAVORITES"},
|
{RATINGS_FILTER, &mRatingsIndexAllKeys, &mFilterByRatings, &mRatingsIndexFilteredKeys, "rating", false, "", "RATING"},
|
||||||
{GENRE_FILTER, &mGenreIndexAllKeys, &mFilterByGenre, &mGenreIndexFilteredKeys, "genre", true, "genre", "GENRE"},
|
{DEVELOPER_FILTER, &mDeveloperIndexAllKeys, &mFilterByDeveloper, &mDeveloperIndexFilteredKeys, "developer", false, "", "DEVELOPER"},
|
||||||
{PLAYER_FILTER, &mPlayersIndexAllKeys, &mFilterByPlayers, &mPlayersIndexFilteredKeys, "players", false, "", "PLAYERS"},
|
{PUBLISHER_FILTER, &mPublisherIndexAllKeys, &mFilterByPublisher, &mPublisherIndexFilteredKeys, "publisher", false, "", "PUBLISHER"},
|
||||||
{PUBDEV_FILTER, &mPubDevIndexAllKeys, &mFilterByPubDev, &mPubDevIndexFilteredKeys, "developer", true, "publisher", "PUBLISHER / DEVELOPER"},
|
{GENRE_FILTER, &mGenreIndexAllKeys, &mFilterByGenre, &mGenreIndexFilteredKeys, "genre", true, "genre", "GENRE"},
|
||||||
{RATINGS_FILTER, &mRatingsIndexAllKeys, &mFilterByRatings, &mRatingsIndexFilteredKeys, "rating", false, "", "RATING"},
|
{PLAYER_FILTER, &mPlayersIndexAllKeys, &mFilterByPlayers, &mPlayersIndexFilteredKeys, "players", false, "", "PLAYERS"},
|
||||||
{KIDGAME_FILTER, &mKidGameIndexAllKeys, &mFilterByKidGame, &mKidGameIndexFilteredKeys, "kidgame", false, "", "KIDGAME"},
|
{FAVORITES_FILTER, &mFavoritesIndexAllKeys, &mFilterByFavorites, &mFavoritesIndexFilteredKeys, "favorite", false, "", "FAVORITE"},
|
||||||
{COMPLETED_FILTER, &mCompletedIndexAllKeys, &mFilterByCompleted, &mCompletedIndexFilteredKeys, "completed", false, "", "COMPLETED"},
|
{COMPLETED_FILTER, &mCompletedIndexAllKeys, &mFilterByCompleted, &mCompletedIndexFilteredKeys, "completed", false, "", "COMPLETED"},
|
||||||
{BROKEN_FILTER, &mBrokenIndexAllKeys, &mFilterByBroken, &mBrokenIndexFilteredKeys, "broken", false, "", "BROKEN"},
|
{KIDGAME_FILTER, &mKidGameIndexAllKeys, &mFilterByKidGame, &mKidGameIndexFilteredKeys, "kidgame", false, "", "KIDGAME"},
|
||||||
{HIDDEN_FILTER, &mHiddenIndexAllKeys, &mFilterByHidden, &mHiddenIndexFilteredKeys, "hidden", false, "", "HIDDEN"}
|
{HIDDEN_FILTER, &mHiddenIndexAllKeys, &mFilterByHidden, &mHiddenIndexFilteredKeys, "hidden", false, "", "HIDDEN"},
|
||||||
|
{BROKEN_FILTER, &mBrokenIndexAllKeys, &mFilterByBroken, &mBrokenIndexFilteredKeys, "broken", false, "", "BROKEN"},
|
||||||
|
{ALTEMULATOR_FILTER, &mAltemulatorIndexAllKeys, &mFilterByAltemulator, &mAltemulatorIndexFilteredKeys, "altemulator", false, "", "ALTERNATIVE EMULATOR"}
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -59,15 +72,17 @@ void FileFilterIndex::importIndex(FileFilterIndex* indexToImport)
|
||||||
};
|
};
|
||||||
|
|
||||||
IndexImportStructure indexStructDecls[] = {
|
IndexImportStructure indexStructDecls[] = {
|
||||||
{&mFavoritesIndexAllKeys, &(indexToImport->mFavoritesIndexAllKeys)},
|
{&mRatingsIndexAllKeys, &(indexToImport->mRatingsIndexAllKeys)},
|
||||||
|
{&mDeveloperIndexAllKeys, &(indexToImport->mDeveloperIndexAllKeys)},
|
||||||
|
{&mPublisherIndexAllKeys, &(indexToImport->mPublisherIndexAllKeys)},
|
||||||
{&mGenreIndexAllKeys, &(indexToImport->mGenreIndexAllKeys)},
|
{&mGenreIndexAllKeys, &(indexToImport->mGenreIndexAllKeys)},
|
||||||
{&mPlayersIndexAllKeys, &(indexToImport->mPlayersIndexAllKeys)},
|
{&mPlayersIndexAllKeys, &(indexToImport->mPlayersIndexAllKeys)},
|
||||||
{&mPubDevIndexAllKeys, &(indexToImport->mPubDevIndexAllKeys)},
|
{&mFavoritesIndexAllKeys, &(indexToImport->mFavoritesIndexAllKeys)},
|
||||||
{&mRatingsIndexAllKeys, &(indexToImport->mRatingsIndexAllKeys)},
|
|
||||||
{&mKidGameIndexAllKeys, &(indexToImport->mKidGameIndexAllKeys)},
|
|
||||||
{&mCompletedIndexAllKeys, &(indexToImport->mCompletedIndexAllKeys)},
|
{&mCompletedIndexAllKeys, &(indexToImport->mCompletedIndexAllKeys)},
|
||||||
{&mBrokenIndexAllKeys, &(indexToImport->mBrokenIndexAllKeys)},
|
{&mKidGameIndexAllKeys, &(indexToImport->mKidGameIndexAllKeys)},
|
||||||
{&mHiddenIndexAllKeys, &(indexToImport->mHiddenIndexAllKeys)},
|
{&mHiddenIndexAllKeys, &(indexToImport->mHiddenIndexAllKeys)},
|
||||||
|
{&mBrokenIndexAllKeys, &(indexToImport->mBrokenIndexAllKeys)},
|
||||||
|
{&mAltemulatorIndexAllKeys, &(indexToImport->mAltemulatorIndexAllKeys)},
|
||||||
};
|
};
|
||||||
|
|
||||||
std::vector<IndexImportStructure> indexImportDecl = std::vector<IndexImportStructure>(
|
std::vector<IndexImportStructure> indexImportDecl = std::vector<IndexImportStructure>(
|
||||||
|
@ -94,15 +109,17 @@ void FileFilterIndex::importIndex(FileFilterIndex* indexToImport)
|
||||||
void FileFilterIndex::resetIndex()
|
void FileFilterIndex::resetIndex()
|
||||||
{
|
{
|
||||||
clearAllFilters();
|
clearAllFilters();
|
||||||
clearIndex(mFavoritesIndexAllKeys);
|
clearIndex(mRatingsIndexAllKeys);
|
||||||
|
clearIndex(mDeveloperIndexAllKeys);
|
||||||
|
clearIndex(mPublisherIndexAllKeys);
|
||||||
clearIndex(mGenreIndexAllKeys);
|
clearIndex(mGenreIndexAllKeys);
|
||||||
clearIndex(mPlayersIndexAllKeys);
|
clearIndex(mPlayersIndexAllKeys);
|
||||||
clearIndex(mPubDevIndexAllKeys);
|
clearIndex(mFavoritesIndexAllKeys);
|
||||||
clearIndex(mRatingsIndexAllKeys);
|
|
||||||
clearIndex(mKidGameIndexAllKeys);
|
|
||||||
clearIndex(mCompletedIndexAllKeys);
|
clearIndex(mCompletedIndexAllKeys);
|
||||||
clearIndex(mBrokenIndexAllKeys);
|
clearIndex(mKidGameIndexAllKeys);
|
||||||
clearIndex(mHiddenIndexAllKeys);
|
clearIndex(mHiddenIndexAllKeys);
|
||||||
|
clearIndex(mBrokenIndexAllKeys);
|
||||||
|
clearIndex(mAltemulatorIndexAllKeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string FileFilterIndex::getIndexableKey(FileData* game,
|
std::string FileFilterIndex::getIndexableKey(FileData* game,
|
||||||
|
@ -111,43 +128,6 @@ std::string FileFilterIndex::getIndexableKey(FileData* game,
|
||||||
{
|
{
|
||||||
std::string key = "";
|
std::string key = "";
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case FAVORITES_FILTER: {
|
|
||||||
if (game->getType() != GAME)
|
|
||||||
return "FALSE";
|
|
||||||
key = Utils::String::toUpper(game->metadata.get("favorite"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case GENRE_FILTER: {
|
|
||||||
key = Utils::String::toUpper(game->metadata.get("genre"));
|
|
||||||
key = Utils::String::trim(key);
|
|
||||||
if (getSecondary && !key.empty()) {
|
|
||||||
std::istringstream f(key);
|
|
||||||
std::string newKey;
|
|
||||||
getline(f, newKey, '/');
|
|
||||||
if (!newKey.empty() && newKey != key)
|
|
||||||
key = newKey;
|
|
||||||
else
|
|
||||||
key = std::string();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case PLAYER_FILTER: {
|
|
||||||
if (getSecondary)
|
|
||||||
break;
|
|
||||||
|
|
||||||
key = Utils::String::toUpper(game->metadata.get("players"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case PUBDEV_FILTER: {
|
|
||||||
key = Utils::String::toUpper(game->metadata.get("publisher"));
|
|
||||||
key = Utils::String::trim(key);
|
|
||||||
|
|
||||||
if ((getSecondary && !key.empty()) || (!getSecondary && key.empty()))
|
|
||||||
key = Utils::String::toUpper(game->metadata.get("developer"));
|
|
||||||
else
|
|
||||||
key = Utils::String::toUpper(game->metadata.get("publisher"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case RATINGS_FILTER: {
|
case RATINGS_FILTER: {
|
||||||
int ratingNumber = 0;
|
int ratingNumber = 0;
|
||||||
if (!getSecondary) {
|
if (!getSecondary) {
|
||||||
|
@ -178,10 +158,37 @@ std::string FileFilterIndex::getIndexableKey(FileData* game,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case KIDGAME_FILTER: {
|
case DEVELOPER_FILTER: {
|
||||||
|
key = Utils::String::toUpper(game->metadata.get("developer"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PUBLISHER_FILTER: {
|
||||||
|
key = Utils::String::toUpper(game->metadata.get("publisher"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GENRE_FILTER: {
|
||||||
|
key = Utils::String::toUpper(game->metadata.get("genre"));
|
||||||
|
if (getSecondary && !key.empty()) {
|
||||||
|
std::istringstream f(key);
|
||||||
|
std::string newKey;
|
||||||
|
getline(f, newKey, '/');
|
||||||
|
if (!newKey.empty() && newKey != key)
|
||||||
|
key = newKey;
|
||||||
|
else
|
||||||
|
key = std::string();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PLAYER_FILTER: {
|
||||||
|
if (getSecondary)
|
||||||
|
break;
|
||||||
|
key = Utils::String::toUpper(game->metadata.get("players"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FAVORITES_FILTER: {
|
||||||
if (game->getType() != GAME)
|
if (game->getType() != GAME)
|
||||||
return "FALSE";
|
return "FALSE";
|
||||||
key = Utils::String::toUpper(game->metadata.get("kidgame"));
|
key = Utils::String::toUpper(game->metadata.get("favorite"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case COMPLETED_FILTER: {
|
case COMPLETED_FILTER: {
|
||||||
|
@ -190,10 +197,10 @@ std::string FileFilterIndex::getIndexableKey(FileData* game,
|
||||||
key = Utils::String::toUpper(game->metadata.get("completed"));
|
key = Utils::String::toUpper(game->metadata.get("completed"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case BROKEN_FILTER: {
|
case KIDGAME_FILTER: {
|
||||||
if (game->getType() != GAME)
|
if (game->getType() != GAME)
|
||||||
return "FALSE";
|
return "FALSE";
|
||||||
key = Utils::String::toUpper(game->metadata.get("broken"));
|
key = Utils::String::toUpper(game->metadata.get("kidgame"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case HIDDEN_FILTER: {
|
case HIDDEN_FILTER: {
|
||||||
|
@ -202,40 +209,64 @@ std::string FileFilterIndex::getIndexableKey(FileData* game,
|
||||||
key = Utils::String::toUpper(game->metadata.get("hidden"));
|
key = Utils::String::toUpper(game->metadata.get("hidden"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case BROKEN_FILTER: {
|
||||||
|
if (game->getType() != GAME)
|
||||||
|
return "FALSE";
|
||||||
|
key = Utils::String::toUpper(game->metadata.get("broken"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ALTEMULATOR_FILTER: {
|
||||||
|
if (getSecondary)
|
||||||
|
break;
|
||||||
|
key = Utils::String::toUpper(game->metadata.get("altemulator"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
key = Utils::String::trim(key);
|
key = Utils::String::trim(key);
|
||||||
if (key.empty() || (type == RATINGS_FILTER && key == "0 STARS")) {
|
|
||||||
|
// Add a dummy value in case there is no metadata defined so we can filter based on this.
|
||||||
|
if ((type == GENRE_FILTER || type == PLAYER_FILTER || type == DEVELOPER_FILTER ||
|
||||||
|
type == PUBLISHER_FILTER) &&
|
||||||
|
Utils::String::toUpper(key) == UNKNOWN_LABEL)
|
||||||
|
key = ViewController::CROSSEDCIRCLE_CHAR + " UNKNOWN";
|
||||||
|
else if (type == ALTEMULATOR_FILTER && key.empty())
|
||||||
|
key = ViewController::CROSSEDCIRCLE_CHAR + " NONE DEFINED";
|
||||||
|
else if (key.empty() || (type == RATINGS_FILTER && key == "0 STARS"))
|
||||||
key = UNKNOWN_LABEL;
|
key = UNKNOWN_LABEL;
|
||||||
}
|
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileFilterIndex::addToIndex(FileData* game)
|
void FileFilterIndex::addToIndex(FileData* game)
|
||||||
{
|
{
|
||||||
manageFavoritesEntryInIndex(game);
|
manageRatingsEntryInIndex(game);
|
||||||
|
manageDeveloperEntryInIndex(game);
|
||||||
|
managePublisherEntryInIndex(game);
|
||||||
manageGenreEntryInIndex(game);
|
manageGenreEntryInIndex(game);
|
||||||
managePlayerEntryInIndex(game);
|
managePlayerEntryInIndex(game);
|
||||||
managePubDevEntryInIndex(game);
|
manageFavoritesEntryInIndex(game);
|
||||||
manageRatingsEntryInIndex(game);
|
|
||||||
manageKidGameEntryInIndex(game);
|
|
||||||
manageCompletedEntryInIndex(game);
|
manageCompletedEntryInIndex(game);
|
||||||
manageBrokenEntryInIndex(game);
|
manageKidGameEntryInIndex(game);
|
||||||
manageHiddenEntryInIndex(game);
|
manageHiddenEntryInIndex(game);
|
||||||
|
manageBrokenEntryInIndex(game);
|
||||||
|
manageAltemulatorEntryInIndex(game);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileFilterIndex::removeFromIndex(FileData* game)
|
void FileFilterIndex::removeFromIndex(FileData* game)
|
||||||
{
|
{
|
||||||
manageFavoritesEntryInIndex(game, true);
|
manageRatingsEntryInIndex(game, true);
|
||||||
|
manageDeveloperEntryInIndex(game, true);
|
||||||
|
managePublisherEntryInIndex(game, true);
|
||||||
manageGenreEntryInIndex(game, true);
|
manageGenreEntryInIndex(game, true);
|
||||||
managePlayerEntryInIndex(game, true);
|
managePlayerEntryInIndex(game, true);
|
||||||
managePubDevEntryInIndex(game, true);
|
manageFavoritesEntryInIndex(game, true);
|
||||||
manageRatingsEntryInIndex(game, true);
|
|
||||||
manageKidGameEntryInIndex(game, true);
|
|
||||||
manageCompletedEntryInIndex(game, true);
|
manageCompletedEntryInIndex(game, true);
|
||||||
manageBrokenEntryInIndex(game, true);
|
manageKidGameEntryInIndex(game, true);
|
||||||
manageHiddenEntryInIndex(game, true);
|
manageHiddenEntryInIndex(game, true);
|
||||||
|
manageBrokenEntryInIndex(game, true);
|
||||||
|
manageAltemulatorEntryInIndex(game, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileFilterIndex::setFilter(FilterIndexType type, std::vector<std::string>* values)
|
void FileFilterIndex::setFilter(FilterIndexType type, std::vector<std::string>* values)
|
||||||
|
@ -304,33 +335,39 @@ void FileFilterIndex::setKidModeFilters()
|
||||||
void FileFilterIndex::debugPrintIndexes()
|
void FileFilterIndex::debugPrintIndexes()
|
||||||
{
|
{
|
||||||
LOG(LogInfo) << "Printing Indexes...";
|
LOG(LogInfo) << "Printing Indexes...";
|
||||||
for (auto x : mFavoritesIndexAllKeys) {
|
for (auto x : mRatingsIndexAllKeys) {
|
||||||
LOG(LogInfo) << "Favorites Index: " << x.first << ": " << x.second;
|
LOG(LogInfo) << "Ratings Index: " << x.first << ": " << x.second;
|
||||||
|
}
|
||||||
|
for (auto x : mDeveloperIndexAllKeys) {
|
||||||
|
LOG(LogInfo) << "Developer Index: " << x.first << ": " << x.second;
|
||||||
|
}
|
||||||
|
for (auto x : mPublisherIndexAllKeys) {
|
||||||
|
LOG(LogInfo) << "Publisher Index: " << x.first << ": " << x.second;
|
||||||
}
|
}
|
||||||
for (auto x : mGenreIndexAllKeys) {
|
for (auto x : mGenreIndexAllKeys) {
|
||||||
LOG(LogInfo) << "Genre Index: " << x.first << ": " << x.second;
|
LOG(LogInfo) << "Genre Index: " << x.first << ": " << x.second;
|
||||||
}
|
}
|
||||||
for (auto x : mPlayersIndexAllKeys) {
|
for (auto x : mPlayersIndexAllKeys) {
|
||||||
LOG(LogInfo) << "Multiplayer Index: " << x.first << ": " << x.second;
|
LOG(LogInfo) << "Players Index: " << x.first << ": " << x.second;
|
||||||
}
|
}
|
||||||
for (auto x : mPubDevIndexAllKeys) {
|
for (auto x : mFavoritesIndexAllKeys) {
|
||||||
LOG(LogInfo) << "PubDev Index: " << x.first << ": " << x.second;
|
LOG(LogInfo) << "Favorites Index: " << x.first << ": " << x.second;
|
||||||
}
|
|
||||||
for (auto x : mRatingsIndexAllKeys) {
|
|
||||||
LOG(LogInfo) << "Ratings Index: " << x.first << ": " << x.second;
|
|
||||||
}
|
|
||||||
for (auto x : mKidGameIndexAllKeys) {
|
|
||||||
LOG(LogInfo) << "KidGames Index: " << x.first << ": " << x.second;
|
|
||||||
}
|
}
|
||||||
for (auto x : mCompletedIndexAllKeys) {
|
for (auto x : mCompletedIndexAllKeys) {
|
||||||
LOG(LogInfo) << "Completed Index: " << x.first << ": " << x.second;
|
LOG(LogInfo) << "Completed Index: " << x.first << ": " << x.second;
|
||||||
}
|
}
|
||||||
for (auto x : mBrokenIndexAllKeys) {
|
for (auto x : mKidGameIndexAllKeys) {
|
||||||
LOG(LogInfo) << "Broken Index: " << x.first << ": " << x.second;
|
LOG(LogInfo) << "KidGames Index: " << x.first << ": " << x.second;
|
||||||
}
|
}
|
||||||
for (auto x : mHiddenIndexAllKeys) {
|
for (auto x : mHiddenIndexAllKeys) {
|
||||||
LOG(LogInfo) << "Hidden Index: " << x.first << ": " << x.second;
|
LOG(LogInfo) << "Hidden Index: " << x.first << ": " << x.second;
|
||||||
}
|
}
|
||||||
|
for (auto x : mBrokenIndexAllKeys) {
|
||||||
|
LOG(LogInfo) << "Broken Index: " << x.first << ": " << x.second;
|
||||||
|
}
|
||||||
|
for (auto x : mAltemulatorIndexAllKeys) {
|
||||||
|
LOG(LogInfo) << "Altemulator Index: " << x.first << ": " << x.second;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileFilterIndex::showFile(FileData* game)
|
bool FileFilterIndex::showFile(FileData* game)
|
||||||
|
@ -357,10 +394,11 @@ bool FileFilterIndex::showFile(FileData* game)
|
||||||
// in [] from the search string.
|
// in [] from the search string.
|
||||||
if (mTextFilter != "" && mTextRemoveSystem &&
|
if (mTextFilter != "" && mTextRemoveSystem &&
|
||||||
!(Utils::String::toUpper(game->getName().substr(0, game->getName().find_last_of("[")))
|
!(Utils::String::toUpper(game->getName().substr(0, game->getName().find_last_of("[")))
|
||||||
.find(mTextFilter) != std::string::npos)) {
|
.find(mTextFilter) != std::string::npos)) {
|
||||||
return false;
|
return false;
|
||||||
} else if (mTextFilter != "" &&
|
}
|
||||||
!(Utils::String::toUpper(game->getName()).find(mTextFilter) != std::string::npos)) {
|
else if (mTextFilter != "" &&
|
||||||
|
!(Utils::String::toUpper(game->getName()).find(mTextFilter) != std::string::npos)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -372,7 +410,8 @@ bool FileFilterIndex::showFile(FileData* game)
|
||||||
FilterDataDecl filterData = (*it);
|
FilterDataDecl filterData = (*it);
|
||||||
if (filterData.primaryKey == "kidgame" && UIModeController::getInstance()->isUIModeKid()) {
|
if (filterData.primaryKey == "kidgame" && UIModeController::getInstance()->isUIModeKid()) {
|
||||||
return (getIndexableKey(game, filterData.type, false) != "FALSE");
|
return (getIndexableKey(game, filterData.type, false) != "FALSE");
|
||||||
} else if (*(filterData.filteredByRef)) {
|
}
|
||||||
|
else if (*(filterData.filteredByRef)) {
|
||||||
// Try to find a match.
|
// Try to find a match.
|
||||||
std::string key = getIndexableKey(game, filterData.type, false);
|
std::string key = getIndexableKey(game, filterData.type, false);
|
||||||
keepGoing = isKeyBeingFilteredBy(key, filterData.type);
|
keepGoing = isKeyBeingFilteredBy(key, filterData.type);
|
||||||
|
@ -403,28 +442,30 @@ bool FileFilterIndex::showFile(FileData* game)
|
||||||
bool FileFilterIndex::isFiltered()
|
bool FileFilterIndex::isFiltered()
|
||||||
{
|
{
|
||||||
if (UIModeController::getInstance()->isUIModeKid()) {
|
if (UIModeController::getInstance()->isUIModeKid()) {
|
||||||
return (mFilterByText || mFilterByFavorites || mFilterByGenre || mFilterByPlayers ||
|
return (mFilterByText || mFilterByRatings || mFilterByDeveloper || mFilterByPublisher ||
|
||||||
mFilterByPubDev || mFilterByRatings || mFilterByCompleted || mFilterByBroken ||
|
mFilterByGenre || mFilterByPlayers || mFilterByFavorites || mFilterByCompleted ||
|
||||||
mFilterByHidden);
|
mFilterByHidden || mFilterByBroken || mFilterByAltemulator);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return (mFilterByText || mFilterByFavorites || mFilterByGenre || mFilterByPlayers ||
|
return (mFilterByText || mFilterByRatings || mFilterByDeveloper || mFilterByPublisher ||
|
||||||
mFilterByPubDev || mFilterByRatings || mFilterByKidGame || mFilterByCompleted ||
|
mFilterByGenre || mFilterByPlayers || mFilterByFavorites || mFilterByCompleted ||
|
||||||
mFilterByBroken || mFilterByHidden);
|
mFilterByKidGame || mFilterByHidden || mFilterByBroken || mFilterByAltemulator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileFilterIndex::isKeyBeingFilteredBy(std::string key, FilterIndexType type)
|
bool FileFilterIndex::isKeyBeingFilteredBy(std::string key, FilterIndexType type)
|
||||||
{
|
{
|
||||||
const FilterIndexType filterTypes[9] = {FAVORITES_FILTER, GENRE_FILTER, PLAYER_FILTER,
|
const FilterIndexType filterTypes[11] = {RATINGS_FILTER, DEVELOPER_FILTER, PUBLISHER_FILTER,
|
||||||
PUBDEV_FILTER, RATINGS_FILTER, KIDGAME_FILTER,
|
GENRE_FILTER, PLAYER_FILTER, FAVORITES_FILTER,
|
||||||
COMPLETED_FILTER, BROKEN_FILTER, HIDDEN_FILTER};
|
COMPLETED_FILTER, KIDGAME_FILTER, HIDDEN_FILTER,
|
||||||
std::vector<std::string> filterKeysList[9] = {
|
BROKEN_FILTER, ALTEMULATOR_FILTER};
|
||||||
mFavoritesIndexFilteredKeys, mGenreIndexFilteredKeys, mPlayersIndexFilteredKeys,
|
std::vector<std::string> filterKeysList[11] = {
|
||||||
mPubDevIndexFilteredKeys, mRatingsIndexFilteredKeys, mKidGameIndexFilteredKeys,
|
mRatingsIndexFilteredKeys, mDeveloperIndexFilteredKeys, mPublisherIndexFilteredKeys,
|
||||||
mCompletedIndexFilteredKeys, mBrokenIndexFilteredKeys, mHiddenIndexFilteredKeys};
|
mGenreIndexFilteredKeys, mPlayersIndexFilteredKeys, mFavoritesIndexFilteredKeys,
|
||||||
|
mCompletedIndexFilteredKeys, mKidGameIndexFilteredKeys, mHiddenIndexFilteredKeys,
|
||||||
|
mBrokenIndexFilteredKeys, mAltemulatorIndexFilteredKeys};
|
||||||
|
|
||||||
for (int i = 0; i < 9; i++) {
|
for (int i = 0; i < 11; i++) {
|
||||||
if (filterTypes[i] == type) {
|
if (filterTypes[i] == type) {
|
||||||
for (std::vector<std::string>::const_iterator it = filterKeysList[i].cbegin();
|
for (std::vector<std::string>::const_iterator it = filterKeysList[i].cbegin();
|
||||||
it != filterKeysList[i].cend(); it++) {
|
it != filterKeysList[i].cend(); it++) {
|
||||||
|
@ -437,88 +478,6 @@ bool FileFilterIndex::isKeyBeingFilteredBy(std::string key, FilterIndexType type
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileFilterIndex::manageFavoritesEntryInIndex(FileData* game, bool remove)
|
|
||||||
{
|
|
||||||
// Flag for including unknowns.
|
|
||||||
bool includeUnknown = INCLUDE_UNKNOWN;
|
|
||||||
std::string key = getIndexableKey(game, FAVORITES_FILTER, false);
|
|
||||||
|
|
||||||
if (!includeUnknown && key == UNKNOWN_LABEL)
|
|
||||||
// No valid favorites info found.
|
|
||||||
return;
|
|
||||||
|
|
||||||
manageIndexEntry(&mFavoritesIndexAllKeys, key, remove);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FileFilterIndex::manageGenreEntryInIndex(FileData* game, bool remove)
|
|
||||||
{
|
|
||||||
std::string key = getIndexableKey(game, GENRE_FILTER, false);
|
|
||||||
|
|
||||||
// Flag for including unknowns.
|
|
||||||
bool includeUnknown = INCLUDE_UNKNOWN;
|
|
||||||
|
|
||||||
// Only add unknown in pubdev IF both dev and pub are empty.
|
|
||||||
if (!includeUnknown && (key == UNKNOWN_LABEL || key == "BIOS"))
|
|
||||||
// No valid genre info found.
|
|
||||||
return;
|
|
||||||
|
|
||||||
manageIndexEntry(&mGenreIndexAllKeys, key, remove);
|
|
||||||
|
|
||||||
key = getIndexableKey(game, GENRE_FILTER, true);
|
|
||||||
if (!includeUnknown && key == UNKNOWN_LABEL)
|
|
||||||
manageIndexEntry(&mGenreIndexAllKeys, key, remove);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FileFilterIndex::managePlayerEntryInIndex(FileData* game, bool remove)
|
|
||||||
{
|
|
||||||
// Flag for including unknowns.
|
|
||||||
bool includeUnknown = INCLUDE_UNKNOWN;
|
|
||||||
std::string key = getIndexableKey(game, PLAYER_FILTER, false);
|
|
||||||
|
|
||||||
// Only add unknown in pubdev IF both dev and pub are empty.
|
|
||||||
if (!includeUnknown && key == UNKNOWN_LABEL)
|
|
||||||
// No valid player info found.
|
|
||||||
return;
|
|
||||||
|
|
||||||
manageIndexEntry(&mPlayersIndexAllKeys, key, remove);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FileFilterIndex::managePubDevEntryInIndex(FileData* game, bool remove)
|
|
||||||
{
|
|
||||||
std::string pub = getIndexableKey(game, PUBDEV_FILTER, false);
|
|
||||||
std::string dev = getIndexableKey(game, PUBDEV_FILTER, true);
|
|
||||||
|
|
||||||
// Flag for including unknowns.
|
|
||||||
bool includeUnknown = INCLUDE_UNKNOWN;
|
|
||||||
bool unknownPub = false;
|
|
||||||
bool unknownDev = false;
|
|
||||||
|
|
||||||
if (pub == UNKNOWN_LABEL)
|
|
||||||
unknownPub = true;
|
|
||||||
|
|
||||||
if (dev == UNKNOWN_LABEL)
|
|
||||||
unknownDev = true;
|
|
||||||
|
|
||||||
if (!includeUnknown && unknownDev && unknownPub)
|
|
||||||
// No valid rating info found.
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (unknownDev && unknownPub) {
|
|
||||||
// If no info at all.
|
|
||||||
manageIndexEntry(&mPubDevIndexAllKeys, pub, remove);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (!unknownDev) {
|
|
||||||
// If no info at all.
|
|
||||||
manageIndexEntry(&mPubDevIndexAllKeys, dev, remove);
|
|
||||||
}
|
|
||||||
if (!unknownPub) {
|
|
||||||
// If no info at all.
|
|
||||||
manageIndexEntry(&mPubDevIndexAllKeys, pub, remove);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void FileFilterIndex::manageRatingsEntryInIndex(FileData* game, bool remove)
|
void FileFilterIndex::manageRatingsEntryInIndex(FileData* game, bool remove)
|
||||||
{
|
{
|
||||||
std::string key = getIndexableKey(game, RATINGS_FILTER, false);
|
std::string key = getIndexableKey(game, RATINGS_FILTER, false);
|
||||||
|
@ -533,17 +492,71 @@ void FileFilterIndex::manageRatingsEntryInIndex(FileData* game, bool remove)
|
||||||
manageIndexEntry(&mRatingsIndexAllKeys, key, remove);
|
manageIndexEntry(&mRatingsIndexAllKeys, key, remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileFilterIndex::manageKidGameEntryInIndex(FileData* game, bool remove)
|
void FileFilterIndex::manageDeveloperEntryInIndex(FileData* game, bool remove)
|
||||||
{
|
{
|
||||||
// Flag for including unknowns.
|
|
||||||
bool includeUnknown = INCLUDE_UNKNOWN;
|
bool includeUnknown = INCLUDE_UNKNOWN;
|
||||||
std::string key = getIndexableKey(game, KIDGAME_FILTER, false);
|
std::string key = getIndexableKey(game, DEVELOPER_FILTER, false);
|
||||||
|
|
||||||
if (!includeUnknown && key == UNKNOWN_LABEL)
|
if (!includeUnknown && key == UNKNOWN_LABEL)
|
||||||
// No valid kidgame info found.
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
manageIndexEntry(&mKidGameIndexAllKeys, key, remove);
|
manageIndexEntry(&mDeveloperIndexAllKeys, key, remove);
|
||||||
|
|
||||||
|
key = getIndexableKey(game, DEVELOPER_FILTER, true);
|
||||||
|
if (!includeUnknown && key == UNKNOWN_LABEL)
|
||||||
|
manageIndexEntry(&mDeveloperIndexAllKeys, key, remove);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileFilterIndex::managePublisherEntryInIndex(FileData* game, bool remove)
|
||||||
|
{
|
||||||
|
bool includeUnknown = INCLUDE_UNKNOWN;
|
||||||
|
std::string key = getIndexableKey(game, PUBLISHER_FILTER, false);
|
||||||
|
|
||||||
|
if (!includeUnknown && key == UNKNOWN_LABEL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
manageIndexEntry(&mPublisherIndexAllKeys, key, remove);
|
||||||
|
|
||||||
|
key = getIndexableKey(game, PUBLISHER_FILTER, true);
|
||||||
|
if (!includeUnknown && key == UNKNOWN_LABEL)
|
||||||
|
manageIndexEntry(&mPublisherIndexAllKeys, key, remove);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileFilterIndex::manageGenreEntryInIndex(FileData* game, bool remove)
|
||||||
|
{
|
||||||
|
bool includeUnknown = INCLUDE_UNKNOWN;
|
||||||
|
std::string key = getIndexableKey(game, GENRE_FILTER, false);
|
||||||
|
|
||||||
|
if (!includeUnknown && (key == UNKNOWN_LABEL || key == "BIOS"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
manageIndexEntry(&mGenreIndexAllKeys, key, remove);
|
||||||
|
|
||||||
|
key = getIndexableKey(game, GENRE_FILTER, true);
|
||||||
|
if (!includeUnknown && key == UNKNOWN_LABEL)
|
||||||
|
manageIndexEntry(&mGenreIndexAllKeys, key, remove);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileFilterIndex::managePlayerEntryInIndex(FileData* game, bool remove)
|
||||||
|
{
|
||||||
|
bool includeUnknown = INCLUDE_UNKNOWN;
|
||||||
|
std::string key = getIndexableKey(game, PLAYER_FILTER, false);
|
||||||
|
|
||||||
|
if (!includeUnknown && key == UNKNOWN_LABEL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
manageIndexEntry(&mPlayersIndexAllKeys, key, remove);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileFilterIndex::manageFavoritesEntryInIndex(FileData* game, bool remove)
|
||||||
|
{
|
||||||
|
bool includeUnknown = INCLUDE_UNKNOWN;
|
||||||
|
std::string key = getIndexableKey(game, FAVORITES_FILTER, false);
|
||||||
|
|
||||||
|
if (!includeUnknown && key == UNKNOWN_LABEL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
manageIndexEntry(&mFavoritesIndexAllKeys, key, remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileFilterIndex::manageCompletedEntryInIndex(FileData* game, bool remove)
|
void FileFilterIndex::manageCompletedEntryInIndex(FileData* game, bool remove)
|
||||||
|
@ -559,17 +572,17 @@ void FileFilterIndex::manageCompletedEntryInIndex(FileData* game, bool remove)
|
||||||
manageIndexEntry(&mCompletedIndexAllKeys, key, remove);
|
manageIndexEntry(&mCompletedIndexAllKeys, key, remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileFilterIndex::manageBrokenEntryInIndex(FileData* game, bool remove)
|
void FileFilterIndex::manageKidGameEntryInIndex(FileData* game, bool remove)
|
||||||
{
|
{
|
||||||
// Flag for including unknowns.
|
// Flag for including unknowns.
|
||||||
bool includeUnknown = INCLUDE_UNKNOWN;
|
bool includeUnknown = INCLUDE_UNKNOWN;
|
||||||
std::string key = getIndexableKey(game, BROKEN_FILTER, false);
|
std::string key = getIndexableKey(game, KIDGAME_FILTER, false);
|
||||||
|
|
||||||
if (!includeUnknown && key == UNKNOWN_LABEL)
|
if (!includeUnknown && key == UNKNOWN_LABEL)
|
||||||
// No valid broken info found.
|
// No valid kidgame info found.
|
||||||
return;
|
return;
|
||||||
|
|
||||||
manageIndexEntry(&mBrokenIndexAllKeys, key, remove);
|
manageIndexEntry(&mKidGameIndexAllKeys, key, remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileFilterIndex::manageHiddenEntryInIndex(FileData* game, bool remove)
|
void FileFilterIndex::manageHiddenEntryInIndex(FileData* game, bool remove)
|
||||||
|
@ -585,6 +598,25 @@ void FileFilterIndex::manageHiddenEntryInIndex(FileData* game, bool remove)
|
||||||
manageIndexEntry(&mHiddenIndexAllKeys, key, remove);
|
manageIndexEntry(&mHiddenIndexAllKeys, key, remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FileFilterIndex::manageBrokenEntryInIndex(FileData* game, bool remove)
|
||||||
|
{
|
||||||
|
// Flag for including unknowns.
|
||||||
|
bool includeUnknown = INCLUDE_UNKNOWN;
|
||||||
|
std::string key = getIndexableKey(game, BROKEN_FILTER, false);
|
||||||
|
|
||||||
|
if (!includeUnknown && key == UNKNOWN_LABEL)
|
||||||
|
// No valid broken info found.
|
||||||
|
return;
|
||||||
|
|
||||||
|
manageIndexEntry(&mBrokenIndexAllKeys, key, remove);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileFilterIndex::manageAltemulatorEntryInIndex(FileData* game, bool remove)
|
||||||
|
{
|
||||||
|
std::string key = getIndexableKey(game, ALTEMULATOR_FILTER, false);
|
||||||
|
manageIndexEntry(&mAltemulatorIndexAllKeys, key, remove);
|
||||||
|
}
|
||||||
|
|
||||||
void FileFilterIndex::manageIndexEntry(std::map<std::string, int>* index,
|
void FileFilterIndex::manageIndexEntry(std::map<std::string, int>* index,
|
||||||
std::string key,
|
std::string key,
|
||||||
bool remove)
|
bool remove)
|
||||||
|
|
|
@ -21,15 +21,17 @@ class FileData;
|
||||||
|
|
||||||
enum FilterIndexType {
|
enum FilterIndexType {
|
||||||
NONE,
|
NONE,
|
||||||
FAVORITES_FILTER,
|
RATINGS_FILTER,
|
||||||
|
DEVELOPER_FILTER,
|
||||||
|
PUBLISHER_FILTER,
|
||||||
GENRE_FILTER,
|
GENRE_FILTER,
|
||||||
PLAYER_FILTER,
|
PLAYER_FILTER,
|
||||||
PUBDEV_FILTER,
|
FAVORITES_FILTER,
|
||||||
RATINGS_FILTER,
|
|
||||||
KIDGAME_FILTER,
|
|
||||||
COMPLETED_FILTER,
|
COMPLETED_FILTER,
|
||||||
|
KIDGAME_FILTER,
|
||||||
|
HIDDEN_FILTER,
|
||||||
BROKEN_FILTER,
|
BROKEN_FILTER,
|
||||||
HIDDEN_FILTER
|
ALTEMULATOR_FILTER
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FilterDataDecl {
|
struct FilterDataDecl {
|
||||||
|
@ -48,52 +50,39 @@ class FileFilterIndex
|
||||||
public:
|
public:
|
||||||
FileFilterIndex();
|
FileFilterIndex();
|
||||||
~FileFilterIndex();
|
~FileFilterIndex();
|
||||||
|
void addToIndex(FileData* game);
|
||||||
void addToIndex(FileData *game);
|
void removeFromIndex(FileData* game);
|
||||||
|
void setFilter(FilterIndexType type, std::vector<std::string>* values);
|
||||||
void removeFromIndex(FileData *game);
|
|
||||||
|
|
||||||
void setFilter(FilterIndexType type, std::vector<std::string> *values);
|
|
||||||
|
|
||||||
void setTextFilter(std::string textFilter);
|
void setTextFilter(std::string textFilter);
|
||||||
|
|
||||||
std::string getTextFilter() { return mTextFilter; }
|
std::string getTextFilter() { return mTextFilter; }
|
||||||
|
|
||||||
void clearAllFilters();
|
void clearAllFilters();
|
||||||
|
|
||||||
void debugPrintIndexes();
|
void debugPrintIndexes();
|
||||||
|
bool showFile(FileData* game);
|
||||||
bool showFile(FileData *game);
|
|
||||||
|
|
||||||
bool isFiltered();
|
bool isFiltered();
|
||||||
|
|
||||||
bool isKeyBeingFilteredBy(std::string key, FilterIndexType type);
|
bool isKeyBeingFilteredBy(std::string key, FilterIndexType type);
|
||||||
|
std::vector<FilterDataDecl>& getFilterDataDecls() { return filterDataDecl; }
|
||||||
std::vector<FilterDataDecl> &getFilterDataDecls() { return filterDataDecl; }
|
|
||||||
|
|
||||||
void setTextRemoveSystem(bool status) { mTextRemoveSystem = status; }
|
void setTextRemoveSystem(bool status) { mTextRemoveSystem = status; }
|
||||||
|
|
||||||
void importIndex(FileFilterIndex *indexToImport);
|
void importIndex(FileFilterIndex* indexToImport);
|
||||||
|
|
||||||
void resetIndex();
|
void resetIndex();
|
||||||
|
|
||||||
void resetFilters();
|
void resetFilters();
|
||||||
|
|
||||||
void setKidModeFilters();
|
void setKidModeFilters();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<FilterDataDecl> filterDataDecl;
|
std::vector<FilterDataDecl> filterDataDecl;
|
||||||
std::string getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary);
|
std::string getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary);
|
||||||
|
|
||||||
void manageFavoritesEntryInIndex(FileData* game, bool remove = false);
|
void manageRatingsEntryInIndex(FileData* game, bool remove = false);
|
||||||
|
void manageDeveloperEntryInIndex(FileData* game, bool remove = false);
|
||||||
|
void managePublisherEntryInIndex(FileData* game, bool remove = false);
|
||||||
void manageGenreEntryInIndex(FileData* game, bool remove = false);
|
void manageGenreEntryInIndex(FileData* game, bool remove = false);
|
||||||
void managePlayerEntryInIndex(FileData* game, bool remove = false);
|
void managePlayerEntryInIndex(FileData* game, bool remove = false);
|
||||||
void managePubDevEntryInIndex(FileData* game, bool remove = false);
|
void manageFavoritesEntryInIndex(FileData* game, bool remove = false);
|
||||||
void manageRatingsEntryInIndex(FileData* game, bool remove = false);
|
|
||||||
void manageKidGameEntryInIndex(FileData* game, bool remove = false);
|
|
||||||
void manageCompletedEntryInIndex(FileData* game, bool remove = false);
|
void manageCompletedEntryInIndex(FileData* game, bool remove = false);
|
||||||
void manageBrokenEntryInIndex(FileData* game, bool remove = false);
|
void manageKidGameEntryInIndex(FileData* game, bool remove = false);
|
||||||
void manageHiddenEntryInIndex(FileData* game, bool remove = false);
|
void manageHiddenEntryInIndex(FileData* game, bool remove = false);
|
||||||
|
void manageBrokenEntryInIndex(FileData* game, bool remove = false);
|
||||||
|
void manageAltemulatorEntryInIndex(FileData* game, bool remove = false);
|
||||||
|
|
||||||
void manageIndexEntry(std::map<std::string, int>* index, std::string key, bool remove);
|
void manageIndexEntry(std::map<std::string, int>* index, std::string key, bool remove);
|
||||||
|
|
||||||
|
@ -103,35 +92,41 @@ private:
|
||||||
bool mFilterByText;
|
bool mFilterByText;
|
||||||
bool mTextRemoveSystem;
|
bool mTextRemoveSystem;
|
||||||
|
|
||||||
bool mFilterByFavorites;
|
bool mFilterByRatings;
|
||||||
|
bool mFilterByDeveloper;
|
||||||
|
bool mFilterByPublisher;
|
||||||
bool mFilterByGenre;
|
bool mFilterByGenre;
|
||||||
bool mFilterByPlayers;
|
bool mFilterByPlayers;
|
||||||
bool mFilterByPubDev;
|
bool mFilterByFavorites;
|
||||||
bool mFilterByRatings;
|
|
||||||
bool mFilterByKidGame;
|
|
||||||
bool mFilterByCompleted;
|
bool mFilterByCompleted;
|
||||||
bool mFilterByBroken;
|
bool mFilterByKidGame;
|
||||||
bool mFilterByHidden;
|
bool mFilterByHidden;
|
||||||
|
bool mFilterByBroken;
|
||||||
|
bool mFilterByAltemulator;
|
||||||
|
|
||||||
std::map<std::string, int> mFavoritesIndexAllKeys;
|
std::map<std::string, int> mRatingsIndexAllKeys;
|
||||||
|
std::map<std::string, int> mDeveloperIndexAllKeys;
|
||||||
|
std::map<std::string, int> mPublisherIndexAllKeys;
|
||||||
std::map<std::string, int> mGenreIndexAllKeys;
|
std::map<std::string, int> mGenreIndexAllKeys;
|
||||||
std::map<std::string, int> mPlayersIndexAllKeys;
|
std::map<std::string, int> mPlayersIndexAllKeys;
|
||||||
std::map<std::string, int> mPubDevIndexAllKeys;
|
std::map<std::string, int> mFavoritesIndexAllKeys;
|
||||||
std::map<std::string, int> mRatingsIndexAllKeys;
|
|
||||||
std::map<std::string, int> mKidGameIndexAllKeys;
|
|
||||||
std::map<std::string, int> mCompletedIndexAllKeys;
|
std::map<std::string, int> mCompletedIndexAllKeys;
|
||||||
std::map<std::string, int> mBrokenIndexAllKeys;
|
std::map<std::string, int> mKidGameIndexAllKeys;
|
||||||
std::map<std::string, int> mHiddenIndexAllKeys;
|
std::map<std::string, int> mHiddenIndexAllKeys;
|
||||||
|
std::map<std::string, int> mBrokenIndexAllKeys;
|
||||||
|
std::map<std::string, int> mAltemulatorIndexAllKeys;
|
||||||
|
|
||||||
std::vector<std::string> mFavoritesIndexFilteredKeys;
|
std::vector<std::string> mRatingsIndexFilteredKeys;
|
||||||
|
std::vector<std::string> mDeveloperIndexFilteredKeys;
|
||||||
|
std::vector<std::string> mPublisherIndexFilteredKeys;
|
||||||
std::vector<std::string> mGenreIndexFilteredKeys;
|
std::vector<std::string> mGenreIndexFilteredKeys;
|
||||||
std::vector<std::string> mPlayersIndexFilteredKeys;
|
std::vector<std::string> mPlayersIndexFilteredKeys;
|
||||||
std::vector<std::string> mPubDevIndexFilteredKeys;
|
std::vector<std::string> mFavoritesIndexFilteredKeys;
|
||||||
std::vector<std::string> mRatingsIndexFilteredKeys;
|
|
||||||
std::vector<std::string> mKidGameIndexFilteredKeys;
|
|
||||||
std::vector<std::string> mCompletedIndexFilteredKeys;
|
std::vector<std::string> mCompletedIndexFilteredKeys;
|
||||||
std::vector<std::string> mBrokenIndexFilteredKeys;
|
std::vector<std::string> mKidGameIndexFilteredKeys;
|
||||||
std::vector<std::string> mHiddenIndexFilteredKeys;
|
std::vector<std::string> mHiddenIndexFilteredKeys;
|
||||||
|
std::vector<std::string> mBrokenIndexFilteredKeys;
|
||||||
|
std::vector<std::string> mAltemulatorIndexFilteredKeys;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ES_APP_FILE_FILTER_INDEX_H
|
#endif // ES_APP_FILE_FILTER_INDEX_H
|
||||||
|
|
|
@ -227,7 +227,8 @@ namespace FileSorts
|
||||||
return system1.compare(system2) < 0;
|
return system1.compare(system2) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool compareSystemDescending(const FileData *file1, const FileData *file2) {
|
bool compareSystemDescending(const FileData* file1, const FileData* file2)
|
||||||
|
{
|
||||||
std::string system1 = Utils::String::toUpper(file1->getSystemName());
|
std::string system1 = Utils::String::toUpper(file1->getSystemName());
|
||||||
std::string system2 = Utils::String::toUpper(file2->getSystemName());
|
std::string system2 = Utils::String::toUpper(file2->getSystemName());
|
||||||
return system1.compare(system2) > 0;
|
return system1.compare(system2) > 0;
|
||||||
|
|
|
@ -18,42 +18,24 @@ namespace FileSorts
|
||||||
{
|
{
|
||||||
bool compareName(const FileData* file1, const FileData* file2);
|
bool compareName(const FileData* file1, const FileData* file2);
|
||||||
bool compareNameDescending(const FileData* file1, const FileData* file2);
|
bool compareNameDescending(const FileData* file1, const FileData* file2);
|
||||||
|
bool compareRating(const FileData* file1, const FileData* file2);
|
||||||
bool compareRating(const FileData *file1, const FileData *file2);
|
bool compareRatingDescending(const FileData* file1, const FileData* file2);
|
||||||
|
bool compareReleaseDate(const FileData* file1, const FileData* file2);
|
||||||
bool compareRatingDescending(const FileData *file1, const FileData *file2);
|
bool compareReleaseDateDescending(const FileData* file1, const FileData* file2);
|
||||||
|
bool compareDeveloper(const FileData* file1, const FileData* file2);
|
||||||
bool compareReleaseDate(const FileData *file1, const FileData *file2);
|
bool compareDeveloperDescending(const FileData* file1, const FileData* file2);
|
||||||
|
bool comparePublisher(const FileData* file1, const FileData* file2);
|
||||||
bool compareReleaseDateDescending(const FileData *file1, const FileData *file2);
|
bool comparePublisherDescending(const FileData* file1, const FileData* file2);
|
||||||
|
bool compareGenre(const FileData* file1, const FileData* file2);
|
||||||
bool compareDeveloper(const FileData *file1, const FileData *file2);
|
bool compareGenreDescending(const FileData* file1, const FileData* file2);
|
||||||
|
bool compareNumPlayers(const FileData* file1, const FileData* file2);
|
||||||
bool compareDeveloperDescending(const FileData *file1, const FileData *file2);
|
bool compareNumPlayersDescending(const FileData* file1, const FileData* file2);
|
||||||
|
bool compareLastPlayed(const FileData* file1, const FileData* file2);
|
||||||
bool comparePublisher(const FileData *file1, const FileData *file2);
|
bool compareLastPlayedDescending(const FileData* file1, const FileData* file2);
|
||||||
|
bool compareTimesPlayed(const FileData* file1, const FileData* fil2);
|
||||||
bool comparePublisherDescending(const FileData *file1, const FileData *file2);
|
bool compareTimesPlayedDescending(const FileData* file1, const FileData* fil2);
|
||||||
|
bool compareSystem(const FileData* file1, const FileData* file2);
|
||||||
bool compareGenre(const FileData *file1, const FileData *file2);
|
bool compareSystemDescending(const FileData* file1, const FileData* file2);
|
||||||
|
|
||||||
bool compareGenreDescending(const FileData *file1, const FileData *file2);
|
|
||||||
|
|
||||||
bool compareNumPlayers(const FileData *file1, const FileData *file2);
|
|
||||||
|
|
||||||
bool compareNumPlayersDescending(const FileData *file1, const FileData *file2);
|
|
||||||
|
|
||||||
bool compareLastPlayed(const FileData *file1, const FileData *file2);
|
|
||||||
|
|
||||||
bool compareLastPlayedDescending(const FileData *file1, const FileData *file2);
|
|
||||||
|
|
||||||
bool compareTimesPlayed(const FileData *file1, const FileData *fil2);
|
|
||||||
|
|
||||||
bool compareTimesPlayedDescending(const FileData *file1, const FileData *fil2);
|
|
||||||
|
|
||||||
bool compareSystem(const FileData *file1, const FileData *file2);
|
|
||||||
|
|
||||||
bool compareSystemDescending(const FileData *file1, const FileData *file2);
|
|
||||||
|
|
||||||
extern const std::vector<FileData::SortType> SortTypes;
|
extern const std::vector<FileData::SortType> SortTypes;
|
||||||
} // namespace FileSorts
|
} // namespace FileSorts
|
||||||
|
|
|
@ -178,12 +178,14 @@ void FindRules::loadFindRules()
|
||||||
|
|
||||||
SystemData::SystemData(const std::string& name,
|
SystemData::SystemData(const std::string& name,
|
||||||
const std::string& fullName,
|
const std::string& fullName,
|
||||||
|
const std::string& sortName,
|
||||||
SystemEnvironmentData* envData,
|
SystemEnvironmentData* envData,
|
||||||
const std::string& themeFolder,
|
const std::string& themeFolder,
|
||||||
bool CollectionSystem,
|
bool CollectionSystem,
|
||||||
bool CustomCollectionSystem)
|
bool CustomCollectionSystem)
|
||||||
: mName(name)
|
: mName(name)
|
||||||
, mFullName(fullName)
|
, mFullName(fullName)
|
||||||
|
, mSortName(sortName)
|
||||||
, mEnvData(envData)
|
, mEnvData(envData)
|
||||||
, mThemeFolder(themeFolder)
|
, mThemeFolder(themeFolder)
|
||||||
, mIsCollectionSystem(CollectionSystem)
|
, mIsCollectionSystem(CollectionSystem)
|
||||||
|
@ -438,11 +440,13 @@ bool SystemData::loadConfig()
|
||||||
system = system.next_sibling("system")) {
|
system = system.next_sibling("system")) {
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string fullname;
|
std::string fullname;
|
||||||
|
std::string sortName;
|
||||||
std::string path;
|
std::string path;
|
||||||
std::string themeFolder;
|
std::string themeFolder;
|
||||||
|
|
||||||
name = system.child("name").text().get();
|
name = system.child("name").text().get();
|
||||||
fullname = system.child("fullname").text().get();
|
fullname = system.child("fullname").text().get();
|
||||||
|
sortName = system.child("systemsortname").text().get();
|
||||||
path = system.child("path").text().get();
|
path = system.child("path").text().get();
|
||||||
|
|
||||||
auto nameFindFunc = [&] {
|
auto nameFindFunc = [&] {
|
||||||
|
@ -583,6 +587,15 @@ bool SystemData::loadConfig()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sortName == "") {
|
||||||
|
sortName = fullname;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LOG(LogDebug) << "SystemData::loadConfig(): System \"" << name
|
||||||
|
<< "\" has a <systemsortname> tag set, sorting as \"" << sortName
|
||||||
|
<< "\" instead of \"" << fullname << "\"";
|
||||||
|
}
|
||||||
|
|
||||||
// Convert path to generic directory seperators.
|
// Convert path to generic directory seperators.
|
||||||
path = Utils::FileSystem::getGenericPath(path);
|
path = Utils::FileSystem::getGenericPath(path);
|
||||||
|
|
||||||
|
@ -601,7 +614,7 @@ bool SystemData::loadConfig()
|
||||||
envData->mLaunchCommands = commands;
|
envData->mLaunchCommands = commands;
|
||||||
envData->mPlatformIds = platformIds;
|
envData->mPlatformIds = platformIds;
|
||||||
|
|
||||||
SystemData* newSys = new SystemData(name, fullname, envData, themeFolder);
|
SystemData* newSys = new SystemData(name, fullname, sortName, envData, themeFolder);
|
||||||
bool onlyHidden = false;
|
bool onlyHidden = false;
|
||||||
|
|
||||||
// If the option to show hidden games has been disabled, then check whether all
|
// If the option to show hidden games has been disabled, then check whether all
|
||||||
|
@ -630,9 +643,9 @@ bool SystemData::loadConfig()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort systems by their full names.
|
// Sort systems by sortName, which will normally be the same as the full name.
|
||||||
std::sort(std::begin(sSystemVector), std::end(sSystemVector),
|
std::sort(std::begin(sSystemVector), std::end(sSystemVector),
|
||||||
[](SystemData* a, SystemData* b) { return a->getFullName() < b->getFullName(); });
|
[](SystemData* a, SystemData* b) { return a->getSortName() < b->getSortName(); });
|
||||||
|
|
||||||
// Don't load any collections if there are no systems available.
|
// Don't load any collections if there are no systems available.
|
||||||
if (sSystemVector.size() > 0)
|
if (sSystemVector.size() > 0)
|
||||||
|
|
|
@ -62,6 +62,7 @@ class SystemData
|
||||||
public:
|
public:
|
||||||
SystemData(const std::string& name,
|
SystemData(const std::string& name,
|
||||||
const std::string& fullName,
|
const std::string& fullName,
|
||||||
|
const std::string& sortName,
|
||||||
SystemEnvironmentData* envData,
|
SystemEnvironmentData* envData,
|
||||||
const std::string& themeFolder,
|
const std::string& themeFolder,
|
||||||
bool CollectionSystem = false,
|
bool CollectionSystem = false,
|
||||||
|
@ -72,6 +73,7 @@ public:
|
||||||
FileData* getRootFolder() const { return mRootFolder; }
|
FileData* getRootFolder() const { return mRootFolder; }
|
||||||
const std::string& getName() const { return mName; }
|
const std::string& getName() const { return mName; }
|
||||||
const std::string& getFullName() const { return mFullName; }
|
const std::string& getFullName() const { return mFullName; }
|
||||||
|
const std::string& getSortName() const { return mSortName; }
|
||||||
const std::string& getStartPath() const { return mEnvData->mStartPath; }
|
const std::string& getStartPath() const { return mEnvData->mStartPath; }
|
||||||
const std::vector<std::string>& getExtensions() const { return mEnvData->mSearchExtensions; }
|
const std::vector<std::string>& getExtensions() const { return mEnvData->mSearchExtensions; }
|
||||||
const std::string& getThemeFolder() const { return mThemeFolder; }
|
const std::string& getThemeFolder() const { return mThemeFolder; }
|
||||||
|
@ -152,6 +154,7 @@ public:
|
||||||
private:
|
private:
|
||||||
std::string mName;
|
std::string mName;
|
||||||
std::string mFullName;
|
std::string mFullName;
|
||||||
|
std::string mSortName;
|
||||||
SystemEnvironmentData* mEnvData;
|
SystemEnvironmentData* mEnvData;
|
||||||
std::string mAlternativeEmulator;
|
std::string mAlternativeEmulator;
|
||||||
std::string mThemeFolder;
|
std::string mThemeFolder;
|
||||||
|
|
|
@ -118,14 +118,8 @@ GuiAlternativeEmulators::GuiAlternativeEmulators(Window* window)
|
||||||
mMenu.addRow(row);
|
mMenu.addRow(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
float width =
|
|
||||||
static_cast<float>(std::min(static_cast<int>(Renderer::getScreenHeight() * 1.05f),
|
|
||||||
static_cast<int>(Renderer::getScreenWidth() * 0.90f)));
|
|
||||||
|
|
||||||
setSize(mMenu.getSize());
|
setSize(mMenu.getSize());
|
||||||
setPosition((Renderer::getScreenWidth() - mSize.x) / 2.0f, Renderer::getScreenHeight() * 0.13f);
|
setPosition((Renderer::getScreenWidth() - mSize.x) / 2.0f, Renderer::getScreenHeight() * 0.13f);
|
||||||
|
|
||||||
mMenu.setSize(width, Renderer::getScreenHeight() * 0.76f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiAlternativeEmulators::updateMenu(const std::string& systemName,
|
void GuiAlternativeEmulators::updateMenu(const std::string& systemName,
|
||||||
|
@ -162,7 +156,7 @@ void GuiAlternativeEmulators::selectorWindow(SystemData* system)
|
||||||
label = entry.second;
|
label = entry.second;
|
||||||
|
|
||||||
std::shared_ptr<TextComponent> labelText = std::make_shared<TextComponent>(
|
std::shared_ptr<TextComponent> labelText = std::make_shared<TextComponent>(
|
||||||
mWindow, label, Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_CENTER);
|
mWindow, label, Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_LEFT);
|
||||||
|
|
||||||
if (system->getSystemEnvData()->mLaunchCommands.front().second == label)
|
if (system->getSystemEnvData()->mLaunchCommands.front().second == label)
|
||||||
labelText->setValue(labelText->getValue().append(" [DEFAULT]"));
|
labelText->setValue(labelText->getValue().append(" [DEFAULT]"));
|
||||||
|
@ -213,21 +207,37 @@ void GuiAlternativeEmulators::selectorWindow(SystemData* system)
|
||||||
s->addRow(row, false);
|
s->addRow(row, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adjust the width depending on the aspect ratio of the screen, to make the screen look
|
// Set a maximum width depending on the aspect ratio of the screen, to make the screen look
|
||||||
// somewhat coherent regardless of screen type. The 1.778 aspect ratio value is the 16:9
|
// somewhat coherent regardless of screen type. The 1.778 aspect ratio value is the 16:9
|
||||||
// reference.
|
// reference.
|
||||||
float aspectValue = 1.778f / Renderer::getScreenAspectRatio();
|
float aspectValue = 1.778f / Renderer::getScreenAspectRatio();
|
||||||
|
float maxWidthModifier = glm::clamp(0.72f * aspectValue, 0.50f, 0.92f);
|
||||||
float maxWidthModifier = glm::clamp(0.70f * aspectValue, 0.50f, 0.92f);
|
|
||||||
float maxWidth = static_cast<float>(Renderer::getScreenWidth()) * maxWidthModifier;
|
float maxWidth = static_cast<float>(Renderer::getScreenWidth()) * maxWidthModifier;
|
||||||
|
|
||||||
s->setMenuSize(glm::vec2{maxWidth, s->getMenuSize().y});
|
// Set the width of the selector window to the menu width, unless the system full name is
|
||||||
|
// too large to fit. If so, allow the size to be exceeded up to the maximum size calculated
|
||||||
|
// above.
|
||||||
|
float systemTextWidth =
|
||||||
|
Font::get(FONT_SIZE_LARGE)->sizeText(Utils::String::toUpper(system->getFullName())).x *
|
||||||
|
1.05f;
|
||||||
|
|
||||||
|
float width = 0.0f;
|
||||||
|
float menuWidth = mMenu.getSize().x;
|
||||||
|
|
||||||
|
if (systemTextWidth <= menuWidth)
|
||||||
|
width = menuWidth;
|
||||||
|
else if (systemTextWidth > maxWidth)
|
||||||
|
width = maxWidth;
|
||||||
|
else
|
||||||
|
width = systemTextWidth;
|
||||||
|
|
||||||
|
s->setMenuSize(glm::vec2{width, s->getMenuSize().y});
|
||||||
|
|
||||||
auto menuSize = s->getMenuSize();
|
auto menuSize = s->getMenuSize();
|
||||||
auto menuPos = s->getMenuPosition();
|
auto menuPos = s->getMenuPosition();
|
||||||
|
|
||||||
s->setMenuPosition(glm::vec3{(s->getSize().x - menuSize.x) / 2.0f,
|
s->setMenuPosition(glm::vec3{(s->getSize().x - menuSize.x) / 2.0f, menuPos.y, menuPos.z});
|
||||||
(s->getSize().y - menuSize.y) / 3.0f, menuPos.z});
|
|
||||||
mWindow->pushGui(s);
|
mWindow->pushGui(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(Window* window, std::st
|
||||||
for (std::map<std::string, CollectionSystemData, stringComparator>::const_iterator it =
|
for (std::map<std::string, CollectionSystemData, stringComparator>::const_iterator it =
|
||||||
autoSystems.cbegin();
|
autoSystems.cbegin();
|
||||||
it != autoSystems.cend(); it++)
|
it != autoSystems.cend(); it++)
|
||||||
collection_systems_auto->add(it->second.decl.longName, it->second.decl.name,
|
collection_systems_auto->add(it->second.decl.fullName, it->second.decl.name,
|
||||||
it->second.isEnabled);
|
it->second.isEnabled);
|
||||||
addWithLabel("AUTOMATIC GAME COLLECTIONS", collection_systems_auto);
|
addWithLabel("AUTOMATIC GAME COLLECTIONS", collection_systems_auto);
|
||||||
addSaveFunc([this, autoSystems] {
|
addSaveFunc([this, autoSystems] {
|
||||||
|
@ -101,7 +101,7 @@ GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(Window* window, std::st
|
||||||
for (std::map<std::string, CollectionSystemData, stringComparator>::const_iterator it =
|
for (std::map<std::string, CollectionSystemData, stringComparator>::const_iterator it =
|
||||||
customSystems.cbegin();
|
customSystems.cbegin();
|
||||||
it != customSystems.cend(); it++)
|
it != customSystems.cend(); it++)
|
||||||
collection_systems_custom->add(it->second.decl.longName, it->second.decl.name,
|
collection_systems_custom->add(it->second.decl.fullName, it->second.decl.name,
|
||||||
it->second.isEnabled);
|
it->second.isEnabled);
|
||||||
|
|
||||||
addWithLabel("CUSTOM GAME COLLECTIONS", collection_systems_custom);
|
addWithLabel("CUSTOM GAME COLLECTIONS", collection_systems_custom);
|
||||||
|
@ -200,12 +200,12 @@ GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(Window* window, std::st
|
||||||
glm::vec2{0.0f, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight()});
|
glm::vec2{0.0f, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight()});
|
||||||
row.addElement(newCollection, true);
|
row.addElement(newCollection, true);
|
||||||
row.addElement(bracketNewCollection, false);
|
row.addElement(bracketNewCollection, false);
|
||||||
auto createCollectionCall = [this](const std::string &newVal) {
|
auto createCollectionCall = [this](const std::string& newVal) {
|
||||||
std::string name = newVal;
|
std::string name = newVal;
|
||||||
// We need to store the first GUI and remove it, as it'll be deleted
|
// We need to store the first GUI and remove it, as it'll be deleted
|
||||||
// by the actual GUI.
|
// by the actual GUI.
|
||||||
Window *window = mWindow;
|
Window* window = mWindow;
|
||||||
GuiComponent *topGui = window->peekGui();
|
GuiComponent* topGui = window->peekGui();
|
||||||
window->removeGui(topGui);
|
window->removeGui(topGui);
|
||||||
createCustomCollection(name);
|
createCustomCollection(name);
|
||||||
};
|
};
|
||||||
|
@ -213,10 +213,11 @@ GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(Window* window, std::st
|
||||||
if (Settings::getInstance()->getBool("VirtualKeyboard")) {
|
if (Settings::getInstance()->getBool("VirtualKeyboard")) {
|
||||||
row.makeAcceptInputHandler([this, createCollectionCall] {
|
row.makeAcceptInputHandler([this, createCollectionCall] {
|
||||||
mWindow->pushGui(new GuiTextEditKeyboardPopup(
|
mWindow->pushGui(new GuiTextEditKeyboardPopup(
|
||||||
mWindow, getHelpStyle(), "New Collection Name", "", createCollectionCall, false,
|
mWindow, getHelpStyle(), "New Collection Name", "", createCollectionCall, false,
|
||||||
"CREATE", "CREATE COLLECTION?"));
|
"CREATE", "CREATE COLLECTION?"));
|
||||||
});
|
});
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
row.makeAcceptInputHandler([this, createCollectionCall] {
|
row.makeAcceptInputHandler([this, createCollectionCall] {
|
||||||
mWindow->pushGui(new GuiTextEditPopup(mWindow, getHelpStyle(), "New Collection Name",
|
mWindow->pushGui(new GuiTextEditPopup(mWindow, getHelpStyle(), "New Collection Name",
|
||||||
"", createCollectionCall, false, "CREATE",
|
"", createCollectionCall, false, "CREATE",
|
||||||
|
@ -228,11 +229,11 @@ GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(Window* window, std::st
|
||||||
// Delete custom collection.
|
// Delete custom collection.
|
||||||
row.elements.clear();
|
row.elements.clear();
|
||||||
auto deleteCollection = std::make_shared<TextComponent>(
|
auto deleteCollection = std::make_shared<TextComponent>(
|
||||||
mWindow, "DELETE CUSTOM COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF);
|
mWindow, "DELETE CUSTOM COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF);
|
||||||
auto bracketDeleteCollection = std::make_shared<ImageComponent>(mWindow);
|
auto bracketDeleteCollection = std::make_shared<ImageComponent>(mWindow);
|
||||||
bracketDeleteCollection->setImage(":/graphics/arrow.svg");
|
bracketDeleteCollection->setImage(":/graphics/arrow.svg");
|
||||||
bracketDeleteCollection->setResize(
|
bracketDeleteCollection->setResize(
|
||||||
glm::vec2{0.0f, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight()});
|
glm::vec2{0.0f, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight()});
|
||||||
row.addElement(deleteCollection, true);
|
row.addElement(deleteCollection, true);
|
||||||
row.addElement(bracketDeleteCollection, false);
|
row.addElement(bracketDeleteCollection, false);
|
||||||
row.makeAcceptInputHandler([this, customSystems] {
|
row.makeAcceptInputHandler([this, customSystems] {
|
||||||
|
|
|
@ -18,11 +18,14 @@
|
||||||
#include "components/TextComponent.h"
|
#include "components/TextComponent.h"
|
||||||
#include "views/ViewController.h"
|
#include "views/ViewController.h"
|
||||||
|
|
||||||
GuiGameScraper::GuiGameScraper(Window *window,
|
GuiGameScraper::GuiGameScraper(Window* window,
|
||||||
ScraperSearchParams params,
|
ScraperSearchParams params,
|
||||||
std::function<void(const ScraperSearchResult &)> doneFunc)
|
std::function<void(const ScraperSearchResult&)> doneFunc)
|
||||||
: GuiComponent(window), mClose(false), mGrid(window, glm::ivec2{1, 7}), mBox(window, ":/graphics/frame.svg"),
|
: GuiComponent(window)
|
||||||
mSearchParams(params)
|
, mClose(false)
|
||||||
|
, mGrid(window, glm::ivec2{1, 7})
|
||||||
|
, mBox(window, ":/graphics/frame.svg")
|
||||||
|
, mSearchParams(params)
|
||||||
{
|
{
|
||||||
addChild(&mBox);
|
addChild(&mBox);
|
||||||
addChild(&mGrid);
|
addChild(&mGrid);
|
||||||
|
|
|
@ -21,7 +21,7 @@ GuiGamelistFilter::GuiGamelistFilter(Window* window,
|
||||||
SystemData* system,
|
SystemData* system,
|
||||||
std::function<void(bool)> filterChangedCallback)
|
std::function<void(bool)> filterChangedCallback)
|
||||||
: GuiComponent(window)
|
: GuiComponent(window)
|
||||||
, mMenu(window, "FILTER GAMELIST BY")
|
, mMenu(window, "FILTER GAMELIST")
|
||||||
, mSystem(system)
|
, mSystem(system)
|
||||||
, mFiltersChangedCallback(filterChangedCallback)
|
, mFiltersChangedCallback(filterChangedCallback)
|
||||||
, mFiltersChanged(false)
|
, mFiltersChanged(false)
|
||||||
|
@ -29,7 +29,8 @@ GuiGamelistFilter::GuiGamelistFilter(Window* window,
|
||||||
initializeMenu();
|
initializeMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiGamelistFilter::initializeMenu() {
|
void GuiGamelistFilter::initializeMenu()
|
||||||
|
{
|
||||||
addChild(&mMenu);
|
addChild(&mMenu);
|
||||||
|
|
||||||
// Get filters from system.
|
// Get filters from system.
|
||||||
|
@ -91,14 +92,13 @@ void GuiGamelistFilter::resetAllFilters()
|
||||||
mFiltersChanged = true;
|
mFiltersChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
GuiGamelistFilter::~GuiGamelistFilter() { mFilterOptions.clear(); }
|
void GuiGamelistFilter::addFiltersToMenu()
|
||||||
|
{
|
||||||
void GuiGamelistFilter::addFiltersToMenu() {
|
|
||||||
ComponentListRow row;
|
ComponentListRow row;
|
||||||
|
|
||||||
auto lbl = std::make_shared<TextComponent>(
|
auto lbl = std::make_shared<TextComponent>(
|
||||||
mWindow, Utils::String::toUpper(ViewController::KEYBOARD_CHAR + " GAME NAME"),
|
mWindow, Utils::String::toUpper(ViewController::KEYBOARD_CHAR + " GAME NAME"),
|
||||||
Font::get(FONT_SIZE_MEDIUM), 0x777777FF);
|
Font::get(FONT_SIZE_MEDIUM), 0x777777FF);
|
||||||
|
|
||||||
mTextFilterField = std::make_shared<TextComponent>(mWindow, "", Font::get(FONT_SIZE_MEDIUM),
|
mTextFilterField = std::make_shared<TextComponent>(mWindow, "", Font::get(FONT_SIZE_MEDIUM),
|
||||||
0x777777FF, ALIGN_RIGHT);
|
0x777777FF, ALIGN_RIGHT);
|
||||||
|
@ -121,7 +121,7 @@ void GuiGamelistFilter::addFiltersToMenu() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Callback function.
|
// Callback function.
|
||||||
auto updateVal = [this](const std::string &newVal) {
|
auto updateVal = [this](const std::string& newVal) {
|
||||||
mTextFilterField->setValue(Utils::String::toUpper(newVal));
|
mTextFilterField->setValue(Utils::String::toUpper(newVal));
|
||||||
mFilterIndex->setTextFilter(Utils::String::toUpper(newVal));
|
mFilterIndex->setTextFilter(Utils::String::toUpper(newVal));
|
||||||
};
|
};
|
||||||
|
@ -132,7 +132,8 @@ void GuiGamelistFilter::addFiltersToMenu() {
|
||||||
mTextFilterField->getValue(), updateVal,
|
mTextFilterField->getValue(), updateVal,
|
||||||
false, "OK", "APPLY CHANGES?"));
|
false, "OK", "APPLY CHANGES?"));
|
||||||
});
|
});
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
row.makeAcceptInputHandler([this, updateVal] {
|
row.makeAcceptInputHandler([this, updateVal] {
|
||||||
mWindow->pushGui(new GuiTextEditPopup(mWindow, getHelpStyle(), "GAME NAME",
|
mWindow->pushGui(new GuiTextEditPopup(mWindow, getHelpStyle(), "GAME NAME",
|
||||||
mTextFilterField->getValue(), updateVal, false,
|
mTextFilterField->getValue(), updateVal, false,
|
||||||
|
@ -148,18 +149,49 @@ void GuiGamelistFilter::addFiltersToMenu() {
|
||||||
it != decls.cend(); it++) {
|
it != decls.cend(); it++) {
|
||||||
FilterIndexType type = (*it).type; // Type of filter.
|
FilterIndexType type = (*it).type; // Type of filter.
|
||||||
|
|
||||||
// All possible filters for this type.
|
|
||||||
std::map<std::string, int>* allKeys = (*it).allIndexKeys;
|
std::map<std::string, int>* allKeys = (*it).allIndexKeys;
|
||||||
|
|
||||||
|
bool exclusiveSelect = false;
|
||||||
|
|
||||||
|
if (type == FAVORITES_FILTER || type == KIDGAME_FILTER || type == COMPLETED_FILTER ||
|
||||||
|
type == BROKEN_FILTER)
|
||||||
|
exclusiveSelect = true;
|
||||||
|
|
||||||
|
// Don't display the hidden games filter if we're actually hiding these games.
|
||||||
|
if (type == HIDDEN_FILTER) {
|
||||||
|
if (Settings::getInstance()->getBool("ShowHiddenGames"))
|
||||||
|
exclusiveSelect = true;
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
std::string menuLabel = (*it).menuLabel; // Text to show in menu.
|
std::string menuLabel = (*it).menuLabel; // Text to show in menu.
|
||||||
std::shared_ptr<OptionListComponent<std::string>> optionList;
|
std::shared_ptr<OptionListComponent<std::string>> optionList;
|
||||||
|
|
||||||
// Add genres.
|
// For bool values, make the selection exclusive so that both True and False can't be
|
||||||
optionList = std::make_shared<OptionListComponent<std::string>>(mWindow, getHelpStyle(),
|
// selected at the same time. This should be changed to a SwitchComponent at some point.
|
||||||
menuLabel, true);
|
if (exclusiveSelect)
|
||||||
|
optionList = std::make_shared<OptionListComponent<std::string>>(mWindow, getHelpStyle(),
|
||||||
|
menuLabel, true, true);
|
||||||
|
else
|
||||||
|
optionList = std::make_shared<OptionListComponent<std::string>>(mWindow, getHelpStyle(),
|
||||||
|
menuLabel, true, false);
|
||||||
|
|
||||||
|
// Still display fields that can't be filtered in the menu, but notify the user and set
|
||||||
|
// the OptionListComponent as disabled.
|
||||||
|
if (allKeys->size() == 1 || allKeys->empty()) {
|
||||||
|
optionList->setEnabled(false);
|
||||||
|
optionList->setOpacity(DISABLED_OPACITY);
|
||||||
|
optionList->setOverrideMultiText("NOTHING TO FILTER");
|
||||||
|
}
|
||||||
|
|
||||||
for (auto it : *allKeys)
|
for (auto it : *allKeys)
|
||||||
optionList->add(it.first, it.first, mFilterIndex->isKeyBeingFilteredBy(it.first, type));
|
optionList->add(it.first, it.first, mFilterIndex->isKeyBeingFilteredBy(it.first, type));
|
||||||
if (allKeys->size() > 0)
|
|
||||||
mMenu.addWithLabel(menuLabel, optionList);
|
if (allKeys->size() == 0)
|
||||||
|
optionList->add("", "", false);
|
||||||
|
|
||||||
|
mMenu.addWithLabel(menuLabel, optionList);
|
||||||
|
|
||||||
mFilterOptions[type] = optionList;
|
mFilterOptions[type] = optionList;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,8 @@ public:
|
||||||
SystemData* system,
|
SystemData* system,
|
||||||
std::function<void(bool)> filtersChangedCallback);
|
std::function<void(bool)> filtersChangedCallback);
|
||||||
|
|
||||||
~GuiGamelistFilter();
|
~GuiGamelistFilter() { mFilterOptions.clear(); }
|
||||||
|
|
||||||
bool input(InputConfig* config, Input input) override;
|
bool input(InputConfig* config, Input input) override;
|
||||||
|
|
||||||
virtual std::vector<HelpPrompt> getHelpPrompts() override;
|
virtual std::vector<HelpPrompt> getHelpPrompts() override;
|
||||||
|
|
|
@ -25,9 +25,15 @@
|
||||||
#include "views/ViewController.h"
|
#include "views/ViewController.h"
|
||||||
#include "views/gamelist/IGameListView.h"
|
#include "views/gamelist/IGameListView.h"
|
||||||
|
|
||||||
GuiGamelistOptions::GuiGamelistOptions(Window *window, SystemData *system)
|
GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system)
|
||||||
: GuiComponent(window), mMenu(window, "OPTIONS"), mSystem(system), mFiltersChanged(false), mCancelled(false),
|
: GuiComponent(window)
|
||||||
mIsCustomCollection(false), mIsCustomCollectionGroup(false), mCustomCollectionSystem(nullptr)
|
, mMenu(window, "OPTIONS")
|
||||||
|
, mSystem(system)
|
||||||
|
, mFiltersChanged(false)
|
||||||
|
, mCancelled(false)
|
||||||
|
, mIsCustomCollection(false)
|
||||||
|
, mIsCustomCollectionGroup(false)
|
||||||
|
, mCustomCollectionSystem(nullptr)
|
||||||
{
|
{
|
||||||
addChild(&mMenu);
|
addChild(&mMenu);
|
||||||
|
|
||||||
|
|
|
@ -14,9 +14,12 @@
|
||||||
#include "components/TextComponent.h"
|
#include "components/TextComponent.h"
|
||||||
#include "utils/StringUtil.h"
|
#include "utils/StringUtil.h"
|
||||||
|
|
||||||
GuiLaunchScreen::GuiLaunchScreen(Window *window)
|
GuiLaunchScreen::GuiLaunchScreen(Window* window)
|
||||||
: GuiComponent(window), mWindow(window), mBackground(window, ":/graphics/frame.svg"), mGrid(nullptr),
|
: GuiComponent(window)
|
||||||
mMarquee(nullptr)
|
, mWindow(window)
|
||||||
|
, mBackground(window, ":/graphics/frame.svg")
|
||||||
|
, mGrid(nullptr)
|
||||||
|
, mMarquee(nullptr)
|
||||||
{
|
{
|
||||||
addChild(&mBackground);
|
addChild(&mBackground);
|
||||||
mWindow->setLaunchScreen(this);
|
mWindow->setLaunchScreen(this);
|
||||||
|
@ -217,7 +220,8 @@ void GuiLaunchScreen::update(int deltaTime)
|
||||||
mScaleUp = glm::clamp(mScaleUp + 0.07f, 0.0f, 1.0f);
|
mScaleUp = glm::clamp(mScaleUp + 0.07f, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiLaunchScreen::render(const glm::mat4 & /*parentTrans*/) {
|
void GuiLaunchScreen::render(const glm::mat4& /*parentTrans*/)
|
||||||
|
{
|
||||||
// Scale up animation.
|
// Scale up animation.
|
||||||
if (mScaleUp < 1.0f)
|
if (mScaleUp < 1.0f)
|
||||||
setScale(mScaleUp);
|
setScale(mScaleUp);
|
||||||
|
|
|
@ -21,24 +21,21 @@ class FileData;
|
||||||
class GuiLaunchScreen : public Window::GuiLaunchScreen, GuiComponent
|
class GuiLaunchScreen : public Window::GuiLaunchScreen, GuiComponent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GuiLaunchScreen(Window *window);
|
GuiLaunchScreen(Window* window);
|
||||||
|
|
||||||
virtual ~GuiLaunchScreen();
|
virtual ~GuiLaunchScreen();
|
||||||
|
|
||||||
virtual void displayLaunchScreen(FileData *game) override;
|
virtual void displayLaunchScreen(FileData* game) override;
|
||||||
|
|
||||||
virtual void closeLaunchScreen() override;
|
virtual void closeLaunchScreen() override;
|
||||||
|
|
||||||
void onSizeChanged() override;
|
void onSizeChanged() override;
|
||||||
|
|
||||||
virtual void update(int deltaTime) override;
|
virtual void update(int deltaTime) override;
|
||||||
|
virtual void render(const glm::mat4& parentTrans) override;
|
||||||
virtual void render(const glm::mat4 &parentTrans) override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Window *mWindow;
|
Window* mWindow;
|
||||||
NinePatchComponent mBackground;
|
NinePatchComponent mBackground;
|
||||||
ComponentGrid *mGrid;
|
ComponentGrid* mGrid;
|
||||||
|
|
||||||
std::shared_ptr<TextComponent> mTitle;
|
std::shared_ptr<TextComponent> mTitle;
|
||||||
std::shared_ptr<TextComponent> mGameName;
|
std::shared_ptr<TextComponent> mGameName;
|
||||||
|
|
|
@ -36,8 +36,10 @@
|
||||||
#include <SDL2/SDL_events.h>
|
#include <SDL2/SDL_events.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
GuiMenu::GuiMenu(Window *window)
|
GuiMenu::GuiMenu(Window* window)
|
||||||
: GuiComponent(window), mMenu(window, "MAIN MENU"), mVersion(window)
|
: GuiComponent(window)
|
||||||
|
, mMenu(window, "MAIN MENU")
|
||||||
|
, mVersion(window)
|
||||||
{
|
{
|
||||||
bool isFullUI = UIModeController::getInstance()->isUIModeFull();
|
bool isFullUI = UIModeController::getInstance()->isUIModeFull();
|
||||||
|
|
||||||
|
@ -822,16 +824,17 @@ void GuiMenu::openOtherOptions()
|
||||||
multiLineMediaDir] {
|
multiLineMediaDir] {
|
||||||
if (Settings::getInstance()->getBool("VirtualKeyboard")) {
|
if (Settings::getInstance()->getBool("VirtualKeyboard")) {
|
||||||
mWindow->pushGui(new GuiTextEditKeyboardPopup(
|
mWindow->pushGui(new GuiTextEditKeyboardPopup(
|
||||||
mWindow, getHelpStyle(), titleMediaDir,
|
mWindow, getHelpStyle(), titleMediaDir,
|
||||||
Settings::getInstance()->getString("MediaDirectory"), updateValMediaDir,
|
Settings::getInstance()->getString("MediaDirectory"), updateValMediaDir,
|
||||||
multiLineMediaDir, "SAVE", "SAVE CHANGES?", mediaDirectoryStaticText,
|
multiLineMediaDir, "SAVE", "SAVE CHANGES?", mediaDirectoryStaticText,
|
||||||
defaultDirectoryText, "load default directory"));
|
defaultDirectoryText, "load default directory"));
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
mWindow->pushGui(new GuiTextEditPopup(
|
mWindow->pushGui(new GuiTextEditPopup(
|
||||||
mWindow, getHelpStyle(), titleMediaDir,
|
mWindow, getHelpStyle(), titleMediaDir,
|
||||||
Settings::getInstance()->getString("MediaDirectory"), updateValMediaDir,
|
Settings::getInstance()->getString("MediaDirectory"), updateValMediaDir,
|
||||||
multiLineMediaDir, "SAVE", "SAVE CHANGES?", mediaDirectoryStaticText,
|
multiLineMediaDir, "SAVE", "SAVE CHANGES?", mediaDirectoryStaticText,
|
||||||
defaultDirectoryText, "load default directory"));
|
defaultDirectoryText, "load default directory"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
s->addRow(rowMediaDir);
|
s->addRow(rowMediaDir);
|
||||||
|
|
|
@ -31,18 +31,25 @@
|
||||||
#include "utils/StringUtil.h"
|
#include "utils/StringUtil.h"
|
||||||
#include "views/ViewController.h"
|
#include "views/ViewController.h"
|
||||||
|
|
||||||
GuiMetaDataEd::GuiMetaDataEd(Window *window,
|
GuiMetaDataEd::GuiMetaDataEd(Window* window,
|
||||||
MetaDataList *md,
|
MetaDataList* md,
|
||||||
const std::vector<MetaDataDecl> &mdd,
|
const std::vector<MetaDataDecl>& mdd,
|
||||||
ScraperSearchParams scraperParams,
|
ScraperSearchParams scraperParams,
|
||||||
const std::string & /*header*/,
|
const std::string& /*header*/,
|
||||||
std::function<void()> saveCallback,
|
std::function<void()> saveCallback,
|
||||||
std::function<void()> clearGameFunc,
|
std::function<void()> clearGameFunc,
|
||||||
std::function<void()> deleteGameFunc)
|
std::function<void()> deleteGameFunc)
|
||||||
: GuiComponent(window), mBackground(window, ":/graphics/frame.svg"), mGrid(window, glm::ivec2{1, 3}),
|
: GuiComponent(window)
|
||||||
mScraperParams(scraperParams), mMetaDataDecl(mdd), mMetaData(md), mSavedCallback(saveCallback),
|
, mBackground(window, ":/graphics/frame.svg")
|
||||||
mClearGameFunc(clearGameFunc), mDeleteGameFunc(deleteGameFunc), mMediaFilesUpdated(false),
|
, mGrid(window, glm::ivec2{1, 3})
|
||||||
mInvalidEmulatorEntry(false)
|
, mScraperParams(scraperParams)
|
||||||
|
, mMetaDataDecl(mdd)
|
||||||
|
, mMetaData(md)
|
||||||
|
, mSavedCallback(saveCallback)
|
||||||
|
, mClearGameFunc(clearGameFunc)
|
||||||
|
, mDeleteGameFunc(deleteGameFunc)
|
||||||
|
, mMediaFilesUpdated(false)
|
||||||
|
, mInvalidEmulatorEntry(false)
|
||||||
{
|
{
|
||||||
addChild(&mBackground);
|
addChild(&mBackground);
|
||||||
addChild(&mGrid);
|
addChild(&mGrid);
|
||||||
|
@ -211,11 +218,11 @@ GuiMetaDataEd::GuiMetaDataEd(Window *window,
|
||||||
if (mInvalidEmulatorEntry ||
|
if (mInvalidEmulatorEntry ||
|
||||||
scraperParams.system->getSystemEnvData()->mLaunchCommands.size() > 1) {
|
scraperParams.system->getSystemEnvData()->mLaunchCommands.size() > 1) {
|
||||||
row.makeAcceptInputHandler([this, title, scraperParams, ed, updateVal,
|
row.makeAcceptInputHandler([this, title, scraperParams, ed, updateVal,
|
||||||
originalValue] {
|
originalValue] {
|
||||||
GuiSettings *s = nullptr;
|
GuiSettings* s = nullptr;
|
||||||
|
|
||||||
bool singleEntry =
|
bool singleEntry =
|
||||||
scraperParams.system->getSystemEnvData()->mLaunchCommands.size() == 1;
|
scraperParams.system->getSystemEnvData()->mLaunchCommands.size() == 1;
|
||||||
|
|
||||||
if (mInvalidEmulatorEntry && singleEntry)
|
if (mInvalidEmulatorEntry && singleEntry)
|
||||||
s = new GuiSettings(mWindow, "CLEAR INVALID ENTRY");
|
s = new GuiSettings(mWindow, "CLEAR INVALID ENTRY");
|
||||||
|
@ -226,16 +233,16 @@ GuiMetaDataEd::GuiMetaDataEd(Window *window,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::vector<std::pair<std::string, std::string>> launchCommands =
|
std::vector<std::pair<std::string, std::string>> launchCommands =
|
||||||
scraperParams.system->getSystemEnvData()->mLaunchCommands;
|
scraperParams.system->getSystemEnvData()->mLaunchCommands;
|
||||||
|
|
||||||
if (ed->getValue() != "" && mInvalidEmulatorEntry && singleEntry)
|
if (ed->getValue() != "" && mInvalidEmulatorEntry && singleEntry)
|
||||||
launchCommands.push_back(std::make_pair(
|
launchCommands.push_back(std::make_pair(
|
||||||
"", ViewController::EXCLAMATION_CHAR + " " + originalValue));
|
"", ViewController::EXCLAMATION_CHAR + " " + originalValue));
|
||||||
else if (ed->getValue() != "")
|
else if (ed->getValue() != "")
|
||||||
launchCommands.push_back(std::make_pair(
|
launchCommands.push_back(std::make_pair(
|
||||||
"", ViewController::CROSSEDCIRCLE_CHAR + " CLEAR ENTRY"));
|
"", ViewController::CROSSEDCIRCLE_CHAR + " CLEAR ENTRY"));
|
||||||
|
|
||||||
for (auto entry: launchCommands) {
|
for (auto entry : launchCommands) {
|
||||||
std::string selectedLabel = ed->getValue();
|
std::string selectedLabel = ed->getValue();
|
||||||
std::string label;
|
std::string label;
|
||||||
ComponentListRow row;
|
ComponentListRow row;
|
||||||
|
@ -356,7 +363,8 @@ GuiMetaDataEd::GuiMetaDataEd(Window *window,
|
||||||
ed->setColor(DEFAULT_TEXTCOLOR);
|
ed->setColor(DEFAULT_TEXTCOLOR);
|
||||||
else
|
else
|
||||||
ed->setColor(TEXTCOLOR_USERMARKED);
|
ed->setColor(TEXTCOLOR_USERMARKED);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
ed->setValue(newVal);
|
ed->setValue(newVal);
|
||||||
if (newVal == originalValue)
|
if (newVal == originalValue)
|
||||||
ed->setColor(DEFAULT_TEXTCOLOR);
|
ed->setColor(DEFAULT_TEXTCOLOR);
|
||||||
|
@ -368,10 +376,11 @@ GuiMetaDataEd::GuiMetaDataEd(Window *window,
|
||||||
if (Settings::getInstance()->getBool("VirtualKeyboard")) {
|
if (Settings::getInstance()->getBool("VirtualKeyboard")) {
|
||||||
row.makeAcceptInputHandler([this, title, ed, updateVal, multiLine] {
|
row.makeAcceptInputHandler([this, title, ed, updateVal, multiLine] {
|
||||||
mWindow->pushGui(new GuiTextEditKeyboardPopup(
|
mWindow->pushGui(new GuiTextEditKeyboardPopup(
|
||||||
mWindow, getHelpStyle(), title, ed->getValue(), updateVal, multiLine,
|
mWindow, getHelpStyle(), title, ed->getValue(), updateVal, multiLine,
|
||||||
"apply", "APPLY CHANGES?", "", ""));
|
"apply", "APPLY CHANGES?", "", ""));
|
||||||
});
|
});
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
row.makeAcceptInputHandler([this, title, ed, updateVal, multiLine] {
|
row.makeAcceptInputHandler([this, title, ed, updateVal, multiLine] {
|
||||||
mWindow->pushGui(new GuiTextEditPopup(mWindow, getHelpStyle(), title,
|
mWindow->pushGui(new GuiTextEditPopup(mWindow, getHelpStyle(), title,
|
||||||
ed->getValue(), updateVal, multiLine,
|
ed->getValue(), updateVal, multiLine,
|
||||||
|
|
|
@ -13,9 +13,11 @@
|
||||||
#include "components/MenuComponent.h"
|
#include "components/MenuComponent.h"
|
||||||
#include "views/ViewController.h"
|
#include "views/ViewController.h"
|
||||||
|
|
||||||
GuiOfflineGenerator::GuiOfflineGenerator(Window *window, const std::queue<FileData *> &gameQueue)
|
GuiOfflineGenerator::GuiOfflineGenerator(Window* window, const std::queue<FileData*>& gameQueue)
|
||||||
: GuiComponent(window), mGameQueue(gameQueue), mBackground(window, ":/graphics/frame.svg"),
|
: GuiComponent(window)
|
||||||
mGrid(window, glm::ivec2{6, 13})
|
, mGameQueue(gameQueue)
|
||||||
|
, mBackground(window, ":/graphics/frame.svg")
|
||||||
|
, mGrid(window, glm::ivec2{6, 13})
|
||||||
{
|
{
|
||||||
addChild(&mBackground);
|
addChild(&mBackground);
|
||||||
addChild(&mGrid);
|
addChild(&mGrid);
|
||||||
|
|
|
@ -86,19 +86,19 @@ GuiScraperMulti::GuiScraperMulti(Window* window,
|
||||||
// Previously refined.
|
// Previously refined.
|
||||||
if (mSearchComp->getRefinedSearch())
|
if (mSearchComp->getRefinedSearch())
|
||||||
allowRefine = true;
|
allowRefine = true;
|
||||||
// Interactive mode and "Auto-accept single game matches" not enabled.
|
// Interactive mode and "Auto-accept single game matches" not enabled.
|
||||||
else if (mSearchComp->getSearchType() !=
|
else if (mSearchComp->getSearchType() !=
|
||||||
GuiScraperSearch::ACCEPT_SINGLE_MATCHES)
|
GuiScraperSearch::ACCEPT_SINGLE_MATCHES)
|
||||||
allowRefine = true;
|
allowRefine = true;
|
||||||
// Interactive mode with "Auto-accept single game matches" enabled and more
|
// Interactive mode with "Auto-accept single game matches" enabled and more
|
||||||
// than one result.
|
// than one result.
|
||||||
else if (mSearchComp->getSearchType() ==
|
else if (mSearchComp->getSearchType() ==
|
||||||
GuiScraperSearch::ACCEPT_SINGLE_MATCHES &&
|
GuiScraperSearch::ACCEPT_SINGLE_MATCHES &&
|
||||||
mSearchComp->getScraperResultsSize() > 1)
|
mSearchComp->getScraperResultsSize() > 1)
|
||||||
allowRefine = true;
|
allowRefine = true;
|
||||||
// Dito but there were no games found, or the search has not been completed.
|
// Dito but there were no games found, or the search has not been completed.
|
||||||
else if (mSearchComp->getSearchType() ==
|
else if (mSearchComp->getSearchType() ==
|
||||||
GuiScraperSearch::ACCEPT_SINGLE_MATCHES &&
|
GuiScraperSearch::ACCEPT_SINGLE_MATCHES &&
|
||||||
!mSearchComp->getFoundGame())
|
!mSearchComp->getFoundGame())
|
||||||
allowRefine = true;
|
allowRefine = true;
|
||||||
|
|
||||||
|
|
|
@ -37,9 +37,15 @@
|
||||||
|
|
||||||
#define FAILED_VERIFICATION_RETRIES 8
|
#define FAILED_VERIFICATION_RETRIES 8
|
||||||
|
|
||||||
GuiScraperSearch::GuiScraperSearch(Window *window, SearchType type, unsigned int scrapeCount)
|
GuiScraperSearch::GuiScraperSearch(Window* window, SearchType type, unsigned int scrapeCount)
|
||||||
: GuiComponent(window), mGrid(window, glm::ivec2{4, 3}), mSearchType(type), mScrapeCount(scrapeCount),
|
: GuiComponent(window)
|
||||||
mRefinedSearch(false), mFoundGame(false), mScrapeRatings(false), mBusyAnim(window)
|
, mGrid(window, glm::ivec2{4, 3})
|
||||||
|
, mSearchType(type)
|
||||||
|
, mScrapeCount(scrapeCount)
|
||||||
|
, mRefinedSearch(false)
|
||||||
|
, mFoundGame(false)
|
||||||
|
, mScrapeRatings(false)
|
||||||
|
, mBusyAnim(window)
|
||||||
{
|
{
|
||||||
addChild(&mGrid);
|
addChild(&mGrid);
|
||||||
|
|
||||||
|
@ -467,14 +473,14 @@ void GuiScraperSearch::updateInfoPane()
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
if (i != -1 && static_cast<int>(mScraperResults.size()) > i) {
|
if (i != -1 && static_cast<int>(mScraperResults.size()) > i) {
|
||||||
ScraperSearchResult &res = mScraperResults.at(i);
|
ScraperSearchResult& res = mScraperResults.at(i);
|
||||||
|
|
||||||
mResultName->setText(Utils::String::toUpper(res.mdl.get("name")));
|
mResultName->setText(Utils::String::toUpper(res.mdl.get("name")));
|
||||||
mResultDesc->setText(Utils::String::toUpper(res.mdl.get("desc")));
|
mResultDesc->setText(Utils::String::toUpper(res.mdl.get("desc")));
|
||||||
mDescContainer->reset();
|
mDescContainer->reset();
|
||||||
|
|
||||||
mResultThumbnail->setImage("");
|
mResultThumbnail->setImage("");
|
||||||
const std::string &thumb = res.screenshotUrl.empty() ? res.coverUrl : res.screenshotUrl;
|
const std::string& thumb = res.screenshotUrl.empty() ? res.coverUrl : res.screenshotUrl;
|
||||||
mScraperResults[i].thumbnailImageUrl = thumb;
|
mScraperResults[i].thumbnailImageUrl = thumb;
|
||||||
|
|
||||||
// Cache the thumbnail image in mScraperResults so that we don't need to download
|
// Cache the thumbnail image in mScraperResults so that we don't need to download
|
||||||
|
@ -547,13 +553,13 @@ bool GuiScraperSearch::input(InputConfig* config, Input input)
|
||||||
// Previously refined.
|
// Previously refined.
|
||||||
if (mRefinedSearch)
|
if (mRefinedSearch)
|
||||||
allowRefine = true;
|
allowRefine = true;
|
||||||
// Interactive mode and "Auto-accept single game matches" not enabled.
|
// Interactive mode and "Auto-accept single game matches" not enabled.
|
||||||
else if (mSearchType != ACCEPT_SINGLE_MATCHES)
|
else if (mSearchType != ACCEPT_SINGLE_MATCHES)
|
||||||
allowRefine = true;
|
allowRefine = true;
|
||||||
// Interactive mode with "Auto-accept single game matches" enabled and more than one result.
|
// Interactive mode with "Auto-accept single game matches" enabled and more than one result.
|
||||||
else if (mSearchType == ACCEPT_SINGLE_MATCHES && mScraperResults.size() > 1)
|
else if (mSearchType == ACCEPT_SINGLE_MATCHES && mScraperResults.size() > 1)
|
||||||
allowRefine = true;
|
allowRefine = true;
|
||||||
// Dito but there were no games found, or the search has not been completed.
|
// Dito but there were no games found, or the search has not been completed.
|
||||||
else if (mSearchType == ACCEPT_SINGLE_MATCHES && !mFoundGame)
|
else if (mSearchType == ACCEPT_SINGLE_MATCHES && !mFoundGame)
|
||||||
allowRefine = true;
|
allowRefine = true;
|
||||||
|
|
||||||
|
@ -784,17 +790,11 @@ void GuiScraperSearch::updateThumbnail()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiScraperSearch::openInputScreen(ScraperSearchParams ¶ms) {
|
void GuiScraperSearch::openInputScreen(ScraperSearchParams& params)
|
||||||
|
{
|
||||||
auto searchForFunc = [&](std::string name) {
|
auto searchForFunc = [&](std::string name) {
|
||||||
// Trim leading and trailing whitespaces.
|
// Trim leading and trailing whitespaces.
|
||||||
name.erase(name.begin(), std::find_if(name.begin(), name.end(), [](char c) {
|
name = Utils::String::trim(name);
|
||||||
return !std::isspace(static_cast<unsigned char>(c));
|
|
||||||
}));
|
|
||||||
name.erase(std::find_if(name.rbegin(), name.rend(),
|
|
||||||
[](char c) { return !std::isspace(static_cast<unsigned char>(c)); })
|
|
||||||
.base(),
|
|
||||||
name.end());
|
|
||||||
|
|
||||||
stop();
|
stop();
|
||||||
mRefinedSearch = true;
|
mRefinedSearch = true;
|
||||||
params.nameOverride = name;
|
params.nameOverride = name;
|
||||||
|
@ -810,7 +810,8 @@ void GuiScraperSearch::openInputScreen(ScraperSearchParams ¶ms) {
|
||||||
// regardless of whether the entry is an arcade game and TheGamesDB is used.
|
// regardless of whether the entry is an arcade game and TheGamesDB is used.
|
||||||
if (Settings::getInstance()->getBool("ScraperSearchMetadataName")) {
|
if (Settings::getInstance()->getBool("ScraperSearchMetadataName")) {
|
||||||
searchString = Utils::String::removeParenthesis(params.game->metadata.get("name"));
|
searchString = Utils::String::removeParenthesis(params.game->metadata.get("name"));
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
// If searching based on the actual file name, then expand to the full game name
|
// If searching based on the actual file name, then expand to the full game name
|
||||||
// in case the scraper is set to TheGamesDB and it's an arcade game. This is
|
// in case the scraper is set to TheGamesDB and it's an arcade game. This is
|
||||||
// required as TheGamesDB does not support searches using the short MAME names.
|
// required as TheGamesDB does not support searches using the short MAME names.
|
||||||
|
@ -820,7 +821,8 @@ void GuiScraperSearch::openInputScreen(ScraperSearchParams ¶ms) {
|
||||||
else
|
else
|
||||||
searchString = params.game->getCleanName();
|
searchString = params.game->getCleanName();
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
searchString = params.nameOverride;
|
searchString = params.nameOverride;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -828,7 +830,8 @@ void GuiScraperSearch::openInputScreen(ScraperSearchParams ¶ms) {
|
||||||
mWindow->pushGui(new GuiTextEditKeyboardPopup(mWindow, getHelpStyle(), "REFINE SEARCH",
|
mWindow->pushGui(new GuiTextEditKeyboardPopup(mWindow, getHelpStyle(), "REFINE SEARCH",
|
||||||
searchString, searchForFunc, false, "SEARCH",
|
searchString, searchForFunc, false, "SEARCH",
|
||||||
"SEARCH USING REFINED NAME?"));
|
"SEARCH USING REFINED NAME?"));
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
mWindow->pushGui(new GuiTextEditPopup(mWindow, getHelpStyle(), "REFINE SEARCH",
|
mWindow->pushGui(new GuiTextEditPopup(mWindow, getHelpStyle(), "REFINE SEARCH",
|
||||||
searchString, searchForFunc, false, "SEARCH",
|
searchString, searchForFunc, false, "SEARCH",
|
||||||
"SEARCH USING REFINED NAME?"));
|
"SEARCH USING REFINED NAME?"));
|
||||||
|
@ -918,7 +921,8 @@ bool GuiScraperSearch::saveMetadata(const ScraperSearchResult& result,
|
||||||
return metadataUpdated;
|
return metadataUpdated;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<HelpPrompt> GuiScraperSearch::getHelpPrompts() {
|
std::vector<HelpPrompt> GuiScraperSearch::getHelpPrompts()
|
||||||
|
{
|
||||||
std::vector<HelpPrompt> prompts;
|
std::vector<HelpPrompt> prompts;
|
||||||
|
|
||||||
prompts.push_back(HelpPrompt("y", "refine search"));
|
prompts.push_back(HelpPrompt("y", "refine search"));
|
||||||
|
|
|
@ -63,51 +63,39 @@ public:
|
||||||
{
|
{
|
||||||
mAcceptCallback = acceptCallback;
|
mAcceptCallback = acceptCallback;
|
||||||
}
|
}
|
||||||
|
void setSkipCallback(const std::function<void()>& skipCallback)
|
||||||
void setSkipCallback(const std::function<void()> &skipCallback) {
|
{
|
||||||
mSkipCallback = skipCallback;
|
mSkipCallback = skipCallback;
|
||||||
}
|
}
|
||||||
|
void setCancelCallback(const std::function<void()>& cancelCallback)
|
||||||
void setCancelCallback(const std::function<void()> &cancelCallback) {
|
{
|
||||||
mCancelCallback = cancelCallback;
|
mCancelCallback = cancelCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool input(InputConfig *config, Input input) override;
|
bool input(InputConfig* config, Input input) override;
|
||||||
|
|
||||||
void update(int deltaTime) override;
|
void update(int deltaTime) override;
|
||||||
|
void render(const glm::mat4& parentTrans) override;
|
||||||
void render(const glm::mat4 &parentTrans) override;
|
|
||||||
|
|
||||||
std::vector<HelpPrompt> getHelpPrompts() override;
|
std::vector<HelpPrompt> getHelpPrompts() override;
|
||||||
|
|
||||||
HelpStyle getHelpStyle() override;
|
HelpStyle getHelpStyle() override;
|
||||||
|
|
||||||
void onSizeChanged() override;
|
void onSizeChanged() override;
|
||||||
|
|
||||||
void decreaseScrapeCount() {
|
void decreaseScrapeCount()
|
||||||
|
{
|
||||||
if (mScrapeCount > 0)
|
if (mScrapeCount > 0)
|
||||||
mScrapeCount--;
|
mScrapeCount--;
|
||||||
}
|
}
|
||||||
|
|
||||||
void unsetRefinedSearch() { mRefinedSearch = false; }
|
void unsetRefinedSearch() { mRefinedSearch = false; }
|
||||||
|
|
||||||
bool getRefinedSearch() { return mRefinedSearch; }
|
bool getRefinedSearch() { return mRefinedSearch; }
|
||||||
|
|
||||||
bool getFoundGame() { return mFoundGame; }
|
bool getFoundGame() { return mFoundGame; }
|
||||||
|
const std::string& getNameOverride() { return mLastSearch.nameOverride; }
|
||||||
const std::string &getNameOverride() { return mLastSearch.nameOverride; }
|
|
||||||
|
|
||||||
void onFocusGained() override { mGrid.onFocusGained(); }
|
void onFocusGained() override { mGrid.onFocusGained(); }
|
||||||
|
|
||||||
void onFocusLost() override { mGrid.onFocusLost(); }
|
void onFocusLost() override { mGrid.onFocusLost(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateViewStyle();
|
void updateViewStyle();
|
||||||
|
|
||||||
void updateThumbnail();
|
void updateThumbnail();
|
||||||
|
|
||||||
void updateInfoPane();
|
void updateInfoPane();
|
||||||
|
|
||||||
void resizeMetadata();
|
void resizeMetadata();
|
||||||
|
|
||||||
void onSearchError(const std::string& error,
|
void onSearchError(const std::string& error,
|
||||||
|
|
|
@ -21,11 +21,21 @@
|
||||||
#include "views/ViewController.h"
|
#include "views/ViewController.h"
|
||||||
#include "views/gamelist/IGameListView.h"
|
#include "views/gamelist/IGameListView.h"
|
||||||
|
|
||||||
GuiSettings::GuiSettings(Window *window, std::string title)
|
GuiSettings::GuiSettings(Window* window, std::string title)
|
||||||
: GuiComponent(window), mMenu(window, title), mGoToSystem(nullptr), mNeedsSaving(false),
|
: GuiComponent(window)
|
||||||
mNeedsReloadHelpPrompts(false), mNeedsCollectionsUpdate(false), mNeedsSorting(false),
|
, mMenu(window, title)
|
||||||
mNeedsSortingCollections(false), mNeedsResetFilters(false), mNeedsReloading(false), mNeedsGoToStart(false),
|
, mGoToSystem(nullptr)
|
||||||
mNeedsGoToSystem(false), mNeedsGoToGroupedCollections(false), mInvalidateCachedBackground(false)
|
, mNeedsSaving(false)
|
||||||
|
, mNeedsReloadHelpPrompts(false)
|
||||||
|
, mNeedsCollectionsUpdate(false)
|
||||||
|
, mNeedsSorting(false)
|
||||||
|
, mNeedsSortingCollections(false)
|
||||||
|
, mNeedsResetFilters(false)
|
||||||
|
, mNeedsReloading(false)
|
||||||
|
, mNeedsGoToStart(false)
|
||||||
|
, mNeedsGoToSystem(false)
|
||||||
|
, mNeedsGoToGroupedCollections(false)
|
||||||
|
, mInvalidateCachedBackground(false)
|
||||||
{
|
{
|
||||||
addChild(&mMenu);
|
addChild(&mMenu);
|
||||||
mMenu.addButton("BACK", "back", [this] { delete this; });
|
mMenu.addButton("BACK", "back", [this] { delete this; });
|
||||||
|
@ -174,10 +184,12 @@ void GuiSettings::addEditableTextComponent(const std::string label,
|
||||||
else if (isPassword && newVal == "") {
|
else if (isPassword && newVal == "") {
|
||||||
ed->setValue("");
|
ed->setValue("");
|
||||||
ed->setHiddenValue("");
|
ed->setHiddenValue("");
|
||||||
} else if (isPassword) {
|
}
|
||||||
|
else if (isPassword) {
|
||||||
ed->setValue("********");
|
ed->setValue("********");
|
||||||
ed->setHiddenValue(newVal);
|
ed->setHiddenValue(newVal);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
ed->setValue(newVal);
|
ed->setValue(newVal);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -187,13 +199,14 @@ void GuiSettings::addEditableTextComponent(const std::string label,
|
||||||
// Never display the value if it's a password, instead set it to blank.
|
// Never display the value if it's a password, instead set it to blank.
|
||||||
if (isPassword)
|
if (isPassword)
|
||||||
mWindow->pushGui(new GuiTextEditKeyboardPopup(
|
mWindow->pushGui(new GuiTextEditKeyboardPopup(
|
||||||
mWindow, getHelpStyle(), label, "", updateVal, false, "SAVE", "SAVE CHANGES?"));
|
mWindow, getHelpStyle(), label, "", updateVal, false, "SAVE", "SAVE CHANGES?"));
|
||||||
else
|
else
|
||||||
mWindow->pushGui(new GuiTextEditKeyboardPopup(mWindow, getHelpStyle(), label,
|
mWindow->pushGui(new GuiTextEditKeyboardPopup(mWindow, getHelpStyle(), label,
|
||||||
ed->getValue(), updateVal, false,
|
ed->getValue(), updateVal, false,
|
||||||
"SAVE", "SAVE CHANGES?"));
|
"SAVE", "SAVE CHANGES?"));
|
||||||
});
|
});
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
row.makeAcceptInputHandler([this, label, ed, updateVal, isPassword] {
|
row.makeAcceptInputHandler([this, label, ed, updateVal, isPassword] {
|
||||||
if (isPassword)
|
if (isPassword)
|
||||||
mWindow->pushGui(new GuiTextEditPopup(mWindow, getHelpStyle(), label, "", updateVal,
|
mWindow->pushGui(new GuiTextEditPopup(mWindow, getHelpStyle(), label, "", updateVal,
|
||||||
|
|
|
@ -147,7 +147,8 @@ void thegamesdb_generate_json_scraper_requests(
|
||||||
// using this regardless of whether the entry is an arcade game.
|
// using this regardless of whether the entry is an arcade game.
|
||||||
if (Settings::getInstance()->getBool("ScraperSearchMetadataName")) {
|
if (Settings::getInstance()->getBool("ScraperSearchMetadataName")) {
|
||||||
cleanName = Utils::String::removeParenthesis(params.game->metadata.get("name"));
|
cleanName = Utils::String::removeParenthesis(params.game->metadata.get("name"));
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
// If not searching based on the metadata name, then check whether it's an
|
// If not searching based on the metadata name, then check whether it's an
|
||||||
// arcade game and if so expand to the full game name. This is required as
|
// arcade game and if so expand to the full game name. This is required as
|
||||||
// TheGamesDB has issues with searching using the short MAME names.
|
// TheGamesDB has issues with searching using the short MAME names.
|
||||||
|
@ -159,15 +160,7 @@ void thegamesdb_generate_json_scraper_requests(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trim leading and trailing whitespaces.
|
// Trim leading and trailing whitespaces.
|
||||||
cleanName.erase(cleanName.begin(),
|
cleanName = Utils::String::trim(cleanName);
|
||||||
std::find_if(cleanName.begin(), cleanName.end(), [](char c) {
|
|
||||||
return !std::isspace(static_cast<unsigned char>(c));
|
|
||||||
}));
|
|
||||||
cleanName.erase(
|
|
||||||
std::find_if(cleanName.rbegin(), cleanName.rend(),
|
|
||||||
[](char c) { return !std::isspace(static_cast<unsigned char>(c)); })
|
|
||||||
.base(),
|
|
||||||
cleanName.end());
|
|
||||||
|
|
||||||
path += "/Games/ByGameName?" + apiKey +
|
path += "/Games/ByGameName?" + apiKey +
|
||||||
"&fields=players,publishers,genres,overview,last_updated,rating,"
|
"&fields=players,publishers,genres,overview,last_updated,rating,"
|
||||||
|
@ -456,7 +449,7 @@ void TheGamesDBJSONRequest::process(const std::unique_ptr<HttpReq>& req,
|
||||||
if (doc.HasMember("remaining_monthly_allowance") && doc.HasMember("extra_allowance")) {
|
if (doc.HasMember("remaining_monthly_allowance") && doc.HasMember("extra_allowance")) {
|
||||||
for (size_t i = 0; i < results.size(); i++) {
|
for (size_t i = 0; i < results.size(); i++) {
|
||||||
results[i].scraperRequestAllowance =
|
results[i].scraperRequestAllowance =
|
||||||
doc["remaining_monthly_allowance"].GetInt() + doc["extra_allowance"].GetInt();
|
doc["remaining_monthly_allowance"].GetInt() + doc["extra_allowance"].GetInt();
|
||||||
}
|
}
|
||||||
LOG(LogDebug) << "TheGamesDBJSONRequest::process(): "
|
LOG(LogDebug) << "TheGamesDBJSONRequest::process(): "
|
||||||
"Remaining monthly scraping allowance: "
|
"Remaining monthly scraping allowance: "
|
||||||
|
|
|
@ -553,15 +553,7 @@ std::string ScreenScraperRequest::ScreenScraperConfig::getGameSearchUrl(
|
||||||
bool singleSearch = false;
|
bool singleSearch = false;
|
||||||
|
|
||||||
// Trim leading and trailing whitespaces.
|
// Trim leading and trailing whitespaces.
|
||||||
searchName.erase(searchName.begin(),
|
searchName = Utils::String::trim(searchName);
|
||||||
std::find_if(searchName.begin(), searchName.end(), [](char c) {
|
|
||||||
return !std::isspace(static_cast<unsigned char>(c));
|
|
||||||
}));
|
|
||||||
searchName.erase(
|
|
||||||
std::find_if(searchName.rbegin(), searchName.rend(),
|
|
||||||
[](char c) { return !std::isspace(static_cast<unsigned char>(c)); })
|
|
||||||
.base(),
|
|
||||||
searchName.end());
|
|
||||||
|
|
||||||
// If only whitespaces were entered as the search string, then search using a random string
|
// If only whitespaces were entered as the search string, then search using a random string
|
||||||
// that will not return any results. This is a quick and dirty way to avoid french error
|
// that will not return any results. This is a quick and dirty way to avoid french error
|
||||||
|
|
|
@ -17,12 +17,32 @@
|
||||||
#define FADE_IN_TIME 650
|
#define FADE_IN_TIME 650
|
||||||
|
|
||||||
DetailedGameListView::DetailedGameListView(Window* window, FileData* root)
|
DetailedGameListView::DetailedGameListView(Window* window, FileData* root)
|
||||||
: BasicGameListView(window, root), mThumbnail(window), mMarquee(window), mImage(window), mLblRating(window),
|
: BasicGameListView(window, root)
|
||||||
mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), mLblGenre(window), mLblPlayers(window),
|
, mThumbnail(window)
|
||||||
mLblLastPlayed(window), mLblPlayCount(window), mBadges(window), mRating(window), mReleaseDate(window),
|
, mMarquee(window)
|
||||||
mDeveloper(window),
|
, mImage(window)
|
||||||
mPublisher(window), mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window), mName(window),
|
, mLblRating(window)
|
||||||
mDescContainer(window), mDescription(window), mGamelistInfo(window), mLastUpdated(nullptr)
|
, mLblReleaseDate(window)
|
||||||
|
, mLblDeveloper(window)
|
||||||
|
, mLblPublisher(window)
|
||||||
|
, mLblGenre(window)
|
||||||
|
, mLblPlayers(window)
|
||||||
|
, mLblLastPlayed(window)
|
||||||
|
, mLblPlayCount(window)
|
||||||
|
, mBadges(window)
|
||||||
|
, mRating(window)
|
||||||
|
, mReleaseDate(window)
|
||||||
|
, mDeveloper(window)
|
||||||
|
, mPublisher(window)
|
||||||
|
, mGenre(window)
|
||||||
|
, mPlayers(window)
|
||||||
|
, mLastPlayed(window)
|
||||||
|
, mPlayCount(window)
|
||||||
|
, mName(window)
|
||||||
|
, mDescContainer(window)
|
||||||
|
, mDescription(window)
|
||||||
|
, mGamelistInfo(window)
|
||||||
|
, mLastUpdated(nullptr)
|
||||||
{
|
{
|
||||||
const float padding = 0.01f;
|
const float padding = 0.01f;
|
||||||
|
|
||||||
|
@ -111,7 +131,8 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root)
|
||||||
initMDValues();
|
initMDValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DetailedGameListView::onThemeChanged(const std::shared_ptr<ThemeData>& theme) {
|
void DetailedGameListView::onThemeChanged(const std::shared_ptr<ThemeData>& theme)
|
||||||
|
{
|
||||||
BasicGameListView::onThemeChanged(theme);
|
BasicGameListView::onThemeChanged(theme);
|
||||||
|
|
||||||
using namespace ThemeFlags;
|
using namespace ThemeFlags;
|
||||||
|
@ -124,21 +145,21 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr<ThemeData>& them
|
||||||
mName.applyTheme(theme, getName(), "md_name", ALL);
|
mName.applyTheme(theme, getName(), "md_name", ALL);
|
||||||
|
|
||||||
initMDLabels();
|
initMDLabels();
|
||||||
std::vector<TextComponent *> labels = getMDLabels();
|
std::vector<TextComponent*> labels = getMDLabels();
|
||||||
assert(labels.size() == 8);
|
assert(labels.size() == 8);
|
||||||
std::vector<std::string> lblElements = {
|
std::vector<std::string> lblElements = {
|
||||||
"md_lbl_rating", "md_lbl_releasedate", "md_lbl_developer", "md_lbl_publisher",
|
"md_lbl_rating", "md_lbl_releasedate", "md_lbl_developer", "md_lbl_publisher",
|
||||||
"md_lbl_genre", "md_lbl_players", "md_lbl_lastplayed", "md_lbl_playcount"};
|
"md_lbl_genre", "md_lbl_players", "md_lbl_lastplayed", "md_lbl_playcount"};
|
||||||
|
|
||||||
for (unsigned int i = 0; i < labels.size(); i++)
|
for (unsigned int i = 0; i < labels.size(); i++)
|
||||||
labels[i]->applyTheme(theme, getName(), lblElements[i], ALL);
|
labels[i]->applyTheme(theme, getName(), lblElements[i], ALL);
|
||||||
|
|
||||||
initMDValues();
|
initMDValues();
|
||||||
std::vector<GuiComponent *> values = getMDValues();
|
std::vector<GuiComponent*> values = getMDValues();
|
||||||
assert(values.size() == 9);
|
assert(values.size() == 9);
|
||||||
std::vector<std::string> valElements = {"md_rating", "md_releasedate", "md_developer",
|
std::vector<std::string> valElements = {"md_rating", "md_releasedate", "md_developer",
|
||||||
"md_publisher", "md_genre", "md_players",
|
"md_publisher", "md_genre", "md_players",
|
||||||
"md_badges", "md_lastplayed", "md_playcount"};
|
"md_badges", "md_lastplayed", "md_playcount"};
|
||||||
|
|
||||||
for (unsigned int i = 0; i < values.size(); i++)
|
for (unsigned int i = 0; i < values.size(); i++)
|
||||||
values[i]->applyTheme(theme, getName(), valElements[i], ALL ^ ThemeFlags::TEXT);
|
values[i]->applyTheme(theme, getName(), valElements[i], ALL ^ ThemeFlags::TEXT);
|
||||||
|
@ -389,7 +410,7 @@ void DetailedGameListView::updateInfoPanel()
|
||||||
ss << (file->metadata.get("completed").compare("true") ? "" : "completed ");
|
ss << (file->metadata.get("completed").compare("true") ? "" : "completed ");
|
||||||
ss << (file->metadata.get("kidgame").compare("true") ? "" : "kidgame ");
|
ss << (file->metadata.get("kidgame").compare("true") ? "" : "kidgame ");
|
||||||
ss << (file->metadata.get("broken").compare("true") ? "" : "broken ");
|
ss << (file->metadata.get("broken").compare("true") ? "" : "broken ");
|
||||||
ss << (file->metadata.get("altemulator").compare("") ? "altemu " : "");
|
ss << (file->metadata.get("altemulator").compare("") ? "altemulator " : "");
|
||||||
std::string slots = ss.str();
|
std::string slots = ss.str();
|
||||||
if (!slots.empty())
|
if (!slots.empty())
|
||||||
slots.pop_back();
|
slots.pop_back();
|
||||||
|
@ -402,7 +423,8 @@ void DetailedGameListView::updateInfoPanel()
|
||||||
mLastPlayed.setValue(file->metadata.get("lastplayed"));
|
mLastPlayed.setValue(file->metadata.get("lastplayed"));
|
||||||
mPlayCount.setValue(file->metadata.get("playcount"));
|
mPlayCount.setValue(file->metadata.get("playcount"));
|
||||||
}
|
}
|
||||||
} else if (file->getType() == FOLDER) {
|
}
|
||||||
|
else if (file->getType() == FOLDER) {
|
||||||
if (!hideMetaDataFields) {
|
if (!hideMetaDataFields) {
|
||||||
mLastPlayed.setValue(file->metadata.get("lastplayed"));
|
mLastPlayed.setValue(file->metadata.get("lastplayed"));
|
||||||
mLblPlayCount.setVisible(false);
|
mLblPlayCount.setVisible(false);
|
||||||
|
|
|
@ -20,12 +20,31 @@
|
||||||
#define FADE_IN_TIME 650
|
#define FADE_IN_TIME 650
|
||||||
|
|
||||||
GridGameListView::GridGameListView(Window* window, FileData* root)
|
GridGameListView::GridGameListView(Window* window, FileData* root)
|
||||||
: ISimpleGameListView(window, root), mGrid(window), mMarquee(window), mImage(window), mLblRating(window),
|
: ISimpleGameListView(window, root)
|
||||||
mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), mLblGenre(window), mLblPlayers(window),
|
, mGrid(window)
|
||||||
mLblLastPlayed(window), mLblPlayCount(window), mBadges(window), mRating(window), mReleaseDate(window),
|
, mMarquee(window)
|
||||||
mDeveloper(window),
|
, mImage(window)
|
||||||
mPublisher(window), mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window), mName(window),
|
, mLblRating(window)
|
||||||
mDescContainer(window), mDescription(window), mGamelistInfo(window)
|
, mLblReleaseDate(window)
|
||||||
|
, mLblDeveloper(window)
|
||||||
|
, mLblPublisher(window)
|
||||||
|
, mLblGenre(window)
|
||||||
|
, mLblPlayers(window)
|
||||||
|
, mLblLastPlayed(window)
|
||||||
|
, mLblPlayCount(window)
|
||||||
|
, mBadges(window)
|
||||||
|
, mRating(window)
|
||||||
|
, mReleaseDate(window)
|
||||||
|
, mDeveloper(window)
|
||||||
|
, mPublisher(window)
|
||||||
|
, mGenre(window)
|
||||||
|
, mPlayers(window)
|
||||||
|
, mLastPlayed(window)
|
||||||
|
, mPlayCount(window)
|
||||||
|
, mName(window)
|
||||||
|
, mDescContainer(window)
|
||||||
|
, mDescription(window)
|
||||||
|
, mGamelistInfo(window)
|
||||||
{
|
{
|
||||||
const float padding = 0.01f;
|
const float padding = 0.01f;
|
||||||
|
|
||||||
|
|
|
@ -68,15 +68,13 @@ protected:
|
||||||
|
|
||||||
ImageGridComponent<FileData*> mGrid;
|
ImageGridComponent<FileData*> mGrid;
|
||||||
// Points to the first game in the list, i.e. the first entry which is of the type 'GAME'.
|
// Points to the first game in the list, i.e. the first entry which is of the type 'GAME'.
|
||||||
FileData *firstGameEntry;
|
FileData* firstGameEntry;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateInfoPanel();
|
void updateInfoPanel();
|
||||||
|
const std::string getImagePath(FileData* file);
|
||||||
const std::string getImagePath(FileData *file);
|
|
||||||
|
|
||||||
void initMDLabels();
|
void initMDLabels();
|
||||||
|
|
||||||
void initMDValues();
|
void initMDValues();
|
||||||
|
|
||||||
ImageComponent mMarquee;
|
ImageComponent mMarquee;
|
||||||
|
|
|
@ -451,7 +451,7 @@ void VideoGameListView::updateInfoPanel()
|
||||||
ss << (file->metadata.get("completed").compare("true") ? "" : "completed ");
|
ss << (file->metadata.get("completed").compare("true") ? "" : "completed ");
|
||||||
ss << (file->metadata.get("kidgame").compare("true") ? "" : "kidgame ");
|
ss << (file->metadata.get("kidgame").compare("true") ? "" : "kidgame ");
|
||||||
ss << (file->metadata.get("broken").compare("true") ? "" : "broken ");
|
ss << (file->metadata.get("broken").compare("true") ? "" : "broken ");
|
||||||
ss << (file->metadata.get("altemulator").compare("") ? "altemu " : "");
|
ss << (file->metadata.get("altemulator").compare("") ? "altemulator " : "");
|
||||||
std::string slots = ss.str();
|
std::string slots = ss.str();
|
||||||
if (!slots.empty())
|
if (!slots.empty())
|
||||||
slots.pop_back();
|
slots.pop_back();
|
||||||
|
|
|
@ -20,9 +20,8 @@ class VideoComponent;
|
||||||
class VideoGameListView : public BasicGameListView
|
class VideoGameListView : public BasicGameListView
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VideoGameListView(Window *window, FileData *root);
|
VideoGameListView(Window* window, FileData* root);
|
||||||
|
virtual ~VideoGameListView();
|
||||||
virtual ~VideoGameListView() noexcept;
|
|
||||||
|
|
||||||
virtual void onShow() override;
|
virtual void onShow() override;
|
||||||
virtual void onThemeChanged(const std::shared_ptr<ThemeData>& theme) override;
|
virtual void onThemeChanged(const std::shared_ptr<ThemeData>& theme) override;
|
||||||
|
|
|
@ -9,157 +9,157 @@
|
||||||
project("core")
|
project("core")
|
||||||
|
|
||||||
set(CORE_HEADERS
|
set(CORE_HEADERS
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/AsyncHandle.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/AsyncHandle.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/CECInput.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/CECInput.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/HelpStyle.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/HelpStyle.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Log.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Log.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/MameNames.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/MameNames.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Platform.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Platform.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h
|
||||||
|
|
||||||
# Animations
|
# Animations
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/animations/Animation.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/animations/Animation.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/animations/LambdaAnimation.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/animations/LambdaAnimation.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/animations/MoveCameraAnimation.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/animations/MoveCameraAnimation.h
|
||||||
|
|
||||||
# GUI components
|
# GUI components
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/BadgesComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/BadgesComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/BusyComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/BusyComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeEditComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeEditComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/FlexboxComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/FlexboxComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/GridTileComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/GridTileComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageGridComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageGridComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextListComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextListComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoFFmpegComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoFFmpegComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoVlcComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoVlcComponent.h
|
||||||
|
|
||||||
# GUIs
|
# GUIs
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditKeyboardPopup.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditKeyboardPopup.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.h
|
||||||
|
|
||||||
# Renderers
|
# Renderers
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Shader_GL21.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Shader_GL21.h
|
||||||
|
|
||||||
# Resources
|
# Resources
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.h
|
||||||
|
|
||||||
# Utils
|
# Utils
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/CImgUtil.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/CImgUtil.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/MathUtil.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/MathUtil.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.h
|
||||||
)
|
)
|
||||||
|
|
||||||
set(CORE_SOURCES
|
set(CORE_SOURCES
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/CECInput.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/CECInput.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/HelpStyle.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/HelpStyle.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Log.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Log.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/MameNames.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/MameNames.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Platform.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Platform.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Scripting.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Scripting.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp
|
||||||
|
|
||||||
# Animations
|
# Animations
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.cpp
|
||||||
|
|
||||||
# GUI components
|
# GUI components
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/BadgesComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/BadgesComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/BusyComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/BusyComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeEditComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeEditComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/FlexboxComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/FlexboxComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/GridTileComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/GridTileComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoFFmpegComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoFFmpegComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoVlcComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoVlcComponent.cpp
|
||||||
|
|
||||||
# GUIs
|
# GUIs
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditKeyboardPopup.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditKeyboardPopup.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.cpp
|
||||||
|
|
||||||
# Renderer
|
# Renderer
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GL21.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GL21.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GLES10.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GLES10.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Shader_GL21.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Shader_GL21.cpp
|
||||||
|
|
||||||
# Resources
|
# Resources
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.cpp
|
||||||
|
|
||||||
# Utils
|
# Utils
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/CImgUtil.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/CImgUtil.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/MathUtil.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/MathUtil.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
include_directories(${COMMON_INCLUDE_DIRS})
|
include_directories(${COMMON_INCLUDE_DIRS})
|
||||||
add_library(es-core STATIC ${CORE_SOURCES} ${CORE_HEADERS})
|
add_library(es-core STATIC ${CORE_SOURCES} ${CORE_HEADERS})
|
||||||
|
|
|
@ -16,11 +16,22 @@
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
GuiComponent::GuiComponent(Window *window)
|
GuiComponent::GuiComponent(Window* window)
|
||||||
: mWindow(window), mParent(nullptr), mOpacity(255), mColor(0), mSaturation(1.0f), mColorShift(0),
|
: mWindow(window)
|
||||||
mColorShiftEnd(0),
|
, mParent(nullptr)
|
||||||
mPosition({}), mOrigin({}), mRotationOrigin(0.5f, 0.5f), mSize({}), mIsProcessing(false), mVisible(true),
|
, mOpacity(255)
|
||||||
mEnabled(true), mTransform(Renderer::getIdentity())
|
, mColor(0)
|
||||||
|
, mSaturation(1.0f)
|
||||||
|
, mColorShift(0)
|
||||||
|
, mColorShiftEnd(0)
|
||||||
|
, mPosition({})
|
||||||
|
, mOrigin({})
|
||||||
|
, mRotationOrigin(0.5f, 0.5f)
|
||||||
|
, mSize({})
|
||||||
|
, mIsProcessing(false)
|
||||||
|
, mVisible(true)
|
||||||
|
, mEnabled(true)
|
||||||
|
, mTransform(Renderer::getIdentity())
|
||||||
{
|
{
|
||||||
for (unsigned char i = 0; i < MAX_ANIMATIONS; i++)
|
for (unsigned char i = 0; i < MAX_ANIMATIONS; i++)
|
||||||
mAnimationMap[i] = nullptr;
|
mAnimationMap[i] = nullptr;
|
||||||
|
|
|
@ -37,9 +37,8 @@ class Window;
|
||||||
class GuiComponent
|
class GuiComponent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GuiComponent(Window *window);
|
GuiComponent(Window* window);
|
||||||
|
virtual ~GuiComponent();
|
||||||
virtual ~GuiComponent() noexcept;
|
|
||||||
|
|
||||||
virtual void textInput(const std::string& text);
|
virtual void textInput(const std::string& text);
|
||||||
|
|
||||||
|
@ -231,15 +230,14 @@ public:
|
||||||
const static unsigned char MAX_ANIMATIONS = 4;
|
const static unsigned char MAX_ANIMATIONS = 4;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void renderChildren(const glm::mat4 &transform) const;
|
void renderChildren(const glm::mat4& transform) const;
|
||||||
|
|
||||||
void updateSelf(int deltaTime); // Updates animations.
|
void updateSelf(int deltaTime); // Updates animations.
|
||||||
void updateChildren(int deltaTime); // Updates animations.
|
void updateChildren(int deltaTime); // Updates animations.
|
||||||
|
|
||||||
Window *mWindow;
|
Window* mWindow;
|
||||||
|
|
||||||
GuiComponent *mParent;
|
GuiComponent* mParent;
|
||||||
std::vector<GuiComponent *> mChildren;
|
std::vector<GuiComponent*> mChildren;
|
||||||
|
|
||||||
unsigned char mOpacity;
|
unsigned char mOpacity;
|
||||||
unsigned int mColor;
|
unsigned int mColor;
|
||||||
|
|
|
@ -80,7 +80,7 @@ private:
|
||||||
static CURLM* s_multi_handle;
|
static CURLM* s_multi_handle;
|
||||||
|
|
||||||
Status mStatus;
|
Status mStatus;
|
||||||
CURL *mHandle;
|
CURL* mHandle;
|
||||||
|
|
||||||
std::stringstream mContent;
|
std::stringstream mContent;
|
||||||
std::string mErrorMsg;
|
std::string mErrorMsg;
|
||||||
|
|
|
@ -148,12 +148,13 @@ std::map<std::string, std::map<std::string, ThemeData::ElementPropertyType>> The
|
||||||
{"zIndex", FLOAT}}},
|
{"zIndex", FLOAT}}},
|
||||||
{"badges",
|
{"badges",
|
||||||
{{"pos", NORMALIZED_PAIR},
|
{{"pos", NORMALIZED_PAIR},
|
||||||
|
{"size", NORMALIZED_PAIR},
|
||||||
{"origin", NORMALIZED_PAIR},
|
{"origin", NORMALIZED_PAIR},
|
||||||
{"direction", STRING},
|
{"direction", STRING},
|
||||||
{"align", STRING},
|
{"align", STRING},
|
||||||
{"itemsPerLine", FLOAT},
|
{"itemsPerLine", FLOAT},
|
||||||
|
{"lines", FLOAT},
|
||||||
{"itemMargin", NORMALIZED_PAIR},
|
{"itemMargin", NORMALIZED_PAIR},
|
||||||
{"itemWidth", FLOAT},
|
|
||||||
{"slots", STRING},
|
{"slots", STRING},
|
||||||
{"customBadgeIcon", PATH},
|
{"customBadgeIcon", PATH},
|
||||||
{"visible", BOOLEAN},
|
{"visible", BOOLEAN},
|
||||||
|
|
|
@ -14,47 +14,41 @@
|
||||||
#include "resources/TextureResource.h"
|
#include "resources/TextureResource.h"
|
||||||
|
|
||||||
// Available slot definitions.
|
// Available slot definitions.
|
||||||
const std::vector<std::string> BadgesComponent::mSlots = {SLOT_FAVORITE, SLOT_COMPLETED, SLOT_KIDS, SLOT_BROKEN,
|
std::vector<std::string> BadgesComponent::mSlots = {SLOT_FAVORITE, SLOT_COMPLETED, SLOT_KIDS,
|
||||||
SLOT_ALTERNATIVE_EMULATOR};
|
SLOT_BROKEN, SLOT_ALTERNATIVE_EMULATOR};
|
||||||
|
|
||||||
BadgesComponent::BadgesComponent(Window *window)
|
BadgesComponent::BadgesComponent(Window* window)
|
||||||
: FlexboxComponent(window) {
|
: FlexboxComponent(window)
|
||||||
|
{
|
||||||
mBadgeIcons = std::map<std::string, std::string>();
|
|
||||||
mBadgeIcons[SLOT_FAVORITE] = ":/graphics/badge_favorite.svg";
|
mBadgeIcons[SLOT_FAVORITE] = ":/graphics/badge_favorite.svg";
|
||||||
mBadgeIcons[SLOT_COMPLETED] = ":/graphics/badge_completed.svg";
|
mBadgeIcons[SLOT_COMPLETED] = ":/graphics/badge_completed.svg";
|
||||||
mBadgeIcons[SLOT_KIDS] = ":/graphics/badge_kidgame.svg";
|
mBadgeIcons[SLOT_KIDS] = ":/graphics/badge_kidgame.svg";
|
||||||
mBadgeIcons[SLOT_BROKEN] = ":/graphics/badge_broken.svg";
|
mBadgeIcons[SLOT_BROKEN] = ":/graphics/badge_broken.svg";
|
||||||
mBadgeIcons[SLOT_ALTERNATIVE_EMULATOR] = ":/graphics/badge_altemu.svg";
|
mBadgeIcons[SLOT_ALTERNATIVE_EMULATOR] = ":/graphics/badge_altemulator.svg";
|
||||||
|
|
||||||
mImageComponents = std::map<std::string, ImageComponent>();
|
|
||||||
ImageComponent mImageFavorite = ImageComponent(window);
|
ImageComponent mImageFavorite = ImageComponent(window);
|
||||||
mImageFavorite.setImage(mBadgeIcons[SLOT_FAVORITE], false, true, true);
|
|
||||||
mImageComponents.insert({SLOT_FAVORITE, mImageFavorite});
|
mImageComponents.insert({SLOT_FAVORITE, mImageFavorite});
|
||||||
ImageComponent mImageCompleted = ImageComponent(window);
|
ImageComponent mImageCompleted = ImageComponent(window);
|
||||||
mImageCompleted.setImage(mBadgeIcons[SLOT_COMPLETED], false, true, true);
|
|
||||||
mImageComponents.insert({SLOT_COMPLETED, mImageCompleted});
|
mImageComponents.insert({SLOT_COMPLETED, mImageCompleted});
|
||||||
ImageComponent mImageKids = ImageComponent(window);
|
ImageComponent mImageKids = ImageComponent(window);
|
||||||
mImageKids.setImage(mBadgeIcons[SLOT_KIDS], false, true, true);
|
|
||||||
mImageComponents.insert({SLOT_KIDS, mImageKids});
|
mImageComponents.insert({SLOT_KIDS, mImageKids});
|
||||||
ImageComponent mImageBroken = ImageComponent(window);
|
ImageComponent mImageBroken = ImageComponent(window);
|
||||||
mImageBroken.setImage(mBadgeIcons[SLOT_BROKEN], false, true, true);
|
|
||||||
mImageComponents.insert({SLOT_BROKEN, mImageBroken});
|
mImageComponents.insert({SLOT_BROKEN, mImageBroken});
|
||||||
ImageComponent mImageAltEmu = ImageComponent(window);
|
ImageComponent mImageAltEmulator = ImageComponent(window);
|
||||||
mImageAltEmu.setImage(mBadgeIcons[SLOT_ALTERNATIVE_EMULATOR], false, true, true);
|
mImageComponents.insert({SLOT_ALTERNATIVE_EMULATOR, mImageAltEmulator});
|
||||||
mImageComponents.insert({SLOT_ALTERNATIVE_EMULATOR, mImageAltEmu});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BadgesComponent::~BadgesComponent() noexcept {
|
BadgesComponent::~BadgesComponent()
|
||||||
for (GuiComponent *c: mChildren)
|
{
|
||||||
|
for (GuiComponent* c : mChildren)
|
||||||
c->clearChildren();
|
c->clearChildren();
|
||||||
clearChildren();
|
clearChildren();
|
||||||
mBadgeIcons.clear();
|
mBadgeIcons.clear();
|
||||||
mImageComponents.clear();
|
mImageComponents.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BadgesComponent::setValue(const std::string& value)
|
||||||
void BadgesComponent::setValue(const std::string &value) {
|
{
|
||||||
mChildren.clear();
|
mChildren.clear();
|
||||||
if (!value.empty()) {
|
if (!value.empty()) {
|
||||||
std::string temp;
|
std::string temp;
|
||||||
|
@ -63,7 +57,7 @@ void BadgesComponent::setValue(const std::string &value) {
|
||||||
if (!(temp == SLOT_FAVORITE || temp == SLOT_COMPLETED || temp == SLOT_KIDS ||
|
if (!(temp == SLOT_FAVORITE || temp == SLOT_COMPLETED || temp == SLOT_KIDS ||
|
||||||
temp == SLOT_BROKEN || temp == SLOT_ALTERNATIVE_EMULATOR))
|
temp == SLOT_BROKEN || temp == SLOT_ALTERNATIVE_EMULATOR))
|
||||||
LOG(LogError) << "Badge slot '" << temp << "' is invalid.";
|
LOG(LogError) << "Badge slot '" << temp << "' is invalid.";
|
||||||
else
|
else if (std::find(mSlots.begin(), mSlots.end(), temp) != mSlots.end())
|
||||||
mChildren.push_back(&mImageComponents.find(temp)->second);
|
mChildren.push_back(&mImageComponents.find(temp)->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -92,27 +86,35 @@ void BadgesComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
|
||||||
if (!elem)
|
if (!elem)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bool imgChanged = false;
|
|
||||||
for (auto& slot : mSlots) {
|
for (auto& slot : mSlots) {
|
||||||
if (properties & PATH && elem->has(slot) && mBadgeIcons[slot] != elem->get<std::string>(slot)) {
|
if (properties & PATH && elem->has(slot)) {
|
||||||
mBadgeIcons[slot] = elem->get<std::string>(slot);
|
mBadgeIcons[slot] = elem->get<std::string>(slot);
|
||||||
mImageComponents.find(slot)->second.setImage(mBadgeIcons[slot], false, true, true);
|
mImageComponents.find(slot)->second.setImage(mBadgeIcons[slot]);
|
||||||
imgChanged = true;
|
}
|
||||||
|
else {
|
||||||
|
mImageComponents.find(slot)->second.setImage(mBadgeIcons[slot]);
|
||||||
|
std::string teststring;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (elem->has("slots"))
|
if (elem->has("slots")) {
|
||||||
setValue(elem->get<std::string>("slots"));
|
auto value = elem->get<std::string>("slots");
|
||||||
|
mSlots = {};
|
||||||
|
if (!value.empty()) {
|
||||||
|
std::string temp;
|
||||||
|
std::istringstream ss(value);
|
||||||
|
while (std::getline(ss, temp, ' ')) {
|
||||||
|
if (!(temp == SLOT_FAVORITE || temp == SLOT_COMPLETED || temp == SLOT_KIDS ||
|
||||||
|
temp == SLOT_BROKEN || temp == SLOT_ALTERNATIVE_EMULATOR))
|
||||||
|
LOG(LogError) << "Badge slot '" << temp << "' is invalid.";
|
||||||
|
else
|
||||||
|
mSlots.push_back(temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Apply theme on the flexbox component parent.
|
// Apply theme on the flexbox component parent.
|
||||||
FlexboxComponent::applyTheme(theme, view, element, properties);
|
FlexboxComponent::applyTheme(theme, view, element, properties);
|
||||||
|
|
||||||
if (imgChanged)
|
onSizeChanged();
|
||||||
onSizeChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<HelpPrompt> BadgesComponent::getHelpPrompts()
|
|
||||||
{
|
|
||||||
std::vector<HelpPrompt> prompts;
|
|
||||||
return prompts;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
// Used by gamelist views.
|
// Used by gamelist views.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef ES_APP_COMPONENTS_BADGES_COMPONENT_H
|
#ifndef ES_CORE_COMPONENTS_BADGES_COMPONENT_H
|
||||||
#define ES_APP_COMPONENTS_BADGES_COMPONENT_H
|
#define ES_CORE_COMPONENTS_BADGES_COMPONENT_H
|
||||||
|
|
||||||
#include "FlexboxComponent.h"
|
#include "FlexboxComponent.h"
|
||||||
#include "GuiComponent.h"
|
#include "GuiComponent.h"
|
||||||
|
@ -20,31 +20,31 @@
|
||||||
#define SLOT_COMPLETED "completed"
|
#define SLOT_COMPLETED "completed"
|
||||||
#define SLOT_KIDS "kidgame"
|
#define SLOT_KIDS "kidgame"
|
||||||
#define SLOT_BROKEN "broken"
|
#define SLOT_BROKEN "broken"
|
||||||
#define SLOT_ALTERNATIVE_EMULATOR "altemu"
|
#define SLOT_ALTERNATIVE_EMULATOR "altemulator"
|
||||||
|
|
||||||
class TextureResource;
|
class TextureResource;
|
||||||
|
|
||||||
class BadgesComponent : public FlexboxComponent
|
class BadgesComponent : public FlexboxComponent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BadgesComponent(Window *window);
|
BadgesComponent(Window* window);
|
||||||
~BadgesComponent() noexcept;
|
~BadgesComponent();
|
||||||
|
|
||||||
|
static std::shared_ptr<BadgesComponent>& getInstance();
|
||||||
|
|
||||||
std::string getValue() const override;
|
std::string getValue() const override;
|
||||||
// Should be a list of strings.
|
// Should be a list of strings.
|
||||||
void setValue(const std::string &value) override;
|
void setValue(const std::string& value) override;
|
||||||
|
|
||||||
virtual void applyTheme(const std::shared_ptr<ThemeData> &theme,
|
virtual void applyTheme(const std::shared_ptr<ThemeData>& theme,
|
||||||
const std::string &view,
|
const std::string& view,
|
||||||
const std::string &element,
|
const std::string& element,
|
||||||
unsigned int properties) override;
|
unsigned int properties) override;
|
||||||
|
|
||||||
virtual std::vector<HelpPrompt> getHelpPrompts() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static const std::vector<std::string> mSlots;
|
static std::vector<std::string> mSlots;
|
||||||
std::map<std::string, std::string> mBadgeIcons;
|
std::map<std::string, std::string> mBadgeIcons;
|
||||||
std::map<std::string, ImageComponent> mImageComponents;
|
std::map<std::string, ImageComponent> mImageComponents;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ES_APP_COMPONENTS_BADGES_COMPONENT_H
|
#endif // ES_CORE_COMPONENTS_BADGES_COMPONENT_H
|
||||||
|
|
|
@ -12,15 +12,25 @@
|
||||||
#include "resources/Font.h"
|
#include "resources/Font.h"
|
||||||
#include "utils/StringUtil.h"
|
#include "utils/StringUtil.h"
|
||||||
|
|
||||||
ButtonComponent::ButtonComponent(Window *window,
|
ButtonComponent::ButtonComponent(Window* window,
|
||||||
const std::string &text,
|
const std::string& text,
|
||||||
const std::string &helpText,
|
const std::string& helpText,
|
||||||
const std::function<void()> &func,
|
const std::function<void()>& func,
|
||||||
bool upperCase,
|
bool upperCase,
|
||||||
bool flatStyle)
|
bool flatStyle)
|
||||||
: GuiComponent{window}, mBox{window, ":/graphics/button.svg"}, mFont{Font::get(FONT_SIZE_MEDIUM)}, mPadding{{}},
|
: GuiComponent{window}
|
||||||
mFocused{false}, mEnabled{true}, mFlatStyle{flatStyle}, mTextColorFocused{0xFFFFFFFF},
|
, mBox{window, ":/graphics/button.svg"}
|
||||||
mTextColorUnfocused{0x777777FF}, mFlatColorFocused{0x878787FF}, mFlatColorUnfocused{0x60606025} {
|
, mFont{Font::get(FONT_SIZE_MEDIUM)}
|
||||||
|
, mPadding{{}}
|
||||||
|
, mFocused{false}
|
||||||
|
, mEnabled{true}
|
||||||
|
, mFlatStyle{flatStyle}
|
||||||
|
, mTextColorFocused{0xFFFFFFFF}
|
||||||
|
, mTextColorUnfocused{0x777777FF}
|
||||||
|
, mFlatColorFocused{0x878787FF}
|
||||||
|
, mFlatColorUnfocused{0x60606025}
|
||||||
|
|
||||||
|
{
|
||||||
setPressedFunc(func);
|
setPressedFunc(func);
|
||||||
setText(text, helpText, upperCase);
|
setText(text, helpText, upperCase);
|
||||||
|
|
||||||
|
@ -28,7 +38,8 @@ ButtonComponent::ButtonComponent(Window *window,
|
||||||
updateImage();
|
updateImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ButtonComponent::onSizeChanged() {
|
void ButtonComponent::onSizeChanged()
|
||||||
|
{
|
||||||
if (mFlatStyle)
|
if (mFlatStyle)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -39,24 +50,27 @@ void ButtonComponent::onSizeChanged() {
|
||||||
glm::vec2{-cornerSize.x * 2.0f, -cornerSize.y * 2.0f});
|
glm::vec2{-cornerSize.x * 2.0f, -cornerSize.y * 2.0f});
|
||||||
}
|
}
|
||||||
|
|
||||||
void ButtonComponent::onFocusGained() {
|
void ButtonComponent::onFocusGained()
|
||||||
|
{
|
||||||
mFocused = true;
|
mFocused = true;
|
||||||
if (!mFlatStyle)
|
if (!mFlatStyle)
|
||||||
updateImage();
|
updateImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ButtonComponent::onFocusLost() {
|
void ButtonComponent::onFocusLost()
|
||||||
|
{
|
||||||
mFocused = false;
|
mFocused = false;
|
||||||
if (!mFlatStyle)
|
if (!mFlatStyle)
|
||||||
updateImage();
|
updateImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ButtonComponent::setText(const std::string &text, const std::string &helpText, bool upperCase) {
|
void ButtonComponent::setText(const std::string& text, const std::string& helpText, bool upperCase)
|
||||||
|
{
|
||||||
mText = upperCase ? Utils::String::toUpper(text) : text;
|
mText = upperCase ? Utils::String::toUpper(text) : text;
|
||||||
mHelpText = helpText;
|
mHelpText = helpText;
|
||||||
|
|
||||||
mTextCache =
|
mTextCache =
|
||||||
std::unique_ptr<TextCache>(mFont->buildTextCache(mText, 0.0f, 0.0f, getCurTextColor()));
|
std::unique_ptr<TextCache>(mFont->buildTextCache(mText, 0.0f, 0.0f, getCurTextColor()));
|
||||||
|
|
||||||
float minWidth = mFont->sizeText("DELETE").x + (12.0f * Renderer::getScreenWidthModifier());
|
float minWidth = mFont->sizeText("DELETE").x + (12.0f * Renderer::getScreenWidthModifier());
|
||||||
setSize(std::max(mTextCache->metrics.size.x + (12.0f * Renderer::getScreenWidthModifier()),
|
setSize(std::max(mTextCache->metrics.size.x + (12.0f * Renderer::getScreenWidthModifier()),
|
||||||
|
@ -66,13 +80,15 @@ void ButtonComponent::setText(const std::string &text, const std::string &helpTe
|
||||||
updateHelpPrompts();
|
updateHelpPrompts();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ButtonComponent::setEnabled(bool state) {
|
void ButtonComponent::setEnabled(bool state)
|
||||||
|
{
|
||||||
mEnabled = state;
|
mEnabled = state;
|
||||||
if (!mFlatStyle)
|
if (!mFlatStyle)
|
||||||
updateImage();
|
updateImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ButtonComponent::setPadding(const glm::vec4 padding) {
|
void ButtonComponent::setPadding(const glm::vec4 padding)
|
||||||
|
{
|
||||||
if (mPadding == padding)
|
if (mPadding == padding)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -80,7 +96,8 @@ void ButtonComponent::setPadding(const glm::vec4 padding) {
|
||||||
onSizeChanged();
|
onSizeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ButtonComponent::input(InputConfig *config, Input input) {
|
bool ButtonComponent::input(InputConfig* config, Input input)
|
||||||
|
{
|
||||||
if (config->isMappedTo("a", input) && input.value != 0) {
|
if (config->isMappedTo("a", input) && input.value != 0) {
|
||||||
if (mPressedFunc && mEnabled)
|
if (mPressedFunc && mEnabled)
|
||||||
mPressedFunc();
|
mPressedFunc();
|
||||||
|
@ -90,7 +107,8 @@ bool ButtonComponent::input(InputConfig *config, Input input) {
|
||||||
return GuiComponent::input(config, input);
|
return GuiComponent::input(config, input);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ButtonComponent::render(const glm::mat4 &parentTrans) {
|
void ButtonComponent::render(const glm::mat4& parentTrans)
|
||||||
|
{
|
||||||
glm::mat4 trans{parentTrans * getTransform()};
|
glm::mat4 trans{parentTrans * getTransform()};
|
||||||
|
|
||||||
if (mFlatStyle) {
|
if (mFlatStyle) {
|
||||||
|
@ -99,13 +117,15 @@ void ButtonComponent::render(const glm::mat4 &parentTrans) {
|
||||||
Renderer::drawRect(mPadding.x, mPadding.y, mSize.x - mPadding.x - mPadding.z,
|
Renderer::drawRect(mPadding.x, mPadding.y, mSize.x - mPadding.x - mPadding.z,
|
||||||
mSize.y - mPadding.y - mPadding.w, mFlatColorFocused,
|
mSize.y - mPadding.y - mPadding.w, mFlatColorFocused,
|
||||||
mFlatColorFocused);
|
mFlatColorFocused);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
Renderer::setMatrix(trans);
|
Renderer::setMatrix(trans);
|
||||||
Renderer::drawRect(mPadding.x, mPadding.y, mSize.x - mPadding.x - mPadding.z,
|
Renderer::drawRect(mPadding.x, mPadding.y, mSize.x - mPadding.x - mPadding.z,
|
||||||
mSize.y - mPadding.y - mPadding.w, mFlatColorUnfocused,
|
mSize.y - mPadding.y - mPadding.w, mFlatColorUnfocused,
|
||||||
mFlatColorUnfocused);
|
mFlatColorUnfocused);
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
mBox.render(trans);
|
mBox.render(trans);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,20 +151,23 @@ void ButtonComponent::render(const glm::mat4 &parentTrans) {
|
||||||
renderChildren(trans);
|
renderChildren(trans);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<HelpPrompt> ButtonComponent::getHelpPrompts() {
|
std::vector<HelpPrompt> ButtonComponent::getHelpPrompts()
|
||||||
|
{
|
||||||
std::vector<HelpPrompt> prompts;
|
std::vector<HelpPrompt> prompts;
|
||||||
prompts.push_back(HelpPrompt("a", mHelpText.empty() ? mText.c_str() : mHelpText.c_str()));
|
prompts.push_back(HelpPrompt("a", mHelpText.empty() ? mText.c_str() : mHelpText.c_str()));
|
||||||
return prompts;
|
return prompts;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int ButtonComponent::getCurTextColor() const {
|
unsigned int ButtonComponent::getCurTextColor() const
|
||||||
|
{
|
||||||
if (!mFocused)
|
if (!mFocused)
|
||||||
return mTextColorUnfocused;
|
return mTextColorUnfocused;
|
||||||
else
|
else
|
||||||
return mTextColorFocused;
|
return mTextColorFocused;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ButtonComponent::updateImage() {
|
void ButtonComponent::updateImage()
|
||||||
|
{
|
||||||
if (!mEnabled || !mPressedFunc) {
|
if (!mEnabled || !mPressedFunc) {
|
||||||
mBox.setImagePath(":/graphics/button_filled.svg");
|
mBox.setImagePath(":/graphics/button_filled.svg");
|
||||||
mBox.setCenterColor(0x770000FF);
|
mBox.setCenterColor(0x770000FF);
|
||||||
|
|
|
@ -14,48 +14,41 @@
|
||||||
|
|
||||||
class TextCache;
|
class TextCache;
|
||||||
|
|
||||||
class ButtonComponent : public GuiComponent {
|
class ButtonComponent : public GuiComponent
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
ButtonComponent(Window *window,
|
ButtonComponent(Window* window,
|
||||||
const std::string &text = "",
|
const std::string& text = "",
|
||||||
const std::string &helpText = "",
|
const std::string& helpText = "",
|
||||||
const std::function<void()> &func = nullptr,
|
const std::function<void()>& func = nullptr,
|
||||||
bool upperCase = true,
|
bool upperCase = true,
|
||||||
bool flatStyle = false);
|
bool flatStyle = false);
|
||||||
|
|
||||||
void onSizeChanged() override;
|
void onSizeChanged() override;
|
||||||
|
|
||||||
void onFocusGained() override;
|
void onFocusGained() override;
|
||||||
|
|
||||||
void onFocusLost() override;
|
void onFocusLost() override;
|
||||||
|
|
||||||
void setText(const std::string &text, const std::string &helpText, bool upperCase = true);
|
void setText(const std::string& text, const std::string& helpText, bool upperCase = true);
|
||||||
|
const std::string& getText() const { return mText; }
|
||||||
const std::string &getText() const { return mText; }
|
|
||||||
|
|
||||||
void setPressedFunc(std::function<void()> f) { mPressedFunc = f; }
|
void setPressedFunc(std::function<void()> f) { mPressedFunc = f; }
|
||||||
|
|
||||||
void setEnabled(bool state) override;
|
void setEnabled(bool state) override;
|
||||||
|
|
||||||
void setPadding(const glm::vec4 padding);
|
void setPadding(const glm::vec4 padding);
|
||||||
|
|
||||||
glm::vec4 getPadding() { return mPadding; }
|
glm::vec4 getPadding() { return mPadding; }
|
||||||
|
|
||||||
void setFlatColorFocused(unsigned int color) { mFlatColorFocused = color; }
|
void setFlatColorFocused(unsigned int color) { mFlatColorFocused = color; }
|
||||||
|
|
||||||
void setFlatColorUnfocused(unsigned int color) { mFlatColorUnfocused = color; }
|
void setFlatColorUnfocused(unsigned int color) { mFlatColorUnfocused = color; }
|
||||||
|
|
||||||
const std::function<void()> &getPressedFunc() const { return mPressedFunc; }
|
const std::function<void()>& getPressedFunc() const { return mPressedFunc; }
|
||||||
|
|
||||||
bool input(InputConfig *config, Input input) override;
|
bool input(InputConfig* config, Input input) override;
|
||||||
|
void render(const glm::mat4& parentTrans) override;
|
||||||
void render(const glm::mat4 &parentTrans) override;
|
|
||||||
|
|
||||||
virtual std::vector<HelpPrompt> getHelpPrompts() override;
|
virtual std::vector<HelpPrompt> getHelpPrompts() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned int getCurTextColor() const;
|
unsigned int getCurTextColor() const;
|
||||||
|
|
||||||
void updateImage();
|
void updateImage();
|
||||||
|
|
||||||
NinePatchComponent mBox;
|
NinePatchComponent mBox;
|
||||||
|
|
|
@ -245,7 +245,7 @@ const ComponentGrid::GridEntry* ComponentGrid::getCellAt(int x, int y) const
|
||||||
|
|
||||||
bool ComponentGrid::input(InputConfig* config, Input input)
|
bool ComponentGrid::input(InputConfig* config, Input input)
|
||||||
{
|
{
|
||||||
const GridEntry *cursorEntry = getCellAt(mCursor);
|
const GridEntry* cursorEntry = getCellAt(mCursor);
|
||||||
if (cursorEntry && cursorEntry->component->input(config, input))
|
if (cursorEntry && cursorEntry->component->input(config, input))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -287,11 +287,12 @@ void ComponentGrid::resetCursor()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ComponentGrid::moveCursor(glm::ivec2 dir) {
|
bool ComponentGrid::moveCursor(glm::ivec2 dir)
|
||||||
|
{
|
||||||
assert(dir.x || dir.y);
|
assert(dir.x || dir.y);
|
||||||
|
|
||||||
const glm::ivec2 origCursor{mCursor};
|
const glm::ivec2 origCursor{mCursor};
|
||||||
const GridEntry *currentCursorEntry = getCellAt(mCursor);
|
const GridEntry* currentCursorEntry = getCellAt(mCursor);
|
||||||
glm::ivec2 searchAxis(dir.x == 0, dir.y == 0);
|
glm::ivec2 searchAxis(dir.x == 0, dir.y == 0);
|
||||||
|
|
||||||
// Logic to handle entries that span several cells.
|
// Logic to handle entries that span several cells.
|
||||||
|
@ -325,7 +326,7 @@ bool ComponentGrid::moveCursor(glm::ivec2 dir) {
|
||||||
while (mCursor.x >= 0 && mCursor.y >= 0 && mCursor.x < mGridSize.x && mCursor.y < mGridSize.y) {
|
while (mCursor.x >= 0 && mCursor.y >= 0 && mCursor.x < mGridSize.x && mCursor.y < mGridSize.y) {
|
||||||
mCursor = mCursor + dir;
|
mCursor = mCursor + dir;
|
||||||
glm::ivec2 curDirPos{mCursor};
|
glm::ivec2 curDirPos{mCursor};
|
||||||
const GridEntry *cursorEntry;
|
const GridEntry* cursorEntry;
|
||||||
|
|
||||||
// Spread out on search axis+
|
// Spread out on search axis+
|
||||||
while (mCursor.x < mGridSize.x && mCursor.y < mGridSize.y && mCursor.x >= 0 &&
|
while (mCursor.x < mGridSize.x && mCursor.y < mGridSize.y && mCursor.x >= 0 &&
|
||||||
|
@ -367,7 +368,8 @@ bool ComponentGrid::moveCursor(glm::ivec2 dir) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComponentGrid::moveCursorTo(int xPos, int yPos, bool selectLeftCell) {
|
void ComponentGrid::moveCursorTo(int xPos, int yPos, bool selectLeftCell)
|
||||||
|
{
|
||||||
const glm::ivec2 origCursor{mCursor};
|
const glm::ivec2 origCursor{mCursor};
|
||||||
|
|
||||||
if (xPos != -1)
|
if (xPos != -1)
|
||||||
|
@ -375,7 +377,7 @@ void ComponentGrid::moveCursorTo(int xPos, int yPos, bool selectLeftCell) {
|
||||||
if (yPos != -1)
|
if (yPos != -1)
|
||||||
mCursor.y = yPos;
|
mCursor.y = yPos;
|
||||||
|
|
||||||
const GridEntry *currentCursorEntry = getCellAt(mCursor);
|
const GridEntry* currentCursorEntry = getCellAt(mCursor);
|
||||||
|
|
||||||
// If requested, select the leftmost cell of entries wider than 1 cell.
|
// If requested, select the leftmost cell of entries wider than 1 cell.
|
||||||
if (selectLeftCell && mCursor.x > currentCursorEntry->pos.x)
|
if (selectLeftCell && mCursor.x > currentCursorEntry->pos.x)
|
||||||
|
@ -384,14 +386,16 @@ void ComponentGrid::moveCursorTo(int xPos, int yPos, bool selectLeftCell) {
|
||||||
onCursorMoved(origCursor, mCursor);
|
onCursorMoved(origCursor, mCursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComponentGrid::onFocusLost() {
|
void ComponentGrid::onFocusLost()
|
||||||
const GridEntry *cursorEntry = getCellAt(mCursor);
|
{
|
||||||
|
const GridEntry* cursorEntry = getCellAt(mCursor);
|
||||||
if (cursorEntry)
|
if (cursorEntry)
|
||||||
cursorEntry->component->onFocusLost();
|
cursorEntry->component->onFocusLost();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComponentGrid::onFocusGained() {
|
void ComponentGrid::onFocusGained()
|
||||||
const GridEntry *cursorEntry = getCellAt(mCursor);
|
{
|
||||||
|
const GridEntry* cursorEntry = getCellAt(mCursor);
|
||||||
if (cursorEntry)
|
if (cursorEntry)
|
||||||
cursorEntry->component->onFocusGained();
|
cursorEntry->component->onFocusGained();
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,60 +30,53 @@ namespace GridFlags
|
||||||
} // namespace GridFlags
|
} // namespace GridFlags
|
||||||
|
|
||||||
// Provides basic layout of components in an X*Y grid.
|
// Provides basic layout of components in an X*Y grid.
|
||||||
class ComponentGrid : public GuiComponent {
|
class ComponentGrid : public GuiComponent
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
ComponentGrid(Window *window, const glm::ivec2 &gridDimensions);
|
ComponentGrid(Window* window, const glm::ivec2& gridDimensions);
|
||||||
|
|
||||||
virtual ~ComponentGrid();
|
virtual ~ComponentGrid();
|
||||||
|
|
||||||
bool removeEntry(const std::shared_ptr<GuiComponent> &comp);
|
bool removeEntry(const std::shared_ptr<GuiComponent>& comp);
|
||||||
|
|
||||||
void setEntry(const std::shared_ptr<GuiComponent> &comp,
|
void setEntry(const std::shared_ptr<GuiComponent>& comp,
|
||||||
const glm::ivec2 &pos,
|
const glm::ivec2& pos,
|
||||||
bool canFocus,
|
bool canFocus,
|
||||||
bool resize = true,
|
bool resize = true,
|
||||||
const glm::ivec2 &size = glm::ivec2{1, 1},
|
const glm::ivec2& size = glm::ivec2{1, 1},
|
||||||
unsigned int border = GridFlags::BORDER_NONE,
|
unsigned int border = GridFlags::BORDER_NONE,
|
||||||
GridFlags::UpdateType updateType = GridFlags::UPDATE_ALWAYS);
|
GridFlags::UpdateType updateType = GridFlags::UPDATE_ALWAYS);
|
||||||
|
|
||||||
void setPastBoundaryCallback(const std::function<bool(InputConfig *config, Input input)> &func) {
|
void setPastBoundaryCallback(const std::function<bool(InputConfig* config, Input input)>& func)
|
||||||
|
{
|
||||||
mPastBoundaryCallback = func;
|
mPastBoundaryCallback = func;
|
||||||
}
|
}
|
||||||
|
|
||||||
void textInput(const std::string &text) override;
|
void textInput(const std::string& text) override;
|
||||||
|
bool input(InputConfig* config, Input input) override;
|
||||||
bool input(InputConfig *config, Input input) override;
|
|
||||||
|
|
||||||
void update(int deltaTime) override;
|
void update(int deltaTime) override;
|
||||||
|
void render(const glm::mat4& parentTrans) override;
|
||||||
void render(const glm::mat4 &parentTrans) override;
|
|
||||||
|
|
||||||
void onSizeChanged() override;
|
void onSizeChanged() override;
|
||||||
|
|
||||||
void resetCursor();
|
void resetCursor();
|
||||||
|
|
||||||
bool cursorValid();
|
bool cursorValid();
|
||||||
|
|
||||||
float getColWidth(int col);
|
float getColWidth(int col);
|
||||||
|
|
||||||
float getRowHeight(int row);
|
float getRowHeight(int row);
|
||||||
|
|
||||||
// If update is false, will not call an onSizeChanged() which triggers
|
// If update is false, will not call an onSizeChanged() which triggers
|
||||||
// a (potentially costly) repositioning + resizing of every element.
|
// a (potentially costly) repositioning + resizing of every element.
|
||||||
void setColWidthPerc(int col, float width, bool update = true);
|
void setColWidthPerc(int col, float width, bool update = true);
|
||||||
|
|
||||||
// Dito.
|
// Dito.
|
||||||
void setRowHeightPerc(int row, float height, bool update = true);
|
void setRowHeightPerc(int row, float height, bool update = true);
|
||||||
|
|
||||||
bool moveCursor(glm::ivec2 dir);
|
bool moveCursor(glm::ivec2 dir);
|
||||||
|
|
||||||
// Pass -1 for xPos or yPos to keep its axis cursor position.
|
// Pass -1 for xPos or yPos to keep its axis cursor position.
|
||||||
void moveCursorTo(int xPos, int yPos, bool selectLeftCell = false);
|
void moveCursorTo(int xPos, int yPos, bool selectLeftCell = false);
|
||||||
|
void setCursorTo(const std::shared_ptr<GuiComponent>& comp);
|
||||||
|
|
||||||
void setCursorTo(const std::shared_ptr<GuiComponent> &comp);
|
std::shared_ptr<GuiComponent> getSelectedComponent()
|
||||||
|
{
|
||||||
std::shared_ptr<GuiComponent> getSelectedComponent() {
|
const GridEntry* e = getCellAt(mCursor);
|
||||||
const GridEntry *e = getCellAt(mCursor);
|
|
||||||
if (e)
|
if (e)
|
||||||
return e->component;
|
return e->component;
|
||||||
else
|
else
|
||||||
|
@ -91,7 +84,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void onFocusLost() override;
|
void onFocusLost() override;
|
||||||
|
|
||||||
void onFocusGained() override;
|
void onFocusGained() override;
|
||||||
|
|
||||||
virtual std::vector<HelpPrompt> getHelpPrompts() override;
|
virtual std::vector<HelpPrompt> getHelpPrompts() override;
|
||||||
|
@ -129,25 +121,22 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
// Update position and size.
|
// Update position and size.
|
||||||
void updateCellComponent(const GridEntry &cell);
|
void updateCellComponent(const GridEntry& cell);
|
||||||
|
|
||||||
void updateSeparators();
|
void updateSeparators();
|
||||||
|
|
||||||
void onCursorMoved(glm::ivec2 from, glm::ivec2 to);
|
void onCursorMoved(glm::ivec2 from, glm::ivec2 to);
|
||||||
|
const GridEntry* getCellAt(int x, int y) const;
|
||||||
const GridEntry *getCellAt(int x, int y) const;
|
const GridEntry* getCellAt(const glm::ivec2& pos) const { return getCellAt(pos.x, pos.y); }
|
||||||
|
|
||||||
const GridEntry *getCellAt(const glm::ivec2 &pos) const { return getCellAt(pos.x, pos.y); }
|
|
||||||
|
|
||||||
std::vector<std::vector<float>> mSeparators;
|
std::vector<std::vector<float>> mSeparators;
|
||||||
glm::ivec2 mGridSize;
|
glm::ivec2 mGridSize;
|
||||||
std::vector<GridEntry> mCells;
|
std::vector<GridEntry> mCells;
|
||||||
glm::ivec2 mCursor;
|
glm::ivec2 mCursor;
|
||||||
|
|
||||||
std::function<bool(InputConfig *config, Input input)> mPastBoundaryCallback;
|
std::function<bool(InputConfig* config, Input input)> mPastBoundaryCallback;
|
||||||
|
|
||||||
float *mRowHeights;
|
float* mRowHeights;
|
||||||
float *mColWidths;
|
float* mColWidths;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ES_CORE_COMPONENTS_COMPONENT_GRID_H
|
#endif // ES_CORE_COMPONENTS_COMPONENT_GRID_H
|
||||||
|
|
|
@ -71,10 +71,11 @@ bool ComponentList::input(InputConfig* config, Input input)
|
||||||
if (mEntries.at(mCursor).data.input_handler) {
|
if (mEntries.at(mCursor).data.input_handler) {
|
||||||
if (mEntries.at(mCursor).data.input_handler(config, input))
|
if (mEntries.at(mCursor).data.input_handler(config, input))
|
||||||
return true;
|
return true;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
// No input handler assigned, do the default, which is to give it
|
// No input handler assigned, do the default, which is to give it
|
||||||
// to the rightmost element in the row.
|
// to the rightmost element in the row.
|
||||||
auto &row = mEntries.at(mCursor).data;
|
auto& row = mEntries.at(mCursor).data;
|
||||||
if (row.elements.size()) {
|
if (row.elements.size()) {
|
||||||
if (row.elements.back().component->input(config, input))
|
if (row.elements.back().component->input(config, input))
|
||||||
return true;
|
return true;
|
||||||
|
@ -196,7 +197,7 @@ void ComponentList::render(const glm::mat4& parentTrans)
|
||||||
std::vector<GuiComponent*> drawAfterCursor;
|
std::vector<GuiComponent*> drawAfterCursor;
|
||||||
bool drawAll;
|
bool drawAll;
|
||||||
for (size_t i = 0; i < mEntries.size(); i++) {
|
for (size_t i = 0; i < mEntries.size(); i++) {
|
||||||
auto &entry = mEntries.at(i);
|
auto& entry = mEntries.at(i);
|
||||||
drawAll = !mFocused || i != static_cast<unsigned int>(mCursor);
|
drawAll = !mFocused || i != static_cast<unsigned int>(mCursor);
|
||||||
for (auto it = entry.data.elements.cbegin(); it != entry.data.elements.cend(); it++) {
|
for (auto it = entry.data.elements.cbegin(); it != entry.data.elements.cend(); it++) {
|
||||||
if (drawAll || it->invert_when_selected) {
|
if (drawAll || it->invert_when_selected) {
|
||||||
|
|
|
@ -12,10 +12,17 @@
|
||||||
#include "resources/Font.h"
|
#include "resources/Font.h"
|
||||||
#include "utils/StringUtil.h"
|
#include "utils/StringUtil.h"
|
||||||
|
|
||||||
DateTimeEditComponent::DateTimeEditComponent(Window *window, bool alignRight, DisplayMode dispMode)
|
DateTimeEditComponent::DateTimeEditComponent(Window* window, bool alignRight, DisplayMode dispMode)
|
||||||
: GuiComponent(window), mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0),
|
: GuiComponent(window)
|
||||||
mColor(0x777777FF), mFont(Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT)), mAlignRight(alignRight),
|
, mEditing(false)
|
||||||
mUppercase(false), mAutoSize(true)
|
, mEditIndex(0)
|
||||||
|
, mDisplayMode(dispMode)
|
||||||
|
, mRelativeUpdateAccumulator(0)
|
||||||
|
, mColor(0x777777FF)
|
||||||
|
, mFont(Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT))
|
||||||
|
, mAlignRight(alignRight)
|
||||||
|
, mUppercase(false)
|
||||||
|
, mAutoSize(true)
|
||||||
{
|
{
|
||||||
updateTextCache();
|
updateTextCache();
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "components/FlexboxComponent.h"
|
#include "components/FlexboxComponent.h"
|
||||||
#include <numeric>
|
|
||||||
|
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
#include "ThemeData.h"
|
#include "ThemeData.h"
|
||||||
#include "resources/TextureResource.h"
|
#include "resources/TextureResource.h"
|
||||||
|
@ -19,50 +17,13 @@ FlexboxComponent::FlexboxComponent(Window* window)
|
||||||
, mDirection(DEFAULT_DIRECTION)
|
, mDirection(DEFAULT_DIRECTION)
|
||||||
, mAlign(DEFAULT_ALIGN)
|
, mAlign(DEFAULT_ALIGN)
|
||||||
, mItemsPerLine(DEFAULT_ITEMS_PER_LINE)
|
, mItemsPerLine(DEFAULT_ITEMS_PER_LINE)
|
||||||
, mItemWidth(DEFAULT_ITEM_SIZE_X)
|
, mLines(DEFAULT_LINES)
|
||||||
|
, mItemMargin({DEFAULT_MARGIN_X, DEFAULT_MARGIN_Y})
|
||||||
|
, mLayoutValid(false)
|
||||||
{
|
{
|
||||||
// Initialize item margins.
|
|
||||||
mItemMargin = glm::vec2{DEFAULT_MARGIN_X, DEFAULT_MARGIN_Y};
|
|
||||||
|
|
||||||
// Layout validity
|
|
||||||
mLayoutValid = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Getters/Setters for rendering options.
|
void FlexboxComponent::onSizeChanged() { mLayoutValid = false; }
|
||||||
void FlexboxComponent::setDirection(std::string value)
|
|
||||||
{
|
|
||||||
mDirection = value;
|
|
||||||
mLayoutValid = false;
|
|
||||||
}
|
|
||||||
std::string FlexboxComponent::getDirection() { return mDirection; }
|
|
||||||
void FlexboxComponent::setAlign(std::string value)
|
|
||||||
{
|
|
||||||
mAlign = value;
|
|
||||||
mLayoutValid = false;
|
|
||||||
}
|
|
||||||
std::string FlexboxComponent::getAlign() { return mAlign; }
|
|
||||||
void FlexboxComponent::setItemsPerLine(unsigned int value)
|
|
||||||
{
|
|
||||||
mItemsPerLine = value;
|
|
||||||
mLayoutValid = false;
|
|
||||||
}
|
|
||||||
unsigned int FlexboxComponent::getItemsPerLine() { return mItemsPerLine; }
|
|
||||||
void FlexboxComponent::setItemMargin(glm::vec2 value)
|
|
||||||
{
|
|
||||||
mItemMargin = value;
|
|
||||||
mLayoutValid = false;
|
|
||||||
}
|
|
||||||
glm::vec2 FlexboxComponent::getItemMargin() { return mItemMargin; }
|
|
||||||
void FlexboxComponent::setItemWidth(float value)
|
|
||||||
{
|
|
||||||
mItemWidth = value;
|
|
||||||
mLayoutValid = false;
|
|
||||||
}
|
|
||||||
float FlexboxComponent::getItemWidth() { return mItemWidth; }
|
|
||||||
|
|
||||||
void FlexboxComponent::onSizeChanged() {
|
|
||||||
mLayoutValid = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void FlexboxComponent::computeLayout()
|
void FlexboxComponent::computeLayout()
|
||||||
{
|
{
|
||||||
|
@ -73,94 +34,91 @@ void FlexboxComponent::computeLayout()
|
||||||
float anchorOriginY = 0;
|
float anchorOriginY = 0;
|
||||||
|
|
||||||
// Translation directions when placing items.
|
// Translation directions when placing items.
|
||||||
glm::vec2 directionLine = {1, 0};
|
glm::ivec2 directionLine = {1, 0};
|
||||||
glm::vec2 directionRow = {0, 1};
|
glm::ivec2 directionRow = {0, 1};
|
||||||
|
|
||||||
// Change direction.
|
// Change direction.
|
||||||
if (mDirection == DIRECTION_COLUMN) {
|
if (mDirection == Direction::column) {
|
||||||
directionLine = {0, 1};
|
directionLine = {0, 1};
|
||||||
directionRow = {1, 0};
|
directionRow = {1, 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set children sizes.
|
// Compute children maximal dimensions.
|
||||||
glm::vec2 maxItemSize = {0.0f, 0.0f};
|
glm::vec2 grid;
|
||||||
|
if (mDirection == Direction::row)
|
||||||
|
grid = {mItemsPerLine, mLines};
|
||||||
|
else
|
||||||
|
grid = {mLines, mItemsPerLine};
|
||||||
|
glm::vec2 maxItemSize = (mSize + mItemMargin - grid * mItemMargin) / grid;
|
||||||
|
|
||||||
|
// Set final children dimensions.
|
||||||
for (auto i : mChildren) {
|
for (auto i : mChildren) {
|
||||||
auto oldSize = i->getSize();
|
auto oldSize = i->getSize();
|
||||||
if (oldSize.x == 0)
|
if (oldSize.x == 0)
|
||||||
oldSize.x = DEFAULT_ITEM_SIZE_X;
|
oldSize.x = maxItemSize.x;
|
||||||
glm::vec2 newSize = {mItemWidth, oldSize.y * (mItemWidth / oldSize.x)};
|
glm::vec2 sizeMaxX = {maxItemSize.x, oldSize.y * (maxItemSize.x / oldSize.x)};
|
||||||
|
glm::vec2 sizeMaxY = {oldSize.x * (maxItemSize.y / oldSize.y), maxItemSize.y};
|
||||||
|
glm::vec2 newSize;
|
||||||
|
if (sizeMaxX.y > maxItemSize.y)
|
||||||
|
newSize = sizeMaxY;
|
||||||
|
else if (sizeMaxY.x > maxItemSize.x)
|
||||||
|
newSize = sizeMaxX;
|
||||||
|
else
|
||||||
|
newSize = sizeMaxX.x * sizeMaxX.y >= sizeMaxY.x * sizeMaxY.y ? sizeMaxX : sizeMaxY;
|
||||||
i->setSize(newSize);
|
i->setSize(newSize);
|
||||||
maxItemSize = {std::max(maxItemSize.x, newSize.x), std::max(maxItemSize.y, newSize.y)};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pre-compute layout parameters.
|
// Pre-compute layout parameters.
|
||||||
int n = mChildren.size();
|
float lineWidth = (mDirection == Direction::row ? (maxItemSize.y + mItemMargin.y) :
|
||||||
int nLines = std::max(1, (int) std::ceil(n / std::max(1, (int) mItemsPerLine)));
|
(maxItemSize.x + mItemMargin.x));
|
||||||
float lineWidth =
|
|
||||||
(mDirection == "row" ? (maxItemSize.y + mItemMargin.y) : (maxItemSize.x + mItemMargin.x));
|
|
||||||
float anchorXStart = anchorX;
|
float anchorXStart = anchorX;
|
||||||
float anchorYStart = anchorY;
|
float anchorYStart = anchorY;
|
||||||
|
|
||||||
// Compute total container size.
|
|
||||||
glm::vec2 totalSize = {-mItemMargin.x, -mItemMargin.y};
|
|
||||||
if (mDirection == "row") {
|
|
||||||
totalSize.x += (mItemMargin.x + mItemWidth) * mItemsPerLine;
|
|
||||||
totalSize.y += (mItemMargin.y + maxItemSize.y) * nLines;
|
|
||||||
} else {
|
|
||||||
totalSize.x += (mItemMargin.x + mItemWidth) * nLines;
|
|
||||||
totalSize.y += (mItemMargin.y + maxItemSize.y) * mItemsPerLine;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Iterate through the children.
|
// Iterate through the children.
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < static_cast<int>(mChildren.size()); i++) {
|
||||||
GuiComponent *child = mChildren[i];
|
GuiComponent* child = mChildren[i];
|
||||||
auto size = child->getSize();
|
auto size = child->getSize();
|
||||||
|
|
||||||
// Top-left anchor position.
|
// Top-left anchor position.
|
||||||
float x = anchorX - anchorOriginX * size.x;
|
float x = anchorX - anchorOriginX * size.x;
|
||||||
float y = anchorY - anchorOriginY * size.y;
|
float y = anchorY - anchorOriginY * size.y;
|
||||||
|
|
||||||
// Apply item margin.
|
|
||||||
/*if ((mDirection == "row" && i % std::max(1, (int) mItemsPerLine) != 0) ||
|
|
||||||
(mDirection == "column" && i >= (int) mItemsPerLine))
|
|
||||||
x += mItemMargin.x * (directionLine.x >= 0.0f ? 1.0f : -1.0f);
|
|
||||||
if ((mDirection == "column" && i % std::max(1, (int) mItemsPerLine) != 0) ||
|
|
||||||
(mDirection == "row" && i >= (int) mItemsPerLine))
|
|
||||||
y += mItemMargin.y * (directionLine.y >= 0.0f ? 1.0f : -1.0f);*/
|
|
||||||
|
|
||||||
// Apply alignment
|
// Apply alignment
|
||||||
if (mAlign == ITEM_ALIGN_END) {
|
if (mAlign == Align::end) {
|
||||||
x += directionLine.x == 0 ? (maxItemSize.x - size.x) : 0;
|
x += directionLine.x == 0 ? (maxItemSize.x - size.x) : 0;
|
||||||
y += directionLine.y == 0 ? (maxItemSize.y - size.y) : 0;
|
y += directionLine.y == 0 ? (maxItemSize.y - size.y) : 0;
|
||||||
} else if (mAlign == ITEM_ALIGN_CENTER) {
|
}
|
||||||
|
else if (mAlign == Align::center) {
|
||||||
x += directionLine.x == 0 ? (maxItemSize.x - size.x) / 2 : 0;
|
x += directionLine.x == 0 ? (maxItemSize.x - size.x) / 2 : 0;
|
||||||
y += directionLine.y == 0 ? (maxItemSize.y - size.y) / 2 : 0;
|
y += directionLine.y == 0 ? (maxItemSize.y - size.y) / 2 : 0;
|
||||||
} else if (mAlign == ITEM_ALIGN_STRETCH && mDirection == "row") {
|
}
|
||||||
|
else if (mAlign == Align::stretch && mDirection == Direction::row) {
|
||||||
child->setSize(child->getSize().x, maxItemSize.y);
|
child->setSize(child->getSize().x, maxItemSize.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply origin.
|
// Apply origin.
|
||||||
if (mOrigin.x > 0 && mOrigin.x <= 1)
|
if (mOrigin.x > 0 && mOrigin.x <= 1)
|
||||||
x -= mOrigin.x * totalSize.x;
|
x -= mOrigin.x * mSize.x;
|
||||||
if (mOrigin.y > 0 && mOrigin.y <= 1)
|
if (mOrigin.y > 0 && mOrigin.y <= 1)
|
||||||
y -= mOrigin.y * totalSize.y;
|
y -= mOrigin.y * mSize.y;
|
||||||
|
|
||||||
// Store final item position.
|
// Store final item position.
|
||||||
child->setPosition(getPosition().x + x, getPosition().y + y);
|
child->setPosition(getPosition().x + x, getPosition().y + y);
|
||||||
|
|
||||||
// Translate anchor.
|
// Translate anchor.
|
||||||
if ((i + 1) % std::max(1, (int) mItemsPerLine) != 0) {
|
if ((i + 1) % std::max(1, static_cast<int>(mItemsPerLine)) != 0) {
|
||||||
// Translate on same line.
|
// Translate on same line.
|
||||||
anchorX += (size.x + mItemMargin.x) * directionLine.x;
|
anchorX += (size.x + mItemMargin.x) * static_cast<float>(directionLine.x);
|
||||||
anchorY += (size.y + mItemMargin.y) * directionLine.y;
|
anchorY += (size.y + mItemMargin.y) * static_cast<float>(directionLine.y);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Translate to first position of next line.
|
// Translate to first position of next line.
|
||||||
if (directionRow.x == 0) {
|
if (directionRow.x == 0) {
|
||||||
anchorY += lineWidth * directionRow.y;
|
anchorY += lineWidth * static_cast<float>(directionRow.y);
|
||||||
anchorX = anchorXStart;
|
anchorX = anchorXStart;
|
||||||
} else {
|
}
|
||||||
anchorX += lineWidth * directionRow.x;
|
else {
|
||||||
|
anchorX += lineWidth * static_cast<float>(directionRow.x);
|
||||||
anchorY = anchorYStart;
|
anchorY = anchorYStart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -169,7 +127,8 @@ void FlexboxComponent::computeLayout()
|
||||||
mLayoutValid = true;
|
mLayoutValid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlexboxComponent::render(const glm::mat4& parentTrans) {
|
void FlexboxComponent::render(const glm::mat4& parentTrans)
|
||||||
|
{
|
||||||
if (!isVisible())
|
if (!isVisible())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -196,19 +155,24 @@ void FlexboxComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (properties & DIRECTION && elem->has("direction"))
|
if (properties & DIRECTION && elem->has("direction"))
|
||||||
mDirection = elem->get<std::string>("direction");
|
mDirection =
|
||||||
|
elem->get<std::string>("direction") == "row" ? Direction::row : Direction::column;
|
||||||
|
|
||||||
if (elem->has("align"))
|
if (elem->has("align")) {
|
||||||
mAlign = elem->get<std::string>("align");
|
const auto a = elem->get<std::string>("align");
|
||||||
|
mAlign = (a == "start" ?
|
||||||
|
Align::start :
|
||||||
|
(a == "end" ? Align::end : (a == "center" ? Align::center : Align::stretch)));
|
||||||
|
}
|
||||||
|
|
||||||
if (elem->has("itemsPerLine"))
|
if (elem->has("itemsPerLine"))
|
||||||
mItemsPerLine = elem->get<float>("itemsPerLine");
|
mItemsPerLine = elem->get<float>("itemsPerLine");
|
||||||
|
|
||||||
if (elem->has("itemMargin"))
|
if (elem->has("lines"))
|
||||||
mItemMargin = elem->get<glm::vec2>("itemMargin");
|
mLines = elem->get<float>("lines");
|
||||||
|
|
||||||
if (elem->has("itemWidth"))
|
if (elem->has("itemMargin"))
|
||||||
mItemWidth = elem->get<float>("itemWidth") * scale.x;
|
mItemMargin = elem->get<glm::vec2>("itemMargin") * scale;
|
||||||
|
|
||||||
GuiComponent::applyTheme(theme, view, element, properties);
|
GuiComponent::applyTheme(theme, view, element, properties);
|
||||||
|
|
||||||
|
|
|
@ -7,66 +7,73 @@
|
||||||
// Used by gamelist views.
|
// Used by gamelist views.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef ES_APP_COMPONENTS_FLEXBOX_COMPONENT_H
|
#ifndef ES_CORE_COMPONENTS_FLEXBOX_COMPONENT_H
|
||||||
#define ES_APP_COMPONENTS_FLEXBOX_COMPONENT_H
|
#define ES_CORE_COMPONENTS_FLEXBOX_COMPONENT_H
|
||||||
|
|
||||||
#include "GuiComponent.h"
|
#include "GuiComponent.h"
|
||||||
#include "renderers/Renderer.h"
|
#include "renderers/Renderer.h"
|
||||||
|
|
||||||
// Definitions for the option values.
|
|
||||||
#define DIRECTION_ROW "row"
|
|
||||||
#define DIRECTION_COLUMN "column"
|
|
||||||
#define ITEM_ALIGN_START "start"
|
|
||||||
#define ITEM_ALIGN_END "end"
|
|
||||||
#define ITEM_ALIGN_CENTER "center"
|
|
||||||
#define ITEM_ALIGN_STRETCH "stretch"
|
|
||||||
|
|
||||||
// Default values.
|
// Default values.
|
||||||
#define DEFAULT_DIRECTION DIRECTION_ROW
|
#define DEFAULT_DIRECTION Direction::row
|
||||||
#define DEFAULT_ALIGN ITEM_ALIGN_CENTER
|
#define DEFAULT_ALIGN Align::center
|
||||||
#define DEFAULT_ITEMS_PER_LINE 4
|
#define DEFAULT_ITEMS_PER_LINE 4
|
||||||
|
#define DEFAULT_LINES 1
|
||||||
#define DEFAULT_MARGIN_X 10.0f
|
#define DEFAULT_MARGIN_X 10.0f
|
||||||
#define DEFAULT_MARGIN_Y 10.0f
|
#define DEFAULT_MARGIN_Y 10.0f
|
||||||
#define DEFAULT_ITEM_SIZE_X 64.0f
|
|
||||||
|
|
||||||
class TextureResource;
|
|
||||||
|
|
||||||
class FlexboxComponent : public GuiComponent
|
class FlexboxComponent : public GuiComponent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FlexboxComponent(Window* window);
|
enum class Direction : char { row, column };
|
||||||
|
enum class Align : char { start, end, center, stretch };
|
||||||
|
|
||||||
|
explicit FlexboxComponent(Window* window);
|
||||||
|
|
||||||
// Getters/Setters for rendering options.
|
// Getters/Setters for rendering options.
|
||||||
void setDirection(std::string value);
|
[[nodiscard]] Align getAlign() const { return mAlign; };
|
||||||
std::string getDirection();
|
void setAlign(Align value)
|
||||||
void setAlign(std::string value);
|
{
|
||||||
std::string getAlign();
|
mAlign = value;
|
||||||
void setItemsPerLine(unsigned int value);
|
mLayoutValid = false;
|
||||||
unsigned int getItemsPerLine();
|
};
|
||||||
void setItemMargin(glm::vec2 value);
|
[[nodiscard]] unsigned int getItemsPerLine() const { return mItemsPerLine; };
|
||||||
glm::vec2 getItemMargin();
|
void setItemsPerLine(unsigned int value)
|
||||||
void setItemWidth(float value);
|
{
|
||||||
float getItemWidth();
|
mItemsPerLine = value;
|
||||||
|
mLayoutValid = false;
|
||||||
|
};
|
||||||
|
[[nodiscard]] unsigned int getLines() const { return mLines; };
|
||||||
|
void setLines(unsigned int value)
|
||||||
|
{
|
||||||
|
mLines = value;
|
||||||
|
mLayoutValid = false;
|
||||||
|
};
|
||||||
|
[[nodiscard]] glm::vec2 getItemMargin() const { return mItemMargin; };
|
||||||
|
void setItemMargin(glm::vec2 value)
|
||||||
|
{
|
||||||
|
mItemMargin = value;
|
||||||
|
mLayoutValid = false;
|
||||||
|
};
|
||||||
|
|
||||||
void onSizeChanged() override;
|
void onSizeChanged() override;
|
||||||
void render(const glm::mat4& parentTrans) override;
|
void render(const glm::mat4& parentTrans) override;
|
||||||
virtual void applyTheme(const std::shared_ptr<ThemeData>& theme,
|
void applyTheme(const std::shared_ptr<ThemeData>& theme,
|
||||||
const std::string& view,
|
const std::string& view,
|
||||||
const std::string& element,
|
const std::string& element,
|
||||||
unsigned int properties) override;
|
unsigned int properties) override;
|
||||||
virtual std::vector<HelpPrompt> getHelpPrompts() override;
|
std::vector<HelpPrompt> getHelpPrompts() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Calculate flexbox layout.
|
// Calculate flexbox layout.
|
||||||
void computeLayout();
|
void computeLayout();
|
||||||
|
|
||||||
// Rendering options.
|
// Rendering options.
|
||||||
std::string mDirection;
|
Direction mDirection;
|
||||||
std::string mAlign;
|
Align mAlign;
|
||||||
unsigned int mItemsPerLine;
|
unsigned int mItemsPerLine;
|
||||||
|
unsigned int mLines;
|
||||||
glm::vec2 mItemMargin;
|
glm::vec2 mItemMargin;
|
||||||
float mItemWidth;
|
|
||||||
bool mLayoutValid;
|
bool mLayoutValid;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ES_APP_COMPONENTS_FLEXBOX_COMPONENT_H
|
#endif // ES_CORE_COMPONENTS_FLEXBOX_COMPONENT_H
|
||||||
|
|
|
@ -37,36 +37,36 @@ void HelpComponent::assignIcons()
|
||||||
":/help/dpad_updown.svg" :
|
":/help/dpad_updown.svg" :
|
||||||
mStyle.mCustomButtons.dpad_updown;
|
mStyle.mCustomButtons.dpad_updown;
|
||||||
sIconPathMap["left/right"] = mStyle.mCustomButtons.dpad_leftright.empty() ?
|
sIconPathMap["left/right"] = mStyle.mCustomButtons.dpad_leftright.empty() ?
|
||||||
":/help/dpad_leftright.svg" :
|
":/help/dpad_leftright.svg" :
|
||||||
mStyle.mCustomButtons.dpad_leftright;
|
mStyle.mCustomButtons.dpad_leftright;
|
||||||
sIconPathMap["up/down/left/right"] = mStyle.mCustomButtons.dpad_all.empty() ?
|
sIconPathMap["up/down/left/right"] = mStyle.mCustomButtons.dpad_all.empty() ?
|
||||||
":/help/dpad_all.svg" :
|
":/help/dpad_all.svg" :
|
||||||
mStyle.mCustomButtons.dpad_all;
|
mStyle.mCustomButtons.dpad_all;
|
||||||
sIconPathMap["thumbstickclick"] = mStyle.mCustomButtons.thumbstick_click.empty() ?
|
sIconPathMap["thumbstickclick"] = mStyle.mCustomButtons.thumbstick_click.empty() ?
|
||||||
":/help/thumbstick_click.svg" :
|
":/help/thumbstick_click.svg" :
|
||||||
mStyle.mCustomButtons.thumbstick_click;
|
mStyle.mCustomButtons.thumbstick_click;
|
||||||
sIconPathMap["l"] = mStyle.mCustomButtons.button_l.empty() ? ":/help/button_l.svg" :
|
sIconPathMap["l"] = mStyle.mCustomButtons.button_l.empty() ? ":/help/button_l.svg" :
|
||||||
mStyle.mCustomButtons.button_l;
|
mStyle.mCustomButtons.button_l;
|
||||||
sIconPathMap["r"] = mStyle.mCustomButtons.button_r.empty() ? ":/help/button_r.svg" :
|
sIconPathMap["r"] = mStyle.mCustomButtons.button_r.empty() ? ":/help/button_r.svg" :
|
||||||
mStyle.mCustomButtons.button_r;
|
mStyle.mCustomButtons.button_r;
|
||||||
sIconPathMap["lr"] = mStyle.mCustomButtons.button_lr.empty() ? ":/help/button_lr.svg" :
|
sIconPathMap["lr"] = mStyle.mCustomButtons.button_lr.empty() ? ":/help/button_lr.svg" :
|
||||||
mStyle.mCustomButtons.button_lr;
|
mStyle.mCustomButtons.button_lr;
|
||||||
sIconPathMap["lt"] = mStyle.mCustomButtons.button_lt.empty() ? ":/help/button_lt.svg" :
|
sIconPathMap["lt"] = mStyle.mCustomButtons.button_lt.empty() ? ":/help/button_lt.svg" :
|
||||||
mStyle.mCustomButtons.button_lt;
|
mStyle.mCustomButtons.button_lt;
|
||||||
sIconPathMap["rt"] = mStyle.mCustomButtons.button_rt.empty() ? ":/help/button_rt.svg" :
|
sIconPathMap["rt"] = mStyle.mCustomButtons.button_rt.empty() ? ":/help/button_rt.svg" :
|
||||||
mStyle.mCustomButtons.button_rt;
|
mStyle.mCustomButtons.button_rt;
|
||||||
|
|
||||||
// These graphics files are custom per controller type.
|
// These graphics files are custom per controller type.
|
||||||
if (controllerType == "snes") {
|
if (controllerType == "snes") {
|
||||||
sIconPathMap["a"] = mStyle.mCustomButtons.button_a_SNES.empty() ?
|
sIconPathMap["a"] = mStyle.mCustomButtons.button_a_SNES.empty() ?
|
||||||
":/help/button_a_SNES.svg" :
|
":/help/button_a_SNES.svg" :
|
||||||
mStyle.mCustomButtons.button_a_SNES;
|
mStyle.mCustomButtons.button_a_SNES;
|
||||||
sIconPathMap["b"] = mStyle.mCustomButtons.button_b_SNES.empty() ?
|
sIconPathMap["b"] = mStyle.mCustomButtons.button_b_SNES.empty() ?
|
||||||
":/help/button_b_SNES.svg" :
|
":/help/button_b_SNES.svg" :
|
||||||
mStyle.mCustomButtons.button_b_SNES;
|
mStyle.mCustomButtons.button_b_SNES;
|
||||||
sIconPathMap["x"] = mStyle.mCustomButtons.button_x_SNES.empty() ?
|
sIconPathMap["x"] = mStyle.mCustomButtons.button_x_SNES.empty() ?
|
||||||
":/help/button_x_SNES.svg" :
|
":/help/button_x_SNES.svg" :
|
||||||
mStyle.mCustomButtons.button_x_SNES;
|
mStyle.mCustomButtons.button_x_SNES;
|
||||||
sIconPathMap["y"] = mStyle.mCustomButtons.button_y_SNES.empty() ?
|
sIconPathMap["y"] = mStyle.mCustomButtons.button_y_SNES.empty() ?
|
||||||
":/help/button_y_SNES.svg" :
|
":/help/button_y_SNES.svg" :
|
||||||
mStyle.mCustomButtons.button_y_SNES;
|
mStyle.mCustomButtons.button_y_SNES;
|
||||||
|
@ -218,7 +218,7 @@ void HelpComponent::updateGrid()
|
||||||
|
|
||||||
for (auto it = mPrompts.cbegin(); it != mPrompts.cend(); it++) {
|
for (auto it = mPrompts.cbegin(); it != mPrompts.cend(); it++) {
|
||||||
auto icon = std::make_shared<ImageComponent>(mWindow);
|
auto icon = std::make_shared<ImageComponent>(mWindow);
|
||||||
icon->setImage(getIconTexture(it->first.c_str()));
|
icon->setImage(getIconTexture(it->first.c_str()), false);
|
||||||
icon->setColorShift(isDimmed ? mStyle.iconColorDimmed : mStyle.iconColor);
|
icon->setColorShift(isDimmed ? mStyle.iconColorDimmed : mStyle.iconColor);
|
||||||
icon->setResize(0, height);
|
icon->setResize(0, height);
|
||||||
icons.push_back(icon);
|
icons.push_back(icon);
|
||||||
|
|
|
@ -27,11 +27,23 @@ glm::vec2 ImageComponent::getSize() const
|
||||||
return GuiComponent::getSize() * (mBottomRightCrop - mTopLeftCrop);
|
return GuiComponent::getSize() * (mBottomRightCrop - mTopLeftCrop);
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageComponent::ImageComponent(Window *window, bool forceLoad, bool dynamic)
|
ImageComponent::ImageComponent(Window* window, bool forceLoad, bool dynamic)
|
||||||
: GuiComponent(window), mTargetSize({}), mFlipX(false), mFlipY(false), mTargetIsMax(false), mTargetIsMin(false),
|
: GuiComponent(window)
|
||||||
mColorShift(0xFFFFFFFF), mColorShiftEnd(0xFFFFFFFF), mColorGradientHorizontal(true), mFadeOpacity(0),
|
, mTargetSize({})
|
||||||
mFading(false), mForceLoad(forceLoad), mDynamic(dynamic), mRotateByTargetSize(false), mTopLeftCrop({}),
|
, mFlipX(false)
|
||||||
mBottomRightCrop(1.0f, 1.0f)
|
, mFlipY(false)
|
||||||
|
, mTargetIsMax(false)
|
||||||
|
, mTargetIsMin(false)
|
||||||
|
, mColorShift(0xFFFFFFFF)
|
||||||
|
, mColorShiftEnd(0xFFFFFFFF)
|
||||||
|
, mColorGradientHorizontal(true)
|
||||||
|
, mFadeOpacity(0)
|
||||||
|
, mFading(false)
|
||||||
|
, mForceLoad(forceLoad)
|
||||||
|
, mDynamic(dynamic)
|
||||||
|
, mRotateByTargetSize(false)
|
||||||
|
, mTopLeftCrop({})
|
||||||
|
, mBottomRightCrop(1.0f, 1.0f)
|
||||||
{
|
{
|
||||||
updateColors();
|
updateColors();
|
||||||
}
|
}
|
||||||
|
@ -126,7 +138,8 @@ void ImageComponent::resize()
|
||||||
onSizeChanged();
|
onSizeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImageComponent::setImage(std::string path, bool tile, bool linearMagnify, bool cacheImage) {
|
void ImageComponent::setImage(std::string path, bool tile, bool linearMagnify)
|
||||||
|
{
|
||||||
// Always load bundled graphic resources statically, unless mForceLoad has been set.
|
// Always load bundled graphic resources statically, unless mForceLoad has been set.
|
||||||
// This eliminates annoying texture pop-in problems that would otherwise occur.
|
// This eliminates annoying texture pop-in problems that would otherwise occur.
|
||||||
if (!mForceLoad && (path[0] == ':') && (path[1] == '/')) {
|
if (!mForceLoad && (path[0] == ':') && (path[1] == '/')) {
|
||||||
|
@ -138,10 +151,10 @@ void ImageComponent::setImage(std::string path, bool tile, bool linearMagnify, b
|
||||||
mTexture.reset();
|
mTexture.reset();
|
||||||
else
|
else
|
||||||
mTexture =
|
mTexture =
|
||||||
TextureResource::get(mDefaultPath, tile, mForceLoad, mDynamic, linearMagnify, 1.0f, cacheImage);
|
TextureResource::get(mDefaultPath, tile, mForceLoad, mDynamic, linearMagnify);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mTexture = TextureResource::get(path, tile, mForceLoad, mDynamic, linearMagnify, 1.0f, cacheImage);
|
mTexture = TextureResource::get(path, tile, mForceLoad, mDynamic, linearMagnify);
|
||||||
}
|
}
|
||||||
|
|
||||||
resize();
|
resize();
|
||||||
|
@ -157,10 +170,11 @@ void ImageComponent::setImage(const char* data, size_t length, bool tile)
|
||||||
resize();
|
resize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImageComponent::setImage(const std::shared_ptr<TextureResource>& texture)
|
void ImageComponent::setImage(const std::shared_ptr<TextureResource>& texture, bool resizeTexture)
|
||||||
{
|
{
|
||||||
mTexture = texture;
|
mTexture = texture;
|
||||||
resize();
|
if (resizeTexture)
|
||||||
|
resize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImageComponent::setResize(float width, float height)
|
void ImageComponent::setResize(float width, float height)
|
||||||
|
|
|
@ -14,23 +14,21 @@
|
||||||
|
|
||||||
class TextureResource;
|
class TextureResource;
|
||||||
|
|
||||||
class ImageComponent : public GuiComponent {
|
class ImageComponent : public GuiComponent
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
ImageComponent(Window *window, bool forceLoad = false, bool dynamic = true);
|
ImageComponent(Window* window, bool forceLoad = false, bool dynamic = true);
|
||||||
|
virtual ~ImageComponent() {}
|
||||||
virtual ~ImageComponent() noexcept {};
|
|
||||||
|
|
||||||
void setDefaultImage(std::string path) { mDefaultPath = path; }
|
void setDefaultImage(std::string path) { mDefaultPath = path; }
|
||||||
|
|
||||||
// Loads the image at the given filepath. Will tile if tile is true (retrieves texture
|
// Loads the image at the given filepath. Will tile if tile is true (retrieves texture
|
||||||
// as tiling, creates vertices accordingly).
|
// as tiling, creates vertices accordingly).
|
||||||
void setImage(std::string path, bool tile = false, bool linearMagnify = false, bool cacheSVG = false);
|
void setImage(std::string path, bool tile = false, bool linearMagnify = false);
|
||||||
|
|
||||||
// Loads an image from memory.
|
// Loads an image from memory.
|
||||||
void setImage(const char *data, size_t length, bool tile = false);
|
void setImage(const char* data, size_t length, bool tile = false);
|
||||||
|
|
||||||
// Use an already existing texture.
|
// Use an already existing texture.
|
||||||
void setImage(const std::shared_ptr<TextureResource> &texture);
|
void setImage(const std::shared_ptr<TextureResource>& texture, bool resizeTexture = true);
|
||||||
|
|
||||||
void onSizeChanged() override { updateVertices(); }
|
void onSizeChanged() override { updateVertices(); }
|
||||||
|
|
||||||
|
|
|
@ -39,10 +39,11 @@ public:
|
||||||
|
|
||||||
void setNeedsSaving() { mNeedsSaving = true; }
|
void setNeedsSaving() { mNeedsSaving = true; }
|
||||||
|
|
||||||
void addRow(const ComponentListRow& row, bool setCursorHere = false)
|
void addRow(const ComponentListRow& row, bool setCursorHere = false, bool updateRowSize = true)
|
||||||
{
|
{
|
||||||
mList->addRow(row, setCursorHere);
|
mList->addRow(row, setCursorHere);
|
||||||
updateSize();
|
if (updateRowSize)
|
||||||
|
updateSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void addWithLabel(const std::string& label,
|
void addWithLabel(const std::string& label,
|
||||||
|
@ -65,6 +66,7 @@ public:
|
||||||
const std::function<void()>& callback);
|
const std::function<void()>& callback);
|
||||||
|
|
||||||
void setTitle(std::string title, const std::shared_ptr<Font>& font);
|
void setTitle(std::string title, const std::shared_ptr<Font>& font);
|
||||||
|
std::shared_ptr<ComponentList> getList() { return mList; }
|
||||||
|
|
||||||
void setCursorToFirstListEntry() { mList->moveCursor(-mList->getCursorId()); }
|
void setCursorToFirstListEntry() { mList->moveCursor(-mList->getCursorId()); }
|
||||||
void setCursorToList() { mGrid.setCursorTo(mList); }
|
void setCursorToList() { mGrid.setCursorTo(mList); }
|
||||||
|
|
|
@ -27,10 +27,14 @@ public:
|
||||||
OptionListComponent(Window* window,
|
OptionListComponent(Window* window,
|
||||||
const HelpStyle& helpstyle,
|
const HelpStyle& helpstyle,
|
||||||
const std::string& name,
|
const std::string& name,
|
||||||
bool multiSelect = false)
|
bool multiSelect = false,
|
||||||
|
bool multiExclusiveSelect = false,
|
||||||
|
bool multiShowTotal = false)
|
||||||
: GuiComponent(window)
|
: GuiComponent(window)
|
||||||
, mHelpStyle(helpstyle)
|
, mHelpStyle(helpstyle)
|
||||||
, mMultiSelect(multiSelect)
|
, mMultiSelect(multiSelect)
|
||||||
|
, mMultiExclusiveSelect(multiExclusiveSelect)
|
||||||
|
, mMultiShowTotal(multiShowTotal)
|
||||||
, mName(name)
|
, mName(name)
|
||||||
, mText(window)
|
, mText(window)
|
||||||
, mLeftArrow(window)
|
, mLeftArrow(window)
|
||||||
|
@ -212,6 +216,8 @@ public:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setOverrideMultiText(const std::string& text) { mOverrideMultiText = text; }
|
||||||
|
|
||||||
HelpStyle getHelpStyle() override { return mHelpStyle; }
|
HelpStyle getHelpStyle() override { return mHelpStyle; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -234,7 +240,15 @@ private:
|
||||||
if (mMultiSelect) {
|
if (mMultiSelect) {
|
||||||
// Display the selected entry.
|
// Display the selected entry.
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << getSelectedObjects().size() << " SELECTED";
|
|
||||||
|
// For special situations, allow the "selected" text to be overridden to a custom value.
|
||||||
|
if (mOverrideMultiText != "")
|
||||||
|
ss << mOverrideMultiText;
|
||||||
|
else if (mMultiShowTotal)
|
||||||
|
ss << getSelectedObjects().size() << " (OF " << mEntries.size() << ") SELECTED";
|
||||||
|
else
|
||||||
|
ss << getSelectedObjects().size() << " SELECTED";
|
||||||
|
|
||||||
mText.setText(ss.str());
|
mText.setText(ss.str());
|
||||||
mText.setSize(0, mText.getSize().y);
|
mText.setSize(0, mText.getSize().y);
|
||||||
setSize(mText.getSize().x + mRightArrow.getSize().x +
|
setSize(mText.getSize().x + mRightArrow.getSize().x +
|
||||||
|
@ -271,6 +285,9 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
bool mMultiSelect;
|
bool mMultiSelect;
|
||||||
|
bool mMultiExclusiveSelect;
|
||||||
|
bool mMultiShowTotal;
|
||||||
|
std::string mOverrideMultiText;
|
||||||
|
|
||||||
std::string mName;
|
std::string mName;
|
||||||
TextComponent mText;
|
TextComponent mText;
|
||||||
|
@ -295,14 +312,33 @@ private:
|
||||||
auto font = Font::get(FONT_SIZE_MEDIUM);
|
auto font = Font::get(FONT_SIZE_MEDIUM);
|
||||||
ComponentListRow row;
|
ComponentListRow row;
|
||||||
|
|
||||||
|
bool hasSelectedRow = false;
|
||||||
|
|
||||||
|
// If the exclusive selection flag has been set, i.e. only a single row can be selected
|
||||||
|
// at a time, then make sure to gray out and disable any non-selected rows.
|
||||||
|
if (mParent->mMultiExclusiveSelect) {
|
||||||
|
for (auto entry : mParent->mEntries) {
|
||||||
|
if (entry.selected == true) {
|
||||||
|
hasSelectedRow = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// For selecting all/none.
|
// For selecting all/none.
|
||||||
std::vector<ImageComponent*> checkboxes;
|
std::vector<ImageComponent*> checkBoxes;
|
||||||
|
std::vector<TextComponent*> textEntries;
|
||||||
|
|
||||||
for (auto it = mParent->mEntries.begin(); it != mParent->mEntries.end(); it++) {
|
for (auto it = mParent->mEntries.begin(); it != mParent->mEntries.end(); it++) {
|
||||||
row.elements.clear();
|
row.elements.clear();
|
||||||
row.addElement(std::make_shared<TextComponent>(
|
auto textComponent = std::make_shared<TextComponent>(
|
||||||
mWindow, Utils::String::toUpper(it->name), font, 0x777777FF),
|
mWindow, Utils::String::toUpper(it->name), font, 0x777777FF);
|
||||||
true);
|
row.addElement(textComponent, true);
|
||||||
|
|
||||||
|
if (mParent->mMultiExclusiveSelect && hasSelectedRow && !(*it).selected) {
|
||||||
|
textComponent.get()->setOpacity(DISABLED_OPACITY);
|
||||||
|
textComponent.get()->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
OptionListData& e = *it;
|
OptionListData& e = *it;
|
||||||
|
|
||||||
|
@ -313,16 +349,53 @@ private:
|
||||||
checkbox->setResize(0, font->getLetterHeight());
|
checkbox->setResize(0, font->getLetterHeight());
|
||||||
row.addElement(checkbox, false);
|
row.addElement(checkbox, false);
|
||||||
|
|
||||||
|
if (mParent->mMultiExclusiveSelect && hasSelectedRow && !(*it).selected)
|
||||||
|
checkbox.get()->setOpacity(DISABLED_OPACITY);
|
||||||
|
|
||||||
// Input handler.
|
// Input handler.
|
||||||
// Update checkbox state and selected value.
|
// Update checkbox state and selected value.
|
||||||
row.makeAcceptInputHandler([this, &e, checkbox] {
|
row.makeAcceptInputHandler([this, &e, checkbox] {
|
||||||
|
auto list = mMenu.getList();
|
||||||
|
int cursorId = list->getCursorId();
|
||||||
|
bool isEnabled = list->getChild(cursorId * 2)->getEnabled();
|
||||||
|
|
||||||
|
if (mParent->mMultiExclusiveSelect && !isEnabled)
|
||||||
|
return;
|
||||||
|
|
||||||
e.selected = !e.selected;
|
e.selected = !e.selected;
|
||||||
checkbox->setImage(e.selected ? CHECKED_PATH : UNCHECKED_PATH);
|
checkbox->setImage(e.selected ? CHECKED_PATH : UNCHECKED_PATH);
|
||||||
mParent->onSelectedChanged();
|
mParent->onSelectedChanged();
|
||||||
|
|
||||||
|
// When selecting a row and the exclusive selection flag has been set,
|
||||||
|
// gray out and disable all other rows.
|
||||||
|
if (mParent->mMultiExclusiveSelect) {
|
||||||
|
for (unsigned int i = 0; i < mParent->mEntries.size(); i++) {
|
||||||
|
|
||||||
|
bool isSelected = mParent->mEntries[cursorId].selected;
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < list->getChildCount(); i += 2) {
|
||||||
|
if (i == static_cast<unsigned int>(cursorId) * 2)
|
||||||
|
continue;
|
||||||
|
if (isSelected) {
|
||||||
|
mEnabled = false;
|
||||||
|
list->getChild(i)->setEnabled(false);
|
||||||
|
list->getChild(i)->setOpacity(DISABLED_OPACITY);
|
||||||
|
list->getChild(i + 1)->setOpacity(DISABLED_OPACITY);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mEnabled = true;
|
||||||
|
list->getChild(i)->setEnabled(true);
|
||||||
|
list->getChild(i)->setOpacity(255);
|
||||||
|
list->getChild(i + 1)->setOpacity(255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// For selecting all/none.
|
// For selecting all/none.
|
||||||
checkboxes.push_back(checkbox.get());
|
checkBoxes.push_back(checkbox.get());
|
||||||
|
textEntries.push_back(textComponent.get());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Input handler for non-multiselect.
|
// Input handler for non-multiselect.
|
||||||
|
@ -336,24 +409,31 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also set cursor to this row if we're not multi-select and this row is selected.
|
// Also set cursor to this row if we're not multi-select and this row is selected.
|
||||||
mMenu.addRow(row, (!mParent->mMultiSelect && it->selected));
|
mMenu.addRow(row, (!mParent->mMultiSelect && it->selected), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
mMenu.addButton("BACK", "back", [this] { delete this; });
|
mMenu.addButton("BACK", "back", [this] { delete this; });
|
||||||
|
|
||||||
if (mParent->mMultiSelect) {
|
if (mParent->mMultiSelect) {
|
||||||
mMenu.addButton("SELECT ALL", "select all", [this, checkboxes] {
|
if (!mParent->mMultiExclusiveSelect) {
|
||||||
for (unsigned int i = 0; i < mParent->mEntries.size(); i++) {
|
mMenu.addButton("SELECT ALL", "select all", [this, checkBoxes] {
|
||||||
mParent->mEntries.at(i).selected = true;
|
for (unsigned int i = 0; i < mParent->mEntries.size(); i++) {
|
||||||
checkboxes.at(i)->setImage(CHECKED_PATH);
|
mParent->mEntries.at(i).selected = true;
|
||||||
}
|
checkBoxes.at(i)->setImage(CHECKED_PATH);
|
||||||
mParent->onSelectedChanged();
|
}
|
||||||
});
|
mParent->onSelectedChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
mMenu.addButton("SELECT NONE", "select none", [this, checkboxes] {
|
mMenu.addButton("SELECT NONE", "select none", [this, checkBoxes, textEntries] {
|
||||||
for (unsigned int i = 0; i < mParent->mEntries.size(); i++) {
|
for (unsigned int i = 0; i < mParent->mEntries.size(); i++) {
|
||||||
mParent->mEntries.at(i).selected = false;
|
mParent->mEntries.at(i).selected = false;
|
||||||
checkboxes.at(i)->setImage(UNCHECKED_PATH);
|
checkBoxes.at(i)->setImage(UNCHECKED_PATH);
|
||||||
|
if (mParent->mMultiExclusiveSelect) {
|
||||||
|
checkBoxes.at(i)->setOpacity(255);
|
||||||
|
textEntries.at(i)->setOpacity(255);
|
||||||
|
textEntries.at(i)->setEnabled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mParent->onSelectedChanged();
|
mParent->onSelectedChanged();
|
||||||
});
|
});
|
||||||
|
|
|
@ -181,7 +181,7 @@ GuiInputConfig::GuiInputConfig(Window* window,
|
||||||
};
|
};
|
||||||
|
|
||||||
buttons.push_back(
|
buttons.push_back(
|
||||||
std::make_shared<ButtonComponent>(mWindow, "OK", "ok", [okFunction] { okFunction(); }));
|
std::make_shared<ButtonComponent>(mWindow, "OK", "ok", [okFunction] { okFunction(); }));
|
||||||
|
|
||||||
mButtonGrid = makeButtonGrid(mWindow, buttons);
|
mButtonGrid = makeButtonGrid(mWindow, buttons);
|
||||||
mGrid.setEntry(mButtonGrid, glm::ivec2{0, 6}, true, false);
|
mGrid.setEntry(mButtonGrid, glm::ivec2{0, 6}, true, false);
|
||||||
|
|
|
@ -15,18 +15,22 @@
|
||||||
#define HORIZONTAL_PADDING_PX 20.0f
|
#define HORIZONTAL_PADDING_PX 20.0f
|
||||||
|
|
||||||
GuiMsgBox::GuiMsgBox(Window* window,
|
GuiMsgBox::GuiMsgBox(Window* window,
|
||||||
const HelpStyle &helpstyle,
|
const HelpStyle& helpstyle,
|
||||||
const std::string &text,
|
const std::string& text,
|
||||||
const std::string &name1,
|
const std::string& name1,
|
||||||
const std::function<void()> &func1,
|
const std::function<void()>& func1,
|
||||||
const std::string &name2,
|
const std::string& name2,
|
||||||
const std::function<void()> &func2,
|
const std::function<void()>& func2,
|
||||||
const std::string &name3,
|
const std::string& name3,
|
||||||
const std::function<void()> &func3,
|
const std::function<void()>& func3,
|
||||||
bool disableBackButton,
|
bool disableBackButton,
|
||||||
bool deleteOnButtonPress)
|
bool deleteOnButtonPress)
|
||||||
: GuiComponent(window), mBackground(window, ":/graphics/frame.svg"), mGrid(window, glm::ivec2{1, 2}),
|
: GuiComponent(window)
|
||||||
mHelpStyle(helpstyle), mDisableBackButton(disableBackButton), mDeleteOnButtonPress(deleteOnButtonPress)
|
, mBackground(window, ":/graphics/frame.svg")
|
||||||
|
, mGrid(window, glm::ivec2{1, 2})
|
||||||
|
, mHelpStyle(helpstyle)
|
||||||
|
, mDisableBackButton(disableBackButton)
|
||||||
|
, mDeleteOnButtonPress(deleteOnButtonPress)
|
||||||
{
|
{
|
||||||
// Adjust the width relative to the aspect ratio of the screen to make the GUI look coherent
|
// Adjust the width relative to the aspect ratio of the screen to make the GUI look coherent
|
||||||
// regardless of screen type. The 1.778 aspect ratio value is the 16:9 reference.
|
// regardless of screen type. The 1.778 aspect ratio value is the 16:9 reference.
|
||||||
|
|
|
@ -39,68 +39,82 @@
|
||||||
#include "utils/StringUtil.h"
|
#include "utils/StringUtil.h"
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
std::vector<std::vector<const char *>> kbBaseUS{
|
std::vector<std::vector<const char*>> kbBaseUS{
|
||||||
{"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "DEL"},
|
{"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "DEL"},
|
||||||
{"!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", "DEL"},
|
{"!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", "DEL"},
|
||||||
{"¡", "²", "³", "¤", "€", "¼", "½", "¾", "‘", "’", "¥", "×", "DEL"},
|
{"¡", "²", "³", "¤", "€", "¼", "½", "¾", "‘", "’", "¥", "×", "DEL"},
|
||||||
{"¹", "", "", "£", "", "", "", "", "", "", "", "÷", "DEL"},
|
{"¹", "", "", "£", "", "", "", "", "", "", "", "÷", "DEL"},
|
||||||
|
|
||||||
{"q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "OK"},
|
{"q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "OK"},
|
||||||
{"Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "OK"},
|
{"Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "OK"},
|
||||||
{"ä", "å", "é", "®", "þ", "ü", "ú", "í", "ó", "ö", "«", "»", "OK"},
|
{"ä", "å", "é", "®", "þ", "ü", "ú", "í", "ó", "ö", "«", "»", "OK"},
|
||||||
{"Ä", "Å", "É", "", "Þ", "Ü", "Ú", "Í", "Ó", "Ö", "", "", "OK"},
|
{"Ä", "Å", "É", "", "Þ", "Ü", "Ú", "Í", "Ó", "Ö", "", "", "OK"},
|
||||||
|
|
||||||
{"a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "\\", "-rowspan-"},
|
{"a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "\\", "-rowspan-"},
|
||||||
{"A", "S", "D", "F", "G", "H", "J", "K", "L", ":", "\"", "|", "-rowspan-"},
|
{"A", "S", "D", "F", "G", "H", "J", "K", "L", ":", "\"", "|", "-rowspan-"},
|
||||||
{"á", "ß", "ð", "", "", "", "", "", "ø", "¶", "´", "¬", "-rowspan-"},
|
{"á", "ß", "ð", "", "", "", "", "", "ø", "¶", "´", "¬", "-rowspan-"},
|
||||||
{"Á", "§", "Ð", "", "", "", "", "", "Ø", "°", "¨", "¦", "-rowspan-"},
|
{"Á", "§", "Ð", "", "", "", "", "", "Ø", "°", "¨", "¦", "-rowspan-"},
|
||||||
|
|
||||||
{"`", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "ALT", "-colspan-"},
|
{"`", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "ALT", "-colspan-"},
|
||||||
{"~", "Z", "X", "C", "V", "B", "N", "M", "<", ">", "?", "ALT", "-colspan-"},
|
{"~", "Z", "X", "C", "V", "B", "N", "M", "<", ">", "?", "ALT", "-colspan-"},
|
||||||
{"", "æ", "", "©", "", "", "ñ", "µ", "ç", "", "¿", "ALT", "-colspan-"},
|
{"", "æ", "", "©", "", "", "ñ", "µ", "ç", "", "¿", "ALT", "-colspan-"},
|
||||||
{"", "Æ", "", "¢", "", "", "Ñ", "Μ", "Ç", "", "", "ALT", "-colspan-"}};
|
{"", "Æ", "", "¢", "", "", "Ñ", "Μ", "Ç", "", "", "ALT", "-colspan-"}};
|
||||||
|
|
||||||
std::vector<std::vector<const char *>> kbLastRowNormal{
|
std::vector<std::vector<const char*>> kbLastRowNormal{
|
||||||
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
||||||
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
||||||
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
||||||
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"}};
|
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"}};
|
||||||
|
|
||||||
std::vector<std::vector<const char *>> kbLastRowLoad{
|
std::vector<std::vector<const char*>> kbLastRowLoad{
|
||||||
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "LOAD", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "LOAD", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
||||||
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "LOAD", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "LOAD", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
||||||
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "LOAD", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "LOAD", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"},
|
||||||
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "LOAD", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"}};
|
{"SHIFT", "-colspan-", "SPACE", "-colspan-", "-colspan-", "-colspan-", "-colspan-", "LOAD", "-colspan-", "CLEAR", "-colspan-", "CANCEL", "-colspan-"}};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
GuiTextEditKeyboardPopup::GuiTextEditKeyboardPopup(
|
GuiTextEditKeyboardPopup::GuiTextEditKeyboardPopup(
|
||||||
Window *window,
|
Window* window,
|
||||||
const HelpStyle &helpstyle,
|
const HelpStyle& helpstyle,
|
||||||
const std::string &title,
|
const std::string& title,
|
||||||
const std::string &initValue,
|
const std::string& initValue,
|
||||||
const std::function<void(const std::string &)> &okCallback,
|
const std::function<void(const std::string&)>& okCallback,
|
||||||
bool multiLine,
|
bool multiLine,
|
||||||
const std::string &acceptBtnHelpText,
|
const std::string& acceptBtnHelpText,
|
||||||
const std::string &saveConfirmationText,
|
const std::string& saveConfirmationText,
|
||||||
const std::string &infoString,
|
const std::string& infoString,
|
||||||
const std::string &defaultValue,
|
const std::string& defaultValue,
|
||||||
const std::string &loadBtnHelpText,
|
const std::string& loadBtnHelpText,
|
||||||
const std::string &clearBtnHelpText,
|
const std::string& clearBtnHelpText,
|
||||||
const std::string &cancelBtnHelpText)
|
const std::string& cancelBtnHelpText)
|
||||||
: GuiComponent{window}, mBackground{window, ":/graphics/frame.svg"},
|
: GuiComponent{window}
|
||||||
mGrid{window, glm::ivec2{1, (infoString != "" && defaultValue != "" ? 8 : 6)}}, mHelpStyle{helpstyle},
|
, mBackground{window, ":/graphics/frame.svg"}
|
||||||
mInitValue{initValue}, mAcceptBtnHelpText{acceptBtnHelpText}, mSaveConfirmationText{saveConfirmationText},
|
, mGrid{window, glm::ivec2{1, (infoString != "" && defaultValue != "" ? 8 : 6)}}
|
||||||
mLoadBtnHelpText{loadBtnHelpText}, mClearBtnHelpText{clearBtnHelpText}, mCancelBtnHelpText{cancelBtnHelpText},
|
, mHelpStyle{helpstyle}
|
||||||
mOkCallback{okCallback}, mMultiLine{multiLine}, mComplexMode{(infoString != "" && defaultValue != "")},
|
, mInitValue{initValue}
|
||||||
mDeleteRepeat{false}, mShift{false}, mAlt{false}, mDeleteRepeatTimer{0}, mNavigationRepeatTimer{0},
|
, mAcceptBtnHelpText{acceptBtnHelpText}
|
||||||
mNavigationRepeatDirX{0}, mNavigationRepeatDirY{0} {
|
, mSaveConfirmationText{saveConfirmationText}
|
||||||
|
, mLoadBtnHelpText{loadBtnHelpText}
|
||||||
|
, mClearBtnHelpText{clearBtnHelpText}
|
||||||
|
, mCancelBtnHelpText{cancelBtnHelpText}
|
||||||
|
, mOkCallback{okCallback}
|
||||||
|
, mMultiLine{multiLine}
|
||||||
|
, mComplexMode{(infoString != "" && defaultValue != "")}
|
||||||
|
, mDeleteRepeat{false}
|
||||||
|
, mShift{false}
|
||||||
|
, mAlt{false}
|
||||||
|
, mDeleteRepeatTimer{0}
|
||||||
|
, mNavigationRepeatTimer{0}
|
||||||
|
, mNavigationRepeatDirX{0}
|
||||||
|
, mNavigationRepeatDirY{0}
|
||||||
|
{
|
||||||
addChild(&mBackground);
|
addChild(&mBackground);
|
||||||
addChild(&mGrid);
|
addChild(&mGrid);
|
||||||
|
|
||||||
mTitle = std::make_shared<TextComponent>(mWindow, Utils::String::toUpper(title),
|
mTitle = std::make_shared<TextComponent>(mWindow, Utils::String::toUpper(title),
|
||||||
Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER);
|
Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER);
|
||||||
|
|
||||||
std::vector<std::vector<const char *>> kbLayout;
|
std::vector<std::vector<const char*>> kbLayout;
|
||||||
|
|
||||||
// At the moment there is only the US keyboard layout available.
|
// At the moment there is only the US keyboard layout available.
|
||||||
kbLayout.insert(kbLayout.cend(), kbBaseUS.cbegin(), kbBaseUS.cend());
|
kbLayout.insert(kbLayout.cend(), kbBaseUS.cbegin(), kbBaseUS.cend());
|
||||||
|
@ -114,7 +128,7 @@ GuiTextEditKeyboardPopup::GuiTextEditKeyboardPopup(
|
||||||
mHorizontalKeyCount = static_cast<int>(kbLayout[0].size());
|
mHorizontalKeyCount = static_cast<int>(kbLayout[0].size());
|
||||||
|
|
||||||
mKeyboardGrid = std::make_shared<ComponentGrid>(
|
mKeyboardGrid = std::make_shared<ComponentGrid>(
|
||||||
mWindow, glm::ivec2(mHorizontalKeyCount, static_cast<int>(kbLayout.size()) / 3));
|
mWindow, glm::ivec2(mHorizontalKeyCount, static_cast<int>(kbLayout.size()) / 3));
|
||||||
|
|
||||||
mText = std::make_shared<TextEditComponent>(mWindow);
|
mText = std::make_shared<TextEditComponent>(mWindow);
|
||||||
mText->setValue(initValue);
|
mText->setValue(initValue);
|
||||||
|
@ -129,11 +143,11 @@ GuiTextEditKeyboardPopup::GuiTextEditKeyboardPopup(
|
||||||
|
|
||||||
if (mComplexMode) {
|
if (mComplexMode) {
|
||||||
mInfoString = std::make_shared<TextComponent>(
|
mInfoString = std::make_shared<TextComponent>(
|
||||||
mWindow, infoString, Font::get(FONT_SIZE_MEDIUM), 0x555555FF, ALIGN_CENTER);
|
mWindow, infoString, Font::get(FONT_SIZE_MEDIUM), 0x555555FF, ALIGN_CENTER);
|
||||||
mGrid.setEntry(mInfoString, glm::ivec2{0, yPos}, false, true);
|
mGrid.setEntry(mInfoString, glm::ivec2{0, yPos}, false, true);
|
||||||
|
|
||||||
mDefaultValue = std::make_shared<TextComponent>(
|
mDefaultValue = std::make_shared<TextComponent>(
|
||||||
mWindow, defaultValue, Font::get(FONT_SIZE_SMALL), 0x555555FF, ALIGN_CENTER);
|
mWindow, defaultValue, Font::get(FONT_SIZE_SMALL), 0x555555FF, ALIGN_CENTER);
|
||||||
mGrid.setEntry(mDefaultValue, glm::ivec2{0, yPos + 1}, false, true);
|
mGrid.setEntry(mDefaultValue, glm::ivec2{0, yPos + 1}, false, true);
|
||||||
yPos += 2;
|
yPos += 2;
|
||||||
}
|
}
|
||||||
|
@ -164,17 +178,20 @@ GuiTextEditKeyboardPopup::GuiTextEditKeyboardPopup(
|
||||||
upper = DELETE_SYMBOL;
|
upper = DELETE_SYMBOL;
|
||||||
alted = DELETE_SYMBOL;
|
alted = DELETE_SYMBOL;
|
||||||
altshifted = DELETE_SYMBOL;
|
altshifted = DELETE_SYMBOL;
|
||||||
} else if (lower == "OK") {
|
}
|
||||||
|
else if (lower == "OK") {
|
||||||
lower = OK_SYMBOL;
|
lower = OK_SYMBOL;
|
||||||
upper = OK_SYMBOL;
|
upper = OK_SYMBOL;
|
||||||
alted = OK_SYMBOL;
|
alted = OK_SYMBOL;
|
||||||
altshifted = OK_SYMBOL;
|
altshifted = OK_SYMBOL;
|
||||||
} else if (lower == "SPACE") {
|
}
|
||||||
|
else if (lower == "SPACE") {
|
||||||
lower = " ";
|
lower = " ";
|
||||||
upper = " ";
|
upper = " ";
|
||||||
alted = " ";
|
alted = " ";
|
||||||
altshifted = " ";
|
altshifted = " ";
|
||||||
} else if (lower != "SHIFT" && lower.length() > 1) {
|
}
|
||||||
|
else if (lower != "SHIFT" && lower.length() > 1) {
|
||||||
lower = (lower.c_str());
|
lower = (lower.c_str());
|
||||||
upper = (upper.c_str());
|
upper = (upper.c_str());
|
||||||
alted = (alted.c_str());
|
alted = (alted.c_str());
|
||||||
|
@ -183,19 +200,21 @@ GuiTextEditKeyboardPopup::GuiTextEditKeyboardPopup(
|
||||||
|
|
||||||
if (lower == "SHIFT") {
|
if (lower == "SHIFT") {
|
||||||
mShiftButton = std::make_shared<ButtonComponent>(
|
mShiftButton = std::make_shared<ButtonComponent>(
|
||||||
mWindow, (SHIFT_SYMBOL), ("SHIFT"), [this] { shiftKeys(); }, false, true);
|
mWindow, (SHIFT_SYMBOL), ("SHIFT"), [this] { shiftKeys(); }, false, true);
|
||||||
button = mShiftButton;
|
button = mShiftButton;
|
||||||
} else if (lower == "ALT") {
|
}
|
||||||
|
else if (lower == "ALT") {
|
||||||
mAltButton = std::make_shared<ButtonComponent>(
|
mAltButton = std::make_shared<ButtonComponent>(
|
||||||
mWindow, (ALT_SYMBOL), ("ALT"), [this] { altKeys(); }, false, true);
|
mWindow, (ALT_SYMBOL), ("ALT"), [this] { altKeys(); }, false, true);
|
||||||
button = mAltButton;
|
button = mAltButton;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
button = makeButton(lower, upper, alted, altshifted);
|
button = makeButton(lower, upper, alted, altshifted);
|
||||||
}
|
}
|
||||||
|
|
||||||
button->setPadding(
|
button->setPadding(
|
||||||
glm::vec4(BUTTON_GRID_HORIZ_PADDING / 4.0f, BUTTON_GRID_HORIZ_PADDING / 4.0f,
|
glm::vec4(BUTTON_GRID_HORIZ_PADDING / 4.0f, BUTTON_GRID_HORIZ_PADDING / 4.0f,
|
||||||
BUTTON_GRID_HORIZ_PADDING / 4.0f, BUTTON_GRID_HORIZ_PADDING / 4.0f));
|
BUTTON_GRID_HORIZ_PADDING / 4.0f, BUTTON_GRID_HORIZ_PADDING / 4.0f));
|
||||||
buttons.push_back(button);
|
buttons.push_back(button);
|
||||||
|
|
||||||
int colSpan = 1;
|
int colSpan = 1;
|
||||||
|
@ -233,13 +252,14 @@ GuiTextEditKeyboardPopup::GuiTextEditKeyboardPopup(
|
||||||
mText->setSize(0.0f, textHeight);
|
mText->setSize(0.0f, textHeight);
|
||||||
|
|
||||||
// If attempting to navigate beyond the edge of the keyboard grid, then wrap around.
|
// If attempting to navigate beyond the edge of the keyboard grid, then wrap around.
|
||||||
mGrid.setPastBoundaryCallback([this, kbLayout](InputConfig *config, Input input) -> bool {
|
mGrid.setPastBoundaryCallback([this, kbLayout](InputConfig* config, Input input) -> bool {
|
||||||
if (config->isMappedLike("left", input)) {
|
if (config->isMappedLike("left", input)) {
|
||||||
if (mGrid.getSelectedComponent() == mKeyboardGrid) {
|
if (mGrid.getSelectedComponent() == mKeyboardGrid) {
|
||||||
mKeyboardGrid->moveCursorTo(mHorizontalKeyCount - 1, -1, true);
|
mKeyboardGrid->moveCursorTo(mHorizontalKeyCount - 1, -1, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if (config->isMappedLike("right", input)) {
|
}
|
||||||
|
else if (config->isMappedLike("right", input)) {
|
||||||
if (mGrid.getSelectedComponent() == mKeyboardGrid) {
|
if (mGrid.getSelectedComponent() == mKeyboardGrid) {
|
||||||
mKeyboardGrid->moveCursorTo(0, -1);
|
mKeyboardGrid->moveCursorTo(0, -1);
|
||||||
return true;
|
return true;
|
||||||
|
@ -259,7 +279,8 @@ GuiTextEditKeyboardPopup::GuiTextEditKeyboardPopup(
|
||||||
|
|
||||||
setPosition((static_cast<float>(Renderer::getScreenWidth()) - mSize.x) / 2.0f,
|
setPosition((static_cast<float>(Renderer::getScreenWidth()) - mSize.x) / 2.0f,
|
||||||
(static_cast<float>(Renderer::getScreenHeight()) - mSize.y) / 2.0f);
|
(static_cast<float>(Renderer::getScreenHeight()) - mSize.y) / 2.0f);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
if (mComplexMode)
|
if (mComplexMode)
|
||||||
setSize(width, KEYBOARD_HEIGHT + mDefaultValue->getSize().y * 3.0f);
|
setSize(width, KEYBOARD_HEIGHT + mDefaultValue->getSize().y * 3.0f);
|
||||||
else
|
else
|
||||||
|
@ -270,7 +291,8 @@ GuiTextEditKeyboardPopup::GuiTextEditKeyboardPopup(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiTextEditKeyboardPopup::onSizeChanged() {
|
void GuiTextEditKeyboardPopup::onSizeChanged()
|
||||||
|
{
|
||||||
mBackground.fitTo(mSize, glm::vec3{}, glm::vec2{-32.0f, -32.0f});
|
mBackground.fitTo(mSize, glm::vec3{}, glm::vec2{-32.0f, -32.0f});
|
||||||
mText->setSize(mSize.x - KEYBOARD_PADDINGX - KEYBOARD_PADDINGX, mText->getSize().y);
|
mText->setSize(mSize.x - KEYBOARD_PADDINGX - KEYBOARD_PADDINGX, mText->getSize().y);
|
||||||
|
|
||||||
|
@ -281,7 +303,8 @@ void GuiTextEditKeyboardPopup::onSizeChanged() {
|
||||||
mGrid.setRowHeightPerc(1, (mInfoString->getSize().y * 0.6f) / mSize.y);
|
mGrid.setRowHeightPerc(1, (mInfoString->getSize().y * 0.6f) / mSize.y);
|
||||||
mGrid.setRowHeightPerc(2, (mDefaultValue->getSize().y * 1.6f) / mSize.y);
|
mGrid.setRowHeightPerc(2, (mDefaultValue->getSize().y * 1.6f) / mSize.y);
|
||||||
mGrid.setRowHeightPerc(1, (mText->getSize().y * 1.0f) / mSize.y);
|
mGrid.setRowHeightPerc(1, (mText->getSize().y * 1.0f) / mSize.y);
|
||||||
} else if (mMultiLine) {
|
}
|
||||||
|
else if (mMultiLine) {
|
||||||
mGrid.setRowHeightPerc(1, (mText->getSize().y * 1.15f) / mSize.y);
|
mGrid.setRowHeightPerc(1, (mText->getSize().y * 1.15f) / mSize.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,7 +319,8 @@ void GuiTextEditKeyboardPopup::onSizeChanged() {
|
||||||
mKeyboardGrid->setPosition(KEYBOARD_PADDINGX, pos.y);
|
mKeyboardGrid->setPosition(KEYBOARD_PADDINGX, pos.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GuiTextEditKeyboardPopup::input(InputConfig *config, Input input) {
|
bool GuiTextEditKeyboardPopup::input(InputConfig* config, Input input)
|
||||||
|
{
|
||||||
// Enter/return key or numpad enter key accepts the changes.
|
// Enter/return key or numpad enter key accepts the changes.
|
||||||
if (config->getDeviceId() == DEVICE_KEYBOARD && mText->isEditing() && !mMultiLine &&
|
if (config->getDeviceId() == DEVICE_KEYBOARD && mText->isEditing() && !mMultiLine &&
|
||||||
input.value && (input.id == SDLK_RETURN || input.id == SDLK_KP_ENTER)) {
|
input.value && (input.id == SDLK_RETURN || input.id == SDLK_KP_ENTER)) {
|
||||||
|
@ -304,7 +328,7 @@ bool GuiTextEditKeyboardPopup::input(InputConfig *config, Input input) {
|
||||||
delete this;
|
delete this;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// Dito for the A button if using a controller.
|
// Dito for the A button if using a controller.
|
||||||
else if (config->getDeviceId() != DEVICE_KEYBOARD && mText->isEditing() &&
|
else if (config->getDeviceId() != DEVICE_KEYBOARD && mText->isEditing() &&
|
||||||
config->isMappedTo("a", input) && input.value) {
|
config->isMappedTo("a", input) && input.value) {
|
||||||
this->mOkCallback(mText->getValue());
|
this->mOkCallback(mText->getValue());
|
||||||
|
@ -330,18 +354,19 @@ bool GuiTextEditKeyboardPopup::input(InputConfig *config, Input input) {
|
||||||
if (mText->getValue() != mInitValue) {
|
if (mText->getValue() != mInitValue) {
|
||||||
// Changes were made, ask if the user wants to save them.
|
// Changes were made, ask if the user wants to save them.
|
||||||
mWindow->pushGui(new GuiMsgBox(
|
mWindow->pushGui(new GuiMsgBox(
|
||||||
mWindow, mHelpStyle, mSaveConfirmationText, "YES",
|
mWindow, mHelpStyle, mSaveConfirmationText, "YES",
|
||||||
[this] {
|
[this] {
|
||||||
this->mOkCallback(mText->getValue());
|
this->mOkCallback(mText->getValue());
|
||||||
delete this;
|
delete this;
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
"NO",
|
"NO",
|
||||||
[this] {
|
[this] {
|
||||||
delete this;
|
delete this;
|
||||||
return true;
|
return true;
|
||||||
}));
|
}));
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
delete this;
|
delete this;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -374,7 +399,8 @@ bool GuiTextEditKeyboardPopup::input(InputConfig *config, Input input) {
|
||||||
|
|
||||||
if (!editing)
|
if (!editing)
|
||||||
mText->stopEditing();
|
mText->stopEditing();
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
mDeleteRepeat = false;
|
mDeleteRepeat = false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -400,7 +426,8 @@ bool GuiTextEditKeyboardPopup::input(InputConfig *config, Input input) {
|
||||||
if (input.value) {
|
if (input.value) {
|
||||||
mNavigationRepeatDirX = -1;
|
mNavigationRepeatDirX = -1;
|
||||||
mNavigationRepeatTimer = -(NAVIGATION_REPEAT_START_DELAY - NAVIGATION_REPEAT_SPEED);
|
mNavigationRepeatTimer = -(NAVIGATION_REPEAT_START_DELAY - NAVIGATION_REPEAT_SPEED);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
mNavigationRepeatDirX = 0;
|
mNavigationRepeatDirX = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -409,7 +436,8 @@ bool GuiTextEditKeyboardPopup::input(InputConfig *config, Input input) {
|
||||||
if (input.value) {
|
if (input.value) {
|
||||||
mNavigationRepeatDirX = 1;
|
mNavigationRepeatDirX = 1;
|
||||||
mNavigationRepeatTimer = -(NAVIGATION_REPEAT_START_DELAY - NAVIGATION_REPEAT_SPEED);
|
mNavigationRepeatTimer = -(NAVIGATION_REPEAT_START_DELAY - NAVIGATION_REPEAT_SPEED);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
mNavigationRepeatDirX = 0;
|
mNavigationRepeatDirX = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -418,7 +446,8 @@ bool GuiTextEditKeyboardPopup::input(InputConfig *config, Input input) {
|
||||||
if (input.value) {
|
if (input.value) {
|
||||||
mNavigationRepeatDirY = -1;
|
mNavigationRepeatDirY = -1;
|
||||||
mNavigationRepeatTimer = -(NAVIGATION_REPEAT_START_DELAY - NAVIGATION_REPEAT_SPEED);
|
mNavigationRepeatTimer = -(NAVIGATION_REPEAT_START_DELAY - NAVIGATION_REPEAT_SPEED);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
mNavigationRepeatDirY = 0;
|
mNavigationRepeatDirY = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -427,7 +456,8 @@ bool GuiTextEditKeyboardPopup::input(InputConfig *config, Input input) {
|
||||||
if (input.value) {
|
if (input.value) {
|
||||||
mNavigationRepeatDirY = 1;
|
mNavigationRepeatDirY = 1;
|
||||||
mNavigationRepeatTimer = -(NAVIGATION_REPEAT_START_DELAY - NAVIGATION_REPEAT_SPEED);
|
mNavigationRepeatTimer = -(NAVIGATION_REPEAT_START_DELAY - NAVIGATION_REPEAT_SPEED);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
mNavigationRepeatDirY = 0;
|
mNavigationRepeatDirY = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -438,19 +468,22 @@ bool GuiTextEditKeyboardPopup::input(InputConfig *config, Input input) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiTextEditKeyboardPopup::update(int deltaTime) {
|
void GuiTextEditKeyboardPopup::update(int deltaTime)
|
||||||
|
{
|
||||||
updateNavigationRepeat(deltaTime);
|
updateNavigationRepeat(deltaTime);
|
||||||
updateDeleteRepeat(deltaTime);
|
updateDeleteRepeat(deltaTime);
|
||||||
GuiComponent::update(deltaTime);
|
GuiComponent::update(deltaTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<HelpPrompt> GuiTextEditKeyboardPopup::getHelpPrompts() {
|
std::vector<HelpPrompt> GuiTextEditKeyboardPopup::getHelpPrompts()
|
||||||
|
{
|
||||||
std::vector<HelpPrompt> prompts = mGrid.getHelpPrompts();
|
std::vector<HelpPrompt> prompts = mGrid.getHelpPrompts();
|
||||||
|
|
||||||
if (!mText->isEditing()) {
|
if (!mText->isEditing()) {
|
||||||
prompts.push_back(HelpPrompt("lt", "shift"));
|
prompts.push_back(HelpPrompt("lt", "shift"));
|
||||||
prompts.push_back(HelpPrompt("rt", "alt"));
|
prompts.push_back(HelpPrompt("rt", "alt"));
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
prompts.push_back(HelpPrompt("a", mAcceptBtnHelpText));
|
prompts.push_back(HelpPrompt("a", mAcceptBtnHelpText));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -480,7 +513,8 @@ std::vector<HelpPrompt> GuiTextEditKeyboardPopup::getHelpPrompts() {
|
||||||
return prompts;
|
return prompts;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiTextEditKeyboardPopup::updateDeleteRepeat(int deltaTime) {
|
void GuiTextEditKeyboardPopup::updateDeleteRepeat(int deltaTime)
|
||||||
|
{
|
||||||
if (!mDeleteRepeat)
|
if (!mDeleteRepeat)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -500,7 +534,8 @@ void GuiTextEditKeyboardPopup::updateDeleteRepeat(int deltaTime) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiTextEditKeyboardPopup::updateNavigationRepeat(int deltaTime) {
|
void GuiTextEditKeyboardPopup::updateNavigationRepeat(int deltaTime)
|
||||||
|
{
|
||||||
if (mNavigationRepeatDirX == 0 && mNavigationRepeatDirY == 0)
|
if (mNavigationRepeatDirX == 0 && mNavigationRepeatDirY == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -527,13 +562,15 @@ void GuiTextEditKeyboardPopup::updateNavigationRepeat(int deltaTime) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiTextEditKeyboardPopup::shiftKeys() {
|
void GuiTextEditKeyboardPopup::shiftKeys()
|
||||||
|
{
|
||||||
mShift = !mShift;
|
mShift = !mShift;
|
||||||
|
|
||||||
if (mShift) {
|
if (mShift) {
|
||||||
mShiftButton->setFlatColorFocused(0xFF2222FF);
|
mShiftButton->setFlatColorFocused(0xFF2222FF);
|
||||||
mShiftButton->setFlatColorUnfocused(0xFF2222FF);
|
mShiftButton->setFlatColorUnfocused(0xFF2222FF);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
mShiftButton->setFlatColorFocused(0x878787FF);
|
mShiftButton->setFlatColorFocused(0x878787FF);
|
||||||
mShiftButton->setFlatColorUnfocused(0x60606025);
|
mShiftButton->setFlatColorUnfocused(0x60606025);
|
||||||
}
|
}
|
||||||
|
@ -547,9 +584,10 @@ void GuiTextEditKeyboardPopup::shiftKeys() {
|
||||||
if (mAlt) {
|
if (mAlt) {
|
||||||
altKeys();
|
altKeys();
|
||||||
altKeys();
|
altKeys();
|
||||||
} else {
|
}
|
||||||
for (auto &kb: mKeyboardButtons) {
|
else {
|
||||||
const std::string &text = mShift ? kb.shiftedKey : kb.key;
|
for (auto& kb : mKeyboardButtons) {
|
||||||
|
const std::string& text = mShift ? kb.shiftedKey : kb.key;
|
||||||
auto sz = kb.button->getSize();
|
auto sz = kb.button->getSize();
|
||||||
kb.button->setText(text, text, false);
|
kb.button->setText(text, text, false);
|
||||||
kb.button->setSize(sz);
|
kb.button->setSize(sz);
|
||||||
|
@ -557,13 +595,15 @@ void GuiTextEditKeyboardPopup::shiftKeys() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiTextEditKeyboardPopup::altKeys() {
|
void GuiTextEditKeyboardPopup::altKeys()
|
||||||
|
{
|
||||||
mAlt = !mAlt;
|
mAlt = !mAlt;
|
||||||
|
|
||||||
if (mAlt) {
|
if (mAlt) {
|
||||||
mAltButton->setFlatColorFocused(0xFF2222FF);
|
mAltButton->setFlatColorFocused(0xFF2222FF);
|
||||||
mAltButton->setFlatColorUnfocused(0xFF2222FF);
|
mAltButton->setFlatColorUnfocused(0xFF2222FF);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
mAltButton->setFlatColorFocused(0x878787FF);
|
mAltButton->setFlatColorFocused(0x878787FF);
|
||||||
mAltButton->setFlatColorUnfocused(0x60606025);
|
mAltButton->setFlatColorUnfocused(0x60606025);
|
||||||
}
|
}
|
||||||
|
@ -577,9 +617,10 @@ void GuiTextEditKeyboardPopup::altKeys() {
|
||||||
if (mShift) {
|
if (mShift) {
|
||||||
shiftKeys();
|
shiftKeys();
|
||||||
shiftKeys();
|
shiftKeys();
|
||||||
} else {
|
}
|
||||||
for (auto &kb: mKeyboardButtons) {
|
else {
|
||||||
const std::string &text = mAlt ? kb.altedKey : kb.key;
|
for (auto& kb : mKeyboardButtons) {
|
||||||
|
const std::string& text = mAlt ? kb.altedKey : kb.key;
|
||||||
auto sz = kb.button->getSize();
|
auto sz = kb.button->getSize();
|
||||||
kb.button->setText(text, text, false);
|
kb.button->setText(text, text, false);
|
||||||
kb.button->setSize(sz);
|
kb.button->setSize(sz);
|
||||||
|
@ -587,9 +628,10 @@ void GuiTextEditKeyboardPopup::altKeys() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiTextEditKeyboardPopup::altShiftKeys() {
|
void GuiTextEditKeyboardPopup::altShiftKeys()
|
||||||
for (auto &kb: mKeyboardButtons) {
|
{
|
||||||
const std::string &text = kb.altshiftedKey;
|
for (auto& kb : mKeyboardButtons) {
|
||||||
|
const std::string& text = kb.altshiftedKey;
|
||||||
auto sz = kb.button->getSize();
|
auto sz = kb.button->getSize();
|
||||||
kb.button->setText(text, text, false);
|
kb.button->setText(text, text, false);
|
||||||
kb.button->setSize(sz);
|
kb.button->setSize(sz);
|
||||||
|
@ -597,56 +639,62 @@ void GuiTextEditKeyboardPopup::altShiftKeys() {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<ButtonComponent> GuiTextEditKeyboardPopup::makeButton(
|
std::shared_ptr<ButtonComponent> GuiTextEditKeyboardPopup::makeButton(
|
||||||
const std::string &key,
|
const std::string& key,
|
||||||
const std::string &shiftedKey,
|
const std::string& shiftedKey,
|
||||||
const std::string &altedKey,
|
const std::string& altedKey,
|
||||||
const std::string &altshiftedKey) {
|
const std::string& altshiftedKey)
|
||||||
|
{
|
||||||
std::shared_ptr<ButtonComponent> button = std::make_shared<ButtonComponent>(
|
std::shared_ptr<ButtonComponent> button = std::make_shared<ButtonComponent>(
|
||||||
mWindow, key, key,
|
mWindow, key, key,
|
||||||
[this, key, shiftedKey, altedKey, altshiftedKey] {
|
[this, key, shiftedKey, altedKey, altshiftedKey] {
|
||||||
if (key == (OK_SYMBOL) || key.find("OK") != std::string::npos) {
|
if (key == (OK_SYMBOL) || key.find("OK") != std::string::npos) {
|
||||||
mOkCallback(mText->getValue());
|
mOkCallback(mText->getValue());
|
||||||
delete this;
|
delete this;
|
||||||
return;
|
return;
|
||||||
} else if (key == (DELETE_SYMBOL) || key == "DEL") {
|
}
|
||||||
mText->startEditing();
|
else if (key == (DELETE_SYMBOL) || key == "DEL") {
|
||||||
mText->textInput("\b");
|
|
||||||
mText->stopEditing();
|
|
||||||
return;
|
|
||||||
} else if (key == "SPACE" || key == " ") {
|
|
||||||
mText->startEditing();
|
|
||||||
mText->textInput(" ");
|
|
||||||
mText->stopEditing();
|
|
||||||
return;
|
|
||||||
} else if (key == "LOAD") {
|
|
||||||
mText->setValue(mDefaultValue->getValue());
|
|
||||||
mText->setCursor(mDefaultValue->getValue().size());
|
|
||||||
return;
|
|
||||||
} else if (key == "CLEAR") {
|
|
||||||
mText->setValue("");
|
|
||||||
return;
|
|
||||||
} else if (key == "CANCEL") {
|
|
||||||
delete this;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mAlt && altedKey.empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
mText->startEditing();
|
mText->startEditing();
|
||||||
|
mText->textInput("\b");
|
||||||
if (mShift && mAlt)
|
|
||||||
mText->textInput(altshiftedKey.c_str());
|
|
||||||
else if (mAlt)
|
|
||||||
mText->textInput(altedKey.c_str());
|
|
||||||
else if (mShift)
|
|
||||||
mText->textInput(shiftedKey.c_str());
|
|
||||||
else
|
|
||||||
mText->textInput(key.c_str());
|
|
||||||
|
|
||||||
mText->stopEditing();
|
mText->stopEditing();
|
||||||
},
|
return;
|
||||||
false, true);
|
}
|
||||||
|
else if (key == "SPACE" || key == " ") {
|
||||||
|
mText->startEditing();
|
||||||
|
mText->textInput(" ");
|
||||||
|
mText->stopEditing();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (key == "LOAD") {
|
||||||
|
mText->setValue(mDefaultValue->getValue());
|
||||||
|
mText->setCursor(mDefaultValue->getValue().size());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (key == "CLEAR") {
|
||||||
|
mText->setValue("");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (key == "CANCEL") {
|
||||||
|
delete this;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mAlt && altedKey.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
mText->startEditing();
|
||||||
|
|
||||||
|
if (mShift && mAlt)
|
||||||
|
mText->textInput(altshiftedKey.c_str());
|
||||||
|
else if (mAlt)
|
||||||
|
mText->textInput(altedKey.c_str());
|
||||||
|
else if (mShift)
|
||||||
|
mText->textInput(shiftedKey.c_str());
|
||||||
|
else
|
||||||
|
mText->textInput(key.c_str());
|
||||||
|
|
||||||
|
mText->stopEditing();
|
||||||
|
},
|
||||||
|
false, true);
|
||||||
|
|
||||||
KeyboardButton kb(button, key, shiftedKey, altedKey, altshiftedKey);
|
KeyboardButton kb(button, key, shiftedKey, altedKey, altshiftedKey);
|
||||||
mKeyboardButtons.push_back(kb);
|
mKeyboardButtons.push_back(kb);
|
||||||
|
|
|
@ -15,64 +15,62 @@
|
||||||
#include "components/ComponentGrid.h"
|
#include "components/ComponentGrid.h"
|
||||||
#include "components/TextEditComponent.h"
|
#include "components/TextEditComponent.h"
|
||||||
|
|
||||||
class GuiTextEditKeyboardPopup : public GuiComponent {
|
class GuiTextEditKeyboardPopup : public GuiComponent
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
GuiTextEditKeyboardPopup(Window *window,
|
GuiTextEditKeyboardPopup(Window* window,
|
||||||
const HelpStyle &helpstyle,
|
const HelpStyle& helpstyle,
|
||||||
const std::string &title,
|
const std::string& title,
|
||||||
const std::string &initValue,
|
const std::string& initValue,
|
||||||
const std::function<void(const std::string &)> &okCallback,
|
const std::function<void(const std::string&)>& okCallback,
|
||||||
bool multiLine,
|
bool multiLine,
|
||||||
const std::string &acceptBtnHelpText = "OK",
|
const std::string& acceptBtnHelpText = "OK",
|
||||||
const std::string &saveConfirmationText = "SAVE CHANGES?",
|
const std::string& saveConfirmationText = "SAVE CHANGES?",
|
||||||
const std::string &infoString = "",
|
const std::string& infoString = "",
|
||||||
const std::string &defaultValue = "",
|
const std::string& defaultValue = "",
|
||||||
const std::string &loadBtnHelpText = "LOAD DEFAULT",
|
const std::string& loadBtnHelpText = "LOAD DEFAULT",
|
||||||
const std::string &clearBtnHelpText = "CLEAR",
|
const std::string& clearBtnHelpText = "CLEAR",
|
||||||
const std::string &cancelBtnHelpText = "DISCARD CHANGES");
|
const std::string& cancelBtnHelpText = "DISCARD CHANGES");
|
||||||
|
|
||||||
void onSizeChanged() override;
|
void onSizeChanged() override;
|
||||||
|
bool input(InputConfig* config, Input input) override;
|
||||||
bool input(InputConfig *config, Input input) override;
|
|
||||||
|
|
||||||
void update(int deltaTime) override;
|
void update(int deltaTime) override;
|
||||||
|
|
||||||
std::vector<HelpPrompt> getHelpPrompts() override;
|
std::vector<HelpPrompt> getHelpPrompts() override;
|
||||||
|
|
||||||
HelpStyle getHelpStyle() override { return mHelpStyle; }
|
HelpStyle getHelpStyle() override { return mHelpStyle; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class KeyboardButton {
|
class KeyboardButton
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
std::shared_ptr<ButtonComponent> button;
|
std::shared_ptr<ButtonComponent> button;
|
||||||
const std::string key;
|
const std::string key;
|
||||||
const std::string shiftedKey;
|
const std::string shiftedKey;
|
||||||
const std::string altedKey;
|
const std::string altedKey;
|
||||||
const std::string altshiftedKey;
|
const std::string altshiftedKey;
|
||||||
|
|
||||||
KeyboardButton(const std::shared_ptr<ButtonComponent> b,
|
KeyboardButton(const std::shared_ptr<ButtonComponent> b,
|
||||||
const std::string &k,
|
const std::string& k,
|
||||||
const std::string &sk,
|
const std::string& sk,
|
||||||
const std::string &ak,
|
const std::string& ak,
|
||||||
const std::string &ask)
|
const std::string& ask)
|
||||||
: button{b}, key{k}, shiftedKey{sk}, altedKey{ak}, altshiftedKey{ask} {};
|
: button{b}
|
||||||
|
, key{k}
|
||||||
|
, shiftedKey{sk}
|
||||||
|
, altedKey{ak}
|
||||||
|
, altshiftedKey{ask} {};
|
||||||
};
|
};
|
||||||
|
|
||||||
void updateDeleteRepeat(int deltaTime);
|
void updateDeleteRepeat(int deltaTime);
|
||||||
|
|
||||||
void updateNavigationRepeat(int deltaTime);
|
void updateNavigationRepeat(int deltaTime);
|
||||||
|
|
||||||
void shiftKeys();
|
void shiftKeys();
|
||||||
|
|
||||||
void altKeys();
|
void altKeys();
|
||||||
|
|
||||||
void altShiftKeys();
|
void altShiftKeys();
|
||||||
|
|
||||||
std::shared_ptr<ButtonComponent> makeButton(const std::string &key,
|
std::shared_ptr<ButtonComponent> makeButton(const std::string& key,
|
||||||
const std::string &shiftedKey,
|
const std::string& shiftedKey,
|
||||||
const std::string &altedKey,
|
const std::string& altedKey,
|
||||||
const std::string &altshiftedKey);
|
const std::string& altshiftedKey);
|
||||||
|
|
||||||
std::vector<KeyboardButton> mKeyboardButtons;
|
std::vector<KeyboardButton> mKeyboardButtons;
|
||||||
|
|
||||||
std::shared_ptr<ButtonComponent> mShiftButton;
|
std::shared_ptr<ButtonComponent> mShiftButton;
|
||||||
|
@ -95,7 +93,7 @@ private:
|
||||||
std::string mClearBtnHelpText;
|
std::string mClearBtnHelpText;
|
||||||
std::string mCancelBtnHelpText;
|
std::string mCancelBtnHelpText;
|
||||||
|
|
||||||
std::function<void(const std::string &)> mOkCallback;
|
std::function<void(const std::string&)> mOkCallback;
|
||||||
|
|
||||||
bool mMultiLine;
|
bool mMultiLine;
|
||||||
bool mComplexMode;
|
bool mComplexMode;
|
||||||
|
|
|
@ -15,25 +15,35 @@
|
||||||
#include "components/MenuComponent.h"
|
#include "components/MenuComponent.h"
|
||||||
#include "guis/GuiMsgBox.h"
|
#include "guis/GuiMsgBox.h"
|
||||||
|
|
||||||
GuiTextEditPopup::GuiTextEditPopup(Window *window,
|
GuiTextEditPopup::GuiTextEditPopup(Window* window,
|
||||||
const HelpStyle &helpstyle,
|
const HelpStyle& helpstyle,
|
||||||
const std::string &title,
|
const std::string& title,
|
||||||
const std::string &initValue,
|
const std::string& initValue,
|
||||||
const std::function<void(const std::string &)> &okCallback,
|
const std::function<void(const std::string&)>& okCallback,
|
||||||
bool multiLine,
|
bool multiLine,
|
||||||
const std::string &acceptBtnText,
|
const std::string& acceptBtnText,
|
||||||
const std::string &saveConfirmationText,
|
const std::string& saveConfirmationText,
|
||||||
const std::string &infoString,
|
const std::string& infoString,
|
||||||
const std::string &defaultValue,
|
const std::string& defaultValue,
|
||||||
const std::string &loadBtnHelpText,
|
const std::string& loadBtnHelpText,
|
||||||
const std::string &clearBtnHelpText,
|
const std::string& clearBtnHelpText,
|
||||||
const std::string &cancelBtnHelpText)
|
const std::string& cancelBtnHelpText)
|
||||||
: GuiComponent{window}, mBackground{window, ":/graphics/frame.svg"},
|
: GuiComponent{window}
|
||||||
mGrid{window, glm::ivec2{1, (infoString != "" && defaultValue != "" ? 5 : 3)}}, mHelpStyle{helpstyle},
|
, mBackground{window, ":/graphics/frame.svg"}
|
||||||
mInitValue{initValue}, mAcceptBtnText{acceptBtnText}, mSaveConfirmationText{saveConfirmationText},
|
, mGrid{window, glm::ivec2{1, (infoString != "" && defaultValue != "" ? 5 : 3)}}
|
||||||
mLoadBtnHelpText{loadBtnHelpText}, mClearBtnHelpText{clearBtnHelpText}, mCancelBtnHelpText{cancelBtnHelpText},
|
, mHelpStyle{helpstyle}
|
||||||
mOkCallback{okCallback}, mMultiLine{multiLine}, mComplexMode{(infoString != "" && defaultValue != "")},
|
, mInitValue{initValue}
|
||||||
mDeleteRepeat{false}, mDeleteRepeatTimer{0} {
|
, mAcceptBtnText{acceptBtnText}
|
||||||
|
, mSaveConfirmationText{saveConfirmationText}
|
||||||
|
, mLoadBtnHelpText{loadBtnHelpText}
|
||||||
|
, mClearBtnHelpText{clearBtnHelpText}
|
||||||
|
, mCancelBtnHelpText{cancelBtnHelpText}
|
||||||
|
, mOkCallback{okCallback}
|
||||||
|
, mMultiLine{multiLine}
|
||||||
|
, mComplexMode{(infoString != "" && defaultValue != "")}
|
||||||
|
, mDeleteRepeat{false}
|
||||||
|
, mDeleteRepeatTimer{0}
|
||||||
|
{
|
||||||
addChild(&mBackground);
|
addChild(&mBackground);
|
||||||
addChild(&mGrid);
|
addChild(&mGrid);
|
||||||
|
|
||||||
|
@ -42,9 +52,9 @@ GuiTextEditPopup::GuiTextEditPopup(Window *window,
|
||||||
|
|
||||||
if (mComplexMode) {
|
if (mComplexMode) {
|
||||||
mInfoString = std::make_shared<TextComponent>(
|
mInfoString = std::make_shared<TextComponent>(
|
||||||
mWindow, infoString, Font::get(FONT_SIZE_SMALL), 0x555555FF, ALIGN_CENTER);
|
mWindow, infoString, Font::get(FONT_SIZE_SMALL), 0x555555FF, ALIGN_CENTER);
|
||||||
mDefaultValue = std::make_shared<TextComponent>(
|
mDefaultValue = std::make_shared<TextComponent>(
|
||||||
mWindow, defaultValue, Font::get(FONT_SIZE_SMALL), 0x555555FF, ALIGN_CENTER);
|
mWindow, defaultValue, Font::get(FONT_SIZE_SMALL), 0x555555FF, ALIGN_CENTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
mText = std::make_shared<TextEditComponent>(mWindow);
|
mText = std::make_shared<TextEditComponent>(mWindow);
|
||||||
|
@ -58,11 +68,11 @@ GuiTextEditPopup::GuiTextEditPopup(Window *window,
|
||||||
}));
|
}));
|
||||||
if (mComplexMode) {
|
if (mComplexMode) {
|
||||||
buttons.push_back(std::make_shared<ButtonComponent>(
|
buttons.push_back(std::make_shared<ButtonComponent>(
|
||||||
mWindow, "load", loadBtnHelpText, [this, defaultValue] {
|
mWindow, "load", loadBtnHelpText, [this, defaultValue] {
|
||||||
mText->setValue(defaultValue);
|
mText->setValue(defaultValue);
|
||||||
mText->setCursor(0);
|
mText->setCursor(0);
|
||||||
mText->setCursor(defaultValue.size());
|
mText->setCursor(defaultValue.size());
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
buttons.push_back(std::make_shared<ButtonComponent>(mWindow, "clear", clearBtnHelpText,
|
buttons.push_back(std::make_shared<ButtonComponent>(mWindow, "clear", clearBtnHelpText,
|
||||||
|
@ -99,21 +109,22 @@ GuiTextEditPopup::GuiTextEditPopup(Window *window,
|
||||||
|
|
||||||
if (mComplexMode) {
|
if (mComplexMode) {
|
||||||
float infoWidth =
|
float infoWidth =
|
||||||
glm::clamp(0.70f * aspectValue, 0.34f, 0.85f) * Renderer::getScreenWidth();
|
glm::clamp(0.70f * aspectValue, 0.34f, 0.85f) * Renderer::getScreenWidth();
|
||||||
float windowWidth =
|
float windowWidth =
|
||||||
glm::clamp(0.75f * aspectValue, 0.40f, 0.90f) * Renderer::getScreenWidth();
|
glm::clamp(0.75f * aspectValue, 0.40f, 0.90f) * Renderer::getScreenWidth();
|
||||||
|
|
||||||
mDefaultValue->setSize(infoWidth, mDefaultValue->getFont()->getHeight());
|
mDefaultValue->setSize(infoWidth, mDefaultValue->getFont()->getHeight());
|
||||||
|
|
||||||
setSize(windowWidth, mTitle->getFont()->getHeight() + textHeight +
|
setSize(windowWidth, mTitle->getFont()->getHeight() + textHeight +
|
||||||
mButtonGrid->getSize().y + mButtonGrid->getSize().y * 1.85f);
|
mButtonGrid->getSize().y + mButtonGrid->getSize().y * 1.85f);
|
||||||
setPosition((Renderer::getScreenWidth() - mSize.x) / 2.0f,
|
setPosition((Renderer::getScreenWidth() - mSize.x) / 2.0f,
|
||||||
(Renderer::getScreenHeight() - mSize.y) / 2.0f);
|
(Renderer::getScreenHeight() - mSize.y) / 2.0f);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
float width = glm::clamp(0.54f * aspectValue, 0.20f, 0.70f) * Renderer::getScreenWidth();
|
float width = glm::clamp(0.54f * aspectValue, 0.20f, 0.70f) * Renderer::getScreenWidth();
|
||||||
|
|
||||||
setSize(width, mTitle->getFont()->getHeight() + textHeight + mButtonGrid->getSize().y +
|
setSize(width, mTitle->getFont()->getHeight() + textHeight + mButtonGrid->getSize().y +
|
||||||
mButtonGrid->getSize().y / 2.0f);
|
mButtonGrid->getSize().y / 2.0f);
|
||||||
setPosition((Renderer::getScreenWidth() - mSize.x) / 2.0f,
|
setPosition((Renderer::getScreenWidth() - mSize.x) / 2.0f,
|
||||||
(Renderer::getScreenHeight() - mSize.y) / 2.0f);
|
(Renderer::getScreenHeight() - mSize.y) / 2.0f);
|
||||||
}
|
}
|
||||||
|
@ -124,7 +135,8 @@ GuiTextEditPopup::GuiTextEditPopup(Window *window,
|
||||||
mText->startEditing();
|
mText->startEditing();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiTextEditPopup::onSizeChanged() {
|
void GuiTextEditPopup::onSizeChanged()
|
||||||
|
{
|
||||||
mBackground.fitTo(mSize, glm::vec3{}, glm::vec2{-32.0f, -32.0f});
|
mBackground.fitTo(mSize, glm::vec3{}, glm::vec2{-32.0f, -32.0f});
|
||||||
mText->setSize(mSize.x - 40.0f * Renderer::getScreenHeightModifier(), mText->getSize().y);
|
mText->setSize(mSize.x - 40.0f * Renderer::getScreenHeightModifier(), mText->getSize().y);
|
||||||
|
|
||||||
|
@ -138,7 +150,8 @@ void GuiTextEditPopup::onSizeChanged() {
|
||||||
mGrid.setSize(mSize);
|
mGrid.setSize(mSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GuiTextEditPopup::input(InputConfig *config, Input input) {
|
bool GuiTextEditPopup::input(InputConfig* config, Input input)
|
||||||
|
{
|
||||||
// Enter key (main key or via numpad) accepts the changes.
|
// Enter key (main key or via numpad) accepts the changes.
|
||||||
if (config->getDeviceId() == DEVICE_KEYBOARD && mText->isEditing() && !mMultiLine &&
|
if (config->getDeviceId() == DEVICE_KEYBOARD && mText->isEditing() && !mMultiLine &&
|
||||||
input.value && (input.id == SDLK_RETURN || input.id == SDLK_KP_ENTER)) {
|
input.value && (input.id == SDLK_RETURN || input.id == SDLK_KP_ENTER)) {
|
||||||
|
@ -146,7 +159,7 @@ bool GuiTextEditPopup::input(InputConfig *config, Input input) {
|
||||||
delete this;
|
delete this;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// Dito for the A button if using a controller.
|
// Dito for the A button if using a controller.
|
||||||
else if (config->getDeviceId() != DEVICE_KEYBOARD && mText->isEditing() &&
|
else if (config->getDeviceId() != DEVICE_KEYBOARD && mText->isEditing() &&
|
||||||
config->isMappedTo("a", input) && input.value) {
|
config->isMappedTo("a", input) && input.value) {
|
||||||
this->mOkCallback(mText->getValue());
|
this->mOkCallback(mText->getValue());
|
||||||
|
@ -166,18 +179,19 @@ bool GuiTextEditPopup::input(InputConfig *config, Input input) {
|
||||||
if (mText->getValue() != mInitValue) {
|
if (mText->getValue() != mInitValue) {
|
||||||
// Changes were made, ask if the user wants to save them.
|
// Changes were made, ask if the user wants to save them.
|
||||||
mWindow->pushGui(new GuiMsgBox(
|
mWindow->pushGui(new GuiMsgBox(
|
||||||
mWindow, mHelpStyle, mSaveConfirmationText, "YES",
|
mWindow, mHelpStyle, mSaveConfirmationText, "YES",
|
||||||
[this] {
|
[this] {
|
||||||
this->mOkCallback(mText->getValue());
|
this->mOkCallback(mText->getValue());
|
||||||
delete this;
|
delete this;
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
"NO",
|
"NO",
|
||||||
[this] {
|
[this] {
|
||||||
delete this;
|
delete this;
|
||||||
return true;
|
return true;
|
||||||
}));
|
}));
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
delete this;
|
delete this;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -202,7 +216,8 @@ bool GuiTextEditPopup::input(InputConfig *config, Input input) {
|
||||||
|
|
||||||
if (!editing)
|
if (!editing)
|
||||||
mText->stopEditing();
|
mText->stopEditing();
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
mDeleteRepeat = false;
|
mDeleteRepeat = false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -228,12 +243,14 @@ bool GuiTextEditPopup::input(InputConfig *config, Input input) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiTextEditPopup::update(int deltaTime) {
|
void GuiTextEditPopup::update(int deltaTime)
|
||||||
|
{
|
||||||
updateDeleteRepeat(deltaTime);
|
updateDeleteRepeat(deltaTime);
|
||||||
GuiComponent::update(deltaTime);
|
GuiComponent::update(deltaTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<HelpPrompt> GuiTextEditPopup::getHelpPrompts() {
|
std::vector<HelpPrompt> GuiTextEditPopup::getHelpPrompts()
|
||||||
|
{
|
||||||
std::vector<HelpPrompt> prompts = mGrid.getHelpPrompts();
|
std::vector<HelpPrompt> prompts = mGrid.getHelpPrompts();
|
||||||
|
|
||||||
if (mText->isEditing())
|
if (mText->isEditing())
|
||||||
|
@ -245,7 +262,8 @@ std::vector<HelpPrompt> GuiTextEditPopup::getHelpPrompts() {
|
||||||
return prompts;
|
return prompts;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiTextEditPopup::updateDeleteRepeat(int deltaTime) {
|
void GuiTextEditPopup::updateDeleteRepeat(int deltaTime)
|
||||||
|
{
|
||||||
if (!mDeleteRepeat)
|
if (!mDeleteRepeat)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -15,30 +15,28 @@
|
||||||
#include "components/ComponentGrid.h"
|
#include "components/ComponentGrid.h"
|
||||||
#include "components/TextEditComponent.h"
|
#include "components/TextEditComponent.h"
|
||||||
|
|
||||||
class GuiTextEditPopup : public GuiComponent {
|
class GuiTextEditPopup : public GuiComponent
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
GuiTextEditPopup(Window *window,
|
GuiTextEditPopup(Window* window,
|
||||||
const HelpStyle &helpstyle,
|
const HelpStyle& helpstyle,
|
||||||
const std::string &title,
|
const std::string& title,
|
||||||
const std::string &initValue,
|
const std::string& initValue,
|
||||||
const std::function<void(const std::string &)> &okCallback,
|
const std::function<void(const std::string&)>& okCallback,
|
||||||
bool multiLine,
|
bool multiLine,
|
||||||
const std::string &acceptBtnText = "OK",
|
const std::string& acceptBtnText = "OK",
|
||||||
const std::string &saveConfirmationText = "SAVE CHANGES?",
|
const std::string& saveConfirmationText = "SAVE CHANGES?",
|
||||||
const std::string &infoString = "",
|
const std::string& infoString = "",
|
||||||
const std::string &defaultValue = "",
|
const std::string& defaultValue = "",
|
||||||
const std::string &loadBtnHelpText = "LOAD DEFAULT",
|
const std::string& loadBtnHelpText = "LOAD DEFAULT",
|
||||||
const std::string &clearBtnHelpText = "CLEAR",
|
const std::string& clearBtnHelpText = "CLEAR",
|
||||||
const std::string &cancelBtnHelpText = "DISCARD CHANGES");
|
const std::string& cancelBtnHelpText = "DISCARD CHANGES");
|
||||||
|
|
||||||
void onSizeChanged() override;
|
void onSizeChanged() override;
|
||||||
|
bool input(InputConfig* config, Input input) override;
|
||||||
bool input(InputConfig *config, Input input) override;
|
|
||||||
|
|
||||||
void update(int deltaTime) override;
|
void update(int deltaTime) override;
|
||||||
|
|
||||||
std::vector<HelpPrompt> getHelpPrompts() override;
|
std::vector<HelpPrompt> getHelpPrompts() override;
|
||||||
|
|
||||||
HelpStyle getHelpStyle() override { return mHelpStyle; }
|
HelpStyle getHelpStyle() override { return mHelpStyle; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -61,7 +59,7 @@ private:
|
||||||
std::string mClearBtnHelpText;
|
std::string mClearBtnHelpText;
|
||||||
std::string mCancelBtnHelpText;
|
std::string mCancelBtnHelpText;
|
||||||
|
|
||||||
std::function<void(const std::string &)> mOkCallback;
|
std::function<void(const std::string&)> mOkCallback;
|
||||||
|
|
||||||
bool mMultiLine;
|
bool mMultiLine;
|
||||||
bool mComplexMode;
|
bool mComplexMode;
|
||||||
|
|
|
@ -562,18 +562,18 @@ float Font::getNewlineStartOffset(const std::string& text,
|
||||||
endChar = static_cast<int>(text.find('\n', charStart));
|
endChar = static_cast<int>(text.find('\n', charStart));
|
||||||
return (xLen - sizeText(text.substr(charStart,
|
return (xLen - sizeText(text.substr(charStart,
|
||||||
static_cast<size_t>(endChar) != std::string::npos ?
|
static_cast<size_t>(endChar) != std::string::npos ?
|
||||||
endChar - charStart :
|
endChar - charStart :
|
||||||
endChar))
|
endChar))
|
||||||
.x) /
|
.x) /
|
||||||
2.0f;
|
2.0f;
|
||||||
}
|
}
|
||||||
case ALIGN_RIGHT: {
|
case ALIGN_RIGHT: {
|
||||||
int endChar = static_cast<int>(text.find('\n', charStart));
|
int endChar = static_cast<int>(text.find('\n', charStart));
|
||||||
return xLen - (sizeText(text.substr(charStart,
|
return xLen - (sizeText(text.substr(charStart,
|
||||||
static_cast<size_t>(endChar) != std::string::npos ?
|
static_cast<size_t>(endChar) != std::string::npos ?
|
||||||
endChar - charStart :
|
endChar - charStart :
|
||||||
endChar))
|
endChar))
|
||||||
.x);
|
.x);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -72,8 +72,8 @@ bool TextureData::initSVGFromMemory(const std::string& fileData)
|
||||||
mSourceHeight = svgImage->height;
|
mSourceHeight = svgImage->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
mWidth = static_cast<size_t>(std::round(mSourceWidth * mScaleDuringLoad));
|
mWidth = static_cast<size_t>(floorf(floorf(mSourceWidth) * mScaleDuringLoad));
|
||||||
mHeight = static_cast<size_t>(std::round(mSourceHeight * mScaleDuringLoad));
|
mHeight = static_cast<size_t>(floorf(floorf(mSourceHeight) * mScaleDuringLoad));
|
||||||
|
|
||||||
if (mWidth == 0) {
|
if (mWidth == 0) {
|
||||||
// Auto scale width to keep aspect ratio.
|
// Auto scale width to keep aspect ratio.
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
#ifndef ES_CORE_RESOURCES_TEXTURE_DATA_H
|
#ifndef ES_CORE_RESOURCES_TEXTURE_DATA_H
|
||||||
#define ES_CORE_RESOURCES_TEXTURE_DATA_H
|
#define ES_CORE_RESOURCES_TEXTURE_DATA_H
|
||||||
|
|
||||||
|
#include "utils/MathUtil.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -53,6 +55,7 @@ public:
|
||||||
float sourceWidth();
|
float sourceWidth();
|
||||||
float sourceHeight();
|
float sourceHeight();
|
||||||
void setSourceSize(float width, float height);
|
void setSourceSize(float width, float height);
|
||||||
|
glm::vec2 getSize() { return glm::vec2{mWidth, mHeight}; }
|
||||||
|
|
||||||
// Define a factor for scaling the file when loading it (1.0f = no scaling).
|
// Define a factor for scaling the file when loading it (1.0f = no scaling).
|
||||||
void setScaleDuringLoad(float scale) { mScaleDuringLoad = scale; }
|
void setScaleDuringLoad(float scale) { mScaleDuringLoad = scale; }
|
||||||
|
|
|
@ -143,13 +143,12 @@ bool TextureResource::bind()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<TextureResource> TextureResource::get(const std::string &path,
|
std::shared_ptr<TextureResource> TextureResource::get(const std::string& path,
|
||||||
bool tile,
|
bool tile,
|
||||||
bool forceLoad,
|
bool forceLoad,
|
||||||
bool dynamic,
|
bool dynamic,
|
||||||
bool linearMagnify,
|
bool linearMagnify,
|
||||||
float scaleDuringLoad,
|
float scaleDuringLoad)
|
||||||
bool cacheImage)
|
|
||||||
{
|
{
|
||||||
std::shared_ptr<ResourceManager>& rm = ResourceManager::getInstance();
|
std::shared_ptr<ResourceManager>& rm = ResourceManager::getInstance();
|
||||||
|
|
||||||
|
@ -177,7 +176,7 @@ std::shared_ptr<TextureResource> TextureResource::get(const std::string &path,
|
||||||
std::shared_ptr<TextureData> data = sTextureDataManager.get(tex.get());
|
std::shared_ptr<TextureData> data = sTextureDataManager.get(tex.get());
|
||||||
|
|
||||||
// Is it an SVG?
|
// Is it an SVG?
|
||||||
if (key.first.substr(key.first.size() - 4, std::string::npos) != ".svg" || cacheImage) {
|
if (key.first.substr(key.first.size() - 4, std::string::npos) != ".svg") {
|
||||||
// Probably not. Add it to our map. We don't add SVGs because 2 SVGs might be
|
// Probably not. Add it to our map. We don't add SVGs because 2 SVGs might be
|
||||||
// rasterized at different sizes.
|
// rasterized at different sizes.
|
||||||
sTextureMap[key] = std::weak_ptr<TextureResource>(tex);
|
sTextureMap[key] = std::weak_ptr<TextureResource>(tex);
|
||||||
|
@ -195,9 +194,14 @@ std::shared_ptr<TextureResource> TextureResource::get(const std::string &path,
|
||||||
return tex;
|
return tex;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For scalable source images in textures we want to set the resolution to rasterize at.
|
|
||||||
void TextureResource::rasterizeAt(size_t width, size_t height)
|
void TextureResource::rasterizeAt(size_t width, size_t height)
|
||||||
{
|
{
|
||||||
|
if (mTextureData != nullptr) {
|
||||||
|
glm::vec2 textureSize = mTextureData.get()->getSize();
|
||||||
|
if (textureSize.x == width && textureSize.y == height)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<TextureData> data;
|
std::shared_ptr<TextureData> data;
|
||||||
if (mTextureData != nullptr)
|
if (mTextureData != nullptr)
|
||||||
data = mTextureData;
|
data = mTextureData;
|
||||||
|
|
|
@ -25,15 +25,13 @@ class TextureData;
|
||||||
class TextureResource : public IReloadable
|
class TextureResource : public IReloadable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static std::shared_ptr<TextureResource> get(const std::string &path,
|
static std::shared_ptr<TextureResource> get(const std::string& path,
|
||||||
bool tile = false,
|
bool tile = false,
|
||||||
bool forceLoad = false,
|
bool forceLoad = false,
|
||||||
bool dynamic = true,
|
bool dynamic = true,
|
||||||
bool linearMagnify = false,
|
bool linearMagnify = false,
|
||||||
float scaleDuringLoad = 1.0f,
|
float scaleDuringLoad = 1.0f);
|
||||||
bool cacheImage = false);
|
void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height);
|
||||||
|
|
||||||
void initFromPixels(const unsigned char *dataRGBA, size_t width, size_t height);
|
|
||||||
virtual void initFromMemory(const char* data, size_t length);
|
virtual void initFromMemory(const char* data, size_t length);
|
||||||
static void manualUnload(std::string path, bool tile);
|
static void manualUnload(std::string path, bool tile);
|
||||||
|
|
||||||
|
@ -49,7 +47,7 @@ public:
|
||||||
void rasterizeAt(size_t width, size_t height);
|
void rasterizeAt(size_t width, size_t height);
|
||||||
glm::vec2 getSourceImageSize() const { return mSourceSize; }
|
glm::vec2 getSourceImageSize() const { return mSourceSize; }
|
||||||
|
|
||||||
virtual ~TextureResource() noexcept;
|
virtual ~TextureResource();
|
||||||
|
|
||||||
bool isInitialized() const { return true; }
|
bool isInitialized() const { return true; }
|
||||||
bool isTiled() const;
|
bool isTiled() const;
|
||||||
|
|
|
@ -564,13 +564,20 @@ namespace Utils
|
||||||
|
|
||||||
std::string trim(const std::string& stringArg)
|
std::string trim(const std::string& stringArg)
|
||||||
{
|
{
|
||||||
const size_t strBegin = stringArg.find_first_not_of(" \t");
|
std::string trimString = stringArg;
|
||||||
const size_t strEnd = stringArg.find_last_not_of(" \t");
|
|
||||||
|
|
||||||
if (strBegin == std::string::npos)
|
// Trim leading and trailing whitespaces.
|
||||||
return "";
|
trimString.erase(trimString.begin(),
|
||||||
|
std::find_if(trimString.begin(), trimString.end(), [](char c) {
|
||||||
|
return !std::isspace(static_cast<unsigned char>(c));
|
||||||
|
}));
|
||||||
|
trimString.erase(
|
||||||
|
std::find_if(trimString.rbegin(), trimString.rend(),
|
||||||
|
[](char c) { return !std::isspace(static_cast<unsigned char>(c)); })
|
||||||
|
.base(),
|
||||||
|
trimString.end());
|
||||||
|
|
||||||
return stringArg.substr(strBegin, strEnd - strBegin + 1);
|
return trimString;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string replace(const std::string& stringArg,
|
std::string replace(const std::string& stringArg,
|
||||||
|
|
431
resources/graphics/badge_altemulator.svg
Normal file
|
@ -0,0 +1,431 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="80"
|
||||||
|
height="112"
|
||||||
|
viewBox="0 0 21.166666 29.633334"
|
||||||
|
version="1.1"
|
||||||
|
id="svg4842"
|
||||||
|
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
|
||||||
|
sodipodi:docname="badge_altemulator.svg">
|
||||||
|
<defs
|
||||||
|
id="defs4836" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="7.0546875"
|
||||||
|
inkscape:cx="29.041584"
|
||||||
|
inkscape:cy="62.825107"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="3440"
|
||||||
|
inkscape:window-height="1355"
|
||||||
|
inkscape:window-x="2560"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-nodes="false"
|
||||||
|
inkscape:snap-others="false"
|
||||||
|
inkscape:snap-global="true"
|
||||||
|
inkscape:document-rotation="0"/>
|
||||||
|
<metadata
|
||||||
|
id="metadata4839">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-1.9829021e-4,-266.11715)">
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.56896;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
id="rect5286"
|
||||||
|
width="21.166666"
|
||||||
|
height="29.633333"
|
||||||
|
x="0.0001982902"
|
||||||
|
y="266.11713" />
|
||||||
|
<g
|
||||||
|
id="g16"
|
||||||
|
transform="matrix(0.10079384,0,0,0.10062218,-2.2563844e-4,266.11692)"
|
||||||
|
style="fill:#d7d7d7;fill-opacity:1">
|
||||||
|
<rect
|
||||||
|
x="3.0257001"
|
||||||
|
y="2.9029"
|
||||||
|
width="204.36"
|
||||||
|
height="288.81"
|
||||||
|
id="rect14"
|
||||||
|
style="fill:#d7d7d7;fill-opacity:1;stroke-width:0.26458"/>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g20"
|
||||||
|
transform="matrix(0.10079384,0,0,0.10062218,-2.2563844e-4,266.11692)">
|
||||||
|
<rect
|
||||||
|
x="7.7007999"
|
||||||
|
y="7.7174001"
|
||||||
|
width="194.89999"
|
||||||
|
height="279.22"
|
||||||
|
id="rect18"
|
||||||
|
style="stroke-width:0.26458"/>
|
||||||
|
</g>
|
||||||
|
<rect
|
||||||
|
style="fill:#e6e6e6;fill-opacity:1;stroke-width:0.0266453"
|
||||||
|
id="rect22"
|
||||||
|
height="17.395565"
|
||||||
|
width="17.540144"
|
||||||
|
y="271.47574"
|
||||||
|
x="1.8325089" />
|
||||||
|
<g
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.25971"
|
||||||
|
id="g56-4"
|
||||||
|
aria-label="CONTENT RATED BY"
|
||||||
|
transform="matrix(0.09632353,0,0,0.10097609,0.27971034,266.32293)">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path28-8"
|
||||||
|
d="m 17.401,237.59 c 0,6.2332 2.6179,7.5296 6.8066,7.5296 1.0222,0 1.845,-0.0748 2.8672,-0.27426 l -0.52358,-3.9394 -2.2938,0.17453 c -1.0222,0.0499 -1.6705,-0.52358 -1.6705,-3.4906 0,-2.96702 0.74798,-3.5155 1.6705,-3.4656 l 2.2938,0.14959 0.54852,-3.9144 c -1.0222,-0.22439 -1.8201,-0.42385 -2.8423,-0.42385 -4.2136,0 -6.8565,1.7952 -6.8565,7.6543 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path30-0"
|
||||||
|
d="m 27.488,237.59 c 0,5.7844 2.1691,7.6294 6.9313,7.6294 3.5155,-0.17452 5.7345,-2.7176 5.7345,-7.6294 0,-5.7594 -2.2439,-7.6543 -6.9811,-7.6543 -3.5155,0.17453 -5.6846,2.7675 -5.6846,7.6543 z m 5.186,0 c 0,-2.967 0.42385,-3.2911 1.097,-3.2911 0.67315,0 1.1718,0.32413 1.1718,3.2911 0,2.96697 -0.42385,3.2911 -1.097,3.2911 -0.67315,0 -1.1718,-0.32412 -1.1718,-3.2911 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path32-8"
|
||||||
|
d="m 41.19,237.59 c 0,2.4933 0.04986,4.8868 0.09973,7.2304 0,0.1496 0.09973,0.24933 0.24933,0.24933 0.79784,0.0499 1.5708,0.0748 2.4185,0.0748 0.82278,0 1.2716,-0.0249 2.0694,-0.0748 l -0.09973,-6.6071 2.593,6.3578 c 0.04987,0.1496 0.12466,0.24933 0.27426,0.24933 0.79784,0.0499 1.5209,0.0748 2.2689,0.0748 0.82278,0 1.2466,-0.0249 1.9447,-0.0748 0.04987,-2.4933 0.09973,-4.9865 0.09973,-7.4798 0,-2.4933 -0.04987,-4.8868 -0.09973,-7.2305 0,-0.12466 -0.12466,-0.22439 -0.24933,-0.24932 -0.74798,-0.0249 -1.471,-0.0499 -2.3187,-0.0499 -0.82278,0 -1.3962,0.0249 -2.1691,0.0499 l 0.0748,6.6321 -2.5681,-6.3828 c -0.0748,-0.12466 -0.1496,-0.22439 -0.27426,-0.24932 -0.79784,-0.0249 -1.4461,-0.0499 -2.1691,-0.0499 -0.82278,0 -1.2716,0.0249 -2.0445,0.0499 -0.0748,2.4933 -0.09973,4.9865 -0.09973,7.4798 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path34-1"
|
||||||
|
d="m 53.871,232.01 c 0,0.67318 0,1.3464 0.02493,2.0445 0,0.14959 0.09973,0.24932 0.24933,0.24932 0.42385,0.0249 1.6206,0.0499 2.7426,0.0748 v 3.2163 c 0,2.4933 0.04987,4.8868 0.09973,7.2304 0,0.1496 0.09973,0.24933 0.24933,0.24933 0.82278,0.0499 1.6954,0.0748 2.5431,0.0748 0.82278,0 1.3962,-0.0249 2.1941,-0.0748 0.04987,-2.4933 0.09973,-4.9865 0.09973,-7.4798 0,-1.1469 -0.02493,-2.1691 -0.04986,-3.1914 1.2965,0 2.6179,-0.0249 3.0418,-0.0499 v -1.845 -2.1442 c -0.02493,-0.12466 -0.12466,-0.24932 -0.24933,-0.24932 -0.84771,-0.0249 -4.3133,-0.0499 -5.161,-0.0499 -0.82278,0 -4.9865,0.0249 -5.7594,0.0499 -0.02493,0.67318 -0.02493,1.2965 -0.02493,1.8949 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path36-0"
|
||||||
|
d="m 65.853,237.59 c 0,2.4933 0.04986,4.8868 0.09973,7.2304 0,0.1496 0.09973,0.24933 0.24933,0.24933 0.82278,0.0499 4.438,0.12466 5.2857,0.12466 0.82278,0 3.4906,-0.0249 4.2884,-0.0748 v -1.8201 -2.1691 c -0.02493,-0.12467 -0.12466,-0.24933 -0.24933,-0.24933 -0.84771,-0.0249 -3.5654,-0.0499 -4.4131,-0.0499 h -0.32412 v -1.2965 h 3.2412 v -1.6456 -1.8949 c -0.02493,-0.12466 -0.12466,-0.24932 -0.24933,-0.24932 -0.64825,0 -1.9946,-0.0249 -2.9919,-0.0249 v -1.3214 h 0.97237 c 0.82278,0 3.1664,0 3.9643,-0.0499 v -1.8201 -2.1691 c -0.02493,-0.12466 -0.12466,-0.24932 -0.24933,-0.24932 -0.84771,-0.0249 -3.5155,-0.0499 -4.3632,-0.0499 -0.82278,0 -4.3881,0.0249 -5.161,0.0499 -0.0748,2.4933 -0.09973,4.9865 -0.09973,7.4798 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path38-2"
|
||||||
|
d="m 76.912,237.59 c 0,2.4933 0.04986,4.8868 0.09973,7.2304 0,0.1496 0.09973,0.24933 0.24933,0.24933 0.79784,0.0499 1.5708,0.0748 2.4185,0.0748 0.82278,0 1.2716,-0.0249 2.0694,-0.0748 l -0.09973,-6.6071 2.593,6.3578 c 0.04987,0.1496 0.12466,0.24933 0.27426,0.24933 0.79784,0.0499 1.5209,0.0748 2.2689,0.0748 0.82278,0 1.2466,-0.0249 1.9447,-0.0748 0.04987,-2.4933 0.09973,-4.9865 0.09973,-7.4798 0,-2.4933 -0.04986,-4.8868 -0.09973,-7.2305 0,-0.12466 -0.12466,-0.22439 -0.24933,-0.24932 -0.74798,-0.0249 -1.471,-0.0499 -2.3187,-0.0499 -0.82278,0 -1.3962,0.0249 -2.1691,0.0499 l 0.0748,6.6321 -2.5681,-6.3828 c -0.0748,-0.12466 -0.1496,-0.22439 -0.27426,-0.24932 -0.79784,-0.0249 -1.4461,-0.0499 -2.1691,-0.0499 -0.82278,0 -1.2716,0.0249 -2.0445,0.0499 -0.0748,2.4933 -0.09973,4.9865 -0.09973,7.4798 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path40-2"
|
||||||
|
d="m 89.593,232.01 c 0,0.67318 0,1.3464 0.02493,2.0445 0,0.14959 0.09973,0.24932 0.24933,0.24932 0.42385,0.0249 1.6206,0.0499 2.7426,0.0748 v 3.2163 c 0,2.4933 0.04986,4.8868 0.09973,7.2304 0,0.1496 0.09973,0.24933 0.24933,0.24933 0.82278,0.0499 1.6954,0.0748 2.5431,0.0748 0.82278,0 1.3962,-0.0249 2.1941,-0.0748 0.04987,-2.4933 0.09973,-4.9865 0.09973,-7.4798 0,-1.1469 -0.02493,-2.1691 -0.04986,-3.1914 1.2965,0 2.6179,-0.0249 3.0418,-0.0499 v -1.845 -2.1442 c -0.0249,-0.12466 -0.12466,-0.24932 -0.24932,-0.24932 -0.84771,-0.0249 -4.3133,-0.0499 -5.1611,-0.0499 -0.82278,0 -4.9865,0.0249 -5.7594,0.0499 -0.02493,0.67318 -0.02493,1.2965 -0.02493,1.8949 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path42-9"
|
||||||
|
d="m 106.77,237.27 c 0,2.4933 0.0499,5.2109 0.0499,7.5546 0,0.1496 0.0997,0.24933 0.24933,0.24933 0.84771,0.0499 1.6954,0.0499 2.5431,0.0499 0.72305,0 1.4461,0 2.1941,-0.0499 -0.0249,-1.9448 -0.0997,-4.089 -0.12466,-6.1334 h 0.32412 c 0.49865,1.7204 1.1968,3.8396 1.8949,5.9589 0.0499,0.1496 0.24933,0.24933 0.37399,0.24933 0.67318,0.0499 1.3464,0.0748 2.0195,0.0748 0.87264,0 1.7702,-0.0499 2.593,-0.14959 -0.42385,-1.87 -0.9973,-3.6651 -1.9697,-5.6098 -0.34906,-0.57345 -0.82278,-0.97237 -1.3962,-1.1718 1.6456,-0.77291 2.6678,-2.1691 2.6678,-4.0142 0,-4.0391 -2.5431,-4.3383 -6.2581,-4.3383 -1.3962,0 -3.4656,0.17453 -5.1112,0.42385 0,2.4933 -0.0499,4.4131 -0.0499,6.9063 z m 4.9117,-1.3962 v -2.2439 c 0.17453,-0.0249 0.39892,-0.0249 0.59838,-0.0249 0.89758,0 1.1469,0.42386 1.1469,1.1968 0,0.64824 -0.54852,1.0721 -1.3214,1.0721 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path44-75"
|
||||||
|
d="m 118.65,244.87 c 0,0.12466 0.0997,0.19946 0.22439,0.19946 0.82278,0.0499 1.6954,0.0748 2.5431,0.0748 0.82277,0 1.2716,-0.0249 2.0694,-0.0748 0.17453,-0.89758 0.32413,-1.8201 0.47372,-2.7426 h 2.3187 c 0.12466,0.84771 0.27425,1.6954 0.44878,2.4933 0.0249,0.1496 0.1496,0.24933 0.27426,0.24933 0.87264,0.0748 1.5957,0.0748 2.4434,0.0748 0.8477,0 1.3962,-0.0249 2.1691,-0.0748 -0.72304,-4.8369 -1.8949,-9.9232 -2.8423,-14.71 -0.0249,-0.12466 -0.1496,-0.24932 -0.27426,-0.24932 -1.1968,-0.0249 -2.3686,-0.0499 -3.5654,-0.0499 -1.1718,0 -2.3187,0 -3.4407,0.0499 -0.92251,4.6125 -1.9697,9.4245 -2.7177,13.987 -0.0499,0.24932 -0.12466,0.72304 -0.12466,0.77291 z m 5.7345,-5.7844 c 0.19946,-1.8699 0.39892,-3.7399 0.62331,-5.5849 0.24933,1.87 0.49866,3.7399 0.77291,5.5849 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path46-6"
|
||||||
|
d="m 130.96,232.01 c 0,0.67318 0,1.3464 0.0249,2.0445 0,0.14959 0.0997,0.24932 0.24933,0.24932 0.42385,0.0249 1.6206,0.0499 2.7426,0.0748 v 3.2163 c 0,2.4933 0.0499,4.8868 0.0997,7.2304 0,0.1496 0.0997,0.24933 0.24932,0.24933 0.82278,0.0499 1.6954,0.0748 2.5431,0.0748 0.82277,0 1.3962,-0.0249 2.1941,-0.0748 0.0499,-2.4933 0.0997,-4.9865 0.0997,-7.4798 0,-1.1469 -0.0249,-2.1691 -0.0499,-3.1914 1.2965,0 2.6179,-0.0249 3.0418,-0.0499 v -1.845 -2.1442 c -0.0249,-0.12466 -0.12467,-0.24932 -0.24933,-0.24932 -0.84771,-0.0249 -4.3133,-0.0499 -5.161,-0.0499 -0.82277,0 -4.9865,0.0249 -5.7594,0.0499 -0.0249,0.67318 -0.0249,1.2965 -0.0249,1.8949 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path48-4"
|
||||||
|
d="m 142.94,237.59 c 0,2.4933 0.0499,4.8868 0.0997,7.2304 0,0.1496 0.0997,0.24933 0.24933,0.24933 0.82277,0.0499 4.438,0.12466 5.2857,0.12466 0.82277,0 3.4906,-0.0249 4.2884,-0.0748 v -1.8201 -2.1691 c -0.0249,-0.12467 -0.12466,-0.24933 -0.24932,-0.24933 -0.84771,-0.0249 -3.5654,-0.0499 -4.4131,-0.0499 h -0.32413 v -1.2965 h 3.2412 v -1.6456 -1.8949 c -0.0249,-0.12466 -0.12466,-0.24932 -0.24932,-0.24932 -0.64825,0 -1.9946,-0.0249 -2.9919,-0.0249 v -1.3214 h 0.97238 c 0.82277,0 3.1664,0 3.9643,-0.0499 v -1.8201 -2.1691 c -0.0249,-0.12466 -0.12466,-0.24932 -0.24933,-0.24932 -0.8477,-0.0249 -3.5155,-0.0499 -4.3632,-0.0499 -0.82278,0 -4.3881,0.0249 -5.161,0.0499 -0.0748,2.4933 -0.0997,4.9865 -0.0997,7.4798 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path50-6"
|
||||||
|
d="m 158.98,237.59 c 0,-1.1968 0,-2.2439 0.0249,-3.2911 h 0.42385 c 0.67318,0 1.1718,0.32413 1.1718,3.2911 0,2.96697 -0.49865,3.316 -1.1718,3.316 H 159.0049 C 158.98,239.8588 158.98,238.8117 158.98,237.59 Z m -4.9366,0 c 0,2.4933 0.0499,4.6375 0.0499,6.9811 0,0.14959 0.0997,0.24932 0.24933,0.24932 1.7204,0.17453 3.2911,0.29919 4.6624,0.29919 4.1887,0 6.8066,-1.2965 6.8066,-7.5296 0,-5.8592 -2.6429,-7.6543 -6.8565,-7.6543 -1.3962,0 -3.2163,0.17453 -4.8619,0.42385 0,2.4933 -0.0499,4.7372 -0.0499,7.2305 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path52-3"
|
||||||
|
d="m 176.93,235.6 c 0,-0.77291 0,-1.4212 0.0249,-2.0445 0.0499,-0.0249 0.19946,-0.0249 0.29919,-0.0249 0.64825,0 1.2965,0.32413 1.2965,0.99731 0,0.69811 -0.67318,1.0721 -1.4461,1.0721 z m 0.0249,3.69 h 0.62332 c 0.67318,0 1.1469,0.42386 1.1469,0.99731 0,0.64825 -0.37399,1.0222 -1.3214,1.0222 h -0.39892 c -0.0249,-0.67319 -0.0499,-1.3464 -0.0499,-2.0196 z m -4.9117,-2.0195 c 0,2.4933 0.0499,5.0115 0.0499,7.3551 0,0.1496 0.0997,0.27426 0.24932,0.29919 1.7204,0.19946 3.6152,0.27426 5.3106,0.27426 3.3659,0 6.0586,-0.67318 6.0586,-4.6375 0,-1.1968 -0.82278,-2.2938 -2.1941,-3.0667 0.89757,-0.77291 1.4461,-1.8949 1.4461,-3.2163 0,-4.0391 -2.5431,-4.3383 -6.0088,-4.3383 -1.3962,0 -3.2163,0.17453 -4.8618,0.42385 0,2.4933 -0.0499,4.4131 -0.0499,6.9063 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path54-7"
|
||||||
|
d="m 183.35,230.21 c 0.42386,1.8949 1.097,4.438 2.0694,6.3578 0.57345,0.97237 1.2716,1.7453 2.0195,2.3437 -0.0249,2.0195 -0.0249,3.9892 -0.0249,5.909 0,0.1496 0.0997,0.24933 0.24932,0.24933 0.82278,0.0499 1.7453,0.0748 2.593,0.0748 0.82278,0 1.4461,-0.0249 2.2439,-0.0748 -0.0249,-2.0445 -0.0499,-4.089 -0.0748,-6.1584 0.74798,-0.59839 1.4461,-1.3713 2.0195,-2.3437 0.97237,-1.9198 1.6456,-4.4629 2.0694,-6.3578 -0.82277,-0.0997 -1.7204,-0.1496 -2.593,-0.1496 -0.67318,0 -1.3464,0.0249 -2.0195,0.0748 -0.12466,0 -0.32412,0.0997 -0.37399,0.24933 -0.54851,1.6705 -1.1469,3.7399 -1.5957,5.4353 -0.47372,-1.6954 -1.0472,-3.7648 -1.5957,-5.4353 -0.0499,-0.1496 -0.24932,-0.24933 -0.37399,-0.24933 -0.67318,-0.0499 -1.3464,-0.0748 -2.0195,-0.0748 -0.89757,0 -1.7702,0.0499 -2.593,0.1496 z"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g5256"
|
||||||
|
transform="matrix(1.0104997,0,0,1.0207455,-0.11128094,-6.092617)"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1">
|
||||||
|
<path
|
||||||
|
d="m 2.2271284,292.95117 c 0,0.40604 0.015331,0.79582 0.030663,1.17749 0,0.0243 0.030663,0.0406 0.076656,0.0406 0.2529687,0.008 1.364477,0.0203 1.625048,0.0203 0.2529687,0 1.073192,-0.004 1.3184891,-0.0122 v -0.29642 -0.35327 c -0.00767,-0.0203 -0.038327,-0.0406 -0.076656,-0.0406 -0.2606263,-0.004 -1.096179,-0.008 -1.3568192,-0.008 h -0.099653 v -0.21114 h 0.9965315 v -0.268 -0.30859 c -0.00767,-0.0203 -0.038327,-0.0406 -0.076656,-0.0406 -0.1993091,0 -0.6132565,-0.004 -0.919871,-0.004 v -0.21521 h 0.2989565 c 0.2529687,0 0.9735306,0 1.2188276,-0.008 v -0.29642 -0.35326 c -0.00767,-0.0203 -0.038327,-0.0406 -0.076656,-0.0406 -0.2606264,-0.004 -1.0808497,-0.008 -1.3414899,-0.008 -0.2529687,0 -1.3491477,0.004 -1.5867594,0.008 -0.022997,0.40604 -0.030663,0.81206 -0.030663,1.21812 z"
|
||||||
|
id="path78-4"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.036704"/>
|
||||||
|
<path
|
||||||
|
d="m 5.6153964,294.14527 c 0.5289244,0.0325 1.0961791,0.0446 1.6174179,0.0446 1.0348618,0 1.8780861,-0.15023 1.8780861,-0.79582 0,-0.5644 -0.9505434,-0.71463 -1.5867594,-0.81618 -0.3142859,-0.0487 -0.5519252,-0.0853 -0.5519252,-0.15834 0,-0.0731 0.1533072,-0.1137 0.3909464,-0.1137 0.4752649,0 1.0195325,0.0812 1.3798065,0.16647 l 0.1763081,-0.67809 c -0.5135951,-0.0527 -1.0348617,-0.0894 -1.4795233,-0.0894 -1.0501911,0 -1.8167688,0.0487 -1.8167688,0.70652 0,0.62531 0.8508821,0.75525 1.4258361,0.84049 0.2989567,0.0446 0.5212666,0.0772 0.5212666,0.15836 0,0.065 -0.1226499,0.14617 -0.4139474,0.14617 -0.3449586,0 -0.8202234,-0.0528 -1.3568193,-0.14212 z"
|
||||||
|
id="path80-9"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.036704"/>
|
||||||
|
<path
|
||||||
|
d="m 9.4307297,292.9475 c 0,0.10149 0.00613,0.19489 0.01226,0.29641 0,0.0243 0.024523,0.0406 0.061303,0.0406 0.2023048,0.008 0.9931183,0.0203 1.2015133,0.0203 0.202306,0 0.919554,-0.004 1.054426,-0.0122 0,-0.0853 0.0061,-0.17459 0.0061,-0.2558 0,-0.20302 -0.0061,-0.24769 -0.0061,-0.34514 -0.0061,-0.0203 -0.03065,-0.0406 -0.06131,-0.0406 -0.208428,-0.004 -0.692729,-0.008 -0.901169,-0.008 -0.202303,0 -1.1647903,0.004 -1.354836,0.008 -0.00613,0.13399 -0.01226,0.21926 -0.01226,0.29642 z"
|
||||||
|
id="path82-1"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.0328234"/>
|
||||||
|
<path
|
||||||
|
d="m 13.651876,292.95117 c 0,-0.19489 0,-0.36544 0.0077,-0.53598 h 0.130314 c 0.206967,0 0.360288,0.0528 0.360288,0.53598 0,0.48319 -0.153307,0.54004 -0.360288,0.54004 h -0.130314 c -0.0077,-0.17054 -0.0077,-0.34108 -0.0077,-0.54004 z m -1.517812,0 c 0,0.40604 0.01533,0.75525 0.01533,1.13692 0,0.0243 0.03066,0.0406 0.07666,0.0406 0.528925,0.0284 1.011861,0.0487 1.433466,0.0487 1.28783,0 2.092697,-0.21115 2.092697,-1.22628 0,-0.95418 -0.812553,-1.24657 -2.108095,-1.24657 -0.429277,0 -0.98886,0.0284 -1.494784,0.0691 0,0.40604 -0.01533,0.7715 -0.01533,1.17749 z"
|
||||||
|
id="path84-7"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.036704"/>
|
||||||
|
<path
|
||||||
|
d="m 15.999759,292.92458 c 0,0.3953 0.01492,0.77476 0.02985,1.14634 0,0.0237 0.02985,0.0395 0.07463,0.0395 0.246278,0.008 1.328384,0.0198 1.582062,0.0198 0.246277,0 1.044804,-0.004 1.283611,-0.0118 v -0.28858 -0.34391 c -0.0075,-0.0198 -0.03731,-0.0395 -0.07463,-0.0395 -0.253731,-0.004 -1.067182,-0.008 -1.320928,-0.008 h -0.09702 v -0.20557 h 0.970171 v -0.2609 -0.30043 c -0.0075,-0.0198 -0.03731,-0.0395 -0.07463,-0.0395 -0.194037,0 -0.597034,-0.004 -0.895539,-0.004 v -0.20951 h 0.291049 c 0.246277,0 0.947778,0 1.186587,-0.008 v -0.28857 -0.34391 c -0.0075,-0.0198 -0.03731,-0.0395 -0.07463,-0.0395 -0.253731,-0.004 -1.052258,-0.008 -1.306003,-0.008 -0.246277,0 -1.313459,0.004 -1.544785,0.008 -0.02239,0.39529 -0.02985,0.79057 -0.02985,1.18589 z"
|
||||||
|
id="path86-0"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.0357331"/>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g54"
|
||||||
|
aria-label="CONTENT RATED BY"
|
||||||
|
transform="matrix(0.09871346,0,0,0.10292059,-29.557342,270.26518)"
|
||||||
|
style="fill:#ffffff;stroke-width:0.25912">
|
||||||
|
<path
|
||||||
|
id="path26"
|
||||||
|
d="m 17.44,237.05 c 0,6.2189 2.6119,7.5125 6.7911,7.5125 1.0199,0 1.8408,-0.0746 2.8607,-0.27364 l -0.52239,-3.9304 -2.2886,0.17413 c -1.0199,0.0497 -1.6667,-0.52239 -1.6667,-3.4826 0,-2.9602 0.74627,-3.5075 1.6667,-3.4577 l 2.2886,0.14926 0.54726,-3.9055 c -1.0199,-0.22388 -1.8159,-0.42289 -2.8358,-0.42289 -4.204,0 -6.8408,1.791 -6.8408,7.6368 z"
|
||||||
|
inkscape:connector-curvature="0"/>
|
||||||
|
<path
|
||||||
|
id="path28"
|
||||||
|
d="m 27.505,237.05 c 0,5.7712 2.1642,7.612 6.9154,7.612 3.5075,-0.17413 5.7214,-2.7114 5.7214,-7.612 0,-5.7463 -2.2388,-7.6368 -6.9652,-7.6368 -3.5075,0.17413 -5.6717,2.7612 -5.6717,7.6368 z m 5.1741,0 c 0,-2.9602 0.42289,-3.2836 1.0945,-3.2836 0.67161,0 1.1692,0.32339 1.1692,3.2836 0,2.9602 -0.42289,3.2836 -1.0945,3.2836 -0.67161,0 -1.1692,-0.32339 -1.1692,-3.2836 z"
|
||||||
|
inkscape:connector-curvature="0"/>
|
||||||
|
<path
|
||||||
|
id="path30"
|
||||||
|
d="m 41.176,237.05 c 0,2.4876 0.04975,4.8756 0.0995,7.214 0,0.14925 0.0995,0.24875 0.24876,0.24875 0.79602,0.0498 1.5672,0.0746 2.4129,0.0746 0.8209,0 1.2687,-0.0249 2.0647,-0.0746 l -0.0995,-6.5921 2.5871,6.3433 c 0.04975,0.14925 0.12438,0.24875 0.27363,0.24875 0.79602,0.0498 1.5174,0.0746 2.2637,0.0746 0.8209,0 1.2438,-0.0249 1.9403,-0.0746 0.04975,-2.4876 0.0995,-4.9751 0.0995,-7.4627 0,-2.4876 -0.04975,-4.8756 -0.0995,-7.214 0,-0.12438 -0.12438,-0.22388 -0.24876,-0.24876 -0.74627,-0.0249 -1.4677,-0.0498 -2.3134,-0.0498 -0.8209,0 -1.393,0.0249 -2.1642,0.0498 l 0.07463,6.6169 -2.5622,-6.3682 c -0.07463,-0.12438 -0.14925,-0.22388 -0.27363,-0.24876 -0.79602,-0.0249 -1.4428,-0.0498 -2.1642,-0.0498 -0.8209,0 -1.2687,0.0249 -2.0398,0.0498 -0.07463,2.4876 -0.0995,4.9751 -0.0995,7.4627 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path32"
|
||||||
|
d="m 53.827,231.48 c 0,0.67164 0,1.3433 0.02488,2.0398 0,0.14926 0.0995,0.24876 0.24876,0.24876 0.42289,0.0249 1.6169,0.0498 2.7363,0.0746 v 3.209 c 0,2.4876 0.04975,4.8756 0.0995,7.214 0,0.14925 0.0995,0.24875 0.24876,0.24875 0.8209,0.0498 1.6915,0.0746 2.5373,0.0746 0.8209,0 1.393,-0.0249 2.1891,-0.0746 0.04975,-2.4876 0.0995,-4.9751 0.0995,-7.4627 0,-1.1443 -0.02488,-2.1642 -0.04975,-3.1841 1.2935,0 2.6119,-0.0249 3.0348,-0.0497 v -1.8408 -2.1393 c -0.02488,-0.12438 -0.12438,-0.24876 -0.24876,-0.24876 -0.84577,-0.0249 -4.3035,-0.0498 -5.1493,-0.0498 -0.8209,0 -4.9751,0.0249 -5.7463,0.0498 -0.02488,0.67165 -0.02488,1.2935 -0.02488,1.8906 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path34"
|
||||||
|
d="m 65.782,237.05 c 0,2.4876 0.04975,4.8756 0.0995,7.214 0,0.14925 0.0995,0.24875 0.24876,0.24875 0.8209,0.0498 4.4279,0.12438 5.2736,0.12438 0.8209,0 3.4826,-0.0249 4.2786,-0.0746 v -1.8159 -2.1642 c -0.02488,-0.12437 -0.12438,-0.24875 -0.24876,-0.24875 -0.84577,-0.0249 -3.5572,-0.0497 -4.403,-0.0497 h -0.32338 v -1.2935 h 3.2338 v -1.6418 -1.8906 c -0.02488,-0.12438 -0.12438,-0.24876 -0.24876,-0.24876 -0.64677,0 -1.9901,-0.0249 -2.9851,-0.0249 v -1.3184 h 0.97015 c 0.8209,0 3.1592,0 3.9552,-0.0497 v -1.8159 -2.1642 c -0.02487,-0.12438 -0.12438,-0.24876 -0.24876,-0.24876 -0.84577,-0.0249 -3.5075,-0.0498 -4.3532,-0.0498 -0.8209,0 -4.3781,0.0249 -5.1493,0.0498 -0.07463,2.4876 -0.0995,4.9751 -0.0995,7.4627 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path36"
|
||||||
|
d="m 76.816,237.05 c 0,2.4876 0.04975,4.8756 0.0995,7.214 0,0.14925 0.0995,0.24875 0.24876,0.24875 0.79602,0.0498 1.5672,0.0746 2.4129,0.0746 0.8209,0 1.2687,-0.0249 2.0647,-0.0746 l -0.0995,-6.5921 2.5871,6.3433 c 0.04975,0.14925 0.12438,0.24875 0.27363,0.24875 0.79602,0.0498 1.5174,0.0746 2.2637,0.0746 0.8209,0 1.2438,-0.0249 1.9403,-0.0746 0.04975,-2.4876 0.0995,-4.9751 0.0995,-7.4627 0,-2.4876 -0.04975,-4.8756 -0.0995,-7.214 0,-0.12438 -0.12438,-0.22388 -0.24876,-0.24876 -0.74627,-0.0249 -1.4677,-0.0498 -2.3134,-0.0498 -0.8209,0 -1.393,0.0249 -2.1642,0.0498 l 0.07463,6.6169 -2.5622,-6.3682 c -0.07463,-0.12438 -0.14925,-0.22388 -0.27363,-0.24876 -0.79602,-0.0249 -1.4428,-0.0498 -2.1642,-0.0498 -0.8209,0 -1.2687,0.0249 -2.0398,0.0498 -0.07463,2.4876 -0.0995,4.9751 -0.0995,7.4627 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path38"
|
||||||
|
d="m 89.468,231.48 c 0,0.67164 0,1.3433 0.02488,2.0398 0,0.14926 0.0995,0.24876 0.24876,0.24876 0.42289,0.0249 1.6169,0.0498 2.7363,0.0746 v 3.209 c 0,2.4876 0.04975,4.8756 0.0995,7.214 0,0.14925 0.0995,0.24875 0.24876,0.24875 0.8209,0.0498 1.6915,0.0746 2.5373,0.0746 0.8209,0 1.393,-0.0249 2.1891,-0.0746 0.04975,-2.4876 0.0995,-4.9751 0.0995,-7.4627 0,-1.1443 -0.02488,-2.1642 -0.04975,-3.1841 1.2935,0 2.612,-0.0249 3.0348,-0.0497 v -1.8408 -2.1393 c -0.0249,-0.12438 -0.12438,-0.24876 -0.24875,-0.24876 -0.84578,-0.0249 -4.3035,-0.0498 -5.1493,-0.0498 -0.8209,0 -4.9751,0.0249 -5.7463,0.0498 -0.02488,0.67165 -0.02488,1.2935 -0.02488,1.8906 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path40"
|
||||||
|
d="m 106.6,236.73 c 0,2.4876 0.0498,5.199 0.0498,7.5373 0,0.14925 0.0995,0.24875 0.24876,0.24875 0.84577,0.0498 1.6916,0.0498 2.5373,0.0498 0.7214,0 1.4428,0 2.1891,-0.0498 -0.0249,-1.9403 -0.0995,-4.0796 -0.12438,-6.1194 h 0.32339 c 0.49751,1.7164 1.194,3.8309 1.8906,5.9453 0.0497,0.14926 0.24876,0.24876 0.37314,0.24876 0.67164,0.0498 1.3433,0.0746 2.0149,0.0746 0.87065,0 1.7662,-0.0498 2.5871,-0.14926 -0.42289,-1.8657 -0.99503,-3.6567 -1.9652,-5.597 -0.34826,-0.57214 -0.8209,-0.97015 -1.393,-1.1692 1.6418,-0.77114 2.6617,-2.1642 2.6617,-4.005 0,-4.0299 -2.5373,-4.3284 -6.2438,-4.3284 -1.393,0 -3.4577,0.17413 -5.0995,0.42289 0,2.4876 -0.0498,4.403 -0.0498,6.8906 z m 4.9005,-1.393 v -2.2388 c 0.17413,-0.0249 0.39802,-0.0249 0.59702,-0.0249 0.89553,0 1.1443,0.42289 1.1443,1.194 0,0.64676 -0.54726,1.0696 -1.3184,1.0696 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path42"
|
||||||
|
d="m 118.46,244.31 c 0,0.12438 0.0995,0.199 0.22388,0.199 0.8209,0.0498 1.6916,0.0746 2.5373,0.0746 0.8209,0 1.2687,-0.0249 2.0647,-0.0746 0.17413,-0.89552 0.32339,-1.8159 0.47264,-2.7363 h 2.3134 c 0.12438,0.84577 0.27363,1.6915 0.44776,2.4876 0.0249,0.14925 0.14926,0.24875 0.27364,0.24875 0.87065,0.0746 1.592,0.0746 2.4378,0.0746 0.84578,0 1.393,-0.0249 2.1642,-0.0746 -0.7214,-4.8259 -1.8906,-9.9005 -2.8358,-14.677 -0.0249,-0.12438 -0.14925,-0.24876 -0.27363,-0.24876 -1.194,-0.0249 -2.3632,-0.0498 -3.5572,-0.0498 -1.1692,0 -2.3134,0 -3.4328,0.0498 -0.9204,4.602 -1.9652,9.403 -2.7115,13.955 -0.0497,0.24876 -0.12437,0.7214 -0.12437,0.77115 z m 5.7214,-5.7712 c 0.199,-1.8657 0.39801,-3.7314 0.62189,-5.5722 0.24876,1.8657 0.49751,3.7314 0.77115,5.5722 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path44"
|
||||||
|
d="m 130.74,231.48 c 0,0.67164 0,1.3433 0.0249,2.0398 0,0.14926 0.0995,0.24876 0.24876,0.24876 0.42289,0.0249 1.6169,0.0498 2.7363,0.0746 v 3.209 c 0,2.4876 0.0498,4.8756 0.0995,7.214 0,0.14925 0.0995,0.24875 0.24876,0.24875 0.82089,0.0498 1.6915,0.0746 2.5373,0.0746 0.8209,0 1.393,-0.0249 2.1891,-0.0746 0.0497,-2.4876 0.0995,-4.9751 0.0995,-7.4627 0,-1.1443 -0.0249,-2.1642 -0.0498,-3.1841 1.2935,0 2.612,-0.0249 3.0348,-0.0497 v -1.8408 -2.1393 c -0.0249,-0.12438 -0.12438,-0.24876 -0.24876,-0.24876 -0.84577,-0.0249 -4.3035,-0.0498 -5.1493,-0.0498 -0.8209,0 -4.9751,0.0249 -5.7463,0.0498 -0.0249,0.67165 -0.0249,1.2935 -0.0249,1.8906 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path46"
|
||||||
|
d="m 142.69,237.05 c 0,2.4876 0.0498,4.8756 0.0995,7.214 0,0.14925 0.0995,0.24875 0.24876,0.24875 0.8209,0.0498 4.4279,0.12438 5.2736,0.12438 0.8209,0 3.4826,-0.0249 4.2786,-0.0746 v -1.8159 -2.1642 c -0.0249,-0.12437 -0.12438,-0.24875 -0.24876,-0.24875 -0.84577,-0.0249 -3.5572,-0.0497 -4.403,-0.0497 h -0.32338 v -1.2935 h 3.2338 v -1.6418 -1.8906 c -0.0249,-0.12438 -0.12438,-0.24876 -0.24876,-0.24876 -0.64676,0 -1.99,-0.0249 -2.9851,-0.0249 v -1.3184 h 0.97015 c 0.8209,0 3.1592,0 3.9552,-0.0497 v -1.8159 -2.1642 c -0.0249,-0.12438 -0.12438,-0.24876 -0.24876,-0.24876 -0.84577,-0.0249 -3.5075,-0.0498 -4.3532,-0.0498 -0.82089,0 -4.3781,0.0249 -5.1493,0.0498 -0.0746,2.4876 -0.0995,4.9751 -0.0995,7.4627 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path48"
|
||||||
|
d="m 158.7,237.05 c 0,-1.194 0,-2.2388 0.0249,-3.2836 h 0.42289 c 0.67164,0 1.1692,0.32339 1.1692,3.2836 0,2.9602 -0.49752,3.3085 -1.1692,3.3085 H 158.7249 C 158.7,239.3137 158.7,238.2689 158.7,237.05 Z m -4.9254,0 c 0,2.4876 0.0498,4.6269 0.0498,6.9652 0,0.14925 0.0995,0.24876 0.24876,0.24876 1.7164,0.17413 3.2836,0.29851 4.6518,0.29851 4.1791,0 6.7911,-1.2935 6.7911,-7.5125 0,-5.8458 -2.6368,-7.6368 -6.8408,-7.6368 -1.393,0 -3.209,0.17413 -4.8508,0.42289 0,2.4876 -0.0498,4.7264 -0.0498,7.214 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path50"
|
||||||
|
d="m 176.61,235.06 c 0,-0.77115 0,-1.4179 0.0249,-2.0398 0.0497,-0.0249 0.199,-0.0249 0.2985,-0.0249 0.64677,0 1.2935,0.32338 1.2935,0.99502 0,0.69652 -0.67164,1.0697 -1.4428,1.0697 z m 0.0249,3.6816 h 0.62189 c 0.67164,0 1.1443,0.42289 1.1443,0.99503 0,0.64677 -0.37313,1.0199 -1.3184,1.0199 h -0.39801 c -0.0249,-0.67164 -0.0497,-1.3433 -0.0497,-2.0149 z m -4.9005,-2.0149 c 0,2.4876 0.0497,5 0.0497,7.3383 0,0.14926 0.0995,0.27363 0.24876,0.29851 1.7164,0.19901 3.607,0.27363 5.2985,0.27363 3.3582,0 6.0448,-0.67164 6.0448,-4.6269 0,-1.194 -0.8209,-2.2886 -2.1891,-3.0597 0.89552,-0.77115 1.4428,-1.8906 1.4428,-3.209 0,-4.0299 -2.5373,-4.3284 -5.995,-4.3284 -1.393,0 -3.209,0.17413 -4.8508,0.42289 0,2.4876 -0.0497,4.403 -0.0497,6.8906 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path52"
|
||||||
|
d="m 183.01,229.69 c 0.42289,1.8906 1.0945,4.4279 2.0647,6.3433 0.57214,0.97015 1.2687,1.7413 2.0149,2.3383 -0.0249,2.0149 -0.0249,3.9801 -0.0249,5.8955 0,0.14925 0.0995,0.24875 0.24875,0.24875 0.8209,0.0498 1.7413,0.0746 2.5871,0.0746 0.8209,0 1.4428,-0.0249 2.2388,-0.0746 -0.0249,-2.0398 -0.0498,-4.0796 -0.0746,-6.1443 0.74627,-0.59702 1.4428,-1.3682 2.0149,-2.3383 0.97016,-1.9154 1.6418,-4.4528 2.0647,-6.3433 -0.8209,-0.0995 -1.7164,-0.14926 -2.5871,-0.14926 -0.67165,0 -1.3433,0.0249 -2.0149,0.0746 -0.12438,0 -0.32338,0.0995 -0.37313,0.24876 -0.54727,1.6667 -1.1443,3.7314 -1.592,5.4229 -0.47264,-1.6916 -1.0448,-3.7562 -1.592,-5.4229 -0.0497,-0.14926 -0.24876,-0.24876 -0.37314,-0.24876 -0.67164,-0.0497 -1.3433,-0.0746 -2.0149,-0.0746 -0.89552,0 -1.7662,0.0498 -2.5871,0.14926 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g82"
|
||||||
|
aria-label="ES-DE"
|
||||||
|
transform="matrix(0.13868224,0,0,0.07325495,-40.728497,268.55447)"
|
||||||
|
style="fill:#ffffff;stroke-width:0.36405">
|
||||||
|
<path
|
||||||
|
id="path72"
|
||||||
|
d="m 13.291,366.57 c 0,5.5336 0.11067,10.846 0.22134,16.047 0,0.33202 0.22134,0.55336 0.55336,0.55336 1.8261,0.11067 9.8498,0.27668 11.731,0.27668 1.8261,0 7.747,-0.0553 9.5178,-0.16601 v -4.0395 -4.8142 c -0.05534,-0.27668 -0.27668,-0.55335 -0.55336,-0.55335 -1.8814,-0.0553 -7.913,-0.11068 -9.7944,-0.11068 h -0.71936 v -2.8775 h 7.1937 v -3.6522 -4.2055 c -0.05534,-0.27668 -0.27668,-0.55336 -0.55336,-0.55336 -1.4387,0 -4.4269,-0.0553 -6.6403,-0.0553 v -2.9328 h 2.1581 c 1.8261,0 7.0276,0 8.7984,-0.11067 v -4.0395 -4.8142 c -0.05533,-0.27668 -0.27668,-0.55336 -0.55336,-0.55336 -1.8814,-0.0553 -7.8023,-0.11067 -9.6838,-0.11067 -1.8261,0 -9.7391,0.0553 -11.455,0.11067 -0.16601,5.5336 -0.22134,11.067 -0.22134,16.601 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path74"
|
||||||
|
d="m 37.75,382.84 c 3.8182,0.44268 7.913,0.60869 11.676,0.60869 7.4703,0 13.557,-2.0474 13.557,-10.846 0,-7.6917 -6.8616,-9.7391 -11.455,-11.122 -2.2688,-0.66403 -3.9842,-1.1621 -3.9842,-2.1581 0,-0.996 1.1067,-1.5494 2.8221,-1.5494 3.4308,0 7.3597,1.1067 9.9604,2.2688 l 1.2727,-9.2411 c -3.7075,-0.71937 -7.4703,-1.2174 -10.68,-1.2174 -7.581,0 -13.115,0.66403 -13.115,9.6284 0,8.5217 6.1423,10.292 10.292,11.455 2.1581,0.60869 3.7628,1.0514 3.7628,2.1581 0,0.88537 -0.88537,1.9921 -2.9881,1.9921 -2.4901,0 -5.9209,-0.71936 -9.7944,-1.9368 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path76"
|
||||||
|
d="m 64.643,366.52 c 0,1.3834 0.05534,2.6561 0.11067,4.0395 0,0.33201 0.22134,0.55336 0.55336,0.55336 1.8261,0.11067 8.9644,0.27667 10.846,0.27667 1.8261,0 8.3004,-0.0553 9.5178,-0.166 0,-1.162 0.05533,-2.3794 0.05533,-3.4862 0,-2.7668 -0.05533,-3.3755 -0.05533,-4.7035 -0.05534,-0.27668 -0.27668,-0.55336 -0.55336,-0.55336 -1.8814,-0.0553 -6.2529,-0.11067 -8.1344,-0.11067 -1.8261,0 -10.514,0.0553 -12.229,0.11067 -0.05534,1.8261 -0.11067,2.9881 -0.11067,4.0395 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path78"
|
||||||
|
d="m 99.836,366.57 c 0,-2.6561 0,-4.9802 0.05534,-7.3043 h 0.94071 c 1.4941,0 2.6008,0.71937 2.6008,7.3043 0,6.58493 -1.1067,7.3597 -2.6008,7.3597 H 99.89134 C 99.836,371.6056 99.836,369.2815 99.836,366.57 Z m -10.956,0 c 0,5.5336 0.11067,10.292 0.11067,15.494 0,0.33202 0.22134,0.55336 0.55336,0.55336 3.8182,0.38735 7.3043,0.66403 10.348,0.66403 9.2964,0 15.107,-2.8775 15.107,-16.711 0,-13.004 -5.8656,-16.988 -15.217,-16.988 -3.0988,0 -7.1383,0.38735 -10.79,0.94071 0,5.5336 -0.11067,10.514 -0.11067,16.047 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path80"
|
||||||
|
d="m 117.88,366.57 c 0,5.5336 0.11067,10.846 0.22134,16.047 0,0.33202 0.22134,0.55336 0.55336,0.55336 1.8261,0.11067 9.8498,0.27668 11.731,0.27668 1.8261,0 7.747,-0.0553 9.5178,-0.16601 v -4.0395 -4.8142 c -0.0553,-0.27668 -0.27668,-0.55335 -0.55336,-0.55335 -1.8814,-0.0553 -7.913,-0.11068 -9.7944,-0.11068 h -0.71936 v -2.8775 h 7.1936 v -3.6522 -4.2055 c -0.0553,-0.27668 -0.27668,-0.55336 -0.55336,-0.55336 -1.4387,0 -4.4269,-0.0553 -6.6403,-0.0553 v -2.9328 h 2.1581 c 1.8261,0 7.0276,0 8.7984,-0.11067 v -4.0395 -4.8142 c -0.0553,-0.27668 -0.27667,-0.55336 -0.55335,-0.55336 -1.8814,-0.0553 -7.8024,-0.11067 -9.6838,-0.11067 -1.8261,0 -9.7391,0.0553 -11.455,0.11067 -0.16601,5.5336 -0.22134,11.067 -0.22134,16.601 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:Dyuthi;-inkscape-font-specification:Dyuthi;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="19.372959"
|
||||||
|
y="271.49698"
|
||||||
|
id="text5145"/>
|
||||||
|
<g
|
||||||
|
id="g5222">
|
||||||
|
<g
|
||||||
|
transform="translate(0.1223722)"
|
||||||
|
id="g5202">
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 11.142864,276.8821 c 0,-0.13102 -0.08756,-0.2366 -0.19606,-0.2366 h -0.245083 v -0.8903 h -0.444919 v 0.8903 h -0.245074 c -0.1085141,0 -0.1960697,0.10558 -0.1960697,0.2366 v 0.80877 c 0,0.13102 0.087556,0.23659 0.1960697,0.23659 h 0.935076 c 0.108505,0 0.19606,-0.10557 0.19606,-0.23659 z m -0.437842,0.17863 v 0.45151 h -0.451513 v -0.45151 z"
|
||||||
|
id="rect5069-0-5-6-6"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;vector-effect:none;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.222;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 16.452628,276.8821 c 0,-0.13102 -0.08755,-0.2366 -0.19607,-0.2366 h -0.245073 v -0.8903 h -0.444919 v 0.8903 h -0.245083 c -0.108514,0 -0.196061,0.10558 -0.196061,0.2366 v 0.80877 c 0,0.13102 0.08756,0.23659 0.196061,0.23659 h 0.935075 c 0.108506,0 0.19607,-0.10557 0.19607,-0.23659 z m -0.437851,0.17863 v 0.45151 h -0.451513 v -0.45151 z"
|
||||||
|
id="rect5195-2"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;vector-effect:none;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 5.8349883,276.8821 c 0,-0.13102 -0.087556,-0.2366 -0.1960607,-0.2366 H 5.3938449 v -0.8903 H 4.9489256 v 0.8903 H 4.703852 c -0.1085142,0 -0.1960698,0.10558 -0.1960698,0.2366 v 0.80877 c 0,0.13102 0.087556,0.23659 0.1960698,0.23659 h 0.9350756 c 0.1085051,0 0.1960607,-0.10557 0.1960607,-0.23659 z m -0.4378418,0.17863 v 0.45151 H 4.9456332 v -0.45151 z"
|
||||||
|
id="rect5069-0-5-1-0-8-8"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;vector-effect:none;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 7.605691,276.8821 c 0,-0.13102 -0.087556,-0.2366 -0.1960607,-0.2366 H 7.1645475 v -0.8903 H 6.7196374 v 0.8903 H 6.4745547 c -0.1085143,0 -0.1960608,0.10558 -0.1960608,0.2366 v 0.80877 c 0,0.13102 0.087556,0.23659 0.1960608,0.23659 h 0.9350756 c 0.1085051,0 0.1960607,-0.10557 0.1960607,-0.23659 z m -0.4378419,0.17863 v 0.45151 H 6.7163358 v -0.45151 z"
|
||||||
|
id="rect5069-0-5-1-0-4"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;vector-effect:none;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 9.3740406,276.8821 c 0,-0.13102 -0.087556,-0.2366 -0.1960607,-0.2366 H 8.9328972 v -0.8903 H 8.487987 v 0.8903 H 8.2429043 c -0.1085143,0 -0.1960607,0.10558 -0.1960607,0.2366 v 0.80877 c 0,0.13102 0.087556,0.23659 0.1960607,0.23659 h 0.9350756 c 0.1085051,0 0.1960607,-0.10557 0.1960607,-0.23659 z m -0.4378419,0.17863 v 0.45151 H 8.4846854 v -0.45151 z"
|
||||||
|
id="rect5069-0-5-1-7"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 12.916869,276.8821 c 0,-0.13102 -0.08756,-0.2366 -0.196061,-0.2366 h -0.245083 v -0.8903 h -0.444919 v 0.8903 h -0.245074 c -0.108514,0 -0.19607,0.10558 -0.19607,0.2366 v 0.80877 c 0,0.13102 0.08756,0.23659 0.19607,0.23659 h 0.935076 c 0.108505,0 0.196061,-0.10557 0.196061,-0.23659 z m -0.437842,0.17863 v 0.45151 h -0.451514 v -0.45151 z"
|
||||||
|
id="rect5069-0-5-2"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 14.686158,276.8821 c 0,-0.13102 -0.08756,-0.2366 -0.196061,-0.2366 h -0.245083 v -0.8903 h -0.44491 v 0.8903 h -0.245083 c -0.108514,0 -0.196061,0.10558 -0.196061,0.2366 v 0.80877 c 0,0.13102 0.08756,0.23659 0.196061,0.23659 h 0.935076 c 0.108505,0 0.196061,-0.10557 0.196061,-0.23659 z m -0.437842,0.17863 v 0.45151 h -0.451514 v -0.45151 z"
|
||||||
|
id="rect5069-0-4"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(0.12237585)"
|
||||||
|
id="g5193">
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 11.142864,282.65618 c 0,-0.13102 -0.08756,-0.2366 -0.19606,-0.2366 h -0.935076 c -0.1084776,0 -0.1960697,0.10558 -0.1960697,0.2366 v 0.80876 c 0,0.13102 0.087556,0.2366 0.1960697,0.2366 h 0.245074 v 0.8903 h 0.444919 v -0.8903 h 0.245083 c 0.108477,0 0.19606,-0.10558 0.19606,-0.2366 z m -0.437842,0.17862 v 0.45152 h -0.451513 v -0.45152 z"
|
||||||
|
id="rect5069-0-5-6"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;vector-effect:none;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 16.452628,282.65618 c 0,-0.13102 -0.08755,-0.2366 -0.19607,-0.2366 h -0.935075 c -0.108478,0 -0.196061,0.10558 -0.196061,0.2366 v 0.80876 c 0,0.13102 0.08756,0.2366 0.196061,0.2366 h 0.245083 v 0.8903 h 0.444919 v -0.8903 h 0.245073 c 0.108478,0 0.19607,-0.10558 0.19607,-0.2366 z m -0.437851,0.17862 v 0.45152 h -0.451513 v -0.45152 z"
|
||||||
|
id="rect5195"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;vector-effect:none;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 5.8349883,282.65618 c 0,-0.13102 -0.087556,-0.2366 -0.1960607,-0.2366 H 4.703852 c -0.1084777,0 -0.1960698,0.10558 -0.1960698,0.2366 v 0.80876 c 0,0.13102 0.087556,0.2366 0.1960698,0.2366 h 0.2450736 v 0.8903 h 0.4449193 v -0.8903 h 0.2450827 c 0.1084778,0 0.1960607,-0.10558 0.1960607,-0.2366 z m -0.4378418,0.17862 v 0.45152 H 4.9456332 v -0.45152 z"
|
||||||
|
id="rect5069-0-5-1-0-8"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;vector-effect:none;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 7.605691,282.65618 c 0,-0.13102 -0.087556,-0.2366 -0.1960607,-0.2366 H 6.4745547 c -0.1084778,0 -0.1960608,0.10558 -0.1960608,0.2366 v 0.80876 c 0,0.13102 0.087556,0.2366 0.1960608,0.2366 h 0.2450827 v 0.8903 h 0.4449101 v -0.8903 h 0.2450828 c 0.1084777,0 0.1960607,-0.10558 0.1960607,-0.2366 z m -0.4378419,0.17862 v 0.45152 H 6.7163358 v -0.45152 z"
|
||||||
|
id="rect5069-0-5-1-0"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;vector-effect:none;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 9.3740406,282.65618 c 0,-0.13102 -0.087556,-0.2366 -0.1960607,-0.2366 H 8.2429043 c -0.1084778,0 -0.1960607,0.10558 -0.1960607,0.2366 v 0.80876 c 0,0.13102 0.087556,0.2366 0.1960607,0.2366 H 8.487987 v 0.8903 h 0.4449102 v -0.8903 h 0.2450827 c 0.1084777,0 0.1960607,-0.10558 0.1960607,-0.2366 z m -0.4378419,0.17862 v 0.45152 H 8.4846854 v -0.45152 z"
|
||||||
|
id="rect5069-0-5-1"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 12.916869,282.65618 c 0,-0.13102 -0.08756,-0.2366 -0.196061,-0.2366 h -0.935076 c -0.108478,0 -0.19607,0.10558 -0.19607,0.2366 v 0.80876 c 0,0.13102 0.08756,0.2366 0.19607,0.2366 h 0.245074 v 0.8903 h 0.444919 v -0.8903 h 0.245083 c 0.108478,0 0.196061,-0.10558 0.196061,-0.2366 z m -0.437842,0.17862 v 0.45152 h -0.451514 v -0.45152 z"
|
||||||
|
id="rect5069-0-5"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.221985;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
d="m 14.686158,282.65618 c 0,-0.13102 -0.08756,-0.2366 -0.196061,-0.2366 h -0.935076 c -0.108478,0 -0.196061,0.10558 -0.196061,0.2366 v 0.80876 c 0,0.13102 0.08756,0.2366 0.196061,0.2366 h 0.245083 v 0.8903 h 0.44491 v -0.8903 h 0.245083 c 0.108478,0 0.196061,-0.10558 0.196061,-0.2366 z m -0.437842,0.17862 v 0.45152 h -0.451514 v -0.45152 z"
|
||||||
|
id="rect5069-0"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
id="rect5061"
|
||||||
|
d="m 4.7486749,277.07833 c -0.3682172,0 -0.664559,0.25094 -0.664559,0.56276 v 5.0648 c 0,0.31182 0.2963418,0.56276 0.664559,0.56276 H 16.456487 c 0.368217,0 0.664559,-0.25094 0.664559,-0.56276 v -1.64279 a 0.91714642,0.91714642 0 0 1 -0.698149,-0.88987 0.91714642,0.91714642 0 0 1 0.698149,-0.88935 v -1.64279 c 0,-0.31182 -0.296342,-0.56276 -0.664559,-0.56276 z"
|
||||||
|
style="opacity:1;fill:#fcfcfd;fill-opacity:1;stroke:#282828;stroke-width:0.274902;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||||
|
inkscape:connector-curvature="0"/>
|
||||||
|
<rect
|
||||||
|
rx="0.42198506"
|
||||||
|
ry="0.42198506"
|
||||||
|
y="277.72012"
|
||||||
|
x="7.7069221"
|
||||||
|
height="4.9067254"
|
||||||
|
width="5.7913175"
|
||||||
|
id="rect5019"
|
||||||
|
style="opacity:1;vector-effect:none;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.213968;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer2"
|
||||||
|
inkscape:label="Layer 2">
|
||||||
|
<g
|
||||||
|
aria-label="ALT EMU"
|
||||||
|
transform="scale(1.0680187,0.93631321)"
|
||||||
|
id="text41"
|
||||||
|
style="font-size:4.97619px;line-height:1.25;font-family:'Bebas Neue';-inkscape-font-specification:'Bebas Neue';display:inline;stroke-width:0.0339285">
|
||||||
|
<path
|
||||||
|
d="m 1.7229501,4.7457954 c 0,0.024881 0.019905,0.03981 0.044786,0.03981 0.1642143,0.00995 0.3383809,0.014928 0.5075714,0.014928 0.1642142,0 0.2537857,-0.00498 0.4130238,-0.014928 0.034833,-0.1791429 0.06469,-0.3632619 0.094548,-0.547381 h 0.4627856 c 0.024881,0.1691905 0.054738,0.338381 0.089571,0.4976191 0.00498,0.029857 0.029857,0.049762 0.054738,0.049762 0.1741666,0.014928 0.3184761,0.014928 0.4876666,0.014928 0.1691904,0 0.2786666,-0.00498 0.4329285,-0.014928 C 4.1662594,3.8202241 3.9323785,2.8050813 3.7432833,1.8496528 3.7383071,1.8247719 3.7134261,1.7998909 3.6885452,1.7998909 3.449688,1.7949147 3.2158071,1.7899385 2.97695,1.7899385 c -0.233881,0 -0.4627857,0 -0.6867143,0.00995 -0.184119,0.9205952 -0.393119,1.8809999 -0.5424047,2.7916426 -0.00995,0.049762 -0.024881,0.1443096 -0.024881,0.1542619 z M 2.8674738,3.5913193 c 0.03981,-0.3732142 0.079619,-0.7464285 0.1244047,-1.1146665 0.049762,0.3732142 0.099524,0.7464285 0.1542619,1.1146665 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285"
|
||||||
|
id="path975"/>
|
||||||
|
<path
|
||||||
|
d="m 4.4946808,3.2927479 c 0,0.497619 0.00995,0.9753333 0.019905,1.4430952 0,0.029857 0.019905,0.049762 0.049762,0.049762 0.1642143,0.00995 0.8857619,0.024881 1.0549523,0.024881 0.1642143,0 0.5772381,-0.00498 0.7364762,-0.014929 0,-0.1244047 0,-0.2438333 0,-0.3632618 0,-0.1393334 0,-0.2786667 0,-0.4329286 C 6.3507997,3.974486 6.3308949,3.949605 6.306014,3.949605 6.1368235,3.9446288 5.7138474,3.9396526 5.5446569,3.9396526 h -0.019905 c 0,-0.2089999 0.00498,-0.4229761 0.00498,-0.6469047 0,-0.497619 -0.00995,-0.9753332 -0.019905,-1.4430951 0,-0.024881 -0.024881,-0.049762 -0.049762,-0.049762 -0.1691905,-0.00498 -0.3433572,-0.00995 -0.5125476,-0.00995 -0.1642143,0 -0.2786667,0.00498 -0.4329286,0.00995 -0.014928,0.497619 -0.019905,0.995238 -0.019905,1.492857 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285"
|
||||||
|
id="path977"/>
|
||||||
|
<path
|
||||||
|
d="m 6.1318408,2.1780813 c 0,0.1343572 0,0.2687143 0.00498,0.4080476 0,0.029857 0.019905,0.049762 0.049762,0.049762 0.084595,0.00498 0.3234523,0.00995 0.5473809,0.014929 0,0.209 0,0.4130238 0,0.6419285 0,0.497619 0.00995,0.9753333 0.019905,1.4430952 0,0.029857 0.019905,0.049762 0.049762,0.049762 0.1642143,0.00995 0.338381,0.014928 0.5075714,0.014928 0.1642143,0 0.2786667,-0.00498 0.4379048,-0.014928 0.00995,-0.4976191 0.019905,-0.9952381 0.019905,-1.4928571 0,-0.2289047 -0.00498,-0.4329285 -0.00995,-0.6369523 0.2587619,0 0.5225,-0.00498 0.6070952,-0.00995 0,-0.1244047 0,-0.2488095 0,-0.3682381 0,-0.1443095 0,-0.2836428 0,-0.4279523 -0.00498,-0.024881 -0.024881,-0.049762 -0.049762,-0.049762 -0.1691904,-0.00498 -0.8608809,-0.00995 -1.0300713,-0.00995 -0.1642143,0 -0.995238,0.00498 -1.1494999,0.00995 -0.00498,0.1343571 -0.00498,0.2587619 -0.00498,0.3781904 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285"
|
||||||
|
id="path979"/>
|
||||||
|
<path
|
||||||
|
d="m 10.067999,3.2927479 c 0,0.497619 0.01,0.9753333 0.0199,1.4430952 0,0.029857 0.0199,0.049762 0.04976,0.049762 0.164215,0.00995 0.885762,0.024881 1.054953,0.024881 0.164214,0 0.696666,-0.00498 0.855904,-0.014929 0,-0.1244047 0,-0.2438333 0,-0.3632618 0,-0.1393334 0,-0.2786667 0,-0.4329286 -0.005,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.169191,-0.00498 -0.711596,-0.00995 -0.880786,-0.00995 h -0.06469 c 0,-0.084595 0,-0.1691904 0,-0.2587618 h 0.646905 c 0,-0.1194286 0,-0.2239286 0,-0.3284286 0,-0.1194286 0,-0.2388571 0,-0.3781904 -0.005,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.129381,0 -0.398095,-0.00498 -0.597143,-0.00498 0,-0.089571 0,-0.1791429 0,-0.2637381 0.0846,0 0.154262,0 0.194072,0 0.164214,0 0.631976,0 0.791214,-0.00995 0,-0.1244047 0,-0.2438333 0,-0.3632619 0,-0.1393333 0,-0.2786666 0,-0.4329285 -0.005,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.16919,-0.00498 -0.701643,-0.00995 -0.870833,-0.00995 -0.164214,0 -0.87581,0.00498 -1.030071,0.00995 -0.01493,0.497619 -0.0199,0.995238 -0.0199,1.492857 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285"
|
||||||
|
id="path981"/>
|
||||||
|
<path
|
||||||
|
d="m 12.327182,3.2927479 c 0,0.497619 0.01,0.9753333 0.0199,1.4430952 0,0.029857 0.01991,0.049762 0.04976,0.049762 0.164215,0.00995 0.363262,0.014928 0.482691,0.014928 0.164214,0 0.253786,-0.00498 0.413024,-0.014928 l -0.0199,-1.3485476 0.542405,1.099738 0.04976,0.00995 0.05474,-0.00995 0.567285,-1.1544761 c 0,0.4677619 0.0199,0.915619 0.02986,1.3535238 0,0.029857 0.0199,0.049762 0.04976,0.049762 0.164215,0.00995 0.338381,0.014928 0.45781,0.014928 0.164214,0 0.243833,-0.00498 0.388143,-0.014928 0.01,-0.4976191 0.0199,-0.9952381 0.0199,-1.4928571 0,-0.497619 -0.01,-0.9753332 -0.0199,-1.4430951 0,-0.024881 -0.02488,-0.044786 -0.04976,-0.049762 -0.139334,-0.00498 -0.293596,-0.00995 -0.462786,-0.00995 -0.139333,0 -0.258762,0.00498 -0.348333,0.014929 -0.02488,0 -0.04479,0.024881 -0.05972,0.044786 l -0.627,1.2788809 -0.622023,-1.2788809 c -0.01,-0.019905 -0.02986,-0.044786 -0.05474,-0.049762 -0.149286,-0.00498 -0.263738,-0.00995 -0.432929,-0.00995 -0.164214,0 -0.253786,0.00498 -0.408048,0.00995 -0.01493,0.497619 -0.0199,0.995238 -0.0199,1.492857 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285"
|
||||||
|
id="path983"/>
|
||||||
|
<path
|
||||||
|
d="m 15.696059,3.3126527 c 0,1.2539999 0.447857,1.5227142 1.348547,1.5227142 0.701643,-0.034833 1.109691,-0.442881 1.109691,-1.5227142 0,-0.497619 -0.01,-0.995238 -0.01991,-1.4629999 0,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.16919,-0.00498 -0.343357,-0.00995 -0.512548,-0.00995 -0.164214,0 -0.278666,0.00498 -0.432928,0.00995 -0.01493,0.497619 -0.01991,1.1644285 -0.01991,1.6620475 0,0.4428809 -0.05474,0.5075714 -0.189095,0.5075714 -0.134357,0 -0.199048,-0.06469 -0.199048,-0.5075714 0,-0.497619 -0.01,-1.1445237 -0.0199,-1.6122856 0,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.169191,-0.00498 -0.343357,-0.00995 -0.512548,-0.00995 -0.164214,0 -0.278667,0.00498 -0.432928,0.00995 -0.01493,0.497619 -0.0199,1.0151428 -0.0199,1.5127618 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285"
|
||||||
|
id="path985"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 25 KiB |
|
@ -68,8 +68,9 @@
|
||||||
<name>amstradcpc</name>
|
<name>amstradcpc</name>
|
||||||
<fullname>Amstrad CPC</fullname>
|
<fullname>Amstrad CPC</fullname>
|
||||||
<path>%ROMPATH%/amstradcpc</path>
|
<path>%ROMPATH%/amstradcpc</path>
|
||||||
<extension>.dsk .DSK .sna .SNA .tap .TAR .cdt .CDT .voc .VOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.cdt .CDT .cpr .CPR .dsk .DSK .kcr .KCR .m3u .M3U .sna .SNA .tap .TAR .voc .VOC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/cap32_libretro.dylib %ROM%</command>
|
<command label="Caprice32">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/cap32_libretro.dylib %ROM%</command>
|
||||||
|
<command label="CrocoDS">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/crocods_libretro.dylib %ROM%</command>
|
||||||
<platform>amstradcpc</platform>
|
<platform>amstradcpc</platform>
|
||||||
<theme>amstradcpc</theme>
|
<theme>amstradcpc</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -98,12 +99,10 @@
|
||||||
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.dylib %ROM%</command>
|
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.dylib %ROM%</command>
|
||||||
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.dylib %ROM%</command>
|
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.dylib %ROM%</command>
|
||||||
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.dylib %ROM%
|
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.dylib %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.dylib %ROM%</command>
|
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.dylib %ROM%</command>
|
||||||
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.dylib %ROM%</command>
|
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.dylib %ROM%</command>
|
||||||
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.dylib %ROM%
|
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.dylib %ROM%</command>
|
||||||
</command>
|
|
||||||
<platform>arcade</platform>
|
<platform>arcade</platform>
|
||||||
<theme>arcade</theme>
|
<theme>arcade</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -176,7 +175,8 @@
|
||||||
<fullname>Atari Lynx</fullname>
|
<fullname>Atari Lynx</fullname>
|
||||||
<path>%ROMPATH%/atarilynx</path>
|
<path>%ROMPATH%/atarilynx</path>
|
||||||
<extension>.lnx .LNX .o .O .7z .7Z .zip .ZIP</extension>
|
<extension>.lnx .LNX .o .O .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_lynx_libretro.dylib %ROM%</command>
|
<command label="Handy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/handy_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Beetle Lynx">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_lynx_libretro.dylib %ROM%</command>
|
||||||
<platform>atarilynx</platform>
|
<platform>atarilynx</platform>
|
||||||
<theme>atarilynx</theme>
|
<theme>atarilynx</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -220,15 +220,10 @@
|
||||||
<name>c64</name>
|
<name>c64</name>
|
||||||
<fullname>Commodore 64</fullname>
|
<fullname>Commodore 64</fullname>
|
||||||
<path>%ROMPATH%/c64</path>
|
<path>%ROMPATH%/c64</path>
|
||||||
<extension>.bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80
|
<extension>.bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP</extension>
|
||||||
.d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ
|
<command label="VICE x64sc Accurate">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x64sc_libretro.dylib %ROM%</command>
|
||||||
.nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="VICE x64sc Accurate">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x64sc_libretro.dylib %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="VICE x64 Fast">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x64_libretro.dylib %ROM%</command>
|
<command label="VICE x64 Fast">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x64_libretro.dylib %ROM%</command>
|
||||||
<command label="VICE x64 SuperCPU">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xscpu64_libretro.dylib %ROM%
|
<command label="VICE x64 SuperCPU">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xscpu64_libretro.dylib %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="VICE x128">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x128_libretro.dylib %ROM%</command>
|
<command label="VICE x128">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x128_libretro.dylib %ROM%</command>
|
||||||
<command label="Frodo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/frodo_libretro.dylib %ROM%</command>
|
<command label="Frodo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/frodo_libretro.dylib %ROM%</command>
|
||||||
<platform>c64</platform>
|
<platform>c64</platform>
|
||||||
|
@ -361,20 +356,11 @@
|
||||||
<fullname>FinalBurn Alpha</fullname>
|
<fullname>FinalBurn Alpha</fullname>
|
||||||
<path>%ROMPATH%/fba</path>
|
<path>%ROMPATH%/fba</path>
|
||||||
<extension>.iso .ISO .7z .7Z .zip .ZIP</extension>
|
<extension>.iso .ISO .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.dylib %ROM%
|
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.dylib %ROM%</command>
|
||||||
</command>
|
<command label="FB Alpha 2012 Neo Geo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_neogeo_libretro.dylib %ROM%</command>
|
||||||
<command label="FB Alpha 2012 Neo Geo">%EMULATOR_RETROARCH% -L
|
<command label="FB Alpha 2012 CPS-1">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps1_libretro.dylib %ROM%</command>
|
||||||
%CORE_RETROARCH%/fbalpha2012_neogeo_libretro.dylib %ROM%
|
<command label="FB Alpha 2012 CPS-2">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps2_libretro.dylib %ROM%</command>
|
||||||
</command>
|
<command label="FB Alpha 2012 CPS-3">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps3_libretro.dylib %ROM%</command>
|
||||||
<command label="FB Alpha 2012 CPS-1">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps1_libretro.dylib
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="FB Alpha 2012 CPS-2">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps2_libretro.dylib
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="FB Alpha 2012 CPS-3">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps3_libretro.dylib
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<platform>arcade</platform>
|
<platform>arcade</platform>
|
||||||
<theme>fba</theme>
|
<theme>fba</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -409,8 +395,11 @@
|
||||||
<name>gamegear</name>
|
<name>gamegear</name>
|
||||||
<fullname>Sega Game Gear</fullname>
|
<fullname>Sega Game Gear</fullname>
|
||||||
<path>%ROMPATH%/gamegear</path>
|
<path>%ROMPATH%/gamegear</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.dylib %ROM%</command>
|
||||||
|
<command label="SMS Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/smsplus_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.dylib %ROM%</command>
|
||||||
<platform>gamegear</platform>
|
<platform>gamegear</platform>
|
||||||
<theme>gamegear</theme>
|
<theme>gamegear</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -418,8 +407,13 @@
|
||||||
<name>gb</name>
|
<name>gb</name>
|
||||||
<fullname>Nintendo Game Boy</fullname>
|
<fullname>Nintendo Game Boy</fullname>
|
||||||
<path>%ROMPATH%/gb</path>
|
<path>%ROMPATH%/gb</path>
|
||||||
<extension>.sfc .SFC .smc .SMC .gb .GB .gbc .GBC .7z .7Z .zip .ZIP</extension>
|
<extension>.bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.dylib %ROM%</command>
|
<command label="SameBoy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/sameboy_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Gambatte">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gambatte_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Gearboy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearboy_libretro.dylib %ROM%</command>
|
||||||
|
<command label="TGB Dual">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/tgbdual_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.dylib %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.dylib %ROM%</command>
|
||||||
<platform>gb</platform>
|
<platform>gb</platform>
|
||||||
<theme>gb</theme>
|
<theme>gb</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -427,8 +421,11 @@
|
||||||
<name>gba</name>
|
<name>gba</name>
|
||||||
<fullname>Nintendo Game Boy Advance</fullname>
|
<fullname>Nintendo Game Boy Advance</fullname>
|
||||||
<path>%ROMPATH%/gba</path>
|
<path>%ROMPATH%/gba</path>
|
||||||
<extension>.gba .GBA .agb .AGB .bin .BIN .7z .7Z .zip .ZIP</extension>
|
<extension>.agb .AGB .bin .BIN .cgb .CGB .dmg .DMG .gb .GB .gba .GBA .gbc .GBC .sgb .SGB .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_gba_libretro.dylib %ROM%</command>
|
<command label="mGBA">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mgba_libretro.dylib %ROM%</command>
|
||||||
|
<command label="VBA-M">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vbam_next_libretro.dylib %ROM%</command>
|
||||||
|
<command label="VBA Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vba_next_libretro.dylib %ROM%</command>
|
||||||
|
<command label="gpSP">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gpsp_libretro.dylib %ROM%</command>
|
||||||
<platform>gba</platform>
|
<platform>gba</platform>
|
||||||
<theme>gba</theme>
|
<theme>gba</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -436,8 +433,13 @@
|
||||||
<name>gbc</name>
|
<name>gbc</name>
|
||||||
<fullname>Nintendo Game Boy Color</fullname>
|
<fullname>Nintendo Game Boy Color</fullname>
|
||||||
<path>%ROMPATH%/gbc</path>
|
<path>%ROMPATH%/gbc</path>
|
||||||
<extension>.sfc .SFC .smc .SMC .gb .GB .gbc .GBC .7z .7Z .zip .ZIP</extension>
|
<extension>.bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.dylib %ROM%</command>
|
<command label="SameBoy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/sameboy_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Gambatte">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gambatte_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Gearboy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearboy_libretro.dylib %ROM%</command>
|
||||||
|
<command label="TGB Dual">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/tgbdual_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.dylib %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.dylib %ROM%</command>
|
||||||
<platform>gbc</platform>
|
<platform>gbc</platform>
|
||||||
<theme>gbc</theme>
|
<theme>gbc</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -454,14 +456,9 @@
|
||||||
<name>genesis</name>
|
<name>genesis</name>
|
||||||
<fullname>Sega Genesis</fullname>
|
<fullname>Sega Genesis</fullname>
|
||||||
<path>%ROMPATH%/genesis</path>
|
<path>%ROMPATH%/genesis</path>
|
||||||
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
.MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
||||||
</extension>
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.dylib %ROM%</command>
|
||||||
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L
|
|
||||||
%CORE_RETROARCH%/genesis_plus_gx_wide_libretro.dylib %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.dylib %ROM%</command>
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.dylib %ROM%</command>
|
||||||
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/blastem_libretro.dylib %ROM%</command>
|
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/blastem_libretro.dylib %ROM%</command>
|
||||||
<platform>genesis</platform>
|
<platform>genesis</platform>
|
||||||
|
@ -526,14 +523,12 @@
|
||||||
<fullname>Multiple Arcade Machine Emulator</fullname>
|
<fullname>Multiple Arcade Machine Emulator</fullname>
|
||||||
<path>%ROMPATH%/mame</path>
|
<path>%ROMPATH%/mame</path>
|
||||||
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.dylib %ROM%
|
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.dylib %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.dylib %ROM%</command>
|
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.dylib %ROM%</command>
|
||||||
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.dylib %ROM%</command>
|
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.dylib %ROM%</command>
|
||||||
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.dylib %ROM%</command>
|
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.dylib %ROM%</command>
|
||||||
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.dylib %ROM%</command>
|
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.dylib %ROM%</command>
|
||||||
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.dylib %ROM%
|
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.dylib %ROM%</command>
|
||||||
</command>
|
|
||||||
<platform>arcade</platform>
|
<platform>arcade</platform>
|
||||||
<theme>mame</theme>
|
<theme>mame</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -559,14 +554,9 @@
|
||||||
<name>mastersystem</name>
|
<name>mastersystem</name>
|
||||||
<fullname>Sega Master System</fullname>
|
<fullname>Sega Master System</fullname>
|
||||||
<path>%ROMPATH%/mastersystem</path>
|
<path>%ROMPATH%/mastersystem</path>
|
||||||
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
.MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
||||||
</extension>
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.dylib %ROM%</command>
|
||||||
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L
|
|
||||||
%CORE_RETROARCH%/genesis_plus_gx_wide_libretro.dylib %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="SMS Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/smsplus_libretro.dylib %ROM%</command>
|
<command label="SMS Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/smsplus_libretro.dylib %ROM%</command>
|
||||||
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.dylib %ROM%</command>
|
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.dylib %ROM%</command>
|
||||||
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.dylib %ROM%</command>
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.dylib %ROM%</command>
|
||||||
|
@ -577,8 +567,10 @@
|
||||||
<name>megacd</name>
|
<name>megacd</name>
|
||||||
<fullname>Sega Mega-CD</fullname>
|
<fullname>Sega Mega-CD</fullname>
|
||||||
<path>%ROMPATH%/megacd</path>
|
<path>%ROMPATH%/megacd</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.dylib %ROM%</command>
|
||||||
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.dylib %ROM%</command>
|
||||||
<platform>segacd</platform>
|
<platform>segacd</platform>
|
||||||
<theme>megacd</theme>
|
<theme>megacd</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -586,8 +578,10 @@
|
||||||
<name>megacdjp</name>
|
<name>megacdjp</name>
|
||||||
<fullname>Sega Mega-CD</fullname>
|
<fullname>Sega Mega-CD</fullname>
|
||||||
<path>%ROMPATH%/megacdjp</path>
|
<path>%ROMPATH%/megacdjp</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.dylib %ROM%</command>
|
||||||
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.dylib %ROM%</command>
|
||||||
<platform>segacd</platform>
|
<platform>segacd</platform>
|
||||||
<theme>megacdjp</theme>
|
<theme>megacdjp</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -595,14 +589,9 @@
|
||||||
<name>megadrive</name>
|
<name>megadrive</name>
|
||||||
<fullname>Sega Mega Drive</fullname>
|
<fullname>Sega Mega Drive</fullname>
|
||||||
<path>%ROMPATH%/megadrive</path>
|
<path>%ROMPATH%/megadrive</path>
|
||||||
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
.MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
||||||
</extension>
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.dylib %ROM%</command>
|
||||||
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L
|
|
||||||
%CORE_RETROARCH%/genesis_plus_gx_wide_libretro.dylib %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.dylib %ROM%</command>
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.dylib %ROM%</command>
|
||||||
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/blastem_libretro.dylib %ROM%</command>
|
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/blastem_libretro.dylib %ROM%</command>
|
||||||
<platform>megadrive</platform>
|
<platform>megadrive</platform>
|
||||||
|
@ -640,7 +629,8 @@
|
||||||
<fullname>MSX</fullname>
|
<fullname>MSX</fullname>
|
||||||
<path>%ROMPATH%/msx</path>
|
<path>%ROMPATH%/msx</path>
|
||||||
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.dylib %ROM%</command>
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.dylib %ROM%</command>
|
||||||
|
<command label="fMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fmsx_libretro.dylib %ROM%</command>
|
||||||
<platform>msx</platform>
|
<platform>msx</platform>
|
||||||
<theme>msx</theme>
|
<theme>msx</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -649,7 +639,8 @@
|
||||||
<fullname>MSX1</fullname>
|
<fullname>MSX1</fullname>
|
||||||
<path>%ROMPATH%/msx1</path>
|
<path>%ROMPATH%/msx1</path>
|
||||||
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.dylib %ROM%</command>
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.dylib %ROM%</command>
|
||||||
|
<command label="fMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fmsx_libretro.dylib %ROM%</command>
|
||||||
<platform>msx</platform>
|
<platform>msx</platform>
|
||||||
<theme>msx1</theme>
|
<theme>msx1</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -658,7 +649,8 @@
|
||||||
<fullname>MSX2</fullname>
|
<fullname>MSX2</fullname>
|
||||||
<path>%ROMPATH%/msx2</path>
|
<path>%ROMPATH%/msx2</path>
|
||||||
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.dylib %ROM%</command>
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.dylib %ROM%</command>
|
||||||
|
<command label="fMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fmsx_libretro.dylib %ROM%</command>
|
||||||
<platform>msx2</platform>
|
<platform>msx2</platform>
|
||||||
<theme>msx2</theme>
|
<theme>msx2</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -685,7 +677,8 @@
|
||||||
<fullname>Nintendo 3DS</fullname>
|
<fullname>Nintendo 3DS</fullname>
|
||||||
<path>%ROMPATH%/n3ds</path>
|
<path>%ROMPATH%/n3ds</path>
|
||||||
<extension>.3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP</extension>
|
<extension>.3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra_libretro.dylib %ROM%</command>
|
<command label="Citra">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Citra 2018">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra2018_libretro.dylib %ROM%</command>
|
||||||
<platform>n3ds</platform>
|
<platform>n3ds</platform>
|
||||||
<theme>n3ds</theme>
|
<theme>n3ds</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -720,8 +713,10 @@
|
||||||
<name>nds</name>
|
<name>nds</name>
|
||||||
<fullname>Nintendo DS</fullname>
|
<fullname>Nintendo DS</fullname>
|
||||||
<path>%ROMPATH%/nds</path>
|
<path>%ROMPATH%/nds</path>
|
||||||
<extension>.nds .NDS .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .nds .NDS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melonds_libretro.dylib %ROM%</command>
|
<command label="DeSmuME">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume_libretro.dylib %ROM%</command>
|
||||||
|
<command label="DeSmuME 2015">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume2015_libretro.dylib %ROM%</command>
|
||||||
|
<command label="melonDS">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melonds_libretro.dylib %ROM%</command>
|
||||||
<platform>nds</platform>
|
<platform>nds</platform>
|
||||||
<theme>nds</theme>
|
<theme>nds</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -769,7 +764,8 @@
|
||||||
<fullname>SNK Neo Geo Pocket</fullname>
|
<fullname>SNK Neo Geo Pocket</fullname>
|
||||||
<path>%ROMPATH%/ngp</path>
|
<path>%ROMPATH%/ngp</path>
|
||||||
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_ngp_libretro.dylib %ROM%</command>
|
<command label="Beetle NeoPop">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_ngp_libretro.dylib %ROM%</command>
|
||||||
|
<command label="RACE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/race_libretro.dylib %ROM%</command>
|
||||||
<platform>ngp</platform>
|
<platform>ngp</platform>
|
||||||
<theme>ngp</theme>
|
<theme>ngp</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -778,7 +774,8 @@
|
||||||
<fullname>SNK Neo Geo Pocket Color</fullname>
|
<fullname>SNK Neo Geo Pocket Color</fullname>
|
||||||
<path>%ROMPATH%/ngpc</path>
|
<path>%ROMPATH%/ngpc</path>
|
||||||
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_ngp_libretro.dylib %ROM%</command>
|
<command label="Beetle NeoPop">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_ngp_libretro.dylib %ROM%</command>
|
||||||
|
<command label="RACE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/race_libretro.dylib %ROM%</command>
|
||||||
<platform>ngpc</platform>
|
<platform>ngpc</platform>
|
||||||
<theme>ngpc</theme>
|
<theme>ngpc</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -843,7 +840,8 @@
|
||||||
<fullname>NEC PC-9800 series</fullname>
|
<fullname>NEC PC-9800 series</fullname>
|
||||||
<path>%ROMPATH%/pc98</path>
|
<path>%ROMPATH%/pc98</path>
|
||||||
<extension>.2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .nhd .NHD .tfd .TFD .thd .THD . xdf .XDF .7z .7Z .zip .ZIP</extension>
|
<extension>.2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .nhd .NHD .tfd .TFD .thd .THD . xdf .XDF .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/np2kai_libretro.dylib %ROM%</command>
|
<command label="Neko Project II Kai">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/np2kai_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Neko Project II">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nekop2_libretro.dylib %ROM%</command>
|
||||||
<platform>pc98</platform>
|
<platform>pc98</platform>
|
||||||
<theme>pc98</theme>
|
<theme>pc98</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -851,13 +849,9 @@
|
||||||
<name>pcengine</name>
|
<name>pcengine</name>
|
||||||
<fullname>NEC PC Engine</fullname>
|
<fullname>NEC PC Engine</fullname>
|
||||||
<path>%ROMPATH%/pcengine</path>
|
<path>%ROMPATH%/pcengine</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.dylib %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.dylib %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.dylib
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.dylib %ROM%</command>
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<platform>pcengine</platform>
|
<platform>pcengine</platform>
|
||||||
<theme>pcengine</theme>
|
<theme>pcengine</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -865,13 +859,9 @@
|
||||||
<name>pcenginecd</name>
|
<name>pcenginecd</name>
|
||||||
<fullname>NEC PC Engine CD</fullname>
|
<fullname>NEC PC Engine CD</fullname>
|
||||||
<path>%ROMPATH%/pcenginecd</path>
|
<path>%ROMPATH%/pcenginecd</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.dylib %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.dylib %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.dylib
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.dylib %ROM%</command>
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<platform>pcenginecd</platform>
|
<platform>pcenginecd</platform>
|
||||||
<theme>pcenginecd</theme>
|
<theme>pcenginecd</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -951,14 +941,10 @@
|
||||||
<name>psx</name>
|
<name>psx</name>
|
||||||
<fullname>Sony PlayStation</fullname>
|
<fullname>Sony PlayStation</fullname>
|
||||||
<path>%ROMPATH%/psx</path>
|
<path>%ROMPATH%/psx</path>
|
||||||
<extension>.bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U
|
<extension>.bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U .mdf .MDF .mds .MDS .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP</extension>
|
||||||
.mdf .MDF .mds .MDS .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_libretro.dylib %ROM%</command>
|
<command label="Beetle PSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_libretro.dylib %ROM%</command>
|
||||||
<command label="Beetle PSX HW">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_hw_libretro.dylib %ROM%
|
<command label="Beetle PSX HW">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_hw_libretro.dylib %ROM%</command>
|
||||||
</command>
|
<command label="PCSX ReARMed">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx_rearmed_libretro.dylib %ROM%</command>
|
||||||
<command label="PCSX ReARMed">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx_rearmed_libretro.dylib %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="DuckStation">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/duckstation_libretro.dylib %ROM%</command>
|
<command label="DuckStation">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/duckstation_libretro.dylib %ROM%</command>
|
||||||
<platform>psx</platform>
|
<platform>psx</platform>
|
||||||
<theme>psx</theme>
|
<theme>psx</theme>
|
||||||
|
@ -985,8 +971,12 @@
|
||||||
<name>satellaview</name>
|
<name>satellaview</name>
|
||||||
<fullname>Nintendo Satellaview</fullname>
|
<fullname>Nintendo Satellaview</fullname>
|
||||||
<path>%ROMPATH%/satellaview</path>
|
<path>%ROMPATH%/satellaview</path>
|
||||||
<extension>.smc .SMC .sfc .SFC .swc .SWC .fig .FIG .bs .BS .bin .BIN .mgd .MGD .7z .7Z .zip .ZIP</extension>
|
<extension>.bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .swc .SWC .st .ST .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.dylib %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.dylib %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.dylib %ROM%</command>
|
||||||
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.dylib %ROM%</command>
|
||||||
<platform>satellaview</platform>
|
<platform>satellaview</platform>
|
||||||
<theme>satellaview</theme>
|
<theme>satellaview</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -994,8 +984,9 @@
|
||||||
<name>saturn</name>
|
<name>saturn</name>
|
||||||
<fullname>Sega Saturn</fullname>
|
<fullname>Sega Saturn</fullname>
|
||||||
<path>%ROMPATH%/saturn</path>
|
<path>%ROMPATH%/saturn</path>
|
||||||
<extension>.ccd .CCD .chd .CHD .cue .CUE .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .mds .MDS .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_saturn_libretro.dylib %ROM%</command>
|
<command label="Beetle Saturn">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_saturn_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Yabause">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/yabause_libretro.dylib %ROM%</command>
|
||||||
<platform>saturn</platform>
|
<platform>saturn</platform>
|
||||||
<theme>saturn</theme>
|
<theme>saturn</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1003,8 +994,9 @@
|
||||||
<name>saturnjp</name>
|
<name>saturnjp</name>
|
||||||
<fullname>Sega Saturn</fullname>
|
<fullname>Sega Saturn</fullname>
|
||||||
<path>%ROMPATH%/saturnjp</path>
|
<path>%ROMPATH%/saturnjp</path>
|
||||||
<extension>.ccd .CCD .chd .CHD .cue .CUE .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .mds .MDS .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_saturn_libretro.dylib %ROM%</command>
|
<command label="Beetle Saturn">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_saturn_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Yabause">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/yabause_libretro.dylib %ROM%</command>
|
||||||
<platform>saturn</platform>
|
<platform>saturn</platform>
|
||||||
<theme>saturnjp</theme>
|
<theme>saturnjp</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1048,8 +1040,10 @@
|
||||||
<name>segacd</name>
|
<name>segacd</name>
|
||||||
<fullname>Sega CD</fullname>
|
<fullname>Sega CD</fullname>
|
||||||
<path>%ROMPATH%/segacd</path>
|
<path>%ROMPATH%/segacd</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.dylib %ROM%</command>
|
||||||
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.dylib %ROM%</command>
|
||||||
<platform>segacd</platform>
|
<platform>segacd</platform>
|
||||||
<theme>segacd</theme>
|
<theme>segacd</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1057,8 +1051,11 @@
|
||||||
<name>sg-1000</name>
|
<name>sg-1000</name>
|
||||||
<fullname>Sega SG-1000</fullname>
|
<fullname>Sega SG-1000</fullname>
|
||||||
<path>%ROMPATH%/sg-1000</path>
|
<path>%ROMPATH%/sg-1000</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .ri .RI .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.dylib %ROM%</command>
|
||||||
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.dylib %ROM%</command>
|
||||||
<platform>sg-1000</platform>
|
<platform>sg-1000</platform>
|
||||||
<theme>sg-1000</theme>
|
<theme>sg-1000</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1066,15 +1063,11 @@
|
||||||
<name>snes</name>
|
<name>snes</name>
|
||||||
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
||||||
<path>%ROMPATH%/snes</path>
|
<path>%ROMPATH%/snes</path>
|
||||||
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC
|
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP</extension>
|
||||||
.smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.dylib %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.dylib %ROM%</command>
|
||||||
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.dylib %ROM%</command>
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.dylib %ROM%</command>
|
||||||
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.dylib %ROM%</command>
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.dylib %ROM%</command>
|
||||||
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.dylib %ROM%</command>
|
||||||
%CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.dylib %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.dylib %ROM%</command>
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.dylib %ROM%</command>
|
||||||
<platform>snes</platform>
|
<platform>snes</platform>
|
||||||
<theme>snes</theme>
|
<theme>snes</theme>
|
||||||
|
@ -1083,15 +1076,11 @@
|
||||||
<name>snesna</name>
|
<name>snesna</name>
|
||||||
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
||||||
<path>%ROMPATH%/snesna</path>
|
<path>%ROMPATH%/snesna</path>
|
||||||
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC
|
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP</extension>
|
||||||
.smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.dylib %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.dylib %ROM%</command>
|
||||||
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.dylib %ROM%</command>
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.dylib %ROM%</command>
|
||||||
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.dylib %ROM%</command>
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.dylib %ROM%</command>
|
||||||
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.dylib %ROM%</command>
|
||||||
%CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.dylib %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.dylib %ROM%</command>
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.dylib %ROM%</command>
|
||||||
<platform>snes</platform>
|
<platform>snes</platform>
|
||||||
<theme>snesna</theme>
|
<theme>snesna</theme>
|
||||||
|
@ -1136,8 +1125,11 @@
|
||||||
<name>sufami</name>
|
<name>sufami</name>
|
||||||
<fullname>Bandai SuFami Turbo</fullname>
|
<fullname>Bandai SuFami Turbo</fullname>
|
||||||
<path>%ROMPATH%/sufami</path>
|
<path>%ROMPATH%/sufami</path>
|
||||||
<extension>.smc .SMC .sfc .SFC .swc .SWC .fig .FIG .bs .BS .bin .BIN .mgd .MGD .7z .7Z .zip .ZIP</extension>
|
<extension>.bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .st .ST .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.dylib %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.dylib %ROM%</command>
|
||||||
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.dylib %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.dylib %ROM%</command>
|
||||||
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.dylib %ROM%</command>
|
||||||
<platform>sufami</platform>
|
<platform>sufami</platform>
|
||||||
<theme>sufami</theme>
|
<theme>sufami</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1146,9 +1138,7 @@
|
||||||
<fullname>NEC SuperGrafx</fullname>
|
<fullname>NEC SuperGrafx</fullname>
|
||||||
<path>%ROMPATH%/supergrafx</path>
|
<path>%ROMPATH%/supergrafx</path>
|
||||||
<extension>.pce .PCE .sgx .SGX .cue .CUE .ccd .CCD .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.pce .PCE .sgx .SGX .cue .CUE .ccd .CCD .chd .CHD .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="Beetle SuperGrafx">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supergrafx_libretro.dylib
|
<command label="Beetle SuperGrafx">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supergrafx_libretro.dylib %ROM%</command>
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.dylib %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.dylib %ROM%</command>
|
||||||
<platform>supergrafx</platform>
|
<platform>supergrafx</platform>
|
||||||
<theme>supergrafx</theme>
|
<theme>supergrafx</theme>
|
||||||
|
@ -1175,13 +1165,9 @@
|
||||||
<name>tg16</name>
|
<name>tg16</name>
|
||||||
<fullname>NEC TurboGrafx-16</fullname>
|
<fullname>NEC TurboGrafx-16</fullname>
|
||||||
<path>%ROMPATH%/tg16</path>
|
<path>%ROMPATH%/tg16</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.dylib %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.dylib %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.dylib
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.dylib %ROM%</command>
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<platform>pcengine</platform>
|
<platform>pcengine</platform>
|
||||||
<theme>tg16</theme>
|
<theme>tg16</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1189,13 +1175,9 @@
|
||||||
<name>tg-cd</name>
|
<name>tg-cd</name>
|
||||||
<fullname>NEC TurboGrafx-CD</fullname>
|
<fullname>NEC TurboGrafx-CD</fullname>
|
||||||
<path>%ROMPATH%/tg-cd</path>
|
<path>%ROMPATH%/tg-cd</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.dylib %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.dylib %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.dylib
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.dylib %ROM%</command>
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<theme>tg-cd</theme>
|
<theme>tg-cd</theme>
|
||||||
</system>
|
</system>
|
||||||
<system>
|
<system>
|
||||||
|
@ -1254,7 +1236,7 @@
|
||||||
</system>
|
</system>
|
||||||
<system>
|
<system>
|
||||||
<name>videopac</name>
|
<name>videopac</name>
|
||||||
<fullname>Philips Videopac G7000 (Magnavox Odyssey2)</fullname>
|
<fullname>Philips Videopac G7000</fullname>
|
||||||
<path>%ROMPATH%/videopac</path>
|
<path>%ROMPATH%/videopac</path>
|
||||||
<extension>.bin .BIN .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/o2em_libretro.dylib %ROM%</command>
|
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/o2em_libretro.dylib %ROM%</command>
|
||||||
|
|
|
@ -15,8 +15,7 @@
|
||||||
<fullname>Nintendo 64DD</fullname>
|
<fullname>Nintendo 64DD</fullname>
|
||||||
<path>%ROMPATH%/64dd</path>
|
<path>%ROMPATH%/64dd</path>
|
||||||
<extension>.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP</extension>
|
<extension>.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="Mupen64Plus-Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mupen64plus_next_libretro.so %ROM%
|
<command label="Mupen64Plus-Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mupen64plus_next_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="ParaLLEl N64">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/parallel_n64_libretro.so %ROM%</command>
|
<command label="ParaLLEl N64">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/parallel_n64_libretro.so %ROM%</command>
|
||||||
<platform>n64</platform>
|
<platform>n64</platform>
|
||||||
<theme>64dd</theme>
|
<theme>64dd</theme>
|
||||||
|
@ -70,8 +69,9 @@
|
||||||
<name>amstradcpc</name>
|
<name>amstradcpc</name>
|
||||||
<fullname>Amstrad CPC</fullname>
|
<fullname>Amstrad CPC</fullname>
|
||||||
<path>%ROMPATH%/amstradcpc</path>
|
<path>%ROMPATH%/amstradcpc</path>
|
||||||
<extension>.dsk .DSK .sna .SNA .tap .TAR .cdt .CDT .voc .VOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.cdt .CDT .cpr .CPR .dsk .DSK .kcr .KCR .m3u .M3U .sna .SNA .tap .TAR .voc .VOC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/cap32_libretro.so %ROM%</command>
|
<command label="Caprice32">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/cap32_libretro.so %ROM%</command>
|
||||||
|
<command label="CrocoDS">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/crocods_libretro.so %ROM%</command>
|
||||||
<platform>amstradcpc</platform>
|
<platform>amstradcpc</platform>
|
||||||
<theme>amstradcpc</theme>
|
<theme>amstradcpc</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -100,8 +100,7 @@
|
||||||
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM%</command>
|
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM%</command>
|
||||||
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM%</command>
|
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM%</command>
|
||||||
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM%
|
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM%</command>
|
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM%</command>
|
||||||
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM%</command>
|
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM%</command>
|
||||||
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM%</command>
|
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM%</command>
|
||||||
|
@ -177,7 +176,8 @@
|
||||||
<fullname>Atari Lynx</fullname>
|
<fullname>Atari Lynx</fullname>
|
||||||
<path>%ROMPATH%/atarilynx</path>
|
<path>%ROMPATH%/atarilynx</path>
|
||||||
<extension>.lnx .LNX .o .O .7z .7Z .zip .ZIP</extension>
|
<extension>.lnx .LNX .o .O .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_lynx_libretro.so %ROM%</command>
|
<command label="Handy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/handy_libretro.so %ROM%</command>
|
||||||
|
<command label="Beetle Lynx">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_lynx_libretro.so %ROM%</command>
|
||||||
<platform>atarilynx</platform>
|
<platform>atarilynx</platform>
|
||||||
<theme>atarilynx</theme>
|
<theme>atarilynx</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -221,15 +221,10 @@
|
||||||
<name>c64</name>
|
<name>c64</name>
|
||||||
<fullname>Commodore 64</fullname>
|
<fullname>Commodore 64</fullname>
|
||||||
<path>%ROMPATH%/c64</path>
|
<path>%ROMPATH%/c64</path>
|
||||||
<extension>.bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80
|
<extension>.bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP</extension>
|
||||||
.d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ
|
<command label="VICE x64sc Accurate">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x64sc_libretro.so %ROM%</command>
|
||||||
.nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="VICE x64sc Accurate">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x64sc_libretro.so %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="VICE x64 Fast">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x64_libretro.so %ROM%</command>
|
<command label="VICE x64 Fast">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x64_libretro.so %ROM%</command>
|
||||||
<command label="VICE x64 SuperCPU">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xscpu64_libretro.so %ROM%
|
<command label="VICE x64 SuperCPU">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xscpu64_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="VICE x128">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x128_libretro.so %ROM%</command>
|
<command label="VICE x128">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x128_libretro.so %ROM%</command>
|
||||||
<command label="Frodo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/frodo_libretro.so %ROM%</command>
|
<command label="Frodo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/frodo_libretro.so %ROM%</command>
|
||||||
<platform>c64</platform>
|
<platform>c64</platform>
|
||||||
|
@ -363,18 +358,10 @@
|
||||||
<path>%ROMPATH%/fba</path>
|
<path>%ROMPATH%/fba</path>
|
||||||
<extension>.iso .ISO .7z .7Z .zip .ZIP</extension>
|
<extension>.iso .ISO .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM%</command>
|
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM%</command>
|
||||||
<command label="FB Alpha 2012 Neo Geo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_neogeo_libretro.so
|
<command label="FB Alpha 2012 Neo Geo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_neogeo_libretro.so %ROM%</command>
|
||||||
%ROM%
|
<command label="FB Alpha 2012 CPS-1">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps1_libretro.so %ROM%</command>
|
||||||
</command>
|
<command label="FB Alpha 2012 CPS-2">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps2_libretro.so %ROM%</command>
|
||||||
<command label="FB Alpha 2012 CPS-1">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps1_libretro.so
|
<command label="FB Alpha 2012 CPS-3">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps3_libretro.so %ROM%</command>
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="FB Alpha 2012 CPS-2">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps2_libretro.so
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="FB Alpha 2012 CPS-3">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps3_libretro.so
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<platform>arcade</platform>
|
<platform>arcade</platform>
|
||||||
<theme>fba</theme>
|
<theme>fba</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -409,8 +396,11 @@
|
||||||
<name>gamegear</name>
|
<name>gamegear</name>
|
||||||
<fullname>Sega Game Gear</fullname>
|
<fullname>Sega Game Gear</fullname>
|
||||||
<path>%ROMPATH%/gamegear</path>
|
<path>%ROMPATH%/gamegear</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.so %ROM%</command>
|
||||||
|
<command label="SMS Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/smsplus_libretro.so %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM%</command>
|
||||||
<platform>gamegear</platform>
|
<platform>gamegear</platform>
|
||||||
<theme>gamegear</theme>
|
<theme>gamegear</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -418,8 +408,13 @@
|
||||||
<name>gb</name>
|
<name>gb</name>
|
||||||
<fullname>Nintendo Game Boy</fullname>
|
<fullname>Nintendo Game Boy</fullname>
|
||||||
<path>%ROMPATH%/gb</path>
|
<path>%ROMPATH%/gb</path>
|
||||||
<extension>.sfc .SFC .smc .SMC .gb .GB .gbc .GBC .7z .7Z .zip .ZIP</extension>
|
<extension>.bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
<command label="SameBoy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/sameboy_libretro.so %ROM%</command>
|
||||||
|
<command label="Gambatte">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gambatte_libretro.so %ROM%</command>
|
||||||
|
<command label="Gearboy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearboy_libretro.so %ROM%</command>
|
||||||
|
<command label="TGB Dual">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/tgbdual_libretro.so %ROM%</command>
|
||||||
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
||||||
<platform>gb</platform>
|
<platform>gb</platform>
|
||||||
<theme>gb</theme>
|
<theme>gb</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -427,8 +422,11 @@
|
||||||
<name>gba</name>
|
<name>gba</name>
|
||||||
<fullname>Nintendo Game Boy Advance</fullname>
|
<fullname>Nintendo Game Boy Advance</fullname>
|
||||||
<path>%ROMPATH%/gba</path>
|
<path>%ROMPATH%/gba</path>
|
||||||
<extension>.gba .GBA .agb .AGB .bin .BIN .7z .7Z .zip .ZIP</extension>
|
<extension>.agb .AGB .bin .BIN .cgb .CGB .dmg .DMG .gb .GB .gba .GBA .gbc .GBC .sgb .SGB .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_gba_libretro.so %ROM%</command>
|
<command label="mGBA">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mgba_libretro.so %ROM%</command>
|
||||||
|
<command label="VBA-M">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vbam_next_libretro.so %ROM%</command>
|
||||||
|
<command label="VBA Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vba_next_libretro.so %ROM%</command>
|
||||||
|
<command label="gpSP">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gpsp_libretro.so %ROM%</command>
|
||||||
<platform>gba</platform>
|
<platform>gba</platform>
|
||||||
<theme>gba</theme>
|
<theme>gba</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -436,8 +434,13 @@
|
||||||
<name>gbc</name>
|
<name>gbc</name>
|
||||||
<fullname>Nintendo Game Boy Color</fullname>
|
<fullname>Nintendo Game Boy Color</fullname>
|
||||||
<path>%ROMPATH%/gbc</path>
|
<path>%ROMPATH%/gbc</path>
|
||||||
<extension>.sfc .SFC .smc .SMC .gb .GB .gbc .GBC .7z .7Z .zip .ZIP</extension>
|
<extension>.bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
<command label="SameBoy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/sameboy_libretro.so %ROM%</command>
|
||||||
|
<command label="Gambatte">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gambatte_libretro.so %ROM%</command>
|
||||||
|
<command label="Gearboy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearboy_libretro.so %ROM%</command>
|
||||||
|
<command label="TGB Dual">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/tgbdual_libretro.so %ROM%</command>
|
||||||
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
||||||
<platform>gbc</platform>
|
<platform>gbc</platform>
|
||||||
<theme>gbc</theme>
|
<theme>gbc</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -454,14 +457,9 @@
|
||||||
<name>genesis</name>
|
<name>genesis</name>
|
||||||
<fullname>Sega Genesis</fullname>
|
<fullname>Sega Genesis</fullname>
|
||||||
<path>%ROMPATH%/genesis</path>
|
<path>%ROMPATH%/genesis</path>
|
||||||
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
.MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
||||||
</extension>
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM%</command>
|
||||||
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM%</command>
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM%</command>
|
||||||
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/blastem_libretro.so %ROM%</command>
|
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/blastem_libretro.so %ROM%</command>
|
||||||
<platform>genesis</platform>
|
<platform>genesis</platform>
|
||||||
|
@ -526,8 +524,7 @@
|
||||||
<fullname>Multiple Arcade Machine Emulator</fullname>
|
<fullname>Multiple Arcade Machine Emulator</fullname>
|
||||||
<path>%ROMPATH%/mame</path>
|
<path>%ROMPATH%/mame</path>
|
||||||
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM%
|
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM%</command>
|
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM%</command>
|
||||||
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM%</command>
|
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM%</command>
|
||||||
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM%</command>
|
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM%</command>
|
||||||
|
@ -558,14 +555,9 @@
|
||||||
<name>mastersystem</name>
|
<name>mastersystem</name>
|
||||||
<fullname>Sega Master System</fullname>
|
<fullname>Sega Master System</fullname>
|
||||||
<path>%ROMPATH%/mastersystem</path>
|
<path>%ROMPATH%/mastersystem</path>
|
||||||
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
.MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
||||||
</extension>
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM%</command>
|
||||||
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="SMS Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/smsplus_libretro.so %ROM%</command>
|
<command label="SMS Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/smsplus_libretro.so %ROM%</command>
|
||||||
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.so %ROM%</command>
|
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.so %ROM%</command>
|
||||||
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM%</command>
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM%</command>
|
||||||
|
@ -576,8 +568,10 @@
|
||||||
<name>megacd</name>
|
<name>megacd</name>
|
||||||
<fullname>Sega Mega-CD</fullname>
|
<fullname>Sega Mega-CD</fullname>
|
||||||
<path>%ROMPATH%/megacd</path>
|
<path>%ROMPATH%/megacd</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM%</command>
|
||||||
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM%</command>
|
||||||
<platform>segacd</platform>
|
<platform>segacd</platform>
|
||||||
<theme>megacd</theme>
|
<theme>megacd</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -585,8 +579,10 @@
|
||||||
<name>megacdjp</name>
|
<name>megacdjp</name>
|
||||||
<fullname>Sega Mega-CD</fullname>
|
<fullname>Sega Mega-CD</fullname>
|
||||||
<path>%ROMPATH%/megacdjp</path>
|
<path>%ROMPATH%/megacdjp</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM%</command>
|
||||||
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM%</command>
|
||||||
<platform>segacd</platform>
|
<platform>segacd</platform>
|
||||||
<theme>megacdjp</theme>
|
<theme>megacdjp</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -594,14 +590,9 @@
|
||||||
<name>megadrive</name>
|
<name>megadrive</name>
|
||||||
<fullname>Sega Mega Drive</fullname>
|
<fullname>Sega Mega Drive</fullname>
|
||||||
<path>%ROMPATH%/megadrive</path>
|
<path>%ROMPATH%/megadrive</path>
|
||||||
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
.MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
||||||
</extension>
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM%</command>
|
||||||
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM%</command>
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM%</command>
|
||||||
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/blastem_libretro.so %ROM%</command>
|
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/blastem_libretro.so %ROM%</command>
|
||||||
<platform>megadrive</platform>
|
<platform>megadrive</platform>
|
||||||
|
@ -639,7 +630,8 @@
|
||||||
<fullname>MSX</fullname>
|
<fullname>MSX</fullname>
|
||||||
<path>%ROMPATH%/msx</path>
|
<path>%ROMPATH%/msx</path>
|
||||||
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM%</command>
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM%</command>
|
||||||
|
<command label="fMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fmsx_libretro.so %ROM%</command>
|
||||||
<platform>msx</platform>
|
<platform>msx</platform>
|
||||||
<theme>msx</theme>
|
<theme>msx</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -648,7 +640,8 @@
|
||||||
<fullname>MSX1</fullname>
|
<fullname>MSX1</fullname>
|
||||||
<path>%ROMPATH%/msx1</path>
|
<path>%ROMPATH%/msx1</path>
|
||||||
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM%</command>
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM%</command>
|
||||||
|
<command label="fMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fmsx_libretro.so %ROM%</command>
|
||||||
<platform>msx</platform>
|
<platform>msx</platform>
|
||||||
<theme>msx1</theme>
|
<theme>msx1</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -657,7 +650,8 @@
|
||||||
<fullname>MSX2</fullname>
|
<fullname>MSX2</fullname>
|
||||||
<path>%ROMPATH%/msx2</path>
|
<path>%ROMPATH%/msx2</path>
|
||||||
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM%</command>
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM%</command>
|
||||||
|
<command label="fMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fmsx_libretro.so %ROM%</command>
|
||||||
<platform>msx2</platform>
|
<platform>msx2</platform>
|
||||||
<theme>msx2</theme>
|
<theme>msx2</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -684,7 +678,8 @@
|
||||||
<fullname>Nintendo 3DS</fullname>
|
<fullname>Nintendo 3DS</fullname>
|
||||||
<path>%ROMPATH%/n3ds</path>
|
<path>%ROMPATH%/n3ds</path>
|
||||||
<extension>.3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP</extension>
|
<extension>.3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra_libretro.so %ROM%</command>
|
<command label="Citra">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra_libretro.so %ROM%</command>
|
||||||
|
<command label="Citra 2018">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra2018_libretro.so %ROM%</command>
|
||||||
<platform>n3ds</platform>
|
<platform>n3ds</platform>
|
||||||
<theme>n3ds</theme>
|
<theme>n3ds</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -693,8 +688,7 @@
|
||||||
<fullname>Nintendo 64</fullname>
|
<fullname>Nintendo 64</fullname>
|
||||||
<path>%ROMPATH%/n64</path>
|
<path>%ROMPATH%/n64</path>
|
||||||
<extension>.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP</extension>
|
<extension>.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="Mupen64Plus-Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mupen64plus_next_libretro.so %ROM%
|
<command label="Mupen64Plus-Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mupen64plus_next_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="ParaLLEl N64">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/parallel_n64_libretro.so %ROM%</command>
|
<command label="ParaLLEl N64">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/parallel_n64_libretro.so %ROM%</command>
|
||||||
<platform>n64</platform>
|
<platform>n64</platform>
|
||||||
<theme>n64</theme>
|
<theme>n64</theme>
|
||||||
|
@ -721,8 +715,10 @@
|
||||||
<name>nds</name>
|
<name>nds</name>
|
||||||
<fullname>Nintendo DS</fullname>
|
<fullname>Nintendo DS</fullname>
|
||||||
<path>%ROMPATH%/nds</path>
|
<path>%ROMPATH%/nds</path>
|
||||||
<extension>.nds .NDS .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .nds .NDS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melonds_libretro.so %ROM%</command>
|
<command label="DeSmuME">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume_libretro.so %ROM%</command>
|
||||||
|
<command label="DeSmuME 2015">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume2015_libretro.so %ROM%</command>
|
||||||
|
<command label="melonDS">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melonds_libretro.so %ROM%</command>
|
||||||
<platform>nds</platform>
|
<platform>nds</platform>
|
||||||
<theme>nds</theme>
|
<theme>nds</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -770,7 +766,8 @@
|
||||||
<fullname>SNK Neo Geo Pocket</fullname>
|
<fullname>SNK Neo Geo Pocket</fullname>
|
||||||
<path>%ROMPATH%/ngp</path>
|
<path>%ROMPATH%/ngp</path>
|
||||||
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_ngp_libretro.so %ROM%</command>
|
<command label="Beetle NeoPop">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_ngp_libretro.so %ROM%</command>
|
||||||
|
<command label="RACE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/race_libretro.so %ROM%</command>
|
||||||
<platform>ngp</platform>
|
<platform>ngp</platform>
|
||||||
<theme>ngp</theme>
|
<theme>ngp</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -779,7 +776,8 @@
|
||||||
<fullname>SNK Neo Geo Pocket Color</fullname>
|
<fullname>SNK Neo Geo Pocket Color</fullname>
|
||||||
<path>%ROMPATH%/ngpc</path>
|
<path>%ROMPATH%/ngpc</path>
|
||||||
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_ngp_libretro.so %ROM%</command>
|
<command label="Beetle NeoPop">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_ngp_libretro.so %ROM%</command>
|
||||||
|
<command label="RACE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/race_libretro.so %ROM%</command>
|
||||||
<platform>ngpc</platform>
|
<platform>ngpc</platform>
|
||||||
<theme>ngpc</theme>
|
<theme>ngpc</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -844,7 +842,8 @@
|
||||||
<fullname>NEC PC-9800 series</fullname>
|
<fullname>NEC PC-9800 series</fullname>
|
||||||
<path>%ROMPATH%/pc98</path>
|
<path>%ROMPATH%/pc98</path>
|
||||||
<extension>.2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .nhd .NHD .tfd .TFD .thd .THD . xdf .XDF .7z .7Z .zip .ZIP</extension>
|
<extension>.2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .nhd .NHD .tfd .TFD .thd .THD . xdf .XDF .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/np2kai_libretro.so %ROM%</command>
|
<command label="Neko Project II Kai">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/np2kai_libretro.so %ROM%</command>
|
||||||
|
<command label="Neko Project II">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nekop2_libretro.so %ROM%</command>
|
||||||
<platform>pc98</platform>
|
<platform>pc98</platform>
|
||||||
<theme>pc98</theme>
|
<theme>pc98</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -852,12 +851,9 @@
|
||||||
<name>pcengine</name>
|
<name>pcengine</name>
|
||||||
<fullname>NEC PC Engine</fullname>
|
<fullname>NEC PC Engine</fullname>
|
||||||
<path>%ROMPATH%/pcengine</path>
|
<path>%ROMPATH%/pcengine</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM%
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<platform>pcengine</platform>
|
<platform>pcengine</platform>
|
||||||
<theme>pcengine</theme>
|
<theme>pcengine</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -865,12 +861,9 @@
|
||||||
<name>pcenginecd</name>
|
<name>pcenginecd</name>
|
||||||
<fullname>NEC PC Engine CD</fullname>
|
<fullname>NEC PC Engine CD</fullname>
|
||||||
<path>%ROMPATH%/pcenginecd</path>
|
<path>%ROMPATH%/pcenginecd</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM%
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<platform>pcenginecd</platform>
|
<platform>pcenginecd</platform>
|
||||||
<theme>pcenginecd</theme>
|
<theme>pcenginecd</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -950,12 +943,9 @@
|
||||||
<name>psx</name>
|
<name>psx</name>
|
||||||
<fullname>Sony PlayStation</fullname>
|
<fullname>Sony PlayStation</fullname>
|
||||||
<path>%ROMPATH%/psx</path>
|
<path>%ROMPATH%/psx</path>
|
||||||
<extension>.bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U
|
<extension>.bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U .mdf .MDF .mds .MDS .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP</extension>
|
||||||
.mdf .MDF .mds .MDS .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_libretro.so %ROM%</command>
|
<command label="Beetle PSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_libretro.so %ROM%</command>
|
||||||
<command label="Beetle PSX HW">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_hw_libretro.so %ROM%
|
<command label="Beetle PSX HW">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_hw_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="PCSX ReARMed">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx_rearmed_libretro.so %ROM%</command>
|
<command label="PCSX ReARMed">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx_rearmed_libretro.so %ROM%</command>
|
||||||
<command label="DuckStation">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/duckstation_libretro.so %ROM%</command>
|
<command label="DuckStation">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/duckstation_libretro.so %ROM%</command>
|
||||||
<platform>psx</platform>
|
<platform>psx</platform>
|
||||||
|
@ -983,8 +973,12 @@
|
||||||
<name>satellaview</name>
|
<name>satellaview</name>
|
||||||
<fullname>Nintendo Satellaview</fullname>
|
<fullname>Nintendo Satellaview</fullname>
|
||||||
<path>%ROMPATH%/satellaview</path>
|
<path>%ROMPATH%/satellaview</path>
|
||||||
<extension>.smc .SMC .sfc .SFC .swc .SWC .fig .FIG .bs .BS .bin .BIN .mgd .MGD .7z .7Z .zip .ZIP</extension>
|
<extension>.bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .swc .SWC .st .ST .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
||||||
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
||||||
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM%</command>
|
||||||
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM%</command>
|
||||||
<platform>satellaview</platform>
|
<platform>satellaview</platform>
|
||||||
<theme>satellaview</theme>
|
<theme>satellaview</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -992,8 +986,11 @@
|
||||||
<name>saturn</name>
|
<name>saturn</name>
|
||||||
<fullname>Sega Saturn</fullname>
|
<fullname>Sega Saturn</fullname>
|
||||||
<path>%ROMPATH%/saturn</path>
|
<path>%ROMPATH%/saturn</path>
|
||||||
<extension>.ccd .CCD .chd .CHD .cue .CUE .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .mds .MDS .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_saturn_libretro.so %ROM%</command>
|
<command label="Beetle Saturn">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_saturn_libretro.so %ROM%</command>
|
||||||
|
<command label="Kronos">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/kronos_libretro.so %ROM%</command>
|
||||||
|
<command label="YabaSanshiro">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/yabasanshiro_libretro.so %ROM%</command>
|
||||||
|
<command label="Yabause">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/yabause_libretro.so %ROM%</command>
|
||||||
<platform>saturn</platform>
|
<platform>saturn</platform>
|
||||||
<theme>saturn</theme>
|
<theme>saturn</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1001,8 +998,11 @@
|
||||||
<name>saturnjp</name>
|
<name>saturnjp</name>
|
||||||
<fullname>Sega Saturn</fullname>
|
<fullname>Sega Saturn</fullname>
|
||||||
<path>%ROMPATH%/saturnjp</path>
|
<path>%ROMPATH%/saturnjp</path>
|
||||||
<extension>.ccd .CCD .chd .CHD .cue .CUE .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .mds .MDS .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_saturn_libretro.so %ROM%</command>
|
<command label="Beetle Saturn">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_saturn_libretro.so %ROM%</command>
|
||||||
|
<command label="Kronos">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/kronos_libretro.so %ROM%</command>
|
||||||
|
<command label="YabaSanshiro">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/yabasanshiro_libretro.so %ROM%</command>
|
||||||
|
<command label="Yabause">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/yabause_libretro.so %ROM%</command>
|
||||||
<platform>saturn</platform>
|
<platform>saturn</platform>
|
||||||
<theme>saturnjp</theme>
|
<theme>saturnjp</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1046,8 +1046,10 @@
|
||||||
<name>segacd</name>
|
<name>segacd</name>
|
||||||
<fullname>Sega CD</fullname>
|
<fullname>Sega CD</fullname>
|
||||||
<path>%ROMPATH%/segacd</path>
|
<path>%ROMPATH%/segacd</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM%</command>
|
||||||
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM%</command>
|
||||||
<platform>segacd</platform>
|
<platform>segacd</platform>
|
||||||
<theme>segacd</theme>
|
<theme>segacd</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1055,8 +1057,11 @@
|
||||||
<name>sg-1000</name>
|
<name>sg-1000</name>
|
||||||
<fullname>Sega SG-1000</fullname>
|
<fullname>Sega SG-1000</fullname>
|
||||||
<path>%ROMPATH%/sg-1000</path>
|
<path>%ROMPATH%/sg-1000</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .ri .RI .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.so %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM%</command>
|
||||||
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM%</command>
|
||||||
<platform>sg-1000</platform>
|
<platform>sg-1000</platform>
|
||||||
<theme>sg-1000</theme>
|
<theme>sg-1000</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1064,18 +1069,12 @@
|
||||||
<name>snes</name>
|
<name>snes</name>
|
||||||
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
||||||
<path>%ROMPATH%/snes</path>
|
<path>%ROMPATH%/snes</path>
|
||||||
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC
|
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP</extension>
|
||||||
.smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
||||||
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM%</command>
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM%</command>
|
||||||
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
||||||
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM%</command>
|
||||||
%CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM%
|
<command label="Beetle Supafaust">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supafaust_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="Beetle Supafaust">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supafaust_libretro.so
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM%</command>
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM%</command>
|
||||||
<platform>snes</platform>
|
<platform>snes</platform>
|
||||||
<theme>snes</theme>
|
<theme>snes</theme>
|
||||||
|
@ -1084,18 +1083,12 @@
|
||||||
<name>snesna</name>
|
<name>snesna</name>
|
||||||
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
||||||
<path>%ROMPATH%/snesna</path>
|
<path>%ROMPATH%/snesna</path>
|
||||||
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC
|
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP</extension>
|
||||||
.smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
||||||
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM%</command>
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM%</command>
|
||||||
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
||||||
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM%</command>
|
||||||
%CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM%
|
<command label="Beetle Supafaust">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supafaust_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="Beetle Supafaust">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supafaust_libretro.so
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM%</command>
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM%</command>
|
||||||
<platform>snes</platform>
|
<platform>snes</platform>
|
||||||
<theme>snesna</theme>
|
<theme>snesna</theme>
|
||||||
|
@ -1140,8 +1133,11 @@
|
||||||
<name>sufami</name>
|
<name>sufami</name>
|
||||||
<fullname>Bandai SuFami Turbo</fullname>
|
<fullname>Bandai SuFami Turbo</fullname>
|
||||||
<path>%ROMPATH%/sufami</path>
|
<path>%ROMPATH%/sufami</path>
|
||||||
<extension>.smc .SMC .sfc .SFC .swc .SWC .fig .FIG .bs .BS .bin .BIN .mgd .MGD .7z .7Z .zip .ZIP</extension>
|
<extension>.bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .st .ST .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM%</command>
|
||||||
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM%</command>
|
||||||
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM%</command>
|
||||||
<platform>sufami</platform>
|
<platform>sufami</platform>
|
||||||
<theme>sufami</theme>
|
<theme>sufami</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1150,9 +1146,7 @@
|
||||||
<fullname>NEC SuperGrafx</fullname>
|
<fullname>NEC SuperGrafx</fullname>
|
||||||
<path>%ROMPATH%/supergrafx</path>
|
<path>%ROMPATH%/supergrafx</path>
|
||||||
<extension>.pce .PCE .sgx .SGX .cue .CUE .ccd .CCD .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.pce .PCE .sgx .SGX .cue .CUE .ccd .CCD .chd .CHD .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="Beetle SuperGrafx">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supergrafx_libretro.so
|
<command label="Beetle SuperGrafx">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supergrafx_libretro.so %ROM%</command>
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM%</command>
|
||||||
<platform>supergrafx</platform>
|
<platform>supergrafx</platform>
|
||||||
<theme>supergrafx</theme>
|
<theme>supergrafx</theme>
|
||||||
|
@ -1179,12 +1173,9 @@
|
||||||
<name>tg16</name>
|
<name>tg16</name>
|
||||||
<fullname>NEC TurboGrafx-16</fullname>
|
<fullname>NEC TurboGrafx-16</fullname>
|
||||||
<path>%ROMPATH%/tg16</path>
|
<path>%ROMPATH%/tg16</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM%
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<platform>pcengine</platform>
|
<platform>pcengine</platform>
|
||||||
<theme>tg16</theme>
|
<theme>tg16</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1192,12 +1183,9 @@
|
||||||
<name>tg-cd</name>
|
<name>tg-cd</name>
|
||||||
<fullname>NEC TurboGrafx-CD</fullname>
|
<fullname>NEC TurboGrafx-CD</fullname>
|
||||||
<path>%ROMPATH%/tg-cd</path>
|
<path>%ROMPATH%/tg-cd</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM%
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM%</command>
|
||||||
</command>
|
|
||||||
<platform>pcenginecd</platform>
|
<platform>pcenginecd</platform>
|
||||||
<theme>tg-cd</theme>
|
<theme>tg-cd</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1257,7 +1245,7 @@
|
||||||
</system>
|
</system>
|
||||||
<system>
|
<system>
|
||||||
<name>videopac</name>
|
<name>videopac</name>
|
||||||
<fullname>Philips Videopac G7000 (Magnavox Odyssey2)</fullname>
|
<fullname>Philips Videopac G7000</fullname>
|
||||||
<path>%ROMPATH%/videopac</path>
|
<path>%ROMPATH%/videopac</path>
|
||||||
<extension>.bin .BIN .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/o2em_libretro.so %ROM%</command>
|
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/o2em_libretro.so %ROM%</command>
|
||||||
|
|
|
@ -15,8 +15,7 @@
|
||||||
<fullname>Nintendo 64DD</fullname>
|
<fullname>Nintendo 64DD</fullname>
|
||||||
<path>%ROMPATH%\64dd</path>
|
<path>%ROMPATH%\64dd</path>
|
||||||
<extension>.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP</extension>
|
<extension>.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="Mupen64Plus-Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mupen64plus_next_libretro.dll %ROM%
|
<command label="Mupen64Plus-Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mupen64plus_next_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="ParaLLEl N64">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\parallel_n64_libretro.dll %ROM%</command>
|
<command label="ParaLLEl N64">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\parallel_n64_libretro.dll %ROM%</command>
|
||||||
<platform>n64</platform>
|
<platform>n64</platform>
|
||||||
<theme>64dd</theme>
|
<theme>64dd</theme>
|
||||||
|
@ -70,8 +69,9 @@
|
||||||
<name>amstradcpc</name>
|
<name>amstradcpc</name>
|
||||||
<fullname>Amstrad CPC</fullname>
|
<fullname>Amstrad CPC</fullname>
|
||||||
<path>%ROMPATH%\amstradcpc</path>
|
<path>%ROMPATH%\amstradcpc</path>
|
||||||
<extension>.dsk .DSK .sna .SNA .tap .TAR .cdt .CDT .voc .VOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.cdt .CDT .cpr .CPR .dsk .DSK .kcr .KCR .m3u .M3U .sna .SNA .tap .TAR .voc .VOC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\cap32_libretro.dll %ROM%</command>
|
<command label="Caprice32">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\cap32_libretro.dll %ROM%</command>
|
||||||
|
<command label="CrocoDS">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\crocods_libretro.dll %ROM%</command>
|
||||||
<platform>amstradcpc</platform>
|
<platform>amstradcpc</platform>
|
||||||
<theme>amstradcpc</theme>
|
<theme>amstradcpc</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -100,8 +100,7 @@
|
||||||
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame_libretro.dll %ROM%</command>
|
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame_libretro.dll %ROM%</command>
|
||||||
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2000_libretro.dll %ROM%</command>
|
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2000_libretro.dll %ROM%</command>
|
||||||
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2003_plus_libretro.dll %ROM%
|
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2003_plus_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2010_libretro.dll %ROM%</command>
|
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2010_libretro.dll %ROM%</command>
|
||||||
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbneo_libretro.dll %ROM%</command>
|
<command label="FinalBurn Neo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbneo_libretro.dll %ROM%</command>
|
||||||
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_libretro.dll %ROM%</command>
|
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_libretro.dll %ROM%</command>
|
||||||
|
@ -177,7 +176,8 @@
|
||||||
<fullname>Atari Lynx</fullname>
|
<fullname>Atari Lynx</fullname>
|
||||||
<path>%ROMPATH%\atarilynx</path>
|
<path>%ROMPATH%\atarilynx</path>
|
||||||
<extension>.lnx .LNX .o .O .7z .7Z .zip .ZIP</extension>
|
<extension>.lnx .LNX .o .O .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_lynx_libretro.dll %ROM%</command>
|
<command label="Handy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\handy_libretro.dll %ROM%</command>
|
||||||
|
<command label="Beetle Lynx">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_lynx_libretro.dll %ROM%</command>
|
||||||
<platform>atarilynx</platform>
|
<platform>atarilynx</platform>
|
||||||
<theme>atarilynx</theme>
|
<theme>atarilynx</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -221,15 +221,10 @@
|
||||||
<name>c64</name>
|
<name>c64</name>
|
||||||
<fullname>Commodore 64</fullname>
|
<fullname>Commodore 64</fullname>
|
||||||
<path>%ROMPATH%\c64</path>
|
<path>%ROMPATH%\c64</path>
|
||||||
<extension>.bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80
|
<extension>.bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP</extension>
|
||||||
.d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ
|
<command label="VICE x64sc Accurate">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vice_x64sc_libretro.dll %ROM%</command>
|
||||||
.nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="VICE x64sc Accurate">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vice_x64sc_libretro.dll %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="VICE x64 Fast">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vice_x64_libretro.dll %ROM%</command>
|
<command label="VICE x64 Fast">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vice_x64_libretro.dll %ROM%</command>
|
||||||
<command label="VICE x64 SuperCPU">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vice_xscpu64_libretro.dll %ROM%
|
<command label="VICE x64 SuperCPU">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vice_xscpu64_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="VICE x128">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vice_x128_libretro.dll %ROM%</command>
|
<command label="VICE x128">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vice_x128_libretro.dll %ROM%</command>
|
||||||
<command label="Frodo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\frodo_libretro.dll %ROM%</command>
|
<command label="Frodo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\frodo_libretro.dll %ROM%</command>
|
||||||
<platform>c64</platform>
|
<platform>c64</platform>
|
||||||
|
@ -363,18 +358,10 @@
|
||||||
<path>%ROMPATH%\fba</path>
|
<path>%ROMPATH%\fba</path>
|
||||||
<extension>.iso .ISO .7z .7Z .zip .ZIP</extension>
|
<extension>.iso .ISO .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_libretro.dll %ROM%</command>
|
<command label="FB Alpha 2012">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_libretro.dll %ROM%</command>
|
||||||
<command label="FB Alpha 2012 Neo Geo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_neogeo_libretro.dll
|
<command label="FB Alpha 2012 Neo Geo">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_neogeo_libretro.dll %ROM%</command>
|
||||||
%ROM%
|
<command label="FB Alpha 2012 CPS-1">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_cps1_libretro.dll %ROM%</command>
|
||||||
</command>
|
<command label="FB Alpha 2012 CPS-2">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_cps2_libretro.dll %ROM%</command>
|
||||||
<command label="FB Alpha 2012 CPS-1">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_cps1_libretro.dll
|
<command label="FB Alpha 2012 CPS-3">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_cps3_libretro.dll %ROM%</command>
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="FB Alpha 2012 CPS-2">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_cps2_libretro.dll
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="FB Alpha 2012 CPS-3">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fbalpha2012_cps3_libretro.dll
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<platform>arcade</platform>
|
<platform>arcade</platform>
|
||||||
<theme>fba</theme>
|
<theme>fba</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -409,8 +396,11 @@
|
||||||
<name>gamegear</name>
|
<name>gamegear</name>
|
||||||
<fullname>Sega Game Gear</fullname>
|
<fullname>Sega Game Gear</fullname>
|
||||||
<path>%ROMPATH%\gamegear</path>
|
<path>%ROMPATH%\gamegear</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\gearsystem_libretro.dll %ROM%</command>
|
||||||
|
<command label="SMS Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\smsplus_libretro.dll %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_wide_libretro.dll %ROM%</command>
|
||||||
<platform>gamegear</platform>
|
<platform>gamegear</platform>
|
||||||
<theme>gamegear</theme>
|
<theme>gamegear</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -418,8 +408,13 @@
|
||||||
<name>gb</name>
|
<name>gb</name>
|
||||||
<fullname>Nintendo Game Boy</fullname>
|
<fullname>Nintendo Game Boy</fullname>
|
||||||
<path>%ROMPATH%\gb</path>
|
<path>%ROMPATH%\gb</path>
|
||||||
<extension>.sfc .SFC .smc .SMC .gb .GB .gbc .GBC .7z .7Z .zip .ZIP</extension>
|
<extension>.bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_libretro.dll %ROM%</command>
|
<command label="SameBoy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\sameboy_libretro.dll %ROM%</command>
|
||||||
|
<command label="Gambatte">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\gambatte_libretro.dll %ROM%</command>
|
||||||
|
<command label="Gearboy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\gearboy_libretro.dll %ROM%</command>
|
||||||
|
<command label="TGB Dual">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\tgbdual_libretro.dll %ROM%</command>
|
||||||
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mesen-s_libretro.dll %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_libretro.dll %ROM%</command>
|
||||||
<platform>gb</platform>
|
<platform>gb</platform>
|
||||||
<theme>gb</theme>
|
<theme>gb</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -427,8 +422,11 @@
|
||||||
<name>gba</name>
|
<name>gba</name>
|
||||||
<fullname>Nintendo Game Boy Advance</fullname>
|
<fullname>Nintendo Game Boy Advance</fullname>
|
||||||
<path>%ROMPATH%\gba</path>
|
<path>%ROMPATH%\gba</path>
|
||||||
<extension>.gba .GBA .agb .AGB .bin .BIN .7z .7Z .zip .ZIP</extension>
|
<extension>.agb .AGB .bin .BIN .cgb .CGB .dmg .DMG .gb .GB .gba .GBA .gbc .GBC .sgb .SGB .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_gba_libretro.dll %ROM%</command>
|
<command label="mGBA">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mgba_libretro.dll %ROM%</command>
|
||||||
|
<command label="VBA-M">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vbam_next_libretro.dll %ROM%</command>
|
||||||
|
<command label="VBA Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vba_next_libretro.dll %ROM%</command>
|
||||||
|
<command label="gpSP">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\gpsp_libretro.dll %ROM%</command>
|
||||||
<platform>gba</platform>
|
<platform>gba</platform>
|
||||||
<theme>gba</theme>
|
<theme>gba</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -436,8 +434,13 @@
|
||||||
<name>gbc</name>
|
<name>gbc</name>
|
||||||
<fullname>Nintendo Game Boy Color</fullname>
|
<fullname>Nintendo Game Boy Color</fullname>
|
||||||
<path>%ROMPATH%\gbc</path>
|
<path>%ROMPATH%\gbc</path>
|
||||||
<extension>.sfc .SFC .smc .SMC .gb .GB .gbc .GBC .7z .7Z .zip .ZIP</extension>
|
<extension>.bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_libretro.dll %ROM%</command>
|
<command label="SameBoy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\sameboy_libretro.dll %ROM%</command>
|
||||||
|
<command label="Gambatte">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\gambatte_libretro.dll %ROM%</command>
|
||||||
|
<command label="Gearboy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\gearboy_libretro.dll %ROM%</command>
|
||||||
|
<command label="TGB Dual">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\tgbdual_libretro.dll %ROM%</command>
|
||||||
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mesen-s_libretro.dll %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_libretro.dll %ROM%</command>
|
||||||
<platform>gbc</platform>
|
<platform>gbc</platform>
|
||||||
<theme>gbc</theme>
|
<theme>gbc</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -454,14 +457,9 @@
|
||||||
<name>genesis</name>
|
<name>genesis</name>
|
||||||
<fullname>Sega Genesis</fullname>
|
<fullname>Sega Genesis</fullname>
|
||||||
<path>%ROMPATH%\genesis</path>
|
<path>%ROMPATH%\genesis</path>
|
||||||
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
.MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
||||||
</extension>
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_wide_libretro.dll %ROM%</command>
|
||||||
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_wide_libretro.dll
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\picodrive_libretro.dll %ROM%</command>
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\picodrive_libretro.dll %ROM%</command>
|
||||||
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\blastem_libretro.dll %ROM%</command>
|
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\blastem_libretro.dll %ROM%</command>
|
||||||
<platform>genesis</platform>
|
<platform>genesis</platform>
|
||||||
|
@ -526,8 +524,7 @@
|
||||||
<fullname>Multiple Arcade Machine Emulator</fullname>
|
<fullname>Multiple Arcade Machine Emulator</fullname>
|
||||||
<path>%ROMPATH%\mame</path>
|
<path>%ROMPATH%\mame</path>
|
||||||
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
<extension>.cmd .CMD .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2003_plus_libretro.dll %ROM%
|
<command label="MAME 2003-Plus">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2003_plus_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2000_libretro.dll %ROM%</command>
|
<command label="MAME 2000">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2000_libretro.dll %ROM%</command>
|
||||||
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2010_libretro.dll %ROM%</command>
|
<command label="MAME 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame2010_libretro.dll %ROM%</command>
|
||||||
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame_libretro.dll %ROM%</command>
|
<command label="MAME - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame_libretro.dll %ROM%</command>
|
||||||
|
@ -558,14 +555,9 @@
|
||||||
<name>mastersystem</name>
|
<name>mastersystem</name>
|
||||||
<fullname>Sega Master System</fullname>
|
<fullname>Sega Master System</fullname>
|
||||||
<path>%ROMPATH%\mastersystem</path>
|
<path>%ROMPATH%\mastersystem</path>
|
||||||
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
.MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
||||||
</extension>
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_wide_libretro.dll %ROM%</command>
|
||||||
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_wide_libretro.dll
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="SMS Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\smsplus_libretro.dll %ROM%</command>
|
<command label="SMS Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\smsplus_libretro.dll %ROM%</command>
|
||||||
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\gearsystem_libretro.dll %ROM%</command>
|
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\gearsystem_libretro.dll %ROM%</command>
|
||||||
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\picodrive_libretro.dll %ROM%</command>
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\picodrive_libretro.dll %ROM%</command>
|
||||||
|
@ -576,8 +568,10 @@
|
||||||
<name>megacd</name>
|
<name>megacd</name>
|
||||||
<fullname>Sega Mega-CD</fullname>
|
<fullname>Sega Mega-CD</fullname>
|
||||||
<path>%ROMPATH%\megacd</path>
|
<path>%ROMPATH%\megacd</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_wide_libretro.dll %ROM%</command>
|
||||||
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\picodrive_libretro.dll %ROM%</command>
|
||||||
<platform>segacd</platform>
|
<platform>segacd</platform>
|
||||||
<theme>megacd</theme>
|
<theme>megacd</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -585,8 +579,10 @@
|
||||||
<name>megacdjp</name>
|
<name>megacdjp</name>
|
||||||
<fullname>Sega Mega-CD</fullname>
|
<fullname>Sega Mega-CD</fullname>
|
||||||
<path>%ROMPATH%\megacdjp</path>
|
<path>%ROMPATH%\megacdjp</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_wide_libretro.dll %ROM%</command>
|
||||||
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\picodrive_libretro.dll %ROM%</command>
|
||||||
<platform>segacd</platform>
|
<platform>segacd</platform>
|
||||||
<theme>megacdjp</theme>
|
<theme>megacdjp</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -594,14 +590,9 @@
|
||||||
<name>megadrive</name>
|
<name>megadrive</name>
|
||||||
<fullname>Sega Mega Drive</fullname>
|
<fullname>Sega Mega Drive</fullname>
|
||||||
<path>%ROMPATH%\megadrive</path>
|
<path>%ROMPATH%\megadrive</path>
|
||||||
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
.MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
||||||
</extension>
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_wide_libretro.dll %ROM%</command>
|
||||||
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_wide_libretro.dll
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\picodrive_libretro.dll %ROM%</command>
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\picodrive_libretro.dll %ROM%</command>
|
||||||
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\blastem_libretro.dll %ROM%</command>
|
<command label="BlastEm">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\blastem_libretro.dll %ROM%</command>
|
||||||
<platform>megadrive</platform>
|
<platform>megadrive</platform>
|
||||||
|
@ -639,7 +630,8 @@
|
||||||
<fullname>MSX</fullname>
|
<fullname>MSX</fullname>
|
||||||
<path>%ROMPATH%\msx</path>
|
<path>%ROMPATH%\msx</path>
|
||||||
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bluemsx_libretro.dll %ROM%</command>
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bluemsx_libretro.dll %ROM%</command>
|
||||||
|
<command label="fMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fmsx_libretro.dll %ROM%</command>
|
||||||
<platform>msx</platform>
|
<platform>msx</platform>
|
||||||
<theme>msx</theme>
|
<theme>msx</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -648,7 +640,8 @@
|
||||||
<fullname>MSX1</fullname>
|
<fullname>MSX1</fullname>
|
||||||
<path>%ROMPATH%\msx1</path>
|
<path>%ROMPATH%\msx1</path>
|
||||||
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bluemsx_libretro.dll %ROM%</command>
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bluemsx_libretro.dll %ROM%</command>
|
||||||
|
<command label="fMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fmsx_libretro.dll %ROM%</command>
|
||||||
<platform>msx</platform>
|
<platform>msx</platform>
|
||||||
<theme>msx1</theme>
|
<theme>msx1</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -657,7 +650,8 @@
|
||||||
<fullname>MSX2</fullname>
|
<fullname>MSX2</fullname>
|
||||||
<path>%ROMPATH%\msx2</path>
|
<path>%ROMPATH%\msx2</path>
|
||||||
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bluemsx_libretro.dll %ROM%</command>
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bluemsx_libretro.dll %ROM%</command>
|
||||||
|
<command label="fMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\fmsx_libretro.dll %ROM%</command>
|
||||||
<platform>msx2</platform>
|
<platform>msx2</platform>
|
||||||
<theme>msx2</theme>
|
<theme>msx2</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -684,7 +678,8 @@
|
||||||
<fullname>Nintendo 3DS</fullname>
|
<fullname>Nintendo 3DS</fullname>
|
||||||
<path>%ROMPATH%\n3ds</path>
|
<path>%ROMPATH%\n3ds</path>
|
||||||
<extension>.3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP</extension>
|
<extension>.3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\citra_libretro.dll %ROM%</command>
|
<command label="Citra">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\citra_libretro.dll %ROM%</command>
|
||||||
|
<command label="Citra 2018">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\citra2018_libretro.dll %ROM%</command>
|
||||||
<platform>n3ds</platform>
|
<platform>n3ds</platform>
|
||||||
<theme>n3ds</theme>
|
<theme>n3ds</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -693,8 +688,7 @@
|
||||||
<fullname>Nintendo 64</fullname>
|
<fullname>Nintendo 64</fullname>
|
||||||
<path>%ROMPATH%\n64</path>
|
<path>%ROMPATH%\n64</path>
|
||||||
<extension>.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP</extension>
|
<extension>.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="Mupen64Plus-Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mupen64plus_next_libretro.dll %ROM%
|
<command label="Mupen64Plus-Next">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mupen64plus_next_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="ParaLLEl N64">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\parallel_n64_libretro.dll %ROM%</command>
|
<command label="ParaLLEl N64">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\parallel_n64_libretro.dll %ROM%</command>
|
||||||
<platform>n64</platform>
|
<platform>n64</platform>
|
||||||
<theme>n64</theme>
|
<theme>n64</theme>
|
||||||
|
@ -721,8 +715,10 @@
|
||||||
<name>nds</name>
|
<name>nds</name>
|
||||||
<fullname>Nintendo DS</fullname>
|
<fullname>Nintendo DS</fullname>
|
||||||
<path>%ROMPATH%\nds</path>
|
<path>%ROMPATH%\nds</path>
|
||||||
<extension>.nds .NDS .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .nds .NDS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\melonds_libretro.dll %ROM%</command>
|
<command label="DeSmuME">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\desmume_libretro.dll %ROM%</command>
|
||||||
|
<command label="DeSmuME 2015">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\desmume2015_libretro.dll %ROM%</command>
|
||||||
|
<command label="melonDS">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\melonds_libretro.dll %ROM%</command>
|
||||||
<platform>nds</platform>
|
<platform>nds</platform>
|
||||||
<theme>nds</theme>
|
<theme>nds</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -770,7 +766,8 @@
|
||||||
<fullname>SNK Neo Geo Pocket</fullname>
|
<fullname>SNK Neo Geo Pocket</fullname>
|
||||||
<path>%ROMPATH%\ngp</path>
|
<path>%ROMPATH%\ngp</path>
|
||||||
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_ngp_libretro.dll %ROM%</command>
|
<command label="Beetle NeoPop">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_ngp_libretro.dll %ROM%</command>
|
||||||
|
<command label="RACE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\race_libretro.dll %ROM%</command>
|
||||||
<platform>ngp</platform>
|
<platform>ngp</platform>
|
||||||
<theme>ngp</theme>
|
<theme>ngp</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -779,7 +776,8 @@
|
||||||
<fullname>SNK Neo Geo Pocket Color</fullname>
|
<fullname>SNK Neo Geo Pocket Color</fullname>
|
||||||
<path>%ROMPATH%\ngpc</path>
|
<path>%ROMPATH%\ngpc</path>
|
||||||
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
<extension>.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_ngp_libretro.dll %ROM%</command>
|
<command label="Beetle NeoPop">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_ngp_libretro.dll %ROM%</command>
|
||||||
|
<command label="RACE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\race_libretro.dll %ROM%</command>
|
||||||
<platform>ngpc</platform>
|
<platform>ngpc</platform>
|
||||||
<theme>ngpc</theme>
|
<theme>ngpc</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -844,7 +842,8 @@
|
||||||
<fullname>NEC PC-9800 series</fullname>
|
<fullname>NEC PC-9800 series</fullname>
|
||||||
<path>%ROMPATH%\pc98</path>
|
<path>%ROMPATH%\pc98</path>
|
||||||
<extension>.2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .nhd .NHD .tfd .TFD .thd .THD . xdf .XDF .7z .7Z .zip .ZIP</extension>
|
<extension>.2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .nhd .NHD .tfd .TFD .thd .THD . xdf .XDF .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\np2kai_libretro.dll %ROM%</command>
|
<command label="Neko Project II Kai">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\np2kai_libretro.dll %ROM%</command>
|
||||||
|
<command label="Neko Project II">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\nekop2_libretro.dll %ROM%</command>
|
||||||
<platform>pc98</platform>
|
<platform>pc98</platform>
|
||||||
<theme>pc98</theme>
|
<theme>pc98</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -852,12 +851,9 @@
|
||||||
<name>pcengine</name>
|
<name>pcengine</name>
|
||||||
<fullname>NEC PC Engine</fullname>
|
<fullname>NEC PC Engine</fullname>
|
||||||
<path>%ROMPATH%\pcengine</path>
|
<path>%ROMPATH%\pcengine</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_libretro.dll %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_libretro.dll %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_fast_libretro.dll %ROM%
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_fast_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<platform>pcengine</platform>
|
<platform>pcengine</platform>
|
||||||
<theme>pcengine</theme>
|
<theme>pcengine</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -865,12 +861,9 @@
|
||||||
<name>pcenginecd</name>
|
<name>pcenginecd</name>
|
||||||
<fullname>NEC PC Engine CD</fullname>
|
<fullname>NEC PC Engine CD</fullname>
|
||||||
<path>%ROMPATH%\pcenginecd</path>
|
<path>%ROMPATH%\pcenginecd</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_libretro.dll %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_libretro.dll %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_fast_libretro.dll %ROM%
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_fast_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<platform>pcenginecd</platform>
|
<platform>pcenginecd</platform>
|
||||||
<theme>pcenginecd</theme>
|
<theme>pcenginecd</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -950,12 +943,9 @@
|
||||||
<name>psx</name>
|
<name>psx</name>
|
||||||
<fullname>Sony PlayStation</fullname>
|
<fullname>Sony PlayStation</fullname>
|
||||||
<path>%ROMPATH%\psx</path>
|
<path>%ROMPATH%\psx</path>
|
||||||
<extension>.bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U
|
<extension>.bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U .mdf .MDF .mds .MDS .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP</extension>
|
||||||
.mdf .MDF .mds .MDS .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_psx_libretro.dll %ROM%</command>
|
<command label="Beetle PSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_psx_libretro.dll %ROM%</command>
|
||||||
<command label="Beetle PSX HW">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_psx_hw_libretro.dll %ROM%
|
<command label="Beetle PSX HW">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_psx_hw_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="PCSX ReARMed">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\pcsx_rearmed_libretro.dll %ROM%</command>
|
<command label="PCSX ReARMed">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\pcsx_rearmed_libretro.dll %ROM%</command>
|
||||||
<command label="DuckStation">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\duckstation_libretro.dll %ROM%</command>
|
<command label="DuckStation">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\duckstation_libretro.dll %ROM%</command>
|
||||||
<platform>psx</platform>
|
<platform>psx</platform>
|
||||||
|
@ -983,8 +973,12 @@
|
||||||
<name>satellaview</name>
|
<name>satellaview</name>
|
||||||
<fullname>Nintendo Satellaview</fullname>
|
<fullname>Nintendo Satellaview</fullname>
|
||||||
<path>%ROMPATH%\satellaview</path>
|
<path>%ROMPATH%\satellaview</path>
|
||||||
<extension>.smc .SMC .sfc .SFC .swc .SWC .fig .FIG .bs .BS .bin .BIN .mgd .MGD .7z .7Z .zip .ZIP</extension>
|
<extension>.bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .swc .SWC .st .ST .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x_libretro.dll %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x_libretro.dll %ROM%</command>
|
||||||
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x2010_libretro.dll %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_libretro.dll %ROM%</command>
|
||||||
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_mercury_accuracy_libretro.dll %ROM%</command>
|
||||||
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mesen-s_libretro.dll %ROM%</command>
|
||||||
<platform>satellaview</platform>
|
<platform>satellaview</platform>
|
||||||
<theme>satellaview</theme>
|
<theme>satellaview</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -992,8 +986,11 @@
|
||||||
<name>saturn</name>
|
<name>saturn</name>
|
||||||
<fullname>Sega Saturn</fullname>
|
<fullname>Sega Saturn</fullname>
|
||||||
<path>%ROMPATH%\saturn</path>
|
<path>%ROMPATH%\saturn</path>
|
||||||
<extension>.ccd .CCD .chd .CHD .cue .CUE .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .mds .MDS .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_saturn_libretro.dll %ROM%</command>
|
<command label="Beetle Saturn">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_saturn_libretro.dll %ROM%</command>
|
||||||
|
<command label="Kronos">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\kronos_libretro.dll %ROM%</command>
|
||||||
|
<command label="YabaSanshiro">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\yabasanshiro_libretro.dll %ROM%</command>
|
||||||
|
<command label="Yabause">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\yabause_libretro.dll %ROM%</command>
|
||||||
<platform>saturn</platform>
|
<platform>saturn</platform>
|
||||||
<theme>saturn</theme>
|
<theme>saturn</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1001,8 +998,11 @@
|
||||||
<name>saturnjp</name>
|
<name>saturnjp</name>
|
||||||
<fullname>Sega Saturn</fullname>
|
<fullname>Sega Saturn</fullname>
|
||||||
<path>%ROMPATH%\saturnjp</path>
|
<path>%ROMPATH%\saturnjp</path>
|
||||||
<extension>.ccd .CCD .chd .CHD .cue .CUE .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .mds .MDS .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_saturn_libretro.dll %ROM%</command>
|
<command label="Beetle Saturn">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_saturn_libretro.dll %ROM%</command>
|
||||||
|
<command label="Kronos">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\kronos_libretro.dll %ROM%</command>
|
||||||
|
<command label="YabaSanshiro">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\yabasanshiro_libretro.dll %ROM%</command>
|
||||||
|
<command label="Yabause">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\yabause_libretro.dll %ROM%</command>
|
||||||
<platform>saturn</platform>
|
<platform>saturn</platform>
|
||||||
<theme>saturnjp</theme>
|
<theme>saturnjp</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1046,8 +1046,10 @@
|
||||||
<name>segacd</name>
|
<name>segacd</name>
|
||||||
<fullname>Sega CD</fullname>
|
<fullname>Sega CD</fullname>
|
||||||
<path>%ROMPATH%\segacd</path>
|
<path>%ROMPATH%\segacd</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_wide_libretro.dll %ROM%</command>
|
||||||
|
<command label="PicoDrive">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\picodrive_libretro.dll %ROM%</command>
|
||||||
<platform>segacd</platform>
|
<platform>segacd</platform>
|
||||||
<theme>segacd</theme>
|
<theme>segacd</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1055,8 +1057,11 @@
|
||||||
<name>sg-1000</name>
|
<name>sg-1000</name>
|
||||||
<fullname>Sega SG-1000</fullname>
|
<fullname>Sega SG-1000</fullname>
|
||||||
<path>%ROMPATH%\sg-1000</path>
|
<path>%ROMPATH%\sg-1000</path>
|
||||||
<extension>.mdx .MDX .md .MD .smd .SMD .gen .GEN .bin .BIN .cue .CUE .iso .ISO .sms .SMS .gg .GG .sg .SG .68k .68K .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .ri .RI .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
<command label="Gearsystem">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\gearsystem_libretro.dll %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_libretro.dll %ROM%</command>
|
||||||
|
<command label="Genesis Plus GX Wide">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\genesis_plus_gx_wide_libretro.dll %ROM%</command>
|
||||||
|
<command label="blueMSX">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bluemsx_libretro.dll %ROM%</command>
|
||||||
<platform>sg-1000</platform>
|
<platform>sg-1000</platform>
|
||||||
<theme>sg-1000</theme>
|
<theme>sg-1000</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1064,18 +1069,12 @@
|
||||||
<name>snes</name>
|
<name>snes</name>
|
||||||
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
||||||
<path>%ROMPATH%\snes</path>
|
<path>%ROMPATH%\snes</path>
|
||||||
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC
|
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP</extension>
|
||||||
.smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x_libretro.dll %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x_libretro.dll %ROM%</command>
|
||||||
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x2010_libretro.dll %ROM%</command>
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x2010_libretro.dll %ROM%</command>
|
||||||
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_libretro.dll %ROM%</command>
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_libretro.dll %ROM%</command>
|
||||||
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_mercury_accuracy_libretro.dll %ROM%</command>
|
||||||
%CORE_RETROARCH%\bsnes_mercury_accuracy_libretro.dll %ROM%
|
<command label="Beetle Supafaust">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_supafaust_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="Beetle Supafaust">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_supafaust_libretro.dll
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mesen-s_libretro.dll %ROM%</command>
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mesen-s_libretro.dll %ROM%</command>
|
||||||
<platform>snes</platform>
|
<platform>snes</platform>
|
||||||
<theme>snes</theme>
|
<theme>snes</theme>
|
||||||
|
@ -1084,18 +1083,12 @@
|
||||||
<name>snesna</name>
|
<name>snesna</name>
|
||||||
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
<fullname>Nintendo SNES (Super Nintendo)</fullname>
|
||||||
<path>%ROMPATH%\snesna</path>
|
<path>%ROMPATH%\snesna</path>
|
||||||
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC
|
<extension>.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP</extension>
|
||||||
.smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x_libretro.dll %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x_libretro.dll %ROM%</command>
|
||||||
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x2010_libretro.dll %ROM%</command>
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x2010_libretro.dll %ROM%</command>
|
||||||
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_libretro.dll %ROM%</command>
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_libretro.dll %ROM%</command>
|
||||||
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_mercury_accuracy_libretro.dll %ROM%</command>
|
||||||
%CORE_RETROARCH%\bsnes_mercury_accuracy_libretro.dll %ROM%
|
<command label="Beetle Supafaust">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_supafaust_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<command label="Beetle Supafaust">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_supafaust_libretro.dll
|
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mesen-s_libretro.dll %ROM%</command>
|
<command label="Mesen-S">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mesen-s_libretro.dll %ROM%</command>
|
||||||
<platform>snes</platform>
|
<platform>snes</platform>
|
||||||
<theme>snesna</theme>
|
<theme>snesna</theme>
|
||||||
|
@ -1140,8 +1133,11 @@
|
||||||
<name>sufami</name>
|
<name>sufami</name>
|
||||||
<fullname>Bandai SuFami Turbo</fullname>
|
<fullname>Bandai SuFami Turbo</fullname>
|
||||||
<path>%ROMPATH%\sufami</path>
|
<path>%ROMPATH%\sufami</path>
|
||||||
<extension>.smc .SMC .sfc .SFC .swc .SWC .fig .FIG .bs .BS .bin .BIN .mgd .MGD .7z .7Z .zip .ZIP</extension>
|
<extension>.bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .st .ST .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x_libretro.dll %ROM%</command>
|
<command label="Snes9x - Current">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x_libretro.dll %ROM%</command>
|
||||||
|
<command label="Snes9x 2010">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\snes9x2010_libretro.dll %ROM%</command>
|
||||||
|
<command label="bsnes">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_libretro.dll %ROM%</command>
|
||||||
|
<command label="bsnes-mercury Accuracy">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\bsnes_mercury_accuracy_libretro.dll %ROM%</command>
|
||||||
<platform>sufami</platform>
|
<platform>sufami</platform>
|
||||||
<theme>sufami</theme>
|
<theme>sufami</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1150,9 +1146,7 @@
|
||||||
<fullname>NEC SuperGrafx</fullname>
|
<fullname>NEC SuperGrafx</fullname>
|
||||||
<path>%ROMPATH%\supergrafx</path>
|
<path>%ROMPATH%\supergrafx</path>
|
||||||
<extension>.pce .PCE .sgx .SGX .cue .CUE .ccd .CCD .chd .CHD .7z .7Z .zip .ZIP</extension>
|
<extension>.pce .PCE .sgx .SGX .cue .CUE .ccd .CCD .chd .CHD .7z .7Z .zip .ZIP</extension>
|
||||||
<command label="Beetle SuperGrafx">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_supergrafx_libretro.dll
|
<command label="Beetle SuperGrafx">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_supergrafx_libretro.dll %ROM%</command>
|
||||||
%ROM%
|
|
||||||
</command>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_libretro.dll %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_libretro.dll %ROM%</command>
|
||||||
<platform>supergrafx</platform>
|
<platform>supergrafx</platform>
|
||||||
<theme>supergrafx</theme>
|
<theme>supergrafx</theme>
|
||||||
|
@ -1179,12 +1173,9 @@
|
||||||
<name>tg16</name>
|
<name>tg16</name>
|
||||||
<fullname>NEC TurboGrafx-16</fullname>
|
<fullname>NEC TurboGrafx-16</fullname>
|
||||||
<path>%ROMPATH%\tg16</path>
|
<path>%ROMPATH%\tg16</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_libretro.dll %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_libretro.dll %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_fast_libretro.dll %ROM%
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_fast_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<platform>pcengine</platform>
|
<platform>pcengine</platform>
|
||||||
<theme>tg16</theme>
|
<theme>tg16</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1192,12 +1183,9 @@
|
||||||
<name>tg-cd</name>
|
<name>tg-cd</name>
|
||||||
<fullname>NEC TurboGrafx-CD</fullname>
|
<fullname>NEC TurboGrafx-CD</fullname>
|
||||||
<path>%ROMPATH%\tg-cd</path>
|
<path>%ROMPATH%\tg-cd</path>
|
||||||
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC
|
<extension>.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP</extension>
|
||||||
.7z .7Z .zip .ZIP
|
|
||||||
</extension>
|
|
||||||
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_libretro.dll %ROM%</command>
|
<command label="Beetle PCE">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_libretro.dll %ROM%</command>
|
||||||
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_fast_libretro.dll %ROM%
|
<command label="Beetle PCE FAST">%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mednafen_pce_fast_libretro.dll %ROM%</command>
|
||||||
</command>
|
|
||||||
<platform>pcenginecd</platform>
|
<platform>pcenginecd</platform>
|
||||||
<theme>tg-cd</theme>
|
<theme>tg-cd</theme>
|
||||||
</system>
|
</system>
|
||||||
|
@ -1257,7 +1245,7 @@
|
||||||
</system>
|
</system>
|
||||||
<system>
|
<system>
|
||||||
<name>videopac</name>
|
<name>videopac</name>
|
||||||
<fullname>Philips Videopac G7000 (Magnavox Odyssey2)</fullname>
|
<fullname>Philips Videopac G7000</fullname>
|
||||||
<path>%ROMPATH%\videopac</path>
|
<path>%ROMPATH%\videopac</path>
|
||||||
<extension>.bin .BIN .7z .7Z .zip .ZIP</extension>
|
<extension>.bin .BIN .7z .7Z .zip .ZIP</extension>
|
||||||
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\o2em_libretro.dll %ROM%</command>
|
<command>%EMULATOR_RETROARCH% -L %CORE_RETROARCH%\o2em_libretro.dll %ROM%</command>
|
||||||
|
|
|
@ -237,22 +237,15 @@ based on: 'recalbox-multi' by the Recalbox community
|
||||||
<alignment>right</alignment>
|
<alignment>right</alignment>
|
||||||
</text>
|
</text>
|
||||||
<badges name="md_badges">
|
<badges name="md_badges">
|
||||||
<pos>0.8125 0.65</pos>
|
<pos>0.8125 0.675</pos>
|
||||||
|
<size>0.15 0.21</size>
|
||||||
<origin>0 0</origin>
|
<origin>0 0</origin>
|
||||||
|
|
||||||
<!-- flexbox properties -->
|
|
||||||
<direction>row</direction>
|
<direction>row</direction>
|
||||||
<align>start</align>
|
<align>start</align>
|
||||||
<itemsPerLine>2</itemsPerLine>
|
<itemsPerLine>3</itemsPerLine>
|
||||||
<itemMargin>5 5</itemMargin>
|
<lines>2</lines>
|
||||||
<itemWidth>.035</itemWidth>
|
<itemMargin>0.0028125 0.005</itemMargin>
|
||||||
|
<slots>favorite completed kidgame broken altemulator</slots>
|
||||||
<!-- badges properties -->
|
|
||||||
<slots>favorite completed kidgame broken</slots>
|
|
||||||
<customBadgeIcon badge="favorite">:/graphics/badge_favorite.svg</customBadgeIcon>
|
|
||||||
<customBadgeIcon badge="completed">:/graphics/badge_completed.svg</customBadgeIcon>
|
|
||||||
<customBadgeIcon badge="kidgame">:/graphics/badge_kidgame.svg</customBadgeIcon>
|
|
||||||
<customBadgeIcon badge="broken">:/graphics/badge_broken.svg</customBadgeIcon>
|
|
||||||
</badges>
|
</badges>
|
||||||
<!-- This block prevents additional elements from interfering when mixing layouts. -->
|
<!-- This block prevents additional elements from interfering when mixing layouts. -->
|
||||||
<image name="backframe4" extra="false"></image>
|
<image name="backframe4" extra="false"></image>
|
||||||
|
|