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 Dialog::editPort(){ if( !desktop ) { std::cerr << "No desktop found.\n"; return; } try { myDialogComponent = loadGUIFile( "gui/portdialog.xml" ); assert( myDialogComponent != 0); registerDialog(); blockingDialogIsOpen = true; iAmBlocking = true; } catch(std::exception& e) { std::cerr << "Couldn't display dialog 'tradedialog.xml': " << e.what() << "\n"; return; } // set Dialog to Port-Data //int port_flags = world(pointX, pointY)->reportingConstruction->flags; Port *port = dynamic_cast<Port *>(world(pointX, pointY)->reportingConstruction); Paragraph* p = getParagraph( *myDialogComponent, "DialogTitle" ); std::stringstream title; title << _("Port") << " ( " << pointX <<" , " << pointY << " )"; p->setText( title.str() ); CheckButton* cb; cb = getCheckButton( *myDialogComponent, "BuyFood" ); if( port->commodityRuleCount[Construction::STUFF_FOOD].take) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellFood" ); if( port->commodityRuleCount[Construction::STUFF_FOOD].give) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyCoal" ); if( port->commodityRuleCount[Construction::STUFF_COAL].take) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellCoal" ); if( port->commodityRuleCount[Construction::STUFF_COAL].give) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyOre" ); if( port->commodityRuleCount[Construction::STUFF_ORE].take) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellOre" ); if( port->commodityRuleCount[Construction::STUFF_ORE].give) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyGoods" ); if( port->commodityRuleCount[Construction::STUFF_GOODS].take) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellGoods" ); if( port->commodityRuleCount[Construction::STUFF_GOODS].give) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuySteel" ); if( port->commodityRuleCount[Construction::STUFF_STEEL].take) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellSteel" ); if( port->commodityRuleCount[Construction::STUFF_STEEL].give) cb->check(); else cb->uncheck(); // connect signals Button* applyButton = getButton( *myDialogComponent, "Apply" ); applyButton->clicked.connect( makeCallback(*this, &Dialog::applyPortButtonClicked ) ); Button* gotoButton = getButton( *myDialogComponent, "goto" ); gotoButton->clicked.connect( makeCallback( *this, &Dialog::gotoButtonClicked ) ); }
void Dialog::editPort(){ if( !desktop ) { std::cerr << "No desktop found.\n"; return; } try { myDialogComponent = loadGUIFile( "gui/portdialog.xml" ); assert( myDialogComponent != 0); registerDialog(); blockingDialogIsOpen = true; iAmBlocking = true; } catch(std::exception& e) { std::cerr << "Couldn't display dialog 'tradedialog.xml': " << e.what() << "\n"; return; } // set Dialog to Port-Data Paragraph* p = getParagraph( *myDialogComponent, "DialogTitle" ); std::stringstream title; title << _("Port") << " ( " << pointX <<" , " << pointY << " )"; p->setText( title.str() ); CheckButton* cb; cb = getCheckButton( *myDialogComponent, "BuyFood" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MB_FOOD) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellFood" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MS_FOOD) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyCoal" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MB_COAL) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellCoal" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MS_COAL) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyOre" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MB_ORE) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellOre" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MS_ORE) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyGoods" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MB_GOODS) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellGoods" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MS_GOODS) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuySteel" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MB_STEEL) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellSteel" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MS_STEEL) cb->check(); else cb->uncheck(); // connect signals Button* applyButton = getButton( *myDialogComponent, "Apply" ); applyButton->clicked.connect( makeCallback(*this, &Dialog::applyPortButtonClicked ) ); Button* gotoButton = getButton( *myDialogComponent, "goto" ); gotoButton->clicked.connect( makeCallback( *this, &Dialog::gotoButtonClicked ) ); }
void Dialog::applyMarketButtonClicked( Button* b ){ CheckButton* cb; cb = getCheckButton( *myDialogComponent, "BuyJobs" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MB_JOBS; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MB_JOBS; } cb = getCheckButton( *myDialogComponent, "SellJobs" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MS_JOBS; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MS_JOBS; } applyPortButtonClicked( b ); }
/** * Either create selected random terrain or load a scenario. **/ void MainMenu::newGameStartButtonClicked(Button* ) { if( mFilename.empty() ){ // std::cout << "nothing selected\n"; return; } getSound()->playSound( "Click" ); int with_village = (getCheckButton(*currentMenu,"WithVillage")->state == CheckButton::STATE_CHECKED)?1:0; if( baseName == "RiverDelta" ){ new_city( &main_screen_originx, &main_screen_originy, with_village ); GameView* gv = getGameView(); if( gv ){ gv->readOrigin(); } quitState = INGAME; running = false; } else if( baseName == "DesertArea" ){ new_desert_city( &main_screen_originx, &main_screen_originy, with_village ); GameView* gv = getGameView(); if( gv ){ gv->readOrigin(); } quitState = INGAME; running = false; } else if( baseName == "TemperateArea" ){ new_temperate_city( &main_screen_originx, &main_screen_originy, with_village ); GameView* gv = getGameView(); if( gv ){ gv->readOrigin(); } quitState = INGAME; running = false; } else if( baseName == "SwampArea" ){ new_swamp_city( &main_screen_originx, &main_screen_originy, with_village ); GameView* gv = getGameView(); if( gv ){ gv->readOrigin(); } quitState = INGAME; running = false; } else { if( loadCityNG( mFilename ) ){ strcpy (given_scene, baseName.c_str()); quitState = INGAME; running = false; } } mFilename = "empty"; //don't erase scenarios later }
void Dialog::applyPortButtonClicked( Button* ){ CheckButton* cb; cb = getCheckButton( *myDialogComponent, "BuyFood" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MB_FOOD; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MB_FOOD; } cb = getCheckButton( *myDialogComponent, "SellFood" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MS_FOOD; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MS_FOOD; } cb = getCheckButton( *myDialogComponent, "BuyCoal" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MB_COAL; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MB_COAL; } cb = getCheckButton( *myDialogComponent, "SellCoal" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MS_COAL; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MS_COAL; } cb = getCheckButton( *myDialogComponent, "BuyOre" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MB_ORE; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MB_ORE; } cb = getCheckButton( *myDialogComponent, "SellOre" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MS_ORE; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MS_ORE; } cb = getCheckButton( *myDialogComponent, "BuyGoods" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MB_GOODS; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MB_GOODS; } cb = getCheckButton( *myDialogComponent, "SellGoods" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MS_GOODS; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MS_GOODS; } cb = getCheckButton( *myDialogComponent, "BuySteel" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MB_STEEL; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MB_STEEL; } cb = getCheckButton( *myDialogComponent, "SellSteel" ); if( cb->state == CheckButton::STATE_CHECKED ){ MP_INFO( pointX,pointY ).flags |= FLAG_MS_STEEL; } else { MP_INFO( pointX,pointY ).flags &= ~FLAG_MS_STEEL; } desktop->remove( myDialogComponent ); blockingDialogIsOpen = false; unRegisterDialog(); }
void Dialog::applyPortButtonClicked( Button* ){ Port *port = dynamic_cast<Port *>(world(pointX, pointY)->reportingConstruction); CheckButton* cb; cb = getCheckButton( *myDialogComponent, "BuyFood" ); if( cb->state == CheckButton::STATE_CHECKED ){ port->commodityRuleCount[Construction::STUFF_FOOD].take = true; } else { port->commodityRuleCount[Construction::STUFF_FOOD].take = false; } cb = getCheckButton( *myDialogComponent, "SellFood" ); if( cb->state == CheckButton::STATE_CHECKED ){ port->commodityRuleCount[Construction::STUFF_FOOD].give = true; } else { port->commodityRuleCount[Construction::STUFF_FOOD].give = false; } if ((port->commodityRuleCount[Construction::STUFF_FOOD].take) && (port->commodityRuleCount[Construction::STUFF_FOOD].give)) { port->commodityRuleCount[Construction::STUFF_FOOD].take = false; port->commodityRuleCount[Construction::STUFF_FOOD].give = false; } cb = getCheckButton( *myDialogComponent, "BuyCoal" ); if( cb->state == CheckButton::STATE_CHECKED ){ port->commodityRuleCount[Construction::STUFF_COAL].take = true; } else { port->commodityRuleCount[Construction::STUFF_COAL].take = false; } cb = getCheckButton( *myDialogComponent, "SellCoal" ); if( cb->state == CheckButton::STATE_CHECKED ){ port->commodityRuleCount[Construction::STUFF_COAL].give = true; } else { port->commodityRuleCount[Construction::STUFF_COAL].give = false; } if ((port->commodityRuleCount[Construction::STUFF_COAL].take) && (port->commodityRuleCount[Construction::STUFF_COAL].give)) { port->commodityRuleCount[Construction::STUFF_COAL].take = false; port->commodityRuleCount[Construction::STUFF_COAL].give = false; } cb = getCheckButton( *myDialogComponent, "BuyOre" ); if( cb->state == CheckButton::STATE_CHECKED ){ port->commodityRuleCount[Construction::STUFF_ORE].take = true; } else { port->commodityRuleCount[Construction::STUFF_ORE].take = false; } cb = getCheckButton( *myDialogComponent, "SellOre" ); if( cb->state == CheckButton::STATE_CHECKED ){ port->commodityRuleCount[Construction::STUFF_ORE].give = true; } else { port->commodityRuleCount[Construction::STUFF_ORE].give = false; } if ((port->commodityRuleCount[Construction::STUFF_ORE].take) && (port->commodityRuleCount[Construction::STUFF_ORE].give)) { port->commodityRuleCount[Construction::STUFF_ORE].take = false; port->commodityRuleCount[Construction::STUFF_ORE].give = false; } cb = getCheckButton( *myDialogComponent, "BuyGoods" ); if( cb->state == CheckButton::STATE_CHECKED ){ port->commodityRuleCount[Construction::STUFF_GOODS].take = true; } else { port->commodityRuleCount[Construction::STUFF_GOODS].take = false; } cb = getCheckButton( *myDialogComponent, "SellGoods" ); if( cb->state == CheckButton::STATE_CHECKED ){ port->commodityRuleCount[Construction::STUFF_GOODS].give = true; } else { port->commodityRuleCount[Construction::STUFF_GOODS].give = false; } if ((port->commodityRuleCount[Construction::STUFF_GOODS].take) && (port->commodityRuleCount[Construction::STUFF_GOODS].give)) { port->commodityRuleCount[Construction::STUFF_GOODS].take = false; port->commodityRuleCount[Construction::STUFF_GOODS].give = false; } cb = getCheckButton( *myDialogComponent, "BuySteel" ); if( cb->state == CheckButton::STATE_CHECKED ){ port->commodityRuleCount[Construction::STUFF_STEEL].take = true; } else { port->commodityRuleCount[Construction::STUFF_STEEL].take = false; } cb = getCheckButton( *myDialogComponent, "SellSteel" ); if( cb->state == CheckButton::STATE_CHECKED ){ port->commodityRuleCount[Construction::STUFF_STEEL].give = true; } else { port->commodityRuleCount[Construction::STUFF_STEEL].give = false; } if ((port->commodityRuleCount[Construction::STUFF_STEEL].take) && (port->commodityRuleCount[Construction::STUFF_STEEL].give)) { port->commodityRuleCount[Construction::STUFF_STEEL].take = false; port->commodityRuleCount[Construction::STUFF_STEEL].give = false; } desktop->remove( myDialogComponent ); blockingDialogIsOpen = false; unRegisterDialog(); }
void Dialog::applyMarketButtonClicked( Button* ){ CheckButton* cb; Market * market = static_cast <Market *> (world(pointX, pointY)->construction); cb = getCheckButton( *myDialogComponent, "BuyJobs" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_JOBS].take = true; } else { market->commodityRuleCount[Construction::STUFF_JOBS].take = false; } cb = getCheckButton( *myDialogComponent, "SellJobs" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_JOBS].give = true; } else { market->commodityRuleCount[Construction::STUFF_JOBS].give = false; } cb = getCheckButton( *myDialogComponent, "BuyFood" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_FOOD].take = true; } else { market->commodityRuleCount[Construction::STUFF_FOOD].take = false; } cb = getCheckButton( *myDialogComponent, "SellFood" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_FOOD].give = true; } else { market->commodityRuleCount[Construction::STUFF_FOOD].give = false; } cb = getCheckButton( *myDialogComponent, "BuyCoal" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_COAL].take = true; } else { market->commodityRuleCount[Construction::STUFF_COAL].take = false; } cb = getCheckButton( *myDialogComponent, "SellCoal" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_COAL].give = true; } else { market->commodityRuleCount[Construction::STUFF_COAL].give = false; } cb = getCheckButton( *myDialogComponent, "BuyOre" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_ORE].take = true; } else { market->commodityRuleCount[Construction::STUFF_ORE].take = false; } cb = getCheckButton( *myDialogComponent, "SellOre" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_ORE].give = true; } else { market->commodityRuleCount[Construction::STUFF_ORE].give = false; } cb = getCheckButton( *myDialogComponent, "BuyGoods" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_GOODS].take = true; } else { market->commodityRuleCount[Construction::STUFF_GOODS].take = false; } cb = getCheckButton( *myDialogComponent, "SellGoods" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_GOODS].give = true; } else { market->commodityRuleCount[Construction::STUFF_GOODS].give = false; } cb = getCheckButton( *myDialogComponent, "BuySteel" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_STEEL].take = true; } else { market->commodityRuleCount[Construction::STUFF_STEEL].take = false; } cb = getCheckButton( *myDialogComponent, "SellSteel" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_STEEL].give = true; } else { market->commodityRuleCount[Construction::STUFF_STEEL].give = false; } cb = getCheckButton( *myDialogComponent, "BuyWaste" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_WASTE].take = true; } else { market->commodityRuleCount[Construction::STUFF_WASTE].take = false; } cb = getCheckButton( *myDialogComponent, "SellWaste" ); if( cb->state == CheckButton::STATE_CHECKED ){ market->commodityRuleCount[Construction::STUFF_WASTE].give = true; } else { market->commodityRuleCount[Construction::STUFF_WASTE].give = false; } mps_refresh(); desktop->remove( myDialogComponent ); blockingDialogIsOpen = false; unRegisterDialog(); }
/** * Handle RadioButtons in load, save and new game dialog */ void MainMenu::selectLoadSaveGameButtonClicked(CheckButton* button , int, bool save ) { std::string fc=button->getCaptionText(); if( newGameMenu.get()==currentMenu ) { std::map<std::string, std::string>::iterator iter; iter = fileMap.find( button->getName() ); if( iter != fileMap.end() ){ fc = iter->second; } } std::string file=""; /* I guess this should be the proper way of selecting in the menu. Everytime we check a new button the last one gets unchecked. If the button checked is an empty one, nothing should be opened Could be done the other way around: the first time an existing item is selected in the menu, an empty one could never be checked again. Anyway I don't think both should be checked, when an empty is checked after an existing one. */ const std::string bs[]={"File0","File1","File2","File3","File4","File5",""}; for(int i=0;std::string(bs[i]).length();i++) { CheckButton *b=getCheckButton(*currentMenu,bs[i]); if(b->getName()!=button->getName()){ b->uncheck(); } else { b->check(); } } if( newGameMenu.get()==currentMenu ) { const std::string rnd[]={"RiverDelta","DesertArea","TemperateArea","SwampArea",""}; for(int i=0;std::string(rnd[i]).length();i++) { CheckButton *b=getCheckButton(*currentMenu,rnd[i]); if(b->getName()!=button->getName()){ b->uncheck(); } else { b->check(); fc = rnd[i]; } } } if( !fc.length()) { mFilename = ""; return; } baseName = fc; if(newGameMenu.get()==currentMenu ) { file=std::string("opening/")+fc+".scn"; } else { file=fc; } mFilename=""; if(newGameMenu.get()!=currentMenu) { slotNr = 1 + atoi( const_cast<char*>(button->getName().substr(4).c_str()) ); if( file.length() == 0){ mFilename = ""; return; } } mFilename+=file; Uint32 now = SDL_GetTicks(); //doubleclick on Filename loads File if( ( fc == doubleClickButtonName ) && ( !save ) && ( now - lastClickTick < doubleClickTime ) ) { lastClickTick = 0; doubleClickButtonName = ""; if( newGameMenu.get() == currentMenu ) { //load scenario newGameStartButtonClicked( 0 ); } else { //load game loadGameLoadButtonClicked( 0 ); } } else { lastClickTick = now; doubleClickButtonName = fc; } }
void MainMenu::loadOptionsMenu() { if(optionsMenu.get() == 0) { optionsMenu.reset(loadGUIFile("gui/options.xml")); CheckButton* currentCheckButton = getCheckButton(*optionsMenu, "BackgroundMusic"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "SoundFX"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "Fullscreen"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "MusicVolumePlus"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "MusicVolumeMinus"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "FXVolumePlus"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "FXVolumeMinus"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "TrackPrev"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "TrackNext"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "ResolutionPrev"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "ResolutionNext"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "WorldLenPrev"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "WorldLenNext"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "LanguagePrev"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "LanguageNext"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "BinaryMode"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); currentCheckButton = getCheckButton(*optionsMenu, "SeedMode"); currentCheckButton->clicked.connect( makeCallback(*this, &MainMenu::optionsMenuButtonClicked)); Button* currentButton = getButton(*optionsMenu, "BackButton"); currentButton->clicked.connect( makeCallback(*this, &MainMenu::optionsBackButtonClicked)); } //adjust checkbutton-states if( getConfig()->musicEnabled ){ getCheckButton(*optionsMenu, "BackgroundMusic")->check(); } else { getCheckButton(*optionsMenu, "BackgroundMusic")->uncheck(); } if( getConfig()->soundEnabled ){ getCheckButton(*optionsMenu, "SoundFX")->check(); } else { getCheckButton(*optionsMenu, "SoundFX")->uncheck(); } if( getConfig()->useFullScreen ){ getCheckButton(*optionsMenu, "Fullscreen")->check(); } else { getCheckButton(*optionsMenu, "Fullscreen")->uncheck(); } if (binary_mode) { getCheckButton(*optionsMenu, "BinaryMode")->check();} else { getCheckButton(*optionsMenu, "BinaryMode")->uncheck();} if (seed_compression) { getCheckButton(*optionsMenu, "SeedMode")->check();} else { getCheckButton(*optionsMenu, "SeedMode")->uncheck();} //current background track musicParagraph = getParagraph( *optionsMenu, "musicParagraph"); musicParagraph->setText(getSound()->currentTrack.title); std::stringstream mode; mode << SDL_GetVideoSurface()->w << "x" << SDL_GetVideoSurface()->h; getParagraph( *optionsMenu, "resolutionParagraph")->setText(mode.str()); mode.str(""); mode << world.len(); getParagraph( *optionsMenu, "WorldLenParagraph")->setText(mode.str()); languageParagraph = getParagraph( *optionsMenu, "languageParagraph"); currentLanguage = getConfig()->language; languageParagraph->setText( getConfig()->language ); languages = dictionaryManager->get_languages(); languages.insert( "autodetect" ); languages.insert( "en" ); // English is the default when no translation is used optionsMenu->resize(getConfig()->videoX, getConfig()->videoY); //(SDL_GetVideoSurface()->w, SDL_GetVideoSurface()->h); }
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"); }
//see do_history_linegraph in oldgui/screen.cpp void EconomyGraph::updateData(){ int i; float f; int w = getConfig()->monthgraphW; //thats the value oldgui uses, so saved data has same scale as new. int h = 64; //MONTHGRAPH_H; for (i = w - 1; i > 0; i--) { monthgraph_pop[i] = monthgraph_pop[i-1]; monthgraph_ppool[i] = monthgraph_ppool[i-1]; monthgraph_nojobs[i] = monthgraph_nojobs[i-1]; monthgraph_starve[i] = monthgraph_starve[i-1]; } if (tpopulation > 0) { monthgraph_pop[0] = ((int) (log ((tpopulation / NUMOF_DAYS_IN_MONTH) + 1.f) * h / 15)) - 5; if (monthgraph_pop[0] < 0) monthgraph_pop[0] = 0; f = ((float) tstarving_population / ((float) tpopulation + 1.0)) * 100.0; if (tpopulation > 3000) /* double the scale if pop > 3000 */ f += f; if (tpopulation > 6000) /* double it AGAIN if pop > 6000 */ f += f; monthgraph_starve[0] = (int) f; /* max out at 32 */ if (monthgraph_starve[0] >= h) monthgraph_starve[0] = h - 1; f = ((float) tunemployed_population / ((float) tpopulation + 1.0)) * 100.0; if (tpopulation > 3000) /* double the scale if pop > 3000 */ f += f; if (tpopulation > 6000) /* double it AGAIN if pop > 6000 */ f += f; monthgraph_nojobs[0] = (int) f; /* max out at 32 */ if (monthgraph_nojobs[0] >= h) monthgraph_nojobs[0] = h - 1; monthgraph_ppool[0] = ((int) (sqrt (people_pool + 1.f) * h) / 35); if (monthgraph_ppool[0] < 0) monthgraph_ppool[0] = 0; if (monthgraph_ppool[0] >= h) monthgraph_ppool[0] = h - 1; } //sustainability check from do_sust_barchart if (sust_dig_ore_coal_count >= SUST_ORE_COAL_YEARS_NEEDED && sust_port_count >= SUST_PORT_YEARS_NEEDED && sust_old_money_count >= SUST_MONEY_YEARS_NEEDED && sust_old_population_count >= SUST_POP_YEARS_NEEDED && sust_old_tech_count >= SUST_TECH_YEARS_NEEDED && sust_fire_count >= SUST_FIRE_YEARS_NEEDED) { if (sustain_flag == 0){ ok_dial_box ("sustain.mes", GOOD, 0L); sustain_flag = 1; } } else { sustain_flag = 0; } //sustain_flag == 1 means player had a sustainable economy //total_evacuated >0 means player evacuated at least some people if( !housed_population && !people_pool ){ //no people left if( !nobodyHomeDialogShown ){ std::string message; if( sustain_flag == 1 || total_evacuated >0 ){ message =""; } else { message = _("You lose."); } try{ new Dialog( MSG_DIALOG, "allgone.xml", message ); } catch(std::exception& e) { std::cerr << "Problem with ok_dial_box: " << e.what() << "\n"; std::ostringstream text; text << "ok_dial_box:' allgone.xml" << "' + \"" << message << "\"\n"; updateMessageText( text.str() ); } nobodyHomeDialogShown = true; } } else if( nobodyHomeDialogShown ){ //reset flag if there are people nobodyHomeDialogShown = false; } Component* root = this; while( root->getParent() ){ root = root->getParent(); } // Initialisation can not be done in constructor because the SwitchEconomyGraph-Button does not exist then. if( switchEconomyGraphButton == NULL ){ switchEconomyGraphButton = getCheckButton( *root, "SwitchEconomyGraph" ); switchEconomyGraphText = switchEconomyGraphButton->getCaptionText(); switchEconomyGraphParagraph = dynamic_cast<Paragraph*>(switchEconomyGraphButton->getCaption()); redStyle = yellowStyle = normalStyle = switchEconomyGraphParagraph->getStyle(); yellowStyle.text_color.parse("yellow"); redStyle.text_color.parse("red"); } // set tab Button colour if( switchEconomyGraphParagraph ){ if( monthgraph_starve[0] > 0 ){ // people are starving: RED switchEconomyGraphParagraph->setText(switchEconomyGraphText, redStyle); } else if( monthgraph_nojobs[0] > 0 ){ // people are unemployed: YELLOW switchEconomyGraphParagraph->setText(switchEconomyGraphText, yellowStyle); } else { switchEconomyGraphParagraph->setText(switchEconomyGraphText, normalStyle); } } //redraw setDirty(); }