diff --git a/RetroFE/Source/Collection/CollectionInfoBuilder.cpp b/RetroFE/Source/Collection/CollectionInfoBuilder.cpp index bcd7cd7..4f1fe1a 100644 --- a/RetroFE/Source/Collection/CollectionInfoBuilder.cpp +++ b/RetroFE/Source/Collection/CollectionInfoBuilder.cpp @@ -287,10 +287,12 @@ bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info, std::string me bool showMissing = false; bool romHierarchy = false; bool truRIP = false; + + /* Clear Item list */ + //info->items.clear(); if (mergedCollectionName != "") { - std::string mergedFile = Utils::combinePath(Configuration::absolutePath, "collections", mergedCollectionName, info->name + ".sub"); Logger::write(Logger::ZONE_INFO, "CollectionInfoBuilder", "Checking for \"" + mergedFile + "\""); (void)conf_.getProperty("collections." + mergedCollectionName + ".list.includeMissingItems", showMissing); diff --git a/RetroFE/Source/Graphics/Component/ScrollingList.cpp b/RetroFE/Source/Graphics/Component/ScrollingList.cpp index 9dde8ce..c4d5c2a 100644 --- a/RetroFE/Source/Graphics/Component/ScrollingList.cpp +++ b/RetroFE/Source/Graphics/Component/ScrollingList.cpp @@ -152,6 +152,7 @@ void ScrollingList::deallocateSpritePoints( ) void ScrollingList::allocateSpritePoints( ) { + if ( !items_ || items_->size( ) == 0 ) return; if ( !scrollPoints_ ) return; if ( components_.size( ) == 0 ) return; @@ -611,6 +612,7 @@ bool ScrollingList::allocateTexture( unsigned int index, Item *item ) for ( unsigned int n = 0; n < names.size() && !t; ++n ) { + // check collection path for art if ( layoutMode_ ) { diff --git a/RetroFE/Source/Graphics/Component/Text.cpp b/RetroFE/Source/Graphics/Component/Text.cpp index a6cb88d..2208206 100644 --- a/RetroFE/Source/Graphics/Component/Text.cpp +++ b/RetroFE/Source/Graphics/Component/Text.cpp @@ -35,11 +35,13 @@ Text::Text( std::string text, Page &p, Font *font, float scaleX, float scaleY ) Text::~Text( ) { freeGraphicsMemory( ); + textData_.clear(); } void Text::freeGraphicsMemory( ) { Component::freeGraphicsMemory( ); + textData_.clear(); } void Text::allocateGraphicsMemory( ) diff --git a/RetroFE/Source/Graphics/Page.cpp b/RetroFE/Source/Graphics/Page.cpp index 9591431..0a44330 100644 --- a/RetroFE/Source/Graphics/Page.cpp +++ b/RetroFE/Source/Graphics/Page.cpp @@ -806,7 +806,6 @@ bool Page::popCollection() void Page::enterMenu() { - for(MenuVector_T::iterator it = menus_.begin(); it != menus_.end(); it++) { for(std::vector::iterator it2 = menus_[std::distance(menus_.begin(), it)].begin(); it2 != menus_[std::distance(menus_.begin(), it)].end(); it2++) diff --git a/RetroFE/Source/RetroFE.cpp b/RetroFE/Source/RetroFE.cpp index 2670252..ff1a231 100644 --- a/RetroFE/Source/RetroFE.cpp +++ b/RetroFE/Source/RetroFE.cpp @@ -313,118 +313,6 @@ bool RetroFE::deInitialize( ) return retVal; } -// Print State -void RetroFE::printState(RETROFE_STATE state){ - switch(state){ - case RETROFE_IDLE: - printf("RETROFE_IDLE"); - break; - case RETROFE_LOAD_ART: - printf("RETROFE_LOAD_ART"); - break; - case RETROFE_ENTER: - printf("RETROFE_ENTER"); - break; - case RETROFE_SPLASH_EXIT: - printf("RETROFE_SPLASH_EXIT"); - break; - case RETROFE_PLAYLIST_REQUEST: - printf("RETROFE_PLAYLIST_REQUEST"); - break; - case RETROFE_PLAYLIST_EXIT: - printf("RETROFE_PLAYLIST_EXIT"); - break; - case RETROFE_PLAYLIST_LOAD_ART: - printf("RETROFE_PLAYLIST_LOAD_ART"); - break; - case RETROFE_PLAYLIST_ENTER: - printf("RETROFE_PLAYLIST_ENTER"); - break; - case RETROFE_MENUJUMP_REQUEST: - printf("RETROFE_MENUJUMP_REQUEST"); - break; - case RETROFE_MENUJUMP_EXIT: - printf("RETROFE_MENUJUMP_EXIT"); - break; - case RETROFE_MENUJUMP_LOAD_ART: - printf("RETROFE_MENUJUMP_LOAD_ART"); - break; - case RETROFE_MENUJUMP_ENTER: - printf("RETROFE_MENUJUMP_ENTER"); - break; - case RETROFE_HIGHLIGHT_REQUEST: - printf("RETROFE_HIGHLIGHT_REQUEST"); - break; - case RETROFE_HIGHLIGHT_EXIT: - printf("RETROFE_HIGHLIGHT_EXIT"); - break; - case RETROFE_HIGHLIGHT_LOAD_ART: - printf("RETROFE_HIGHLIGHT_LOAD_ART"); - break; - case RETROFE_HIGHLIGHT_ENTER: - printf("RETROFE_HIGHLIGHT_ENTER"); - break; - case RETROFE_NEXT_PAGE_REQUEST: - printf("RETROFE_NEXT_PAGE_REQUEST"); - break; - case RETROFE_NEXT_PAGE_MENU_EXIT: - printf("RETROFE_NEXT_PAGE_MENU_EXIT"); - break; - case RETROFE_NEXT_PAGE_MENU_LOAD_ART: - printf("RETROFE_NEXT_PAGE_MENU_LOAD_ART"); - break; - case RETROFE_NEXT_PAGE_MENU_ENTER: - printf("RETROFE_NEXT_PAGE_MENU_ENTER"); - break; - case RETROFE_HANDLE_MENUENTRY: - printf("RETROFE_HANDLE_MENUENTRY"); - break; - case RETROFE_LAUNCH_ENTER: - printf("RETROFE_LAUNCH_ENTER"); - break; - case RETROFE_LAUNCH_REQUEST: - printf("RETROFE_LAUNCH_REQUEST"); - break; - case RETROFE_LAUNCH_EXIT: - printf("RETROFE_LAUNCH_EXIT"); - break; - case RETROFE_BACK_REQUEST: - printf("RETROFE_BACK_REQUEST"); - break; - case RETROFE_BACK_MENU_EXIT: - printf("RETROFE_BACK_MENU_EXIT"); - break; - case RETROFE_BACK_MENU_LOAD_ART: - printf("RETROFE_BACK_MENU_LOAD_ART"); - break; - case RETROFE_BACK_MENU_ENTER: - printf("RETROFE_BACK_MENU_ENTER"); - break; - case RETROFE_MENUMODE_START_REQUEST: - printf("RETROFE_MENUMODE_START_REQUEST"); - break; - case RETROFE_MENUMODE_START_LOAD_ART: - printf("RETROFE_MENUMODE_START_LOAD_ART"); - break; - case RETROFE_MENUMODE_START_ENTER: - printf("RETROFE_MENUMODE_START_ENTER"); - break; - case RETROFE_NEW: - printf("RETROFE_NEW"); - break; - case RETROFE_QUIT_REQUEST: - printf("RETROFE_QUIT_REQUEST"); - break; - case RETROFE_QUIT: - printf("RETROFE_QUIT"); - break; - default: - printf("STATE UNDEFINED:%d", state); - break; - } - printf("\n"); -} - // Run RetroFE void RetroFE::run( ) @@ -479,6 +367,7 @@ void RetroFE::run( ) bool running = true; bool initInBackground = false; config_.getProperty( "initInBackground", initInBackground ); + RETROFE_STATE state = RETROFE_NEW; config_.getProperty( "attractModeTime", attractModeTime ); @@ -526,9 +415,19 @@ void RetroFE::run( ) break; } - // Uncomment to print State for debug purposes - //printState(state); + // Print state for debug purposes +#if 0 + static RETROFE_STATE prev_state = state; +#undef X +#define X(a, b) b, + static const char *retrofe_states_str[] = {RETROFE_STATES}; + if(prev_state != state){ + printf("RetroFE new state: %s\n", retrofe_states_str[state]); + prev_state = state; + } +#endif + // Main state machine switch(state) { @@ -694,6 +593,7 @@ void RetroFE::run( ) { currentPage_->reallocateMenuSpritePoints( ); currentPage_->menuJumpEnter( ); + forceRender(true); state = RETROFE_MENUJUMP_ENTER; } break; @@ -805,7 +705,9 @@ void RetroFE::run( ) } currentPage_->onNewItemSelected( ); + printf("\nbefore currentPage_->reallocateMenuSpritePoints()\n"); currentPage_->reallocateMenuSpritePoints( ); + printf("after currentPage_->reallocateMenuSpritePoints()\n\n"); state = RETROFE_NEXT_PAGE_MENU_LOAD_ART; @@ -1061,6 +963,14 @@ void RetroFE::run( ) running = false; } break; + + // Unknown state + default: + std::stringstream ss; + ss << "Wrong state: " << state; + Logger::write( Logger::ZONE_ERROR, "RetroFE", "Wrong state: " + ss.str() ); + state = RETROFE_IDLE; + break; } // Handle screen updates and attract mode diff --git a/RetroFE/Source/RetroFE.h b/RetroFE/Source/RetroFE.h index fa1fbef..7c25dad 100644 --- a/RetroFE/Source/RetroFE.h +++ b/RetroFE/Source/RetroFE.h @@ -31,6 +31,44 @@ #include #include +/* State machine states */ +#define RETROFE_STATES \ + X(RETROFE_IDLE, "RETROFE_IDLE") \ + X(RETROFE_LOAD_ART, "RETROFE_LOAD_ART") \ + X(RETROFE_ENTER, "RETROFE_ENTER") \ + X(RETROFE_SPLASH_EXIT, "RETROFE_SPLASH_EXIT") \ + X(RETROFE_PLAYLIST_REQUEST, "RETROFE_PLAYLIST_REQUEST") \ + X(RETROFE_PLAYLIST_EXIT, "RETROFE_PLAYLIST_EXIT") \ + X(RETROFE_PLAYLIST_LOAD_ART, "RETROFE_PLAYLIST_LOAD_ART") \ + X(RETROFE_PLAYLIST_ENTER, "RETROFE_PLAYLIST_ENTER") \ + X(RETROFE_MENUJUMP_REQUEST, "RETROFE_MENUJUMP_REQUEST") \ + X(RETROFE_MENUJUMP_EXIT, "RETROFE_MENUJUMP_EXIT") \ + X(RETROFE_MENUJUMP_LOAD_ART, "RETROFE_MENUJUMP_LOAD_ART") \ + X(RETROFE_MENUJUMP_ENTER, "RETROFE_MENUJUMP_ENTER") \ + X(RETROFE_HIGHLIGHT_REQUEST, "RETROFE_HIGHLIGHT_REQUEST") \ + X(RETROFE_HIGHLIGHT_EXIT, "RETROFE_HIGHLIGHT_EXIT") \ + X(RETROFE_HIGHLIGHT_LOAD_ART, "RETROFE_HIGHLIGHT_LOAD_ART") \ + X(RETROFE_HIGHLIGHT_ENTER, "RETROFE_HIGHLIGHT_ENTER") \ + X(RETROFE_NEXT_PAGE_REQUEST, "RETROFE_NEXT_PAGE_REQUEST") \ + X(RETROFE_NEXT_PAGE_MENU_EXIT, "RETROFE_NEXT_PAGE_MENU_EXIT") \ + X(RETROFE_NEXT_PAGE_MENU_LOAD_ART, "RETROFE_NEXT_PAGE_MENU_LOAD_ART") \ + X(RETROFE_NEXT_PAGE_MENU_ENTER, "RETROFE_NEXT_PAGE_MENU_ENTER") \ + X(RETROFE_HANDLE_MENUENTRY, "RETROFE_HANDLE_MENUENTRY") \ + X(RETROFE_LAUNCH_ENTER, "RETROFE_LAUNCH_ENTER") \ + X(RETROFE_LAUNCH_REQUEST, "RETROFE_LAUNCH_REQUEST") \ + X(RETROFE_LAUNCH_EXIT, "RETROFE_LAUNCH_EXIT") \ + X(RETROFE_BACK_REQUEST, "RETROFE_BACK_REQUEST") \ + X(RETROFE_BACK_MENU_EXIT, "RETROFE_BACK_MENU_EXIT") \ + X(RETROFE_BACK_MENU_LOAD_ART, "RETROFE_BACK_MENU_LOAD_ART") \ + X(RETROFE_BACK_MENU_ENTER, "RETROFE_BACK_MENU_ENTER") \ + X(RETROFE_MENUMODE_START_REQUEST, "RETROFE_MENUMODE_START_REQUEST") \ + X(RETROFE_MENUMODE_START_LOAD_ART, "RETROFE_MENUMODE_START_LOAD_ART") \ + X(RETROFE_MENUMODE_START_ENTER, "RETROFE_MENUMODE_START_ENTER") \ + X(RETROFE_NEW, "RETROFE_NEW") \ + X(RETROFE_QUIT_REQUEST, "RETROFE_QUIT_REQUEST") \ + X(RETROFE_QUIT, "RETROFE_QUIT") \ + X(NB_RETROFE_STATES, "") + class CollectionInfo; class Configuration; @@ -57,43 +95,9 @@ private: SDL_Thread *initializeThread; static int initialize( void *context ); - enum RETROFE_STATE - { - RETROFE_IDLE, - RETROFE_LOAD_ART, - RETROFE_ENTER, - RETROFE_SPLASH_EXIT, - RETROFE_PLAYLIST_REQUEST, - RETROFE_PLAYLIST_EXIT, - RETROFE_PLAYLIST_LOAD_ART, - RETROFE_PLAYLIST_ENTER, - RETROFE_MENUJUMP_REQUEST, - RETROFE_MENUJUMP_EXIT, - RETROFE_MENUJUMP_LOAD_ART, - RETROFE_MENUJUMP_ENTER, - RETROFE_HIGHLIGHT_REQUEST, - RETROFE_HIGHLIGHT_EXIT, - RETROFE_HIGHLIGHT_LOAD_ART, - RETROFE_HIGHLIGHT_ENTER, - RETROFE_NEXT_PAGE_REQUEST, - RETROFE_NEXT_PAGE_MENU_EXIT, - RETROFE_NEXT_PAGE_MENU_LOAD_ART, - RETROFE_NEXT_PAGE_MENU_ENTER, - RETROFE_HANDLE_MENUENTRY, - RETROFE_LAUNCH_ENTER, - RETROFE_LAUNCH_REQUEST, - RETROFE_LAUNCH_EXIT, - RETROFE_BACK_REQUEST, - RETROFE_BACK_MENU_EXIT, - RETROFE_BACK_MENU_LOAD_ART, - RETROFE_BACK_MENU_ENTER, - RETROFE_MENUMODE_START_REQUEST, - RETROFE_MENUMODE_START_LOAD_ART, - RETROFE_MENUMODE_START_ENTER, - RETROFE_NEW, - RETROFE_QUIT_REQUEST, - RETROFE_QUIT, - }; + #undef X + #define X(a, b) a, + enum RETROFE_STATE {RETROFE_STATES}; void render( ); bool back( bool &exit );