From 98120f9ecd40faacae475b87f507e8bd24393e25 Mon Sep 17 00:00:00 2001 From: Aloshi Date: Thu, 19 Jun 2014 20:30:09 -0500 Subject: [PATCH] Split into subprojects (external, core, es). Removed relative paths in #includes. Changed ViewController to a singleton, removing it from the Window class. --- CMakeLists.txt | 345 ++---------------- core/CMakeLists.txt | 165 +++++++++ {src => core/src}/AsyncHandle.h | 0 {src => core/src}/AudioManager.cpp | 8 - {src => core/src}/AudioManager.h | 0 {src => core/src}/GuiComponent.cpp | 0 {src => core/src}/GuiComponent.h | 0 {src => core/src}/HelpStyle.cpp | 0 {src => core/src}/HelpStyle.h | 0 {src => core/src}/HttpReq.cpp | 0 {src => core/src}/HttpReq.h | 0 {src => core/src}/ImageIO.cpp | 0 {src => core/src}/ImageIO.h | 1 - {src => core/src}/InputConfig.cpp | 0 {src => core/src}/InputConfig.h | 2 +- {src => core/src}/InputManager.cpp | 0 {src => core/src}/InputManager.h | 0 {src => core/src}/Log.cpp | 0 {src => core/src}/Log.h | 0 {src => core/src}/Renderer.h | 0 {src => core/src}/Renderer_draw_gl.cpp | 0 {src => core/src}/Renderer_init.cpp | 0 {src => core/src}/Renderer_init_sdlgl.cpp | 1 - {src => core/src}/Settings.cpp | 2 +- {src => core/src}/Settings.h | 0 {src => core/src}/Sound.cpp | 0 {src => core/src}/Sound.h | 0 {src => core/src}/ThemeData.cpp | 2 +- {src => core/src}/ThemeData.h | 2 +- {src => core/src}/Util.cpp | 10 + {src => core/src}/Util.h | 5 + {src => core/src}/Window.cpp | 17 +- {src => core/src}/Window.h | 11 +- {src => core/src}/animations/Animation.h | 0 .../src}/animations/AnimationController.cpp | 2 +- .../src}/animations/AnimationController.h | 2 +- .../src}/animations/LambdaAnimation.h | 2 +- .../components/AnimatedImageComponent.cpp | 4 +- .../src}/components/AnimatedImageComponent.h | 2 +- .../src}/components/BusyComponent.cpp | 6 +- {src => core/src}/components/BusyComponent.h | 6 +- .../src}/components/ButtonComponent.cpp | 10 +- .../src}/components/ButtonComponent.h | 6 +- .../src}/components/ComponentGrid.cpp | 8 +- {src => core/src}/components/ComponentGrid.h | 2 +- .../src}/components/ComponentList.cpp | 6 +- {src => core/src}/components/ComponentList.h | 0 .../src}/components/DateTimeComponent.cpp | 11 +- .../src}/components/DateTimeComponent.h | 4 +- .../src}/components/HelpComponent.cpp | 17 +- {src => core/src}/components/HelpComponent.h | 4 +- {src => core/src}/components/IList.h | 8 +- .../src}/components/ImageComponent.cpp | 12 +- {src => core/src}/components/ImageComponent.h | 6 +- .../src}/components/ImageGridComponent.h | 8 +- .../src}/components/MenuComponent.cpp | 4 +- {src => core/src}/components/MenuComponent.h | 10 +- .../src}/components/NinePatchComponent.cpp | 12 +- .../src}/components/NinePatchComponent.h | 4 +- .../src}/components/OptionListComponent.h | 16 +- .../src}/components/ScrollableContainer.cpp | 6 +- .../src}/components/ScrollableContainer.h | 2 +- .../src}/components/SliderComponent.cpp | 10 +- .../src}/components/SliderComponent.h | 4 +- .../src}/components/SwitchComponent.cpp | 6 +- .../src}/components/SwitchComponent.h | 4 +- .../src}/components/TextComponent.cpp | 14 +- {src => core/src}/components/TextComponent.h | 4 +- .../src}/components/TextEditComponent.cpp | 12 +- .../src}/components/TextEditComponent.h | 4 +- {src => core/src}/guis/GuiDetectDevice.cpp | 27 +- {src => core/src}/guis/GuiDetectDevice.h | 8 +- {src => core/src}/guis/GuiInputConfig.cpp | 16 +- {src => core/src}/guis/GuiInputConfig.h | 8 +- {src => core/src}/guis/GuiMsgBox.cpp | 14 +- {src => core/src}/guis/GuiMsgBox.h | 6 +- {src => core/src}/guis/GuiTextEditPopup.cpp | 4 +- {src => core/src}/guis/GuiTextEditPopup.h | 12 +- {src => core/src}/platform.cpp | 0 {src => core/src}/platform.h | 0 {src => core/src}/resources/Font.cpp | 8 +- {src => core/src}/resources/Font.h | 6 +- .../src}/resources/ResourceManager.cpp | 4 +- {src => core/src}/resources/ResourceManager.h | 0 {src => core/src}/resources/SVGResource.cpp | 10 +- {src => core/src}/resources/SVGResource.h | 2 +- .../src}/resources/TextureResource.cpp | 14 +- {src => core/src}/resources/TextureResource.h | 4 +- es/CMakeLists.txt | 149 ++++++++ es/src/EmulationStation.aps | Bin 0 -> 356820 bytes {src => es/src}/EmulationStation.h | 0 {src => es/src}/EmulationStation.rc | 0 {src => es/src}/FileData.cpp | 0 {src => es/src}/FileData.h | 0 {src => es/src}/FileSorts.cpp | 0 {src => es/src}/FileSorts.h | 0 {src => es/src}/Gamelist.cpp | 0 {src => es/src}/Gamelist.h | 0 {src => es/src}/MameNameMap.cpp | 0 {src => es/src}/MetaData.cpp | 11 - {src => es/src}/MetaData.h | 4 +- {src => es/src}/PlatformId.cpp | 0 {src => es/src}/PlatformId.h | 0 {src => es/src}/ScraperCmdLine.cpp | 0 {src => es/src}/ScraperCmdLine.h | 0 {src => es/src}/SystemData.cpp | 0 {src => es/src}/SystemData.h | 0 {src => es/src}/VolumeControl.cpp | 0 {src => es/src}/VolumeControl.h | 0 {src => es/src}/animations/LaunchAnimation.h | 4 +- .../src}/animations/MoveCameraAnimation.h | 2 +- .../src}/components/AsyncReqComponent.cpp | 4 +- .../src}/components/AsyncReqComponent.h | 4 +- .../src}/components/RatingComponent.cpp | 10 +- {src => es/src}/components/RatingComponent.h | 4 +- .../components/ScraperSearchComponent.cpp | 28 +- .../src}/components/ScraperSearchComponent.h | 10 +- .../src}/components/TextListComponent.h | 16 +- {src => es/src}/guis/GuiFastSelect.cpp | 8 +- {src => es/src}/guis/GuiFastSelect.h | 8 +- {src => es/src}/guis/GuiGameScraper.cpp | 19 +- {src => es/src}/guis/GuiGameScraper.h | 6 +- {src => es/src}/guis/GuiGamelistOptions.cpp | 6 +- {src => es/src}/guis/GuiGamelistOptions.h | 9 +- {src => es/src}/guis/GuiMenu.cpp | 44 +-- {src => es/src}/guis/GuiMenu.h | 4 +- {src => es/src}/guis/GuiMetaDataEd.cpp | 26 +- {src => es/src}/guis/GuiMetaDataEd.h | 8 +- {src => es/src}/guis/GuiScraperMulti.cpp | 22 +- {src => es/src}/guis/GuiScraperMulti.h | 8 +- {src => es/src}/guis/GuiScraperStart.cpp | 16 +- {src => es/src}/guis/GuiScraperStart.h | 8 +- {src => es/src}/guis/GuiSettings.cpp | 10 +- {src => es/src}/guis/GuiSettings.h | 4 +- {src => es/src}/main.cpp | 14 +- {src => es/src}/scrapers/GamesDBScraper.cpp | 13 +- {src => es/src}/scrapers/GamesDBScraper.h | 2 +- {src => es/src}/scrapers/Scraper.cpp | 7 +- {src => es/src}/scrapers/Scraper.h | 10 +- .../src}/scrapers/TheArchiveScraper.cpp | 6 +- {src => es/src}/scrapers/TheArchiveScraper.h | 2 +- {src => es/src}/views/SystemView.cpp | 22 +- {src => es/src}/views/SystemView.h | 12 +- {src => es/src}/views/ViewController.cpp | 44 ++- {src => es/src}/views/ViewController.h | 12 +- .../src}/views/gamelist/BasicGameListView.cpp | 18 +- .../src}/views/gamelist/BasicGameListView.h | 4 +- .../views/gamelist/DetailedGameListView.cpp | 10 +- .../views/gamelist/DetailedGameListView.h | 8 +- .../src}/views/gamelist/GridGameListView.cpp | 10 +- .../src}/views/gamelist/GridGameListView.h | 6 +- .../src}/views/gamelist/IGameListView.cpp | 20 +- .../src}/views/gamelist/IGameListView.h | 4 +- .../views/gamelist/ISimpleGameListView.cpp | 18 +- .../src}/views/gamelist/ISimpleGameListView.h | 6 +- external/CMakeLists.txt | 5 + external/nanosvg/CMakeLists.txt | 13 + {src => external}/nanosvg/nanosvg.h | 0 {src => external}/nanosvg/nanosvg_license.txt | 0 {src => external}/nanosvg/nanosvgrast.h | 0 .../nanosvg/src}/nanosvg_impl.cpp | 0 external/pugixml/CMakeLists.txt | 13 + .../pugixml}/pugiconfig.hpp | 0 {src/pugiXML => external/pugixml}/pugixml.hpp | 0 .../pugixml/pugixml_license.txt | 0 .../pugixml/src}/pugixml.cpp | 0 src/MathExp.cpp | 163 --------- src/MathExp.h | 37 -- 168 files changed, 856 insertions(+), 1027 deletions(-) create mode 100644 core/CMakeLists.txt rename {src => core/src}/AsyncHandle.h (100%) rename {src => core/src}/AudioManager.cpp (94%) rename {src => core/src}/AudioManager.h (100%) rename {src => core/src}/GuiComponent.cpp (100%) rename {src => core/src}/GuiComponent.h (100%) rename {src => core/src}/HelpStyle.cpp (100%) rename {src => core/src}/HelpStyle.h (100%) rename {src => core/src}/HttpReq.cpp (100%) rename {src => core/src}/HttpReq.h (100%) rename {src => core/src}/ImageIO.cpp (100%) rename {src => core/src}/ImageIO.h (99%) rename {src => core/src}/InputConfig.cpp (100%) rename {src => core/src}/InputConfig.h (98%) rename {src => core/src}/InputManager.cpp (100%) rename {src => core/src}/InputManager.h (100%) rename {src => core/src}/Log.cpp (100%) rename {src => core/src}/Log.h (100%) rename {src => core/src}/Renderer.h (100%) rename {src => core/src}/Renderer_draw_gl.cpp (100%) rename {src => core/src}/Renderer_init.cpp (100%) rename {src => core/src}/Renderer_init_sdlgl.cpp (99%) rename {src => core/src}/Settings.cpp (99%) rename {src => core/src}/Settings.h (100%) rename {src => core/src}/Sound.cpp (100%) rename {src => core/src}/Sound.h (100%) rename {src => core/src}/ThemeData.cpp (99%) rename {src => core/src}/ThemeData.h (99%) rename {src => core/src}/Util.cpp (91%) rename {src => core/src}/Util.h (89%) rename {src => core/src}/Window.cpp (93%) rename {src => core/src}/Window.h (81%) rename {src => core/src}/animations/Animation.h (100%) rename {src => core/src}/animations/AnimationController.cpp (93%) rename {src => core/src}/animations/AnimationController.h (96%) rename {src => core/src}/animations/LambdaAnimation.h (93%) rename {src => core/src}/components/AnimatedImageComponent.cpp (96%) rename {src => core/src}/components/AnimatedImageComponent.h (96%) rename {src => core/src}/components/BusyComponent.cpp (93%) rename {src => core/src}/components/BusyComponent.h (77%) rename {src => core/src}/components/ButtonComponent.cpp (95%) rename {src => core/src}/components/ButtonComponent.h (92%) rename {src => core/src}/components/ComponentGrid.cpp (99%) rename {src => core/src}/components/ComponentGrid.h (99%) rename {src => core/src}/components/ComponentList.cpp (99%) rename {src => core/src}/components/ComponentList.h (100%) rename {src => core/src}/components/DateTimeComponent.cpp (98%) rename {src => core/src}/components/DateTimeComponent.h (97%) rename {src => core/src}/components/HelpComponent.cpp (94%) rename {src => core/src}/components/HelpComponent.h (92%) rename {src => core/src}/components/IList.h (98%) rename {src => core/src}/components/ImageComponent.cpp (98%) rename {src => core/src}/components/ImageComponent.h (96%) rename {src => core/src}/components/ImageGridComponent.h (98%) rename {src => core/src}/components/MenuComponent.cpp (97%) rename {src => core/src}/components/MenuComponent.h (91%) rename {src => core/src}/components/NinePatchComponent.cpp (97%) rename {src => core/src}/components/NinePatchComponent.h (95%) rename {src => core/src}/components/OptionListComponent.h (97%) rename {src => core/src}/components/ScrollableContainer.cpp (97%) rename {src => core/src}/components/ScrollableContainer.h (95%) rename {src => core/src}/components/SliderComponent.cpp (96%) rename {src => core/src}/components/SliderComponent.h (93%) rename {src => core/src}/components/SwitchComponent.cpp (93%) rename {src => core/src}/components/SwitchComponent.h (89%) rename {src => core/src}/components/TextComponent.cpp (97%) rename {src => core/src}/components/TextComponent.h (96%) rename {src => core/src}/components/TextEditComponent.cpp (97%) rename {src => core/src}/components/TextEditComponent.h (95%) rename {src => core/src}/guis/GuiDetectDevice.cpp (88%) rename {src => core/src}/guis/GuiDetectDevice.h (75%) rename {src => core/src}/guis/GuiInputConfig.cpp (97%) rename {src => core/src}/guis/GuiInputConfig.h (90%) rename {src => core/src}/guis/GuiMsgBox.cpp (93%) rename {src => core/src}/guis/GuiMsgBox.h (88%) rename {src => core/src}/guis/GuiTextEditPopup.cpp (97%) rename {src => core/src}/guis/GuiTextEditPopup.h (70%) rename {src => core/src}/platform.cpp (100%) rename {src => core/src}/platform.h (100%) rename {src => core/src}/resources/Font.cpp (99%) rename {src => core/src}/resources/Font.h (98%) rename {src => core/src}/resources/ResourceManager.cpp (97%) rename {src => core/src}/resources/ResourceManager.h (100%) rename {src => core/src}/resources/SVGResource.cpp (94%) rename {src => core/src}/resources/SVGResource.h (93%) rename {src => core/src}/resources/TextureResource.cpp (96%) rename {src => core/src}/resources/TextureResource.h (96%) create mode 100644 es/CMakeLists.txt create mode 100644 es/src/EmulationStation.aps rename {src => es/src}/EmulationStation.h (100%) rename {src => es/src}/EmulationStation.rc (100%) rename {src => es/src}/FileData.cpp (100%) rename {src => es/src}/FileData.h (100%) rename {src => es/src}/FileSorts.cpp (100%) rename {src => es/src}/FileSorts.h (100%) rename {src => es/src}/Gamelist.cpp (100%) rename {src => es/src}/Gamelist.h (100%) rename {src => es/src}/MameNameMap.cpp (100%) rename {src => es/src}/MetaData.cpp (92%) rename {src => es/src}/MetaData.h (92%) rename {src => es/src}/PlatformId.cpp (100%) rename {src => es/src}/PlatformId.h (100%) rename {src => es/src}/ScraperCmdLine.cpp (100%) rename {src => es/src}/ScraperCmdLine.h (100%) rename {src => es/src}/SystemData.cpp (100%) rename {src => es/src}/SystemData.h (100%) rename {src => es/src}/VolumeControl.cpp (100%) rename {src => es/src}/VolumeControl.h (100%) rename {src => es/src}/animations/LaunchAnimation.h (97%) rename {src => es/src}/animations/MoveCameraAnimation.h (93%) rename {src => es/src}/components/AsyncReqComponent.cpp (95%) rename {src => es/src}/components/AsyncReqComponent.h (96%) rename {src => es/src}/components/RatingComponent.cpp (96%) rename {src => es/src}/components/RatingComponent.h (94%) rename {src => es/src}/components/ScraperSearchComponent.cpp (96%) rename {src => es/src}/components/ScraperSearchComponent.h (94%) rename {src => es/src}/components/TextListComponent.h (98%) rename {src => es/src}/guis/GuiFastSelect.cpp (97%) rename {src => es/src}/guis/GuiFastSelect.h (76%) rename {src => es/src}/guis/GuiGameScraper.cpp (92%) rename {src => es/src}/guis/GuiGameScraper.h (85%) rename {src => es/src}/guis/GuiGamelistOptions.cpp (94%) rename {src => es/src}/guis/GuiGamelistOptions.h (78%) rename {src => es/src}/guis/GuiMenu.cpp (91%) rename {src => es/src}/guis/GuiMenu.h (85%) rename {src => es/src}/guis/GuiMetaDataEd.cpp (94%) rename {src => es/src}/guis/GuiMetaDataEd.h (89%) rename {src => es/src}/guis/GuiScraperMulti.cpp (91%) rename {src => es/src}/guis/GuiScraperMulti.h (86%) rename {src => es/src}/guis/GuiScraperStart.cpp (91%) rename {src => es/src}/guis/GuiScraperStart.h (88%) rename {src => es/src}/guis/GuiSettings.cpp (86%) rename {src => es/src}/guis/GuiSettings.h (91%) rename {src => es/src}/main.cpp (96%) rename {src => es/src}/scrapers/GamesDBScraper.cpp (96%) rename {src => es/src}/scrapers/GamesDBScraper.h (94%) rename {src => es/src}/scrapers/Scraper.cpp (98%) rename {src => es/src}/scrapers/Scraper.h (97%) rename {src => es/src}/scrapers/TheArchiveScraper.cpp (93%) rename {src => es/src}/scrapers/TheArchiveScraper.h (95%) rename {src => es/src}/views/SystemView.cpp (96%) rename {src => es/src}/views/SystemView.h (80%) rename {src => es/src}/views/ViewController.cpp (93%) rename {src => es/src}/views/ViewController.h (92%) rename {src => es/src}/views/gamelist/BasicGameListView.cpp (87%) rename {src => es/src}/views/gamelist/BasicGameListView.h (89%) rename {src => es/src}/views/gamelist/DetailedGameListView.cpp (97%) rename {src => es/src}/views/gamelist/DetailedGameListView.h (84%) rename {src => es/src}/views/gamelist/GridGameListView.cpp (88%) rename {src => es/src}/views/gamelist/GridGameListView.h (83%) rename {src => es/src}/views/gamelist/IGameListView.cpp (72%) rename {src => es/src}/views/gamelist/IGameListView.h (95%) rename {src => es/src}/views/gamelist/ISimpleGameListView.cpp (87%) rename {src => es/src}/views/gamelist/ISimpleGameListView.h (89%) create mode 100644 external/CMakeLists.txt create mode 100644 external/nanosvg/CMakeLists.txt rename {src => external}/nanosvg/nanosvg.h (100%) rename {src => external}/nanosvg/nanosvg_license.txt (100%) rename {src => external}/nanosvg/nanosvgrast.h (100%) rename {src/nanosvg => external/nanosvg/src}/nanosvg_impl.cpp (100%) create mode 100644 external/pugixml/CMakeLists.txt rename {src/pugiXML => external/pugixml}/pugiconfig.hpp (100%) rename {src/pugiXML => external/pugixml}/pugixml.hpp (100%) rename src/pugiXML/pugiXML_license.txt => external/pugixml/pugixml_license.txt (100%) rename {src/pugiXML => external/pugixml/src}/pugixml.cpp (100%) delete mode 100644 src/MathExp.cpp delete mode 100644 src/MathExp.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d0357e08..39e0b82e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.8) project(emulationstation) @@ -50,22 +50,6 @@ if(DEFINED BCMHOST) add_definitions(-D_RPI_) endif() -#------------------------------------------------------------------------------- -#set up _WIN32_WINNT variable (used by boost::asio) on Windows -macro(get_WIN32_WINNT version) - if (WIN32 AND CMAKE_SYSTEM_VERSION) - set(ver ${CMAKE_SYSTEM_VERSION}) - string(REPLACE "." "" ver ${ver}) - string(REGEX REPLACE "([0-9])" "0\\1" ver ${ver}) - - set(${version} "0x${ver}") - endif() -endmacro() - -if(WIN32) - get_WIN32_WINNT(ver) - add_definitions(-D_WIN32_WINNT=${ver}) -endif() #------------------------------------------------------------------------------- if(MSVC) @@ -82,6 +66,7 @@ if(CMAKE_COMPILER_IS_GNUCXX) if (G++_VERSION VERSION_LESS 4.7) message(SEND_ERROR "You need at least G++ 4.7 to compile EmulationStation!") endif() + #set up compiler flags for GCC set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O3") #support C++11 for std::, optimize set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O3") #-s = strip binary @@ -97,24 +82,26 @@ add_definitions(-DEIGEN_DONT_ALIGN) #------------------------------------------------------------------------------- #add include directories -set(ES_INCLUDE_DIRS +set(COMMON_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIRS} ${FreeImage_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} ${CURL_INCLUDE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/external + ${CMAKE_CURRENT_SOURCE_DIR}/core/src ) #add ALSA for Linux if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - LIST(APPEND ES_INCLUDE_DIRS + LIST(APPEND COMMON_INCLUDE_DIRS ${ALSA_INCLUDE_DIRS} ) endif() if(DEFINED BCMHOST) - LIST(APPEND ES_INCLUDE_DIRS + LIST(APPEND COMMON_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos" "/opt/vc/include/interface/vmcs_host/linux" @@ -122,263 +109,16 @@ if(DEFINED BCMHOST) ) else() if(${GLSystem} MATCHES "Desktop OpenGL") - LIST(APPEND ES_INCLUDE_DIRS + LIST(APPEND COMMON_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR} ) else() - LIST(APPEND ES_INCLUDE_DIRS + LIST(APPEND COMMON_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR} ) endif() endif() -#------------------------------------------------------------------------------- -#define basic sources and headers -set(ES_HEADERS - ${CMAKE_CURRENT_SOURCE_DIR}/src/AsyncHandle.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/EmulationStation.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/HelpStyle.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/Log.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/MathExp.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/ScraperCmdLine.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/Util.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.h - - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/BusyComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageGridComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScraperSearchComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextListComponent.h - - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiFastSelect.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.h - - ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.h - - ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugiconfig.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.hpp - - ${CMAKE_CURRENT_SOURCE_DIR}/src/nanosvg/nanosvg.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/nanosvg/nanosvgrast.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/IGameListView.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h - - ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/Animation.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/LambdaAnimation.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/LaunchAnimation.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/MoveCameraAnimation.h - - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.h - ${CMAKE_CURRENT_SOURCE_DIR}/data/Resources.h -) -set(ES_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/HelpStyle.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Log.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/MameNameMap.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/MathExp.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_draw_gl.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/ScraperCmdLine.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Util.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.cpp - - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/BusyComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScraperSearchComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.cpp - - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiFastSelect.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.cpp - - ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.cpp - - ${CMAKE_CURRENT_SOURCE_DIR}/src/pugiXML/pugixml.cpp - - ${CMAKE_CURRENT_SOURCE_DIR}/src/nanosvg/nanosvg_impl.cpp - - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.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/IGameListView.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp - - ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.cpp - - ${CMAKE_CURRENT_SOURCE_DIR}/data/ResourceUtil.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/splash_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/window_icon_256_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/button_filled_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textinput_ninepatch_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/textinput_ninepatch_active_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/frame_png.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/scroll_gradient_png.cpp - - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_a_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_b_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_x_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_y_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_l_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_r_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_start_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_button_select_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_up_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_down_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_left_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_right_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_updown_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_leftright_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/help_dpad_all_svg.cpp - - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_regular_ttf.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_light_ttf.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/arrow_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/option_arrow_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/checkbox_checked_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/checkbox_unchecked_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_filled_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/star_unfilled_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/on_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/off_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/fav_add_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/fav_remove_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/slider_knob_svg.cpp - - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/busy_0_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/busy_1_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/busy_2_svg.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/data/converted/busy_3_svg.cpp -) - -#SOURCE_GROUP(resources FILES ResourceUtil.cpp) - -#add open gl specific sources -#if(${GLSystem} MATCHES "Desktop OpenGL") - LIST(APPEND ES_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init_sdlgl.cpp - ) -#else() -# LIST(APPEND ES_SOURCES -# ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init_rpi.cpp -# ) -#endif() - -#------------------------------------------------------------------------------- -#define OS specific sources and headers -if(MSVC) - LIST(APPEND ES_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/src/EmulationStation.rc - ) -endif() - #------------------------------------------------------------------------------- #define libraries and directories if(DEFINED BCMHOST) @@ -392,96 +132,57 @@ else() ) endif() -set(ES_LIBRARIES +set(COMMON_LIBRARIES ${Boost_LIBRARIES} ${FREETYPE_LIBRARIES} ${FreeImage_LIBRARIES} ${SDL2_LIBRARY} ${SDL2MAIN_LIBRARY} ${CURL_LIBRARIES} + pugixml + nanosvg ) #add ALSA for Linux if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - LIST(APPEND ES_LIBRARIES + LIST(APPEND COMMON_LIBRARIES ${ALSA_LIBRARY} ) endif() if(DEFINED BCMHOST) - LIST(APPEND ES_LIBRARIES + LIST(APPEND COMMON_LIBRARIES bcm_host EGL ${OPENGLES_LIBRARIES} ) else() if(MSVC) - LIST(APPEND ES_LIBRARIES + LIST(APPEND COMMON_LIBRARIES winmm ) endif() if(${GLSystem} MATCHES "Desktop OpenGL") - LIST(APPEND ES_LIBRARIES + LIST(APPEND COMMON_LIBRARIES ${OPENGL_LIBRARIES} ) else() - LIST(APPEND ES_LIBRARIES + LIST(APPEND COMMON_LIBRARIES ${OPENGLES_LIBRARIES} ) endif() endif() #------------------------------------------------------------------------------- -#set up build directories +# set up build directories set(dir ${CMAKE_CURRENT_SOURCE_DIR}) set(EXECUTABLE_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE) set(LIBRARY_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE) + #------------------------------------------------------------------------------- -#define target -include_directories(${ES_INCLUDE_DIRS}) -add_executable(emulationstation ${ES_SOURCES} ${ES_HEADERS}) -target_link_libraries(emulationstation ${ES_LIBRARIES}) - -#special properties for windows builds -if(MSVC) - #show console in debug builds, but not in proper release builds - #Note that up to CMake 2.8.10 this feature is broken: http://public.kitware.com/Bug/view.php?id=12566 - set_target_properties(emulationstation PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE") - set_target_properties(emulationstation PROPERTIES COMPILE_DEFINITIONS_DEBUG "_CONSOLE") - set_target_properties(emulationstation PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE") - set_target_properties(emulationstation PROPERTIES COMPILE_DEFINITIONS_RELWITHDEBINFO "_CONSOLE") - set_target_properties(emulationstation PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS") - set_target_properties(emulationstation PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS") -endif() - -install(TARGETS emulationstation - RUNTIME - DESTINATION bin) - -INCLUDE(InstallRequiredSystemLibraries) - -SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A flexible graphical emulator front-end") -SET(CPACK_PACKAGE_DESCRIPTION "EmulationStation is a flexible, graphical front-end designed for keyboardless navigation of your multi-platform retro game collection.") - -SET(CPACK_RESOURCE_FILE LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md") -SET(CPACK_RESOURCE_FILE README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") - -SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Alec Lofquist ") -SET(CPACK_DEBIAN_PACKAGE_SECTION "misc") -SET(CPACK_DEBIAN_PACKAGE_PRIORITY "extra") -SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libsdl2-2.0-0, libboost-system1.54.0, libboost-filesystem1.54.0, libfreeimage3, libfreetype6, libcurl3, libasound2") -SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS "debhelper (>= 8.0.0), cmake, g++ (>= 4.8), libsdl2-dev, libboost-system-dev, libboost-filesystem-dev, libboost-date-time-dev, libfreeimage-dev, libfreetype6-dev, libeigen3-dev, libcurl4-openssl-dev, libasound2-dev, libgl1-mesa-dev") - -SET(CPACK_PACKAGE_VENDOR "emulationstation.org") -SET(CPACK_PACKAGE_VERSION "2.0.0~rc1") -SET(CPACK_PACKAGE_VERSION_MAJOR "2") -SET(CPACK_PACKAGE_VERSION_MINOR "0") -SET(CPACK_PACKAGE_VERSION_PATCH "0") -SET(CPACK_PACKAGE_INSTALL_DIRECTORY "emulationstation_${CMAKE_PACKAGE_VERSION}") -SET(CPACK_PACKAGE_EXECUTABLES "emulationstation" "emulationstation") - -SET(CPACK_GENERATOR "TGZ;DEB") - -INCLUDE(CPack) +# add each component +add_subdirectory("external") +add_subdirectory("core") +add_subdirectory("es") diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt new file mode 100644 index 000000000..182e811be --- /dev/null +++ b/core/CMakeLists.txt @@ -0,0 +1,165 @@ +project("core") + +set(CORE_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/src/AsyncHandle.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/HelpStyle.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/Log.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/Util.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h + + # Animations + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/Animation.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/LambdaAnimation.h + + # GuiComponents + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/BusyComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageGridComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.h + + # Guis + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.h + + # Resources + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.h +) + +set(CORE_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/HelpStyle.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ImageIO.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Log.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_draw_gl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init_sdlgl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Util.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp + + # Animations + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/AnimationController.cpp + + # GuiComponents + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AnimatedImageComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/BusyComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ButtonComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.cpp + + # Guis + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInputConfig.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.cpp + + # Resources + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp + + # Embedded assets (needed by ResourceManager) + ${emulationstation_SOURCE_DIR}/data/Resources.h +) + +set(EMBEDDED_ASSET_SOURCES + ${emulationstation_SOURCE_DIR}/data/ResourceUtil.cpp + ${emulationstation_SOURCE_DIR}/data/converted/splash_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/window_icon_256_png.cpp + ${emulationstation_SOURCE_DIR}/data/converted/button_png.cpp + ${emulationstation_SOURCE_DIR}/data/converted/button_filled_png.cpp + ${emulationstation_SOURCE_DIR}/data/converted/textinput_ninepatch_png.cpp + ${emulationstation_SOURCE_DIR}/data/converted/textinput_ninepatch_active_png.cpp + ${emulationstation_SOURCE_DIR}/data/converted/frame_png.cpp + ${emulationstation_SOURCE_DIR}/data/converted/scroll_gradient_png.cpp + + ${emulationstation_SOURCE_DIR}/data/converted/help_button_a_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_button_b_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_button_x_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_button_y_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_button_l_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_button_r_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_button_start_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_button_select_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_dpad_up_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_dpad_down_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_dpad_left_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_dpad_right_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_dpad_updown_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_dpad_leftright_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/help_dpad_all_svg.cpp + + ${emulationstation_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_regular_ttf.cpp + ${emulationstation_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_light_ttf.cpp + ${emulationstation_SOURCE_DIR}/data/converted/arrow_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/option_arrow_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/checkbox_checked_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/checkbox_unchecked_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/star_filled_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/star_unfilled_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/on_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/off_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/fav_add_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/fav_remove_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/slider_knob_svg.cpp + + ${emulationstation_SOURCE_DIR}/data/converted/busy_0_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/busy_1_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/busy_2_svg.cpp + ${emulationstation_SOURCE_DIR}/data/converted/busy_3_svg.cpp +) + +list(APPEND CORE_SOURCES ${EMBEDDED_ASSET_SOURCES}) + +include_directories(${COMMON_INCLUDE_DIRS}) +add_library(es-core STATIC ${CORE_SOURCES} ${CORE_HEADERS}) +target_link_libraries(es-core ${COMMON_LIBRARIES}) diff --git a/src/AsyncHandle.h b/core/src/AsyncHandle.h similarity index 100% rename from src/AsyncHandle.h rename to core/src/AsyncHandle.h diff --git a/src/AudioManager.cpp b/core/src/AudioManager.cpp similarity index 94% rename from src/AudioManager.cpp rename to core/src/AudioManager.cpp index 2c6af704b..c75d3c4ca 100644 --- a/src/AudioManager.cpp +++ b/core/src/AudioManager.cpp @@ -2,8 +2,6 @@ #include #include "Log.h" -#include "VolumeControl.h" - std::vector> AudioManager::sSoundVector; SDL_AudioSpec AudioManager::sAudioFormat; @@ -54,9 +52,6 @@ void AudioManager::mixAudio(void *unused, Uint8 *stream, int len) AudioManager::AudioManager() { init(); - - //set internal volume - //VolumeControl::getInstance()->setVolume(50); } AudioManager::~AudioManager() @@ -138,9 +133,6 @@ void AudioManager::play() { getInstance(); - //set internal audio volume. important after launching a game and returning here - //VolumeControl::getInstance()->setVolume(50); - //unpause audio, the mixer will figure out if samples need to be played... SDL_PauseAudio(0); } diff --git a/src/AudioManager.h b/core/src/AudioManager.h similarity index 100% rename from src/AudioManager.h rename to core/src/AudioManager.h diff --git a/src/GuiComponent.cpp b/core/src/GuiComponent.cpp similarity index 100% rename from src/GuiComponent.cpp rename to core/src/GuiComponent.cpp diff --git a/src/GuiComponent.h b/core/src/GuiComponent.h similarity index 100% rename from src/GuiComponent.h rename to core/src/GuiComponent.h diff --git a/src/HelpStyle.cpp b/core/src/HelpStyle.cpp similarity index 100% rename from src/HelpStyle.cpp rename to core/src/HelpStyle.cpp diff --git a/src/HelpStyle.h b/core/src/HelpStyle.h similarity index 100% rename from src/HelpStyle.h rename to core/src/HelpStyle.h diff --git a/src/HttpReq.cpp b/core/src/HttpReq.cpp similarity index 100% rename from src/HttpReq.cpp rename to core/src/HttpReq.cpp diff --git a/src/HttpReq.h b/core/src/HttpReq.h similarity index 100% rename from src/HttpReq.h rename to core/src/HttpReq.h diff --git a/src/ImageIO.cpp b/core/src/ImageIO.cpp similarity index 100% rename from src/ImageIO.cpp rename to core/src/ImageIO.cpp diff --git a/src/ImageIO.h b/core/src/ImageIO.h similarity index 99% rename from src/ImageIO.h rename to core/src/ImageIO.h index 8d4a1916b..ca48d70ab 100644 --- a/src/ImageIO.h +++ b/core/src/ImageIO.h @@ -3,7 +3,6 @@ #include #include - class ImageIO { public: diff --git a/src/InputConfig.cpp b/core/src/InputConfig.cpp similarity index 100% rename from src/InputConfig.cpp rename to core/src/InputConfig.cpp diff --git a/src/InputConfig.h b/core/src/InputConfig.h similarity index 98% rename from src/InputConfig.h rename to core/src/InputConfig.h index b007f008a..4fa3980ac 100644 --- a/src/InputConfig.h +++ b/core/src/InputConfig.h @@ -6,7 +6,7 @@ #include #include #include -#include "pugiXML/pugixml.hpp" +#include "pugixml/pugixml.hpp" #define DEVICE_KEYBOARD -1 diff --git a/src/InputManager.cpp b/core/src/InputManager.cpp similarity index 100% rename from src/InputManager.cpp rename to core/src/InputManager.cpp diff --git a/src/InputManager.h b/core/src/InputManager.h similarity index 100% rename from src/InputManager.h rename to core/src/InputManager.h diff --git a/src/Log.cpp b/core/src/Log.cpp similarity index 100% rename from src/Log.cpp rename to core/src/Log.cpp diff --git a/src/Log.h b/core/src/Log.h similarity index 100% rename from src/Log.h rename to core/src/Log.h diff --git a/src/Renderer.h b/core/src/Renderer.h similarity index 100% rename from src/Renderer.h rename to core/src/Renderer.h diff --git a/src/Renderer_draw_gl.cpp b/core/src/Renderer_draw_gl.cpp similarity index 100% rename from src/Renderer_draw_gl.cpp rename to core/src/Renderer_draw_gl.cpp diff --git a/src/Renderer_init.cpp b/core/src/Renderer_init.cpp similarity index 100% rename from src/Renderer_init.cpp rename to core/src/Renderer_init.cpp diff --git a/src/Renderer_init_sdlgl.cpp b/core/src/Renderer_init_sdlgl.cpp similarity index 99% rename from src/Renderer_init_sdlgl.cpp rename to core/src/Renderer_init_sdlgl.cpp index 65abd0dad..dcc13ebfd 100644 --- a/src/Renderer_init_sdlgl.cpp +++ b/core/src/Renderer_init_sdlgl.cpp @@ -7,7 +7,6 @@ #include "Log.h" #include "ImageIO.h" #include "../data/Resources.h" -#include "EmulationStation.h" #include "Settings.h" #ifdef USE_OPENGL_ES diff --git a/src/Settings.cpp b/core/src/Settings.cpp similarity index 99% rename from src/Settings.cpp rename to core/src/Settings.cpp index 36abc5de4..34c82773c 100644 --- a/src/Settings.cpp +++ b/core/src/Settings.cpp @@ -1,6 +1,6 @@ #include "Settings.h" #include "Log.h" -#include "pugiXML/pugixml.hpp" +#include "pugixml/pugixml.hpp" #include "platform.h" #include #include diff --git a/src/Settings.h b/core/src/Settings.h similarity index 100% rename from src/Settings.h rename to core/src/Settings.h diff --git a/src/Sound.cpp b/core/src/Sound.cpp similarity index 100% rename from src/Sound.cpp rename to core/src/Sound.cpp diff --git a/src/Sound.h b/core/src/Sound.h similarity index 100% rename from src/Sound.h rename to core/src/Sound.h diff --git a/src/ThemeData.cpp b/core/src/ThemeData.cpp similarity index 99% rename from src/ThemeData.cpp rename to core/src/ThemeData.cpp index 513a26c8c..fce86628f 100644 --- a/src/ThemeData.cpp +++ b/core/src/ThemeData.cpp @@ -5,7 +5,7 @@ #include "resources/TextureResource.h" #include "Log.h" #include "Settings.h" -#include "pugiXML/pugixml.hpp" +#include "pugixml/pugixml.hpp" #include #include "components/ImageComponent.h" diff --git a/src/ThemeData.h b/core/src/ThemeData.h similarity index 99% rename from src/ThemeData.h rename to core/src/ThemeData.h index eea92e67f..268f0753f 100644 --- a/src/ThemeData.h +++ b/core/src/ThemeData.h @@ -9,7 +9,7 @@ #include #include #include -#include "pugiXML/pugixml.hpp" +#include "pugixml/pugixml.hpp" #include "GuiComponent.h" template diff --git a/src/Util.cpp b/core/src/Util.cpp similarity index 91% rename from src/Util.cpp rename to core/src/Util.cpp index efc805ae0..1a9693bc9 100644 --- a/src/Util.cpp +++ b/core/src/Util.cpp @@ -171,3 +171,13 @@ fs::path makeRelativePath(const fs::path& path, const fs::path& relativeTo, bool // nothing could be resolved return path; } + +boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt) +{ + std::istringstream ss(str); + ss.imbue(std::locale(std::locale::classic(), new boost::posix_time::time_input_facet(fmt))); //std::locale handles deleting the facet + boost::posix_time::ptime time; + ss >> time; + + return time; +} diff --git a/src/Util.h b/core/src/Util.h similarity index 89% rename from src/Util.h rename to core/src/Util.h index d72677839..5bf2a1275 100644 --- a/src/Util.h +++ b/core/src/Util.h @@ -1,6 +1,9 @@ +#pragma once + #include #include #include +#include std::string strToUpper(const char* from); std::string& strToUpper(std::string& str); @@ -26,3 +29,5 @@ boost::filesystem::path makeRelativePath(const boost::filesystem::path& path, co // expands "./my/path.sfc" to "[relativeTo]/my/path.sfc" // if allowHome is true, also expands "~/my/path.sfc" to "/home/pi/my/path.sfc" boost::filesystem::path resolvePath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool allowHome); + +boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt = "%Y%m%dT%H%M%S%F%q"); diff --git a/src/Window.cpp b/core/src/Window.cpp similarity index 93% rename from src/Window.cpp rename to core/src/Window.cpp index b2c2ccc35..76bb1754e 100644 --- a/src/Window.cpp +++ b/core/src/Window.cpp @@ -2,32 +2,25 @@ #include #include "Renderer.h" #include "AudioManager.h" -#include "VolumeControl.h" #include "Log.h" #include "Settings.h" #include -#include "views/ViewController.h" #include "components/HelpComponent.h" #include "components/ImageComponent.h" Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), mAllowSleep(true), mSleeping(false), mTimeSinceLastInput(0) { - mViewController = new ViewController(this); mHelp = new HelpComponent(this); - mBackgroundOverlay = new ImageComponent(this); mBackgroundOverlay->setImage(":/scroll_gradient.png"); - - pushGui(mViewController); } Window::~Window() { - delete mViewController; // this would get deleted down below, but just to be safe, delete it here delete mBackgroundOverlay; - //delete all our GUIs + // delete all our GUIs while(peekGui()) delete peekGui(); @@ -129,14 +122,6 @@ void Window::input(InputConfig* config, Input input) // toggle TextComponent debug view with Ctrl-T Settings::getInstance()->setBool("DebugText", !Settings::getInstance()->getBool("DebugText")); } - else if(config->isMappedTo("mastervolup", input)) - { - VolumeControl::getInstance()->setVolume(VolumeControl::getInstance()->getVolume() + 5); - } - else if(config->isMappedTo("mastervoldown", input)) - { - VolumeControl::getInstance()->setVolume(VolumeControl::getInstance()->getVolume() - 5); - } else { if(peekGui()) diff --git a/src/Window.h b/core/src/Window.h similarity index 81% rename from src/Window.h rename to core/src/Window.h index d7b527452..6576cb04a 100644 --- a/src/Window.h +++ b/core/src/Window.h @@ -1,12 +1,10 @@ -#ifndef _WINDOW_H_ -#define _WINDOW_H_ +#pragma once #include "GuiComponent.h" #include #include "resources/Font.h" #include "InputManager.h" -class ViewController; class HelpComponent; class ImageComponent; @@ -28,8 +26,6 @@ public: bool init(unsigned int width = 0, unsigned int height = 0); void deinit(); - inline ViewController* getViewController() { return mViewController; } - void normalizeNextUpdate(); inline bool isSleeping() const { return mSleeping; } @@ -38,14 +34,13 @@ public: void renderLoadingScreen(); - void renderHelpPromptsEarly(); // used by ViewController to render HelpPrompts before a fade + void renderHelpPromptsEarly(); // used to render HelpPrompts before a fade void setHelpPrompts(const std::vector& prompts, const HelpStyle& style); private: void onSleep(); void onWake(); - ViewController* mViewController; HelpComponent* mHelp; ImageComponent* mBackgroundOverlay; @@ -67,5 +62,3 @@ private: bool mRenderedHelpPrompts; }; - -#endif diff --git a/src/animations/Animation.h b/core/src/animations/Animation.h similarity index 100% rename from src/animations/Animation.h rename to core/src/animations/Animation.h diff --git a/src/animations/AnimationController.cpp b/core/src/animations/AnimationController.cpp similarity index 93% rename from src/animations/AnimationController.cpp rename to core/src/animations/AnimationController.cpp index 09f751477..245aeb926 100644 --- a/src/animations/AnimationController.cpp +++ b/core/src/animations/AnimationController.cpp @@ -1,4 +1,4 @@ -#include "AnimationController.h" +#include "animations/AnimationController.h" AnimationController::AnimationController(Animation* anim, int delay, std::function finishedCallback, bool reverse) : mAnimation(anim), mFinishedCallback(finishedCallback), mReverse(reverse), mTime(-delay), mDelay(delay) diff --git a/src/animations/AnimationController.h b/core/src/animations/AnimationController.h similarity index 96% rename from src/animations/AnimationController.h rename to core/src/animations/AnimationController.h index 7a648546d..2d14f3d8e 100644 --- a/src/animations/AnimationController.h +++ b/core/src/animations/AnimationController.h @@ -2,7 +2,7 @@ #include #include -#include "Animation.h" +#include "animations/Animation.h" class AnimationController { diff --git a/src/animations/LambdaAnimation.h b/core/src/animations/LambdaAnimation.h similarity index 93% rename from src/animations/LambdaAnimation.h rename to core/src/animations/LambdaAnimation.h index 27c5c1dc3..35e1f958a 100644 --- a/src/animations/LambdaAnimation.h +++ b/core/src/animations/LambdaAnimation.h @@ -1,6 +1,6 @@ #pragma once -#include "Animation.h" +#include "animations/Animation.h" // Useful for simple one-off animations, you can supply the animation's apply(t) method right in the constructor as a lambda. class LambdaAnimation : public Animation diff --git a/src/components/AnimatedImageComponent.cpp b/core/src/components/AnimatedImageComponent.cpp similarity index 96% rename from src/components/AnimatedImageComponent.cpp rename to core/src/components/AnimatedImageComponent.cpp index 1ef4e3073..b13415309 100644 --- a/src/components/AnimatedImageComponent.cpp +++ b/core/src/components/AnimatedImageComponent.cpp @@ -1,5 +1,5 @@ -#include "AnimatedImageComponent.h" -#include "../Log.h" +#include "components/AnimatedImageComponent.h" +#include "Log.h" AnimatedImageComponent::AnimatedImageComponent(Window* window) : GuiComponent(window), mEnabled(false) { diff --git a/src/components/AnimatedImageComponent.h b/core/src/components/AnimatedImageComponent.h similarity index 96% rename from src/components/AnimatedImageComponent.h rename to core/src/components/AnimatedImageComponent.h index 53ffc2dd6..da5918879 100644 --- a/src/components/AnimatedImageComponent.h +++ b/core/src/components/AnimatedImageComponent.h @@ -1,4 +1,4 @@ -#include "../GuiComponent.h" +#include "GuiComponent.h" #include "ImageComponent.h" struct AnimationFrame diff --git a/src/components/BusyComponent.cpp b/core/src/components/BusyComponent.cpp similarity index 93% rename from src/components/BusyComponent.cpp rename to core/src/components/BusyComponent.cpp index 68822c54f..184adcbc0 100644 --- a/src/components/BusyComponent.cpp +++ b/core/src/components/BusyComponent.cpp @@ -1,8 +1,8 @@ #include "BusyComponent.h" -#include "AnimatedImageComponent.h" -#include "TextComponent.h" -#include "../Renderer.h" +#include "components/AnimatedImageComponent.h" +#include "components/TextComponent.h" +#include "Renderer.h" // animation definition AnimationFrame BUSY_ANIMATION_FRAMES[] = { diff --git a/src/components/BusyComponent.h b/core/src/components/BusyComponent.h similarity index 77% rename from src/components/BusyComponent.h rename to core/src/components/BusyComponent.h index 44d6d4d2e..88f35dacb 100644 --- a/src/components/BusyComponent.h +++ b/core/src/components/BusyComponent.h @@ -1,6 +1,6 @@ -#include "../GuiComponent.h" -#include "ComponentGrid.h" -#include "NinePatchComponent.h" +#include "GuiComponent.h" +#include "components/ComponentGrid.h" +#include "components/NinePatchComponent.h" class AnimatedImageComponent; class TextComponent; diff --git a/src/components/ButtonComponent.cpp b/core/src/components/ButtonComponent.cpp similarity index 95% rename from src/components/ButtonComponent.cpp rename to core/src/components/ButtonComponent.cpp index 1dae3d043..33f662589 100644 --- a/src/components/ButtonComponent.cpp +++ b/core/src/components/ButtonComponent.cpp @@ -1,8 +1,8 @@ -#include "ButtonComponent.h" -#include "../Renderer.h" -#include "../Window.h" -#include "../Util.h" -#include "../Log.h" +#include "components/ButtonComponent.h" +#include "Renderer.h" +#include "Window.h" +#include "Util.h" +#include "Log.h" ButtonComponent::ButtonComponent(Window* window, const std::string& text, const std::string& helpText, const std::function& func) : GuiComponent(window), mBox(window, ":/button.png"), diff --git a/src/components/ButtonComponent.h b/core/src/components/ButtonComponent.h similarity index 92% rename from src/components/ButtonComponent.h rename to core/src/components/ButtonComponent.h index d5d053487..25cb76e4c 100644 --- a/src/components/ButtonComponent.h +++ b/core/src/components/ButtonComponent.h @@ -1,9 +1,9 @@ #pragma once -#include "../GuiComponent.h" +#include "GuiComponent.h" #include -#include "../resources/Font.h" -#include "NinePatchComponent.h" +#include "resources/Font.h" +#include "components/NinePatchComponent.h" class ButtonComponent : public GuiComponent { diff --git a/src/components/ComponentGrid.cpp b/core/src/components/ComponentGrid.cpp similarity index 99% rename from src/components/ComponentGrid.cpp rename to core/src/components/ComponentGrid.cpp index 07bc8fd83..89dd157cc 100644 --- a/src/components/ComponentGrid.cpp +++ b/core/src/components/ComponentGrid.cpp @@ -1,7 +1,7 @@ -#include "ComponentGrid.h" -#include "../Log.h" -#include "../Renderer.h" -#include "../Settings.h" +#include "components/ComponentGrid.h" +#include "Log.h" +#include "Renderer.h" +#include "Settings.h" using namespace GridFlags; diff --git a/src/components/ComponentGrid.h b/core/src/components/ComponentGrid.h similarity index 99% rename from src/components/ComponentGrid.h rename to core/src/components/ComponentGrid.h index 68a45ab1b..ee1547c1c 100644 --- a/src/components/ComponentGrid.h +++ b/core/src/components/ComponentGrid.h @@ -1,6 +1,6 @@ #pragma once -#include "../GuiComponent.h" +#include "GuiComponent.h" namespace GridFlags { diff --git a/src/components/ComponentList.cpp b/core/src/components/ComponentList.cpp similarity index 99% rename from src/components/ComponentList.cpp rename to core/src/components/ComponentList.cpp index 043fcaf60..a16bcb097 100644 --- a/src/components/ComponentList.cpp +++ b/core/src/components/ComponentList.cpp @@ -1,6 +1,6 @@ -#include "ComponentList.h" -#include "../Util.h" -#include "../Log.h" +#include "components/ComponentList.h" +#include "Util.h" +#include "Log.h" #define TOTAL_HORIZONTAL_PADDING_PX 20 diff --git a/src/components/ComponentList.h b/core/src/components/ComponentList.h similarity index 100% rename from src/components/ComponentList.h rename to core/src/components/ComponentList.h diff --git a/src/components/DateTimeComponent.cpp b/core/src/components/DateTimeComponent.cpp similarity index 98% rename from src/components/DateTimeComponent.cpp rename to core/src/components/DateTimeComponent.cpp index c9ed78ee1..6015be506 100644 --- a/src/components/DateTimeComponent.cpp +++ b/core/src/components/DateTimeComponent.cpp @@ -1,9 +1,8 @@ -#include "DateTimeComponent.h" -#include "../MetaData.h" -#include "../Renderer.h" -#include "../Window.h" -#include "../Log.h" -#include "../Util.h" +#include "components/DateTimeComponent.h" +#include "Renderer.h" +#include "Window.h" +#include "Log.h" +#include "Util.h" DateTimeComponent::DateTimeComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), diff --git a/src/components/DateTimeComponent.h b/core/src/components/DateTimeComponent.h similarity index 97% rename from src/components/DateTimeComponent.h rename to core/src/components/DateTimeComponent.h index 17e5ee920..82cf38577 100644 --- a/src/components/DateTimeComponent.h +++ b/core/src/components/DateTimeComponent.h @@ -1,8 +1,8 @@ #pragma once -#include "../GuiComponent.h" +#include "GuiComponent.h" #include -#include "../resources/Font.h" +#include "resources/Font.h" // Used to enter or display a specific point in time. class DateTimeComponent : public GuiComponent diff --git a/src/components/HelpComponent.cpp b/core/src/components/HelpComponent.cpp similarity index 94% rename from src/components/HelpComponent.cpp rename to core/src/components/HelpComponent.cpp index c88023616..fdaecd360 100644 --- a/src/components/HelpComponent.cpp +++ b/core/src/components/HelpComponent.cpp @@ -1,12 +1,11 @@ -#include "HelpComponent.h" -#include "../Renderer.h" -#include "../Settings.h" -#include "../Log.h" -#include "../Util.h" -#include "ImageComponent.h" -#include "TextComponent.h" -#include "ComponentGrid.h" - +#include "components/HelpComponent.h" +#include "Renderer.h" +#include "Settings.h" +#include "Log.h" +#include "Util.h" +#include "components/ImageComponent.h" +#include "components/TextComponent.h" +#include "components/ComponentGrid.h" #include #define OFFSET_X 12 // move the entire thing right by this amount (px) diff --git a/src/components/HelpComponent.h b/core/src/components/HelpComponent.h similarity index 92% rename from src/components/HelpComponent.h rename to core/src/components/HelpComponent.h index cd30be666..464e353dc 100644 --- a/src/components/HelpComponent.h +++ b/core/src/components/HelpComponent.h @@ -1,7 +1,7 @@ #pragma once -#include "../GuiComponent.h" -#include "../HelpStyle.h" +#include "GuiComponent.h" +#include "HelpStyle.h" class ImageComponent; class TextureResource; diff --git a/src/components/IList.h b/core/src/components/IList.h similarity index 98% rename from src/components/IList.h rename to core/src/components/IList.h index f6bca9dc3..85d806496 100644 --- a/src/components/IList.h +++ b/core/src/components/IList.h @@ -3,10 +3,10 @@ #include #include #include -#include "../GuiComponent.h" -#include "ImageComponent.h" -#include "../resources/Font.h" -#include "../Renderer.h" +#include "GuiComponent.h" +#include "components/ImageComponent.h" +#include "resources/Font.h" +#include "Renderer.h" enum CursorState { diff --git a/src/components/ImageComponent.cpp b/core/src/components/ImageComponent.cpp similarity index 98% rename from src/components/ImageComponent.cpp rename to core/src/components/ImageComponent.cpp index 1ac2c478a..2898c6f73 100644 --- a/src/components/ImageComponent.cpp +++ b/core/src/components/ImageComponent.cpp @@ -1,12 +1,12 @@ -#include "ImageComponent.h" +#include "components/ImageComponent.h" #include #include #include -#include "../Log.h" -#include "../Renderer.h" -#include "../ThemeData.h" -#include "../Util.h" -#include "../resources/SVGResource.h" +#include "Log.h" +#include "Renderer.h" +#include "ThemeData.h" +#include "Util.h" +#include "resources/SVGResource.h" Eigen::Vector2i ImageComponent::getTextureSize() const { diff --git a/src/components/ImageComponent.h b/core/src/components/ImageComponent.h similarity index 96% rename from src/components/ImageComponent.h rename to core/src/components/ImageComponent.h index a05be6d29..939c6c7cd 100644 --- a/src/components/ImageComponent.h +++ b/core/src/components/ImageComponent.h @@ -1,13 +1,13 @@ #ifndef _IMAGECOMPONENT_H_ #define _IMAGECOMPONENT_H_ -#include "../platform.h" +#include "platform.h" #include GLHEADER -#include "../GuiComponent.h" +#include "GuiComponent.h" #include #include -#include "../resources/TextureResource.h" +#include "resources/TextureResource.h" class ImageComponent : public GuiComponent { diff --git a/src/components/ImageGridComponent.h b/core/src/components/ImageGridComponent.h similarity index 98% rename from src/components/ImageGridComponent.h rename to core/src/components/ImageGridComponent.h index d58e80cf7..b00a6c624 100644 --- a/src/components/ImageGridComponent.h +++ b/core/src/components/ImageGridComponent.h @@ -1,9 +1,9 @@ #pragma once -#include "../GuiComponent.h" -#include "IList.h" -#include "../components/ImageComponent.h" -#include "../Log.h" +#include "GuiComponent.h" +#include "components/IList.h" +#include "components/ImageComponent.h" +#include "Log.h" struct ImageGridData { diff --git a/src/components/MenuComponent.cpp b/core/src/components/MenuComponent.cpp similarity index 97% rename from src/components/MenuComponent.cpp rename to core/src/components/MenuComponent.cpp index 443b847b1..589bc6fab 100644 --- a/src/components/MenuComponent.cpp +++ b/core/src/components/MenuComponent.cpp @@ -1,5 +1,5 @@ -#include "MenuComponent.h" -#include "ButtonComponent.h" +#include "components/MenuComponent.h" +#include "components/ButtonComponent.h" #define BUTTON_GRID_VERT_PADDING 32 #define BUTTON_GRID_HORIZ_PADDING 10 diff --git a/src/components/MenuComponent.h b/core/src/components/MenuComponent.h similarity index 91% rename from src/components/MenuComponent.h rename to core/src/components/MenuComponent.h index f1f3c096a..227d8b27e 100644 --- a/src/components/MenuComponent.h +++ b/core/src/components/MenuComponent.h @@ -1,10 +1,10 @@ #pragma once -#include "NinePatchComponent.h" -#include "ComponentList.h" -#include "TextComponent.h" -#include "ComponentGrid.h" -#include "../Util.h" +#include "components/NinePatchComponent.h" +#include "components/ComponentList.h" +#include "components/TextComponent.h" +#include "components/ComponentGrid.h" +#include "Util.h" class ButtonComponent; class ImageComponent; diff --git a/src/components/NinePatchComponent.cpp b/core/src/components/NinePatchComponent.cpp similarity index 97% rename from src/components/NinePatchComponent.cpp rename to core/src/components/NinePatchComponent.cpp index eafa908bd..9d10be123 100644 --- a/src/components/NinePatchComponent.cpp +++ b/core/src/components/NinePatchComponent.cpp @@ -1,9 +1,9 @@ -#include "NinePatchComponent.h" -#include "../Window.h" -#include "../Log.h" -#include "../Renderer.h" -#include "../ThemeData.h" -#include "../Util.h" +#include "components/NinePatchComponent.h" +#include "Window.h" +#include "Log.h" +#include "Renderer.h" +#include "ThemeData.h" +#include "Util.h" NinePatchComponent::NinePatchComponent(Window* window, const std::string& path, unsigned int edgeColor, unsigned int centerColor) : GuiComponent(window), mEdgeColor(edgeColor), mCenterColor(centerColor), diff --git a/src/components/NinePatchComponent.h b/core/src/components/NinePatchComponent.h similarity index 95% rename from src/components/NinePatchComponent.h rename to core/src/components/NinePatchComponent.h index aebbcd1eb..ca99c859e 100644 --- a/src/components/NinePatchComponent.h +++ b/core/src/components/NinePatchComponent.h @@ -1,7 +1,7 @@ #pragma once -#include "../GuiComponent.h" -#include "../resources/TextureResource.h" +#include "GuiComponent.h" +#include "resources/TextureResource.h" // Display an image in a way so that edges don't get too distorted no matter the final size. Useful for UI elements like backgrounds, buttons, etc. // This is accomplished by splitting an image into 9 pieces: diff --git a/src/components/OptionListComponent.h b/core/src/components/OptionListComponent.h similarity index 97% rename from src/components/OptionListComponent.h rename to core/src/components/OptionListComponent.h index 59c46c96d..40ff34fff 100644 --- a/src/components/OptionListComponent.h +++ b/core/src/components/OptionListComponent.h @@ -1,14 +1,14 @@ #pragma once -#include "../GuiComponent.h" -#include "../resources/Font.h" -#include "../Renderer.h" -#include "../Window.h" -#include "TextComponent.h" -#include "ImageComponent.h" -#include "MenuComponent.h" +#include "GuiComponent.h" +#include "resources/Font.h" +#include "Renderer.h" +#include "Window.h" +#include "components/TextComponent.h" +#include "components/ImageComponent.h" +#include "components/MenuComponent.h" #include -#include "../Log.h" +#include "Log.h" //Used to display a list of options. //Can select one or multiple options. diff --git a/src/components/ScrollableContainer.cpp b/core/src/components/ScrollableContainer.cpp similarity index 97% rename from src/components/ScrollableContainer.cpp rename to core/src/components/ScrollableContainer.cpp index f6b41072e..f709c062f 100644 --- a/src/components/ScrollableContainer.cpp +++ b/core/src/components/ScrollableContainer.cpp @@ -1,6 +1,6 @@ -#include "ScrollableContainer.h" -#include "../Renderer.h" -#include "../Log.h" +#include "components/ScrollableContainer.h" +#include "Renderer.h" +#include "Log.h" #define AUTO_SCROLL_RESET_DELAY 10000 // ms to reset to top after we reach the bottom #define AUTO_SCROLL_DELAY 8000 // ms to wait before we start to scroll diff --git a/src/components/ScrollableContainer.h b/core/src/components/ScrollableContainer.h similarity index 95% rename from src/components/ScrollableContainer.h rename to core/src/components/ScrollableContainer.h index 486a64595..79ae94359 100644 --- a/src/components/ScrollableContainer.h +++ b/core/src/components/ScrollableContainer.h @@ -1,6 +1,6 @@ #pragma once -#include "../GuiComponent.h" +#include "GuiComponent.h" class ScrollableContainer : public GuiComponent { diff --git a/src/components/SliderComponent.cpp b/core/src/components/SliderComponent.cpp similarity index 96% rename from src/components/SliderComponent.cpp rename to core/src/components/SliderComponent.cpp index 65165cfb1..71a7fe8fa 100644 --- a/src/components/SliderComponent.cpp +++ b/core/src/components/SliderComponent.cpp @@ -1,9 +1,9 @@ -#include "SliderComponent.h" +#include "components/SliderComponent.h" #include -#include "../Renderer.h" -#include "../resources/Font.h" -#include "../Log.h" -#include "../Util.h" +#include "Renderer.h" +#include "resources/Font.h" +#include "Log.h" +#include "Util.h" #define MOVE_REPEAT_DELAY 500 #define MOVE_REPEAT_RATE 40 diff --git a/src/components/SliderComponent.h b/core/src/components/SliderComponent.h similarity index 93% rename from src/components/SliderComponent.h rename to core/src/components/SliderComponent.h index fc0d7ea68..900178c7e 100644 --- a/src/components/SliderComponent.h +++ b/core/src/components/SliderComponent.h @@ -1,7 +1,7 @@ #pragma once -#include "../GuiComponent.h" -#include "ImageComponent.h" +#include "GuiComponent.h" +#include "components/ImageComponent.h" class TextCache; class Font; diff --git a/src/components/SwitchComponent.cpp b/core/src/components/SwitchComponent.cpp similarity index 93% rename from src/components/SwitchComponent.cpp rename to core/src/components/SwitchComponent.cpp index bbf11bb09..07b425b25 100644 --- a/src/components/SwitchComponent.cpp +++ b/core/src/components/SwitchComponent.cpp @@ -1,7 +1,7 @@ #include "SwitchComponent.h" -#include "../Renderer.h" -#include "../resources/Font.h" -#include "../Window.h" +#include "Renderer.h" +#include "resources/Font.h" +#include "Window.h" SwitchComponent::SwitchComponent(Window* window, bool state) : GuiComponent(window), mImage(window), mState(state) { diff --git a/src/components/SwitchComponent.h b/core/src/components/SwitchComponent.h similarity index 89% rename from src/components/SwitchComponent.h rename to core/src/components/SwitchComponent.h index cb267f8dc..e173762a7 100644 --- a/src/components/SwitchComponent.h +++ b/core/src/components/SwitchComponent.h @@ -1,7 +1,7 @@ #pragma once -#include "../GuiComponent.h" -#include "ImageComponent.h" +#include "GuiComponent.h" +#include "components/ImageComponent.h" // A very simple "on/off" switch. // Should hopefully be switched to use images instead of text in the future. diff --git a/src/components/TextComponent.cpp b/core/src/components/TextComponent.cpp similarity index 97% rename from src/components/TextComponent.cpp rename to core/src/components/TextComponent.cpp index 63f38a4e1..06948df60 100644 --- a/src/components/TextComponent.cpp +++ b/core/src/components/TextComponent.cpp @@ -1,10 +1,10 @@ -#include "TextComponent.h" -#include "../Renderer.h" -#include "../Log.h" -#include "../Window.h" -#include "../ThemeData.h" -#include "../Util.h" -#include "../Settings.h" +#include "components/TextComponent.h" +#include "Renderer.h" +#include "Log.h" +#include "Window.h" +#include "ThemeData.h" +#include "Util.h" +#include "Settings.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT), mLineSpacing(1.5f) diff --git a/src/components/TextComponent.h b/core/src/components/TextComponent.h similarity index 96% rename from src/components/TextComponent.h rename to core/src/components/TextComponent.h index 6d288c5e6..4a4a33fcd 100644 --- a/src/components/TextComponent.h +++ b/core/src/components/TextComponent.h @@ -1,8 +1,8 @@ #ifndef _TEXTCOMPONENT_H_ #define _TEXTCOMPONENT_H_ -#include "../GuiComponent.h" -#include "../resources/Font.h" +#include "GuiComponent.h" +#include "resources/Font.h" class ThemeData; diff --git a/src/components/TextEditComponent.cpp b/core/src/components/TextEditComponent.cpp similarity index 97% rename from src/components/TextEditComponent.cpp rename to core/src/components/TextEditComponent.cpp index 02bcd6f5d..b5ceada83 100644 --- a/src/components/TextEditComponent.cpp +++ b/core/src/components/TextEditComponent.cpp @@ -1,9 +1,9 @@ -#include "TextEditComponent.h" -#include "../Log.h" -#include "../resources/Font.h" -#include "../Window.h" -#include "../Renderer.h" -#include "../Util.h" +#include "components/TextEditComponent.h" +#include "Log.h" +#include "resources/Font.h" +#include "Window.h" +#include "Renderer.h" +#include "Util.h" #define TEXT_PADDING_HORIZ 10 #define TEXT_PADDING_VERT 2 diff --git a/src/components/TextEditComponent.h b/core/src/components/TextEditComponent.h similarity index 95% rename from src/components/TextEditComponent.h rename to core/src/components/TextEditComponent.h index 14fb2a01d..56179af1a 100644 --- a/src/components/TextEditComponent.h +++ b/core/src/components/TextEditComponent.h @@ -1,7 +1,7 @@ #pragma once -#include "../GuiComponent.h" -#include "NinePatchComponent.h" +#include "GuiComponent.h" +#include "components/NinePatchComponent.h" class Font; class TextCache; diff --git a/src/guis/GuiDetectDevice.cpp b/core/src/guis/GuiDetectDevice.cpp similarity index 88% rename from src/guis/GuiDetectDevice.cpp rename to core/src/guis/GuiDetectDevice.cpp index 51578705f..95deea1ea 100644 --- a/src/guis/GuiDetectDevice.cpp +++ b/core/src/guis/GuiDetectDevice.cpp @@ -1,35 +1,28 @@ -#include "GuiDetectDevice.h" -#include "../Window.h" -#include "../Renderer.h" -#include "../resources/Font.h" -#include "GuiInputConfig.h" -#include "../components/TextComponent.h" +#include "guis/GuiDetectDevice.h" +#include "Window.h" +#include "Renderer.h" +#include "resources/Font.h" +#include "guis/GuiInputConfig.h" +#include "components/TextComponent.h" #include #include #include -#include "../views/ViewController.h" -#include "../Util.h" +#include "Util.h" #define HOLD_TIME 1000 using namespace Eigen; -GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(window), mFirstRun(firstRun), +GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun, const std::function& doneCallback) : GuiComponent(window), mFirstRun(firstRun), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)) { mHoldingConfig = NULL; mHoldTime = 0; + mDoneCallback = doneCallback; addChild(&mBackground); addChild(&mGrid); - - if(firstRun) - { - mDoneCallback = [window] { - window->getViewController()->goToStart(); - }; - } - + // title mTitle = std::make_shared(mWindow, firstRun ? "WELCOME" : "CONFIGURE INPUT", Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); diff --git a/src/guis/GuiDetectDevice.h b/core/src/guis/GuiDetectDevice.h similarity index 75% rename from src/guis/GuiDetectDevice.h rename to core/src/guis/GuiDetectDevice.h index ebc43b7b5..f03f940ac 100644 --- a/src/guis/GuiDetectDevice.h +++ b/core/src/guis/GuiDetectDevice.h @@ -1,15 +1,15 @@ #pragma once -#include "../GuiComponent.h" -#include "../components/NinePatchComponent.h" -#include "../components/ComponentGrid.h" +#include "GuiComponent.h" +#include "components/NinePatchComponent.h" +#include "components/ComponentGrid.h" class TextComponent; class GuiDetectDevice : public GuiComponent { public: - GuiDetectDevice(Window* window, bool firstRun); + GuiDetectDevice(Window* window, bool firstRun, const std::function& doneCallback); bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; diff --git a/src/guis/GuiInputConfig.cpp b/core/src/guis/GuiInputConfig.cpp similarity index 97% rename from src/guis/GuiInputConfig.cpp rename to core/src/guis/GuiInputConfig.cpp index 972b06a95..b4522709f 100644 --- a/src/guis/GuiInputConfig.cpp +++ b/core/src/guis/GuiInputConfig.cpp @@ -1,11 +1,11 @@ -#include "GuiInputConfig.h" -#include "../Window.h" -#include "../Log.h" -#include "../components/TextComponent.h" -#include "../components/ImageComponent.h" -#include "../components/MenuComponent.h" -#include "../components/ButtonComponent.h" -#include "../Util.h" +#include "guis/GuiInputConfig.h" +#include "Window.h" +#include "Log.h" +#include "components/TextComponent.h" +#include "components/ImageComponent.h" +#include "components/MenuComponent.h" +#include "components/ButtonComponent.h" +#include "Util.h" static const int inputCount = 10; static const char* inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "PageUp", "PageDown" }; diff --git a/src/guis/GuiInputConfig.h b/core/src/guis/GuiInputConfig.h similarity index 90% rename from src/guis/GuiInputConfig.h rename to core/src/guis/GuiInputConfig.h index 490d69f47..20af11df8 100644 --- a/src/guis/GuiInputConfig.h +++ b/core/src/guis/GuiInputConfig.h @@ -1,9 +1,9 @@ #pragma once -#include "../GuiComponent.h" -#include "../components/NinePatchComponent.h" -#include "../components/ComponentGrid.h" -#include "../components/ComponentList.h" +#include "GuiComponent.h" +#include "components/NinePatchComponent.h" +#include "components/ComponentGrid.h" +#include "components/ComponentList.h" class TextComponent; diff --git a/src/guis/GuiMsgBox.cpp b/core/src/guis/GuiMsgBox.cpp similarity index 93% rename from src/guis/GuiMsgBox.cpp rename to core/src/guis/GuiMsgBox.cpp index abf1c430b..73f4e07a6 100644 --- a/src/guis/GuiMsgBox.cpp +++ b/core/src/guis/GuiMsgBox.cpp @@ -1,10 +1,10 @@ -#include "GuiMsgBox.h" -#include "../Renderer.h" -#include "../components/TextComponent.h" -#include "../components/ButtonComponent.h" -#include "../components/MenuComponent.h" // for makeButtonGrid -#include "../Util.h" -#include "../Log.h" +#include "guis/GuiMsgBox.h" +#include "Renderer.h" +#include "components/TextComponent.h" +#include "components/ButtonComponent.h" +#include "components/MenuComponent.h" // for makeButtonGrid +#include "Util.h" +#include "Log.h" #define HORIZONTAL_PADDING_PX 20 diff --git a/src/guis/GuiMsgBox.h b/core/src/guis/GuiMsgBox.h similarity index 88% rename from src/guis/GuiMsgBox.h rename to core/src/guis/GuiMsgBox.h index d24c23459..6da246916 100644 --- a/src/guis/GuiMsgBox.h +++ b/core/src/guis/GuiMsgBox.h @@ -1,8 +1,8 @@ #pragma once -#include "../GuiComponent.h" -#include "../components/NinePatchComponent.h" -#include "../components/ComponentGrid.h" +#include "GuiComponent.h" +#include "components/NinePatchComponent.h" +#include "components/ComponentGrid.h" class TextComponent; class ButtonComponent; diff --git a/src/guis/GuiTextEditPopup.cpp b/core/src/guis/GuiTextEditPopup.cpp similarity index 97% rename from src/guis/GuiTextEditPopup.cpp rename to core/src/guis/GuiTextEditPopup.cpp index 07bb9b2f7..dcb4a47f7 100644 --- a/src/guis/GuiTextEditPopup.cpp +++ b/core/src/guis/GuiTextEditPopup.cpp @@ -1,5 +1,5 @@ -#include "GuiTextEditPopup.h" -#include "../components/MenuComponent.h" +#include "guis/GuiTextEditPopup.h" +#include "components/MenuComponent.h" using namespace Eigen; diff --git a/src/guis/GuiTextEditPopup.h b/core/src/guis/GuiTextEditPopup.h similarity index 70% rename from src/guis/GuiTextEditPopup.h rename to core/src/guis/GuiTextEditPopup.h index aaa8a596d..9cba8df3d 100644 --- a/src/guis/GuiTextEditPopup.h +++ b/core/src/guis/GuiTextEditPopup.h @@ -1,10 +1,10 @@ -#include "../GuiComponent.h" +#include "GuiComponent.h" -#include "../components/NinePatchComponent.h" -#include "../components/ButtonComponent.h" -#include "../components/ComponentGrid.h" -#include "../components/TextEditComponent.h" -#include "../components/TextComponent.h" +#include "components/NinePatchComponent.h" +#include "components/ButtonComponent.h" +#include "components/ComponentGrid.h" +#include "components/TextEditComponent.h" +#include "components/TextComponent.h" class GuiTextEditPopup : public GuiComponent { diff --git a/src/platform.cpp b/core/src/platform.cpp similarity index 100% rename from src/platform.cpp rename to core/src/platform.cpp diff --git a/src/platform.h b/core/src/platform.h similarity index 100% rename from src/platform.h rename to core/src/platform.h diff --git a/src/resources/Font.cpp b/core/src/resources/Font.cpp similarity index 99% rename from src/resources/Font.cpp rename to core/src/resources/Font.cpp index 0bba66bc3..170701dd1 100644 --- a/src/resources/Font.cpp +++ b/core/src/resources/Font.cpp @@ -1,11 +1,11 @@ -#include "Font.h" +#include "resources/Font.h" #include #include #include -#include "../Renderer.h" #include -#include "../Log.h" -#include "../Util.h" +#include "Renderer.h" +#include "Log.h" +#include "Util.h" FT_Library Font::sLibrary = NULL; diff --git a/src/resources/Font.h b/core/src/resources/Font.h similarity index 98% rename from src/resources/Font.h rename to core/src/resources/Font.h index 070322f5d..70c889c96 100644 --- a/src/resources/Font.h +++ b/core/src/resources/Font.h @@ -1,13 +1,13 @@ #pragma once #include -#include "../platform.h" +#include "platform.h" #include GLHEADER #include #include FT_FREETYPE_H #include -#include "ResourceManager.h" -#include "../ThemeData.h" +#include "resources/ResourceManager.h" +#include "ThemeData.h" class TextCache; diff --git a/src/resources/ResourceManager.cpp b/core/src/resources/ResourceManager.cpp similarity index 97% rename from src/resources/ResourceManager.cpp rename to core/src/resources/ResourceManager.cpp index 5f2021607..b495c860f 100644 --- a/src/resources/ResourceManager.cpp +++ b/core/src/resources/ResourceManager.cpp @@ -1,6 +1,6 @@ #include "ResourceManager.h" -#include "../Log.h" -#include "../../data/Resources.h" +#include "Log.h" +#include "../data/Resources.h" #include #include diff --git a/src/resources/ResourceManager.h b/core/src/resources/ResourceManager.h similarity index 100% rename from src/resources/ResourceManager.h rename to core/src/resources/ResourceManager.h diff --git a/src/resources/SVGResource.cpp b/core/src/resources/SVGResource.cpp similarity index 94% rename from src/resources/SVGResource.cpp rename to core/src/resources/SVGResource.cpp index 2f88e170f..1a4ea16fc 100644 --- a/src/resources/SVGResource.cpp +++ b/core/src/resources/SVGResource.cpp @@ -1,9 +1,9 @@ #include "SVGResource.h" -#include "../nanosvg/nanosvg.h" -#include "../nanosvg/nanosvgrast.h" -#include "../Log.h" -#include "../Util.h" -#include "../ImageIO.h" +#include "nanosvg/nanosvg.h" +#include "nanosvg/nanosvgrast.h" +#include "Log.h" +#include "Util.h" +#include "ImageIO.h" #define DPI 96 diff --git a/src/resources/SVGResource.h b/core/src/resources/SVGResource.h similarity index 93% rename from src/resources/SVGResource.h rename to core/src/resources/SVGResource.h index c68ae4879..87479c0cf 100644 --- a/src/resources/SVGResource.h +++ b/core/src/resources/SVGResource.h @@ -1,6 +1,6 @@ #pragma once -#include "TextureResource.h" +#include "resources/TextureResource.h" struct NSVGimage; diff --git a/src/resources/TextureResource.cpp b/core/src/resources/TextureResource.cpp similarity index 96% rename from src/resources/TextureResource.cpp rename to core/src/resources/TextureResource.cpp index 120f01d19..e6657dcc2 100644 --- a/src/resources/TextureResource.cpp +++ b/core/src/resources/TextureResource.cpp @@ -1,11 +1,11 @@ -#include "TextureResource.h" -#include "../Log.h" -#include "../platform.h" +#include "resources/TextureResource.h" +#include "Log.h" +#include "platform.h" #include GLHEADER -#include "../ImageIO.h" -#include "../Renderer.h" -#include "../Util.h" -#include "SVGResource.h" +#include "ImageIO.h" +#include "Renderer.h" +#include "Util.h" +#include "resources/SVGResource.h" std::map< TextureResource::TextureKeyType, std::weak_ptr > TextureResource::sTextureMap; std::list< std::weak_ptr > TextureResource::sTextureList; diff --git a/src/resources/TextureResource.h b/core/src/resources/TextureResource.h similarity index 96% rename from src/resources/TextureResource.h rename to core/src/resources/TextureResource.h index 578fb7913..811e71de3 100644 --- a/src/resources/TextureResource.h +++ b/core/src/resources/TextureResource.h @@ -1,10 +1,10 @@ #pragma once -#include "ResourceManager.h" +#include "resources/ResourceManager.h" #include #include -#include "../platform.h" +#include "platform.h" #include GLHEADER // An OpenGL texture. diff --git a/es/CMakeLists.txt b/es/CMakeLists.txt new file mode 100644 index 000000000..3a965a1ce --- /dev/null +++ b/es/CMakeLists.txt @@ -0,0 +1,149 @@ +project("es-app") + +set(ES_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/src/EmulationStation.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/ScraperCmdLine.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.h + + # GuiComponents + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScraperSearchComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextListComponent.h + + # Guis + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiFastSelect.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.h + + # Scrapers + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.h + + # Views + ${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/IGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h + + # Animations + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/LaunchAnimation.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/MoveCameraAnimation.h +) + +set(ES_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/MameNameMap.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ScraperCmdLine.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.cpp + + # GuiComponents + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScraperSearchComponent.cpp + + # Guis + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiFastSelect.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.cpp + + # Scrapers + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.cpp + + # Views + ${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/IGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp +) + +#------------------------------------------------------------------------------- +# define OS specific sources and headers +if(MSVC) + LIST(APPEND ES_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/src/EmulationStation.rc + ) +endif() + +#------------------------------------------------------------------------------- +# define target +include_directories(${COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src) +add_executable(emulationstation ${ES_SOURCES} ${ES_HEADERS}) +target_link_libraries(emulationstation ${COMMON_LIBRARIES} es-core) + +# special properties for Windows builds +if(MSVC) + #show console in debug builds, but not in proper release builds + #Note that up to CMake 2.8.10 this feature is broken: http://public.kitware.com/Bug/view.php?id=12566 + set_target_properties(emulationstation PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE") + set_target_properties(emulationstation PROPERTIES COMPILE_DEFINITIONS_DEBUG "_CONSOLE") + set_target_properties(emulationstation PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE") + set_target_properties(emulationstation PROPERTIES COMPILE_DEFINITIONS_RELWITHDEBINFO "_CONSOLE") + set_target_properties(emulationstation PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS") + set_target_properties(emulationstation PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS") +endif() + + +#------------------------------------------------------------------------------- +# set up CPack install stuff so `make install` does something useful + +install(TARGETS emulationstation + RUNTIME + DESTINATION bin) + +INCLUDE(InstallRequiredSystemLibraries) + +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A flexible graphical emulator front-end") +SET(CPACK_PACKAGE_DESCRIPTION "EmulationStation is a flexible, graphical front-end designed for keyboardless navigation of your multi-platform retro game collection.") + +SET(CPACK_RESOURCE_FILE LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md") +SET(CPACK_RESOURCE_FILE README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") + +SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Alec Lofquist ") +SET(CPACK_DEBIAN_PACKAGE_SECTION "misc") +SET(CPACK_DEBIAN_PACKAGE_PRIORITY "extra") +SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libsdl2-2.0-0, libboost-system1.54.0, libboost-filesystem1.54.0, libfreeimage3, libfreetype6, libcurl3, libasound2") +SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS "debhelper (>= 8.0.0), cmake, g++ (>= 4.8), libsdl2-dev, libboost-system-dev, libboost-filesystem-dev, libboost-date-time-dev, libfreeimage-dev, libfreetype6-dev, libeigen3-dev, libcurl4-openssl-dev, libasound2-dev, libgl1-mesa-dev") + +SET(CPACK_PACKAGE_VENDOR "emulationstation.org") +SET(CPACK_PACKAGE_VERSION "2.0.0~rc1") +SET(CPACK_PACKAGE_VERSION_MAJOR "2") +SET(CPACK_PACKAGE_VERSION_MINOR "0") +SET(CPACK_PACKAGE_VERSION_PATCH "0") +SET(CPACK_PACKAGE_INSTALL_DIRECTORY "emulationstation_${CMAKE_PACKAGE_VERSION}") +SET(CPACK_PACKAGE_EXECUTABLES "emulationstation" "emulationstation") + +SET(CPACK_GENERATOR "TGZ;DEB") + +INCLUDE(CPack) diff --git a/es/src/EmulationStation.aps b/es/src/EmulationStation.aps new file mode 100644 index 0000000000000000000000000000000000000000..2fce32bb83f84e2507417684dedfd921919df407 GIT binary patch literal 356820 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 QS;LR{-IOQRMbGnp0TyVUy#N3J literal 0 HcmV?d00001 diff --git a/src/EmulationStation.h b/es/src/EmulationStation.h similarity index 100% rename from src/EmulationStation.h rename to es/src/EmulationStation.h diff --git a/src/EmulationStation.rc b/es/src/EmulationStation.rc similarity index 100% rename from src/EmulationStation.rc rename to es/src/EmulationStation.rc diff --git a/src/FileData.cpp b/es/src/FileData.cpp similarity index 100% rename from src/FileData.cpp rename to es/src/FileData.cpp diff --git a/src/FileData.h b/es/src/FileData.h similarity index 100% rename from src/FileData.h rename to es/src/FileData.h diff --git a/src/FileSorts.cpp b/es/src/FileSorts.cpp similarity index 100% rename from src/FileSorts.cpp rename to es/src/FileSorts.cpp diff --git a/src/FileSorts.h b/es/src/FileSorts.h similarity index 100% rename from src/FileSorts.h rename to es/src/FileSorts.h diff --git a/src/Gamelist.cpp b/es/src/Gamelist.cpp similarity index 100% rename from src/Gamelist.cpp rename to es/src/Gamelist.cpp diff --git a/src/Gamelist.h b/es/src/Gamelist.h similarity index 100% rename from src/Gamelist.h rename to es/src/Gamelist.h diff --git a/src/MameNameMap.cpp b/es/src/MameNameMap.cpp similarity index 100% rename from src/MameNameMap.cpp rename to es/src/MameNameMap.cpp diff --git a/src/MetaData.cpp b/es/src/MetaData.cpp similarity index 92% rename from src/MetaData.cpp rename to es/src/MetaData.cpp index de111f9e4..2d5340bd2 100644 --- a/src/MetaData.cpp +++ b/es/src/MetaData.cpp @@ -133,14 +133,3 @@ boost::posix_time::ptime MetaDataList::getTime(const std::string& key) const { return string_to_ptime(get(key), "%Y%m%dT%H%M%S%F%q"); } - -//util function -boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt) -{ - std::istringstream ss(str); - ss.imbue(std::locale(std::locale::classic(), new boost::posix_time::time_input_facet(fmt))); //std::locale handles deleting the facet - boost::posix_time::ptime time; - ss >> time; - - return time; -} diff --git a/src/MetaData.h b/es/src/MetaData.h similarity index 92% rename from src/MetaData.h rename to es/src/MetaData.h index 9cecdda2a..1143d9204 100644 --- a/src/MetaData.h +++ b/es/src/MetaData.h @@ -1,6 +1,6 @@ #pragma once -#include "pugiXML/pugixml.hpp" +#include "pugixml/pugixml.hpp" #include #include #include "GuiComponent.h" @@ -32,8 +32,6 @@ struct MetaDataDecl std::string displayPrompt; // phrase displayed in editors when prompted to enter value (currently only for strings) }; -boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt = "%Y%m%dT%H%M%S%F%q"); - enum MetaDataListType { GAME_METADATA, diff --git a/src/PlatformId.cpp b/es/src/PlatformId.cpp similarity index 100% rename from src/PlatformId.cpp rename to es/src/PlatformId.cpp diff --git a/src/PlatformId.h b/es/src/PlatformId.h similarity index 100% rename from src/PlatformId.h rename to es/src/PlatformId.h diff --git a/src/ScraperCmdLine.cpp b/es/src/ScraperCmdLine.cpp similarity index 100% rename from src/ScraperCmdLine.cpp rename to es/src/ScraperCmdLine.cpp diff --git a/src/ScraperCmdLine.h b/es/src/ScraperCmdLine.h similarity index 100% rename from src/ScraperCmdLine.h rename to es/src/ScraperCmdLine.h diff --git a/src/SystemData.cpp b/es/src/SystemData.cpp similarity index 100% rename from src/SystemData.cpp rename to es/src/SystemData.cpp diff --git a/src/SystemData.h b/es/src/SystemData.h similarity index 100% rename from src/SystemData.h rename to es/src/SystemData.h diff --git a/src/VolumeControl.cpp b/es/src/VolumeControl.cpp similarity index 100% rename from src/VolumeControl.cpp rename to es/src/VolumeControl.cpp diff --git a/src/VolumeControl.h b/es/src/VolumeControl.h similarity index 100% rename from src/VolumeControl.h rename to es/src/VolumeControl.h diff --git a/src/animations/LaunchAnimation.h b/es/src/animations/LaunchAnimation.h similarity index 97% rename from src/animations/LaunchAnimation.h rename to es/src/animations/LaunchAnimation.h index 11dc29ce6..cfd9f06d0 100644 --- a/src/animations/LaunchAnimation.h +++ b/es/src/animations/LaunchAnimation.h @@ -1,7 +1,7 @@ #pragma once -#include "Animation.h" -#include "../Log.h" +#include "animations/Animation.h" +#include "Log.h" // let's look at the game launch effect: // -move camera to center on point P (interpolation method: linear) diff --git a/src/animations/MoveCameraAnimation.h b/es/src/animations/MoveCameraAnimation.h similarity index 93% rename from src/animations/MoveCameraAnimation.h rename to es/src/animations/MoveCameraAnimation.h index 9f3675980..1f1689bb2 100644 --- a/src/animations/MoveCameraAnimation.h +++ b/es/src/animations/MoveCameraAnimation.h @@ -1,6 +1,6 @@ #pragma once -#include "Animation.h" +#include "animations/Animation.h" class MoveCameraAnimation : public Animation { diff --git a/src/components/AsyncReqComponent.cpp b/es/src/components/AsyncReqComponent.cpp similarity index 95% rename from src/components/AsyncReqComponent.cpp rename to es/src/components/AsyncReqComponent.cpp index ea54c0e03..a38b58880 100644 --- a/src/components/AsyncReqComponent.cpp +++ b/es/src/components/AsyncReqComponent.cpp @@ -1,5 +1,5 @@ -#include "AsyncReqComponent.h" -#include "../Renderer.h" +#include "components/AsyncReqComponent.h" +#include "Renderer.h" AsyncReqComponent::AsyncReqComponent(Window* window, std::shared_ptr req, std::function)> onSuccess, std::function onCancel) : GuiComponent(window), diff --git a/src/components/AsyncReqComponent.h b/es/src/components/AsyncReqComponent.h similarity index 96% rename from src/components/AsyncReqComponent.h rename to es/src/components/AsyncReqComponent.h index 3c10d12cb..11478fe09 100644 --- a/src/components/AsyncReqComponent.h +++ b/es/src/components/AsyncReqComponent.h @@ -1,7 +1,7 @@ #pragma once -#include "../GuiComponent.h" -#include "../HttpReq.h" +#include "GuiComponent.h" +#include "HttpReq.h" #include #include diff --git a/src/components/RatingComponent.cpp b/es/src/components/RatingComponent.cpp similarity index 96% rename from src/components/RatingComponent.cpp rename to es/src/components/RatingComponent.cpp index daa00e863..aa09e7044 100644 --- a/src/components/RatingComponent.cpp +++ b/es/src/components/RatingComponent.cpp @@ -1,8 +1,8 @@ -#include "RatingComponent.h" -#include "../Renderer.h" -#include "../Window.h" -#include "../Util.h" -#include "../resources/SVGResource.h" +#include "components/RatingComponent.h" +#include "Renderer.h" +#include "Window.h" +#include "Util.h" +#include "resources/SVGResource.h" RatingComponent::RatingComponent(Window* window) : GuiComponent(window) { diff --git a/src/components/RatingComponent.h b/es/src/components/RatingComponent.h similarity index 94% rename from src/components/RatingComponent.h rename to es/src/components/RatingComponent.h index bd587636b..a275c2701 100644 --- a/src/components/RatingComponent.h +++ b/es/src/components/RatingComponent.h @@ -1,7 +1,7 @@ #pragma once -#include "../GuiComponent.h" -#include "../resources/TextureResource.h" +#include "GuiComponent.h" +#include "resources/TextureResource.h" #define NUM_RATING_STARS 5 diff --git a/src/components/ScraperSearchComponent.cpp b/es/src/components/ScraperSearchComponent.cpp similarity index 96% rename from src/components/ScraperSearchComponent.cpp rename to es/src/components/ScraperSearchComponent.cpp index 3ba5c8625..9cfda3de6 100644 --- a/src/components/ScraperSearchComponent.cpp +++ b/es/src/components/ScraperSearchComponent.cpp @@ -1,18 +1,18 @@ -#include "ScraperSearchComponent.h" +#include "components/ScraperSearchComponent.h" -#include "../guis/GuiMsgBox.h" -#include "TextComponent.h" -#include "ScrollableContainer.h" -#include "ImageComponent.h" -#include "RatingComponent.h" -#include "DateTimeComponent.h" -#include "AnimatedImageComponent.h" -#include "ComponentList.h" -#include "../HttpReq.h" -#include "../Settings.h" -#include "../Log.h" -#include "../Util.h" -#include "../guis/GuiTextEditPopup.h" +#include "guis/GuiMsgBox.h" +#include "components/TextComponent.h" +#include "components/ScrollableContainer.h" +#include "components/ImageComponent.h" +#include "components/RatingComponent.h" +#include "components/DateTimeComponent.h" +#include "components/AnimatedImageComponent.h" +#include "components/ComponentList.h" +#include "HttpReq.h" +#include "Settings.h" +#include "Log.h" +#include "Util.h" +#include "guis/GuiTextEditPopup.h" ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) : GuiComponent(window), mGrid(window, Eigen::Vector2i(4, 3)), mBusyAnim(window), diff --git a/src/components/ScraperSearchComponent.h b/es/src/components/ScraperSearchComponent.h similarity index 94% rename from src/components/ScraperSearchComponent.h rename to es/src/components/ScraperSearchComponent.h index 80e339b82..f4fb43f51 100644 --- a/src/components/ScraperSearchComponent.h +++ b/es/src/components/ScraperSearchComponent.h @@ -1,13 +1,11 @@ #pragma once -#include "../GuiComponent.h" -#include "../scrapers/Scraper.h" -#include "../components/ComponentGrid.h" -#include "../components/BusyComponent.h" +#include "GuiComponent.h" +#include "scrapers/Scraper.h" +#include "components/ComponentGrid.h" +#include "components/BusyComponent.h" #include -#define MAX_SCRAPER_RESULTS 7 - class ComponentList; class ImageComponent; class RatingComponent; diff --git a/src/components/TextListComponent.h b/es/src/components/TextListComponent.h similarity index 98% rename from src/components/TextListComponent.h rename to es/src/components/TextListComponent.h index 478668bda..8067cd739 100644 --- a/src/components/TextListComponent.h +++ b/es/src/components/TextListComponent.h @@ -1,16 +1,16 @@ #pragma once -#include "IList.h" -#include "../Renderer.h" -#include "../resources/Font.h" -#include "../InputManager.h" +#include "components/IList.h" +#include "Renderer.h" +#include "resources/Font.h" +#include "InputManager.h" +#include "Sound.h" +#include "Log.h" +#include "ThemeData.h" +#include "Util.h" #include #include #include -#include "../Sound.h" -#include "../Log.h" -#include "../ThemeData.h" -#include "../Util.h" #include struct TextListData diff --git a/src/guis/GuiFastSelect.cpp b/es/src/guis/GuiFastSelect.cpp similarity index 97% rename from src/guis/GuiFastSelect.cpp rename to es/src/guis/GuiFastSelect.cpp index 50a3f1808..31db35041 100644 --- a/src/guis/GuiFastSelect.cpp +++ b/es/src/guis/GuiFastSelect.cpp @@ -1,7 +1,7 @@ -#include "GuiFastSelect.h" -#include "../ThemeData.h" -#include "../FileSorts.h" -#include "../SystemData.h" +#include "guis/GuiFastSelect.h" +#include "ThemeData.h" +#include "FileSorts.h" +#include "SystemData.h" static const std::string LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; diff --git a/src/guis/GuiFastSelect.h b/es/src/guis/GuiFastSelect.h similarity index 76% rename from src/guis/GuiFastSelect.h rename to es/src/guis/GuiFastSelect.h index 9c23b28bb..012c06de6 100644 --- a/src/guis/GuiFastSelect.h +++ b/es/src/guis/GuiFastSelect.h @@ -1,10 +1,10 @@ #pragma once -#include "../GuiComponent.h" -#include "../views/gamelist/IGameListView.h" +#include "GuiComponent.h" +#include "views/gamelist/IGameListView.h" -#include "../components/NinePatchComponent.h" -#include "../components/TextComponent.h" +#include "components/NinePatchComponent.h" +#include "components/TextComponent.h" class GuiFastSelect : public GuiComponent { diff --git a/src/guis/GuiGameScraper.cpp b/es/src/guis/GuiGameScraper.cpp similarity index 92% rename from src/guis/GuiGameScraper.cpp rename to es/src/guis/GuiGameScraper.cpp index 3eb336c48..a54304c77 100644 --- a/src/guis/GuiGameScraper.cpp +++ b/es/src/guis/GuiGameScraper.cpp @@ -1,13 +1,12 @@ -#include "GuiGameScraper.h" -#include "../Renderer.h" -#include "../Log.h" -#include "../scrapers/Scraper.h" -#include "../Settings.h" - -#include "../components/TextComponent.h" -#include "../components/ButtonComponent.h" -#include "../components/MenuComponent.h" -#include "GuiTextEditPopup.h" +#include "guis/GuiGameScraper.h" +#include "guis/GuiTextEditPopup.h" +#include "components/TextComponent.h" +#include "components/ButtonComponent.h" +#include "components/MenuComponent.h" +#include "scrapers/Scraper.h" +#include "Renderer.h" +#include "Log.h" +#include "Settings.h" GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc) : GuiComponent(window), mGrid(window, Eigen::Vector2i(1, 7)), diff --git a/src/guis/GuiGameScraper.h b/es/src/guis/GuiGameScraper.h similarity index 85% rename from src/guis/GuiGameScraper.h rename to es/src/guis/GuiGameScraper.h index d35694cd9..354aba7e1 100644 --- a/src/guis/GuiGameScraper.h +++ b/es/src/guis/GuiGameScraper.h @@ -1,8 +1,8 @@ #pragma once -#include "../GuiComponent.h" -#include "../components/ScraperSearchComponent.h" -#include "../components/NinePatchComponent.h" +#include "GuiComponent.h" +#include "components/ScraperSearchComponent.h" +#include "components/NinePatchComponent.h" class GuiGameScraper : public GuiComponent { diff --git a/src/guis/GuiGamelistOptions.cpp b/es/src/guis/GuiGamelistOptions.cpp similarity index 94% rename from src/guis/GuiGamelistOptions.cpp rename to es/src/guis/GuiGamelistOptions.cpp index 1b18d0c49..6801fa3a9 100644 --- a/src/guis/GuiGamelistOptions.cpp +++ b/es/src/guis/GuiGamelistOptions.cpp @@ -1,7 +1,7 @@ #include "GuiGamelistOptions.h" #include "GuiMetaDataEd.h" -#include "../views/gamelist/IGameListView.h" -#include "../views/ViewController.h" +#include "views/gamelist/IGameListView.h" +#include "views/ViewController.h" GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : GuiComponent(window), mSystem(system), @@ -77,5 +77,5 @@ std::vector GuiGamelistOptions::getHelpPrompts() IGameListView* GuiGamelistOptions::getGamelist() { - return mWindow->getViewController()->getGameListView(mSystem).get(); + return ViewController::get()->getGameListView(mSystem).get(); } diff --git a/src/guis/GuiGamelistOptions.h b/es/src/guis/GuiGamelistOptions.h similarity index 78% rename from src/guis/GuiGamelistOptions.h rename to es/src/guis/GuiGamelistOptions.h index fe9b477ba..9a49aacd0 100644 --- a/src/guis/GuiGamelistOptions.h +++ b/es/src/guis/GuiGamelistOptions.h @@ -1,8 +1,7 @@ -#include "../GuiComponent.h" -#include "../components/MenuComponent.h" -#include "../components/OptionListComponent.h" - -#include "../FileSorts.h" +#include "GuiComponent.h" +#include "components/MenuComponent.h" +#include "components/OptionListComponent.h" +#include "FileSorts.h" class IGameListView; diff --git a/src/guis/GuiMenu.cpp b/es/src/guis/GuiMenu.cpp similarity index 91% rename from src/guis/GuiMenu.cpp rename to es/src/guis/GuiMenu.cpp index 0a27abbab..2adca0d1b 100644 --- a/src/guis/GuiMenu.cpp +++ b/es/src/guis/GuiMenu.cpp @@ -1,24 +1,24 @@ -#include "../EmulationStation.h" -#include "GuiMenu.h" -#include "../Window.h" -#include "../Sound.h" -#include "../Log.h" -#include "../Settings.h" -#include "GuiMsgBox.h" -#include "GuiSettings.h" -#include "GuiScraperStart.h" -#include "GuiDetectDevice.h" -#include "../views/ViewController.h" +#include "EmulationStation.h" +#include "guis/GuiMenu.h" +#include "Window.h" +#include "Sound.h" +#include "Log.h" +#include "Settings.h" +#include "guis/GuiMsgBox.h" +#include "guis/GuiSettings.h" +#include "guis/GuiScraperStart.h" +#include "guis/GuiDetectDevice.h" +#include "views/ViewController.h" -#include "../components/ButtonComponent.h" -#include "../components/SwitchComponent.h" -#include "../components/SliderComponent.h" -#include "../components/TextComponent.h" -#include "../components/OptionListComponent.h" -#include "../components/MenuComponent.h" -#include "../VolumeControl.h" -#include "../scrapers/GamesDBScraper.h" -#include "../scrapers/TheArchiveScraper.h" +#include "components/ButtonComponent.h" +#include "components/SwitchComponent.h" +#include "components/SliderComponent.h" +#include "components/TextComponent.h" +#include "components/OptionListComponent.h" +#include "components/MenuComponent.h" +#include "VolumeControl.h" +#include "scrapers/GamesDBScraper.h" +#include "scrapers/TheArchiveScraper.h" GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU"), mVersion(window) { @@ -158,7 +158,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN Settings::getInstance()->setString("ThemeSet", theme_set->getSelected()); if(needReload) - window->getViewController()->reloadAll(); // TODO - replace this with some sort of signal-based implementation + ViewController::get()->reloadAll(); // TODO - replace this with some sort of signal-based implementation }); } @@ -167,7 +167,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN addEntry("CONFIGURE INPUT", 0x777777FF, true, [this] { - mWindow->pushGui(new GuiDetectDevice(mWindow, false)); + mWindow->pushGui(new GuiDetectDevice(mWindow, false, nullptr)); }); addEntry("QUIT", 0x777777FF, true, diff --git a/src/guis/GuiMenu.h b/es/src/guis/GuiMenu.h similarity index 85% rename from src/guis/GuiMenu.h rename to es/src/guis/GuiMenu.h index bf686897e..eff9ebd3f 100644 --- a/src/guis/GuiMenu.h +++ b/es/src/guis/GuiMenu.h @@ -1,7 +1,7 @@ #pragma once -#include "../GuiComponent.h" -#include "../components/MenuComponent.h" +#include "GuiComponent.h" +#include "components/MenuComponent.h" #include class GuiMenu : public GuiComponent diff --git a/src/guis/GuiMetaDataEd.cpp b/es/src/guis/GuiMetaDataEd.cpp similarity index 94% rename from src/guis/GuiMetaDataEd.cpp rename to es/src/guis/GuiMetaDataEd.cpp index 990e81b7d..11367c2ad 100644 --- a/src/guis/GuiMetaDataEd.cpp +++ b/es/src/guis/GuiMetaDataEd.cpp @@ -1,17 +1,17 @@ -#include "GuiMetaDataEd.h" -#include "../Renderer.h" -#include "../Log.h" -#include "../components/AsyncReqComponent.h" -#include "../Settings.h" -#include "../views/ViewController.h" -#include "GuiGameScraper.h" -#include "GuiMsgBox.h" +#include "guis/GuiMetaDataEd.h" +#include "Renderer.h" +#include "Log.h" +#include "components/AsyncReqComponent.h" +#include "Settings.h" +#include "views/ViewController.h" +#include "guis/GuiGameScraper.h" +#include "guis/GuiMsgBox.h" #include -#include "../components/TextEditComponent.h" -#include "../components/DateTimeComponent.h" -#include "../components/RatingComponent.h" -#include "GuiTextEditPopup.h" +#include "components/TextEditComponent.h" +#include "components/DateTimeComponent.h" +#include "components/RatingComponent.h" +#include "guis/GuiTextEditPopup.h" using namespace Eigen; @@ -221,7 +221,7 @@ void GuiMetaDataEd::close(bool closeAllWindows) }else{ Window* window = mWindow; closeFunc = [window, this] { - while(window->peekGui() != window->getViewController()) + while(window->peekGui() != ViewController::get()) delete window->peekGui(); }; } diff --git a/src/guis/GuiMetaDataEd.h b/es/src/guis/GuiMetaDataEd.h similarity index 89% rename from src/guis/GuiMetaDataEd.h rename to es/src/guis/GuiMetaDataEd.h index be9727a4c..923696428 100644 --- a/src/guis/GuiMetaDataEd.h +++ b/es/src/guis/GuiMetaDataEd.h @@ -1,9 +1,9 @@ #pragma once -#include "../GuiComponent.h" -#include "../components/MenuComponent.h" -#include "../MetaData.h" -#include "../scrapers/Scraper.h" +#include "GuiComponent.h" +#include "components/MenuComponent.h" +#include "MetaData.h" +#include "scrapers/Scraper.h" #include diff --git a/src/guis/GuiScraperMulti.cpp b/es/src/guis/GuiScraperMulti.cpp similarity index 91% rename from src/guis/GuiScraperMulti.cpp rename to es/src/guis/GuiScraperMulti.cpp index 20ef3a146..afbfe0a3d 100644 --- a/src/guis/GuiScraperMulti.cpp +++ b/es/src/guis/GuiScraperMulti.cpp @@ -1,14 +1,14 @@ -#include "GuiScraperMulti.h" -#include "../Renderer.h" -#include "../Log.h" -#include "../views/ViewController.h" -#include "../Gamelist.h" +#include "guis/GuiScraperMulti.h" +#include "Renderer.h" +#include "Log.h" +#include "views/ViewController.h" +#include "Gamelist.h" -#include "../components/TextComponent.h" -#include "../components/ButtonComponent.h" -#include "../components/ScraperSearchComponent.h" -#include "../components/MenuComponent.h" // for makeButtonGrid -#include "GuiMsgBox.h" +#include "components/TextComponent.h" +#include "components/ButtonComponent.h" +#include "components/ScraperSearchComponent.h" +#include "components/MenuComponent.h" // for makeButtonGrid +#include "guis/GuiMsgBox.h" using namespace Eigen; @@ -73,7 +73,7 @@ GuiScraperMulti::~GuiScraperMulti() { // view type probably changed (basic -> detailed) for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) - mWindow->getViewController()->reloadGameListView(*it, false); + ViewController::get()->reloadGameListView(*it, false); } void GuiScraperMulti::onSizeChanged() diff --git a/src/guis/GuiScraperMulti.h b/es/src/guis/GuiScraperMulti.h similarity index 86% rename from src/guis/GuiScraperMulti.h rename to es/src/guis/GuiScraperMulti.h index 37a0b02f5..ff18c12c0 100644 --- a/src/guis/GuiScraperMulti.h +++ b/es/src/guis/GuiScraperMulti.h @@ -1,9 +1,9 @@ #pragma once -#include "../GuiComponent.h" -#include "../components/NinePatchComponent.h" -#include "../components/ComponentGrid.h" -#include "../scrapers/Scraper.h" +#include "GuiComponent.h" +#include "components/NinePatchComponent.h" +#include "components/ComponentGrid.h" +#include "scrapers/Scraper.h" #include diff --git a/src/guis/GuiScraperStart.cpp b/es/src/guis/GuiScraperStart.cpp similarity index 91% rename from src/guis/GuiScraperStart.cpp rename to es/src/guis/GuiScraperStart.cpp index 915a5c707..7d1ebab43 100644 --- a/src/guis/GuiScraperStart.cpp +++ b/es/src/guis/GuiScraperStart.cpp @@ -1,11 +1,11 @@ -#include "GuiScraperStart.h" -#include "GuiScraperMulti.h" -#include "GuiMsgBox.h" -#include "../views/ViewController.h" +#include "guis/GuiScraperStart.h" +#include "guis/GuiScraperMulti.h" +#include "guis/GuiMsgBox.h" +#include "views/ViewController.h" -#include "../components/TextComponent.h" -#include "../components/OptionListComponent.h" -#include "../components/SwitchComponent.h" +#include "components/TextComponent.h" +#include "components/OptionListComponent.h" +#include "components/SwitchComponent.h" GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mMenu(window, "SCRAPE NOW") @@ -110,7 +110,7 @@ bool GuiScraperStart::input(InputConfig* config, Input input) { // close everything Window* window = mWindow; - while(window->peekGui() && window->peekGui() != window->getViewController()) + while(window->peekGui() && window->peekGui() != ViewController::get()) delete window->peekGui(); } diff --git a/src/guis/GuiScraperStart.h b/es/src/guis/GuiScraperStart.h similarity index 88% rename from src/guis/GuiScraperStart.h rename to es/src/guis/GuiScraperStart.h index d6d854f8a..0d453ca0f 100644 --- a/src/guis/GuiScraperStart.h +++ b/es/src/guis/GuiScraperStart.h @@ -1,9 +1,9 @@ #pragma once -#include "../GuiComponent.h" -#include "../SystemData.h" -#include "../scrapers/Scraper.h" -#include "../components/MenuComponent.h" +#include "GuiComponent.h" +#include "SystemData.h" +#include "scrapers/Scraper.h" +#include "components/MenuComponent.h" #include typedef std::function GameFilterFunc; diff --git a/src/guis/GuiSettings.cpp b/es/src/guis/GuiSettings.cpp similarity index 86% rename from src/guis/GuiSettings.cpp rename to es/src/guis/GuiSettings.cpp index 8b5d777d0..806dae2c9 100644 --- a/src/guis/GuiSettings.cpp +++ b/es/src/guis/GuiSettings.cpp @@ -1,7 +1,7 @@ -#include "GuiSettings.h" -#include "../Window.h" -#include "../Settings.h" -#include "../views/ViewController.h" +#include "guis/GuiSettings.h" +#include "Window.h" +#include "Settings.h" +#include "views/ViewController.h" GuiSettings::GuiSettings(Window* window, const char* title) : GuiComponent(window), mMenu(window, title) { @@ -41,7 +41,7 @@ bool GuiSettings::input(InputConfig* config, Input input) { // close everything Window* window = mWindow; - while(window->peekGui() && window->peekGui() != window->getViewController()) + while(window->peekGui() && window->peekGui() != ViewController::get()) delete window->peekGui(); return true; } diff --git a/src/guis/GuiSettings.h b/es/src/guis/GuiSettings.h similarity index 91% rename from src/guis/GuiSettings.h rename to es/src/guis/GuiSettings.h index f0f31dd1a..06e88d322 100644 --- a/src/guis/GuiSettings.h +++ b/es/src/guis/GuiSettings.h @@ -1,5 +1,5 @@ -#include "../GuiComponent.h" -#include "../components/MenuComponent.h" +#include "GuiComponent.h" +#include "components/MenuComponent.h" // This is just a really simple template for a GUI that calls some save functions when closed. class GuiSettings : public GuiComponent diff --git a/src/main.cpp b/es/src/main.cpp similarity index 96% rename from src/main.cpp rename to es/src/main.cpp index 8393b6d8f..88aec5cbe 100644 --- a/src/main.cpp +++ b/es/src/main.cpp @@ -155,6 +155,9 @@ int main(int argc, char* argv[]) atexit(&onExit); Window window; + ViewController::init(&window); + window.pushGui(ViewController::get()); + if(!scrape_cmdline) { if(!window.init(width, height)) @@ -199,17 +202,16 @@ int main(int argc, char* argv[]) // preload what we can right away instead of waiting for the user to select it // this makes for no delays when accessing content, but a longer startup time - window.getViewController()->preload(); + ViewController::get()->preload(); //choose which GUI to open depending on if an input configuration already exists if(errorMsg == NULL) { if(fs::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) { - window.getViewController()->goToStart(); - } - else{ - window.pushGui(new GuiDetectDevice(&window, true)); + ViewController::get()->goToStart(); + }else{ + window.pushGui(new GuiDetectDevice(&window, true, [] { ViewController::get()->goToStart(); })); } } @@ -266,7 +268,7 @@ int main(int argc, char* argv[]) Log::flush(); } - while(window.peekGui() != window.getViewController()) + while(window.peekGui() != ViewController::get()) delete window.peekGui(); window.deinit(); diff --git a/src/scrapers/GamesDBScraper.cpp b/es/src/scrapers/GamesDBScraper.cpp similarity index 96% rename from src/scrapers/GamesDBScraper.cpp rename to es/src/scrapers/GamesDBScraper.cpp index db3c6635a..7a597512c 100644 --- a/src/scrapers/GamesDBScraper.cpp +++ b/es/src/scrapers/GamesDBScraper.cpp @@ -1,10 +1,9 @@ -#include "GamesDBScraper.h" -#include "../components/ScraperSearchComponent.h" -#include "Scraper.h" -#include "../Log.h" -#include "../pugiXML/pugixml.hpp" -#include "../MetaData.h" -#include "../Settings.h" +#include "scrapers/GamesDBScraper.h" +#include "Log.h" +#include "pugixml/pugixml.hpp" +#include "MetaData.h" +#include "Settings.h" +#include "Util.h" #include using namespace PlatformIds; diff --git a/src/scrapers/GamesDBScraper.h b/es/src/scrapers/GamesDBScraper.h similarity index 94% rename from src/scrapers/GamesDBScraper.h rename to es/src/scrapers/GamesDBScraper.h index 0d9e49cf5..cf5f69ede 100644 --- a/src/scrapers/GamesDBScraper.h +++ b/es/src/scrapers/GamesDBScraper.h @@ -1,6 +1,6 @@ #pragma once -#include "Scraper.h" +#include "scrapers/Scraper.h" void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, std::vector& results); diff --git a/src/scrapers/Scraper.cpp b/es/src/scrapers/Scraper.cpp similarity index 98% rename from src/scrapers/Scraper.cpp rename to es/src/scrapers/Scraper.cpp index 6f468c257..c827a4755 100644 --- a/src/scrapers/Scraper.cpp +++ b/es/src/scrapers/Scraper.cpp @@ -1,7 +1,6 @@ -#include "Scraper.h" -#include "../components/AsyncReqComponent.h" -#include "../Log.h" -#include "../Settings.h" +#include "scrapers/Scraper.h" +#include "Log.h" +#include "Settings.h" #include #include #include diff --git a/src/scrapers/Scraper.h b/es/src/scrapers/Scraper.h similarity index 97% rename from src/scrapers/Scraper.h rename to es/src/scrapers/Scraper.h index 1e87f4c5d..87ab2502a 100644 --- a/src/scrapers/Scraper.h +++ b/es/src/scrapers/Scraper.h @@ -1,13 +1,15 @@ #pragma once -#include "../MetaData.h" -#include "../SystemData.h" -#include "../HttpReq.h" -#include "../AsyncHandle.h" +#include "MetaData.h" +#include "SystemData.h" +#include "HttpReq.h" +#include "AsyncHandle.h" #include #include #include +#define MAX_SCRAPER_RESULTS 7 + struct ScraperSearchParams { SystemData* system; diff --git a/src/scrapers/TheArchiveScraper.cpp b/es/src/scrapers/TheArchiveScraper.cpp similarity index 93% rename from src/scrapers/TheArchiveScraper.cpp rename to es/src/scrapers/TheArchiveScraper.cpp index 336de2346..fe490ca55 100644 --- a/src/scrapers/TheArchiveScraper.cpp +++ b/es/src/scrapers/TheArchiveScraper.cpp @@ -1,8 +1,6 @@ #include "TheArchiveScraper.h" -#include "../guis/GuiGameScraper.h" -#include "../components/AsyncReqComponent.h" -#include "../Log.h" -#include "../pugiXML/pugixml.hpp" +#include "Log.h" +#include "pugixml/pugixml.hpp" void thearchive_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, std::vector& results) diff --git a/src/scrapers/TheArchiveScraper.h b/es/src/scrapers/TheArchiveScraper.h similarity index 95% rename from src/scrapers/TheArchiveScraper.h rename to es/src/scrapers/TheArchiveScraper.h index 93f640770..9837539a4 100644 --- a/src/scrapers/TheArchiveScraper.h +++ b/es/src/scrapers/TheArchiveScraper.h @@ -1,6 +1,6 @@ #pragma once -#include "Scraper.h" +#include "scrapers/Scraper.h" void thearchive_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, std::vector& results); diff --git a/src/views/SystemView.cpp b/es/src/views/SystemView.cpp similarity index 96% rename from src/views/SystemView.cpp rename to es/src/views/SystemView.cpp index 9e844726d..54987fdf8 100644 --- a/src/views/SystemView.cpp +++ b/es/src/views/SystemView.cpp @@ -1,13 +1,13 @@ -#include "SystemView.h" -#include "../SystemData.h" -#include "../Renderer.h" -#include "../Log.h" -#include "../Window.h" -#include "ViewController.h" -#include "../animations/LambdaAnimation.h" -#include "../SystemData.h" -#include "../Settings.h" -#include "../Util.h" +#include "views/SystemView.h" +#include "SystemData.h" +#include "Renderer.h" +#include "Log.h" +#include "Window.h" +#include "views/ViewController.h" +#include "animations/LambdaAnimation.h" +#include "SystemData.h" +#include "Settings.h" +#include "Util.h" #define SELECTED_SCALE 1.5f #define LOGO_PADDING ((logoSize().x() * (SELECTED_SCALE - 1)/2) + (mSize.x() * 0.06f)) @@ -119,7 +119,7 @@ bool SystemView::input(InputConfig* config, Input input) if(config->isMappedTo("a", input)) { stopScrolling(); - mWindow->getViewController()->goToGameList(getSelected()); + ViewController::get()->goToGameList(getSelected()); return true; } }else{ diff --git a/src/views/SystemView.h b/es/src/views/SystemView.h similarity index 80% rename from src/views/SystemView.h rename to es/src/views/SystemView.h index 6916227e5..15200b903 100644 --- a/src/views/SystemView.h +++ b/es/src/views/SystemView.h @@ -1,11 +1,11 @@ #pragma once -#include "../GuiComponent.h" -#include "../components/ImageComponent.h" -#include "../components/TextComponent.h" -#include "../components/ScrollableContainer.h" -#include "../components/IList.h" -#include "../resources/TextureResource.h" +#include "GuiComponent.h" +#include "components/ImageComponent.h" +#include "components/TextComponent.h" +#include "components/ScrollableContainer.h" +#include "components/IList.h" +#include "resources/TextureResource.h" class SystemData; class AnimatedImageComponent; diff --git a/src/views/ViewController.cpp b/es/src/views/ViewController.cpp similarity index 93% rename from src/views/ViewController.cpp rename to es/src/views/ViewController.cpp index 68086b780..5a94d97c2 100644 --- a/src/views/ViewController.cpp +++ b/es/src/views/ViewController.cpp @@ -1,16 +1,30 @@ -#include "ViewController.h" -#include "../Log.h" -#include "../SystemData.h" -#include "../Settings.h" +#include "views/ViewController.h" +#include "Log.h" +#include "SystemData.h" +#include "Settings.h" -#include "gamelist/BasicGameListView.h" -#include "gamelist/DetailedGameListView.h" -#include "gamelist/GridGameListView.h" -#include "../guis/GuiMenu.h" -#include "../guis/GuiMsgBox.h" -#include "../animations/LaunchAnimation.h" -#include "../animations/MoveCameraAnimation.h" -#include "../animations/LambdaAnimation.h" +#include "views/gamelist/BasicGameListView.h" +#include "views/gamelist/DetailedGameListView.h" +#include "views/gamelist/GridGameListView.h" +#include "guis/GuiMenu.h" +#include "guis/GuiMsgBox.h" +#include "animations/LaunchAnimation.h" +#include "animations/MoveCameraAnimation.h" +#include "animations/LambdaAnimation.h" + +ViewController* ViewController::sInstance = NULL; + +ViewController* ViewController::get() +{ + assert(sInstance); + return sInstance; +} + +void ViewController::init(Window* window) +{ + assert(!sInstance); + sInstance = new ViewController(window); +} ViewController::ViewController(Window* window) : GuiComponent(window), mCurrentView(nullptr), mCamera(Eigen::Affine3f::Identity()), mFadeOpacity(0), mLockInput(false) @@ -18,6 +32,12 @@ ViewController::ViewController(Window* window) mState.viewing = NOTHING; } +ViewController::~ViewController() +{ + assert(sInstance == this); + sInstance = NULL; +} + void ViewController::goToStart() { // TODO diff --git a/src/views/ViewController.h b/es/src/views/ViewController.h similarity index 92% rename from src/views/ViewController.h rename to es/src/views/ViewController.h index c706dbb41..2658f44a9 100644 --- a/src/views/ViewController.h +++ b/es/src/views/ViewController.h @@ -1,7 +1,7 @@ #pragma once -#include "gamelist/IGameListView.h" -#include "SystemView.h" +#include "views/gamelist/IGameListView.h" +#include "views/SystemView.h" class SystemData; @@ -9,7 +9,10 @@ class SystemData; class ViewController : public GuiComponent { public: - ViewController(Window* window); + static void init(Window* window); + static ViewController* get(); + + virtual ~ViewController(); // Try to completely populate the GameListView map. // Caches things so there's no pauses during transitions. @@ -66,6 +69,9 @@ public: std::shared_ptr getSystemListView(); private: + ViewController(Window* window); + static ViewController* sInstance; + void playViewTransition(); int getSystemId(SystemData* system); diff --git a/src/views/gamelist/BasicGameListView.cpp b/es/src/views/gamelist/BasicGameListView.cpp similarity index 87% rename from src/views/gamelist/BasicGameListView.cpp rename to es/src/views/gamelist/BasicGameListView.cpp index 3cf3eccc0..af4ccbfe4 100644 --- a/src/views/gamelist/BasicGameListView.cpp +++ b/es/src/views/gamelist/BasicGameListView.cpp @@ -1,10 +1,10 @@ -#include "BasicGameListView.h" -#include "../ViewController.h" -#include "../../Renderer.h" -#include "../../Window.h" -#include "../../ThemeData.h" -#include "../../SystemData.h" -#include "../../Settings.h" +#include "views/gamelist/BasicGameListView.h" +#include "views/ViewController.h" +#include "Renderer.h" +#include "Window.h" +#include "ThemeData.h" +#include "SystemData.h" +#include "Settings.h" BasicGameListView::BasicGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), mList(window) @@ -28,7 +28,7 @@ void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) if(change == FILE_METADATA_CHANGED) { // might switch to a detailed view - mWindow->getViewController()->reloadGameListView(this); + ViewController::get()->reloadGameListView(this); return; } @@ -83,7 +83,7 @@ void BasicGameListView::setCursor(FileData* cursor) void BasicGameListView::launch(FileData* game) { - mWindow->getViewController()->launch(game); + ViewController::get()->launch(game); } std::vector BasicGameListView::getHelpPrompts() diff --git a/src/views/gamelist/BasicGameListView.h b/es/src/views/gamelist/BasicGameListView.h similarity index 89% rename from src/views/gamelist/BasicGameListView.h rename to es/src/views/gamelist/BasicGameListView.h index 4cd7ef347..23145f5cb 100644 --- a/src/views/gamelist/BasicGameListView.h +++ b/es/src/views/gamelist/BasicGameListView.h @@ -1,7 +1,7 @@ #pragma once -#include "ISimpleGameListView.h" -#include "../../components/TextListComponent.h" +#include "views/gamelist/ISimpleGameListView.h" +#include "components/TextListComponent.h" class BasicGameListView : public ISimpleGameListView { diff --git a/src/views/gamelist/DetailedGameListView.cpp b/es/src/views/gamelist/DetailedGameListView.cpp similarity index 97% rename from src/views/gamelist/DetailedGameListView.cpp rename to es/src/views/gamelist/DetailedGameListView.cpp index a81fc1c91..de1611014 100644 --- a/src/views/gamelist/DetailedGameListView.cpp +++ b/es/src/views/gamelist/DetailedGameListView.cpp @@ -1,7 +1,7 @@ -#include "DetailedGameListView.h" -#include "../../Window.h" -#include "../ViewController.h" -#include "../../animations/LambdaAnimation.h" +#include "views/gamelist/DetailedGameListView.h" +#include "views/ViewController.h" +#include "Window.h" +#include "animations/LambdaAnimation.h" DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : BasicGameListView(window, root), @@ -238,7 +238,7 @@ void DetailedGameListView::launch(FileData* game) if(mImage.hasImage()) target << mImage.getCenter().x(), mImage.getCenter().y(), 0; - mWindow->getViewController()->launch(game, target); + ViewController::get()->launch(game, target); } std::vector DetailedGameListView::getMDLabels() diff --git a/src/views/gamelist/DetailedGameListView.h b/es/src/views/gamelist/DetailedGameListView.h similarity index 84% rename from src/views/gamelist/DetailedGameListView.h rename to es/src/views/gamelist/DetailedGameListView.h index 28756e698..30396e04c 100644 --- a/src/views/gamelist/DetailedGameListView.h +++ b/es/src/views/gamelist/DetailedGameListView.h @@ -1,9 +1,9 @@ #pragma once -#include "BasicGameListView.h" -#include "../../components/ScrollableContainer.h" -#include "../../components/RatingComponent.h" -#include "../../components/DateTimeComponent.h" +#include "views/gamelist/BasicGameListView.h" +#include "components/ScrollableContainer.h" +#include "components/RatingComponent.h" +#include "components/DateTimeComponent.h" class DetailedGameListView : public BasicGameListView { diff --git a/src/views/gamelist/GridGameListView.cpp b/es/src/views/gamelist/GridGameListView.cpp similarity index 88% rename from src/views/gamelist/GridGameListView.cpp rename to es/src/views/gamelist/GridGameListView.cpp index bebd20c67..c34b4b8ba 100644 --- a/src/views/gamelist/GridGameListView.cpp +++ b/es/src/views/gamelist/GridGameListView.cpp @@ -1,7 +1,7 @@ -#include "GridGameListView.h" -#include "../../ThemeData.h" -#include "../../Window.h" -#include "../ViewController.h" +#include "views/gamelist/GridGameListView.h" +#include "ThemeData.h" +#include "Window.h" +#include "views/ViewController.h" GridGameListView::GridGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), mGrid(window) @@ -46,7 +46,7 @@ void GridGameListView::populateList(const std::vector& files) void GridGameListView::launch(FileData* game) { - mWindow->getViewController()->launch(game); + ViewController::get()->launch(game); } std::vector GridGameListView::getHelpPrompts() diff --git a/src/views/gamelist/GridGameListView.h b/es/src/views/gamelist/GridGameListView.h similarity index 83% rename from src/views/gamelist/GridGameListView.h rename to es/src/views/gamelist/GridGameListView.h index 7c744e943..81bf45585 100644 --- a/src/views/gamelist/GridGameListView.h +++ b/es/src/views/gamelist/GridGameListView.h @@ -1,8 +1,8 @@ #pragma once -#include "ISimpleGameListView.h" -#include "../../components/ImageGridComponent.h" -#include "../../components/ImageComponent.h" +#include "views/gamelist/ISimpleGameListView.h" +#include "components/ImageGridComponent.h" +#include "components/ImageComponent.h" #include class GridGameListView : public ISimpleGameListView diff --git a/src/views/gamelist/IGameListView.cpp b/es/src/views/gamelist/IGameListView.cpp similarity index 72% rename from src/views/gamelist/IGameListView.cpp rename to es/src/views/gamelist/IGameListView.cpp index 9b9f59dba..69799cdd9 100644 --- a/src/views/gamelist/IGameListView.cpp +++ b/es/src/views/gamelist/IGameListView.cpp @@ -1,12 +1,12 @@ -#include "IGameListView.h" -#include "../../Window.h" -#include "../../guis/GuiMetaDataEd.h" -#include "../../guis/GuiMenu.h" -#include "../../guis/GuiGamelistOptions.h" -#include "../ViewController.h" -#include "../../Settings.h" -#include "../../Log.h" -#include "../../Sound.h" +#include "views/gamelist/IGameListView.h" +#include "Window.h" +#include "guis/GuiMetaDataEd.h" +#include "guis/GuiMenu.h" +#include "guis/GuiGamelistOptions.h" +#include "views/ViewController.h" +#include "Settings.h" +#include "Log.h" +#include "Sound.h" bool IGameListView::input(InputConfig* config, Input input) { @@ -22,7 +22,7 @@ bool IGameListView::input(InputConfig* config, Input input) (SDL_GetModState() & (KMOD_LCTRL | KMOD_RCTRL)) && input.id == SDLK_r && input.value != 0) { LOG(LogDebug) << "reloading view"; - mWindow->getViewController()->reloadGameListView(this, true); + ViewController::get()->reloadGameListView(this, true); return true; } diff --git a/src/views/gamelist/IGameListView.h b/es/src/views/gamelist/IGameListView.h similarity index 95% rename from src/views/gamelist/IGameListView.h rename to es/src/views/gamelist/IGameListView.h index 930affa35..6f9ef054d 100644 --- a/src/views/gamelist/IGameListView.h +++ b/es/src/views/gamelist/IGameListView.h @@ -1,7 +1,7 @@ #pragma once -#include "../../FileData.h" -#include "../../Renderer.h" +#include "FileData.h" +#include "Renderer.h" class Window; class GuiComponent; diff --git a/src/views/gamelist/ISimpleGameListView.cpp b/es/src/views/gamelist/ISimpleGameListView.cpp similarity index 87% rename from src/views/gamelist/ISimpleGameListView.cpp rename to es/src/views/gamelist/ISimpleGameListView.cpp index 974ab459e..dd6df5b63 100644 --- a/src/views/gamelist/ISimpleGameListView.cpp +++ b/es/src/views/gamelist/ISimpleGameListView.cpp @@ -1,9 +1,9 @@ -#include "ISimpleGameListView.h" -#include "../../ThemeData.h" -#include "../../Window.h" -#include "../ViewController.h" -#include "../../Sound.h" -#include "../../Settings.h" +#include "views/gamelist/ISimpleGameListView.h" +#include "ThemeData.h" +#include "Window.h" +#include "views/ViewController.h" +#include "Sound.h" +#include "Settings.h" ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGameListView(window, root), mHeaderText(window), mHeaderImage(window), mBackground(window), mThemeExtras(window) @@ -82,7 +82,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) Sound::getFromTheme(getTheme(), getName(), "back")->play(); }else{ onFocusLost(); - mWindow->getViewController()->goToSystemView(getCursor()->getSystem()); + ViewController::get()->goToSystemView(getCursor()->getSystem()); } return true; @@ -91,7 +91,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) if(Settings::getInstance()->getBool("QuickSystemSelect")) { onFocusLost(); - mWindow->getViewController()->goToNextGameList(); + ViewController::get()->goToNextGameList(); return true; } }else if(config->isMappedTo("left", input)) @@ -99,7 +99,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) if(Settings::getInstance()->getBool("QuickSystemSelect")) { onFocusLost(); - mWindow->getViewController()->goToPrevGameList(); + ViewController::get()->goToPrevGameList(); return true; } } diff --git a/src/views/gamelist/ISimpleGameListView.h b/es/src/views/gamelist/ISimpleGameListView.h similarity index 89% rename from src/views/gamelist/ISimpleGameListView.h rename to es/src/views/gamelist/ISimpleGameListView.h index b4dcf2c8a..9022cde73 100644 --- a/src/views/gamelist/ISimpleGameListView.h +++ b/es/src/views/gamelist/ISimpleGameListView.h @@ -1,9 +1,9 @@ #pragma once -#include "IGameListView.h" +#include "views/gamelist/IGameListView.h" -#include "../../components/TextComponent.h" -#include "../../components/ImageComponent.h" +#include "components/TextComponent.h" +#include "components/ImageComponent.h" class ISimpleGameListView : public IGameListView { diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt new file mode 100644 index 000000000..9b09143ad --- /dev/null +++ b/external/CMakeLists.txt @@ -0,0 +1,5 @@ +# set up the external libraries that aren't popular enough to be found on most +# package managers are included with the project (in the 'external' folder) + +add_subdirectory("nanosvg") +add_subdirectory("pugixml") diff --git a/external/nanosvg/CMakeLists.txt b/external/nanosvg/CMakeLists.txt new file mode 100644 index 000000000..1a2538726 --- /dev/null +++ b/external/nanosvg/CMakeLists.txt @@ -0,0 +1,13 @@ +project("nanosvg") + +set(NSVG_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/nanosvg.h + ${CMAKE_CURRENT_SOURCE_DIR}/nanosvgrast.h +) + +set(NSVG_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/src/nanosvg_impl.cpp +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +add_library(nanosvg STATIC ${NSVG_SOURCES} ${NSVG_HEADERS}) diff --git a/src/nanosvg/nanosvg.h b/external/nanosvg/nanosvg.h similarity index 100% rename from src/nanosvg/nanosvg.h rename to external/nanosvg/nanosvg.h diff --git a/src/nanosvg/nanosvg_license.txt b/external/nanosvg/nanosvg_license.txt similarity index 100% rename from src/nanosvg/nanosvg_license.txt rename to external/nanosvg/nanosvg_license.txt diff --git a/src/nanosvg/nanosvgrast.h b/external/nanosvg/nanosvgrast.h similarity index 100% rename from src/nanosvg/nanosvgrast.h rename to external/nanosvg/nanosvgrast.h diff --git a/src/nanosvg/nanosvg_impl.cpp b/external/nanosvg/src/nanosvg_impl.cpp similarity index 100% rename from src/nanosvg/nanosvg_impl.cpp rename to external/nanosvg/src/nanosvg_impl.cpp diff --git a/external/pugixml/CMakeLists.txt b/external/pugixml/CMakeLists.txt new file mode 100644 index 000000000..fb01783b1 --- /dev/null +++ b/external/pugixml/CMakeLists.txt @@ -0,0 +1,13 @@ +project("pugixml") + +set(PUGI_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/pugiconfig.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/pugixml.hpp +) + +set(PUGI_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/src/pugixml.cpp +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +add_library(pugixml STATIC ${PUGI_SOURCES} ${PUG_HEADERS}) diff --git a/src/pugiXML/pugiconfig.hpp b/external/pugixml/pugiconfig.hpp similarity index 100% rename from src/pugiXML/pugiconfig.hpp rename to external/pugixml/pugiconfig.hpp diff --git a/src/pugiXML/pugixml.hpp b/external/pugixml/pugixml.hpp similarity index 100% rename from src/pugiXML/pugixml.hpp rename to external/pugixml/pugixml.hpp diff --git a/src/pugiXML/pugiXML_license.txt b/external/pugixml/pugixml_license.txt similarity index 100% rename from src/pugiXML/pugiXML_license.txt rename to external/pugixml/pugixml_license.txt diff --git a/src/pugiXML/pugixml.cpp b/external/pugixml/src/pugixml.cpp similarity index 100% rename from src/pugiXML/pugixml.cpp rename to external/pugixml/src/pugixml.cpp diff --git a/src/MathExp.cpp b/src/MathExp.cpp deleted file mode 100644 index be5d42d6f..000000000 --- a/src/MathExp.cpp +++ /dev/null @@ -1,163 +0,0 @@ -#include "MathExp.h" -#include -#include - -bool MathExp::isOperator(const char c) -{ - if(c == *"+" || c == *"-" || c == *"*" || c == *"/" || c == *"(") - return true; - else - return false; -} - -bool MathExp::isRParen(const char c) -{ - if(c == *")") - return true; - else - return false; -} - -int MathExp::getPrecedence(const char c) -{ - if(c == *"(") - return -5; - - if(c == *"+" || c == *"-") - return 0; - - if(c == *"*" || c == *"/") - return 1; - - std::cout << "Error - getPrecedence(): unknown character '" << c << "'\n"; - return -1; -} - -float MathExp::eval() -{ - unsigned int start = 0; - for(unsigned int i = 0; i < mExpression.length(); i++) - { - if(isOperator(mExpression.at(i))) - { - //the string from start to i is an operand, and i is an operator - if(start != i) //if we actually do have an operand - mOperands.push(strToVal(mExpression.substr(start, i - start))); - else - std::cout << "skipping operand, start == i\n"; - - //now we must decide what to do with the operator - const char op = mExpression.at(i); - - if(op != *"(") - { - while(mOperators.size() && getPrecedence(mOperators.top()) >= getPrecedence(op)) - { - doNextOperation(); - } - } - - mOperators.push(op); - - start = i + 1; - }else{ - if(isRParen(mExpression.at(i))) - { - while(mOperators.top() != *"(") - { - doNextOperation(); - } - - mOperators.pop(); - } - } - } - - mOperands.push(strToVal(mExpression.substr(start, mExpression.length() - start))); - - - while(mOperators.size() > 0) - doNextOperation(); - - - if(mOperands.size() != 1) - { - std::cout << "Error - mOperands.size() = " << mOperands.size() << " at the end of evaluation!\n"; - return 0; - } - - float final = mOperands.top(); - mOperands.pop(); - - return final; -} - -void MathExp::doNextOperation() -{ - //pop operator off and apply it, then push the value onto the operand stack - const char top = mOperators.top(); - float val = 0; - - if(top == *"+") - { - val = mOperands.top(); - mOperands.pop(); - val += mOperands.top(); - mOperands.pop(); - } - if(top == *"-") - { - val = mOperands.top(); - mOperands.pop(); - val = mOperands.top() - val; - mOperands.pop(); - } - if(top == *"*") - { - val = mOperands.top(); - mOperands.pop(); - val *= mOperands.top(); - mOperands.pop(); - } - if(top == *"/") - { - val = mOperands.top(); - mOperands.pop(); - val = mOperands.top() / val; - mOperands.pop(); - } - - mOperands.push(val); - - mOperators.pop(); -} - -void MathExp::setExpression(std::string str) -{ - mExpression = str; -} - -void MathExp::setVariable(std::string name, float val) -{ - mVariables[name] = val; -} - -float MathExp::getVariable(std::string name) -{ - return mVariables[name]; -} - -float MathExp::strToVal(std::string str) -{ - if(str[0] == *"$") - return getVariable(str.substr(1, str.length() - 1)); //it's a variable! - - //it's a value! - std::stringstream stream; - stream << str; - - float value; - stream >> value; - - return value; -} diff --git a/src/MathExp.h b/src/MathExp.h deleted file mode 100644 index a8d76f461..000000000 --- a/src/MathExp.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef _MATHEXP_H_ -#define _MATHEXP_H_ - -#include -#include -#include - -//A reusable class that evaluates simple mathematical expressions. -//Includes variable support - just use setVariable(name, value), and any instance of $name will be replaced with value. -class MathExp { -public: - - void setExpression(std::string str); - void setVariable(std::string name, float val); - float getVariable(std::string name); - - float eval(); - -private: - //float apply(const char operatorChar, std::string operand); - void doNextOperation(); - - bool isOperator(const char c); - bool isRParen(const char c); - int getPrecedence(const char c); - - float strToVal(std::string str); - - std::string mExpression; - - std::stack mOperands; - std::stack mOperators; - std::map mVariables; - -}; - -#endif