void MainMenu::fillLoadMenu( bool save /*= false*/ ) { const std::string buttonNames[]={"File0","File1","File2","File3","File4","File5"}; char** rc = PHYSFS_enumerateFiles("/"); char* curfile; CheckButton *button; for(int i=0;i<6;i++) { char* recentfile = NULL; PHYSFS_sint64 t = 0; std::stringstream filestart; filestart << i+1 << "_"; if( save ){ button = getCheckButton(*saveGameMenu.get(),buttonNames[i]); } else { button = getCheckButton(*loadGameMenu.get(),buttonNames[i]); } //make sure Button is connected only once button->clicked.clear(); if( save ) button->clicked.connect(makeCallback(*this,&MainMenu::selectSaveGameButtonClicked)); else { button->clicked.connect(makeCallback(*this,&MainMenu::selectLoadGameButtonClicked)); } for(char** i = rc; *i != 0; i++){ curfile = *i; if(std::string( curfile ).find( filestart.str() ) == 0 ) { // && !( curfile->d_type & DT_DIR ) ) is not portable. So // don't create a directoy named 2_ in a savegame-directory or // you can no longer load from slot 2. if (t == 0) { recentfile = curfile; t = PHYSFS_getLastModTime(recentfile); } else { if (PHYSFS_getLastModTime(curfile) > t) { /*#ifdef DEBUG fprintf(stderr," %s is more recent than previous %s\n", curfile, recentfile); #endif*/ recentfile = curfile; t = PHYSFS_getLastModTime(recentfile); } } } } #ifdef DEBUG fprintf(stderr,"Most recent file: %s\n\n",recentfile); #endif if(t != 0) { std::string f= recentfile; button->setCaptionText(f); } else { button->setCaptionText(_("empty")); } } }
void MainMenu::fillNewGameMenu() { const std::string buttonNames[]={"File0","File1","File2","File3","File4","File5"}; char **files= PHYSFS_enumerateFiles("opening"); char **fptr=files; CheckButton *button; fileMap.clear(); for(int i=0;i<6;i++) { button=getCheckButton(*newGameMenu.get(),buttonNames[i]); button->clicked.connect(makeCallback(*this,&MainMenu::selectLoadGameButtonClicked)); while(*fptr) { if(std::string(*fptr).find(".scn")!=std::string::npos) break; fptr++; } if(*fptr) { std::string f=*fptr; if(f.length()>5){ f=f.substr(0,f.length()-4); // truncate .scn } // save real name fileMap.insert(std::pair<std::string, std::string>(buttonNames[i], f )); // use translated name for caption button->setCaptionText(_(f.c_str())); fptr++; } else button->setCaptionText(""); } PHYSFS_freeList(files); button=getCheckButton(*newGameMenu.get(),"WithVillage"); button->check(); //button->setCaptionText(_("random empty board")); //button->clicked.connect(makeCallback(*this,&MainMenu::selectLoadGameButtonClicked)); button=getCheckButton(*newGameMenu.get(),"RiverDelta"); button->setCaptionText(_("river delta")); button->clicked.connect(makeCallback(*this,&MainMenu::selectLoadGameButtonClicked)); button=getCheckButton(*newGameMenu.get(),"DesertArea"); button->setCaptionText(_("semi desert")); button->clicked.connect(makeCallback(*this,&MainMenu::selectLoadGameButtonClicked)); button=getCheckButton(*newGameMenu.get(),"TemperateArea"); button->setCaptionText(_("temperate")); button->clicked.connect(makeCallback(*this,&MainMenu::selectLoadGameButtonClicked)); button=getCheckButton(*newGameMenu.get(),"SwampArea"); button->setCaptionText(_("swamp")); button->clicked.connect(makeCallback(*this,&MainMenu::selectLoadGameButtonClicked)); return; /* Is there a better way to add filenames to the directory? */ _("good_times"); _("bad_times"); _("Beach"); _("extreme_arid"); _("extreme_wetland"); }