- updates to mod menu for better user experience

This commit is contained in:
Mark Vejvoda 2011-03-25 18:42:08 +00:00
parent 9096449919
commit 1a783b3bba
4 changed files with 246 additions and 84 deletions

View File

@ -1289,7 +1289,7 @@ void Renderer::renderLabel(const GraphicLabel *label,const Vec4f *color) {
glPopAttrib();
}
void Renderer::renderButton(const GraphicButton *button, const Vec4f *fontColorOverride) {
void Renderer::renderButton(const GraphicButton *button, const Vec4f *fontColorOverride, bool *lightedOverride) {
if(button->getVisible() == false) {
return;
}
@ -1360,7 +1360,11 @@ void Renderer::renderButton(const GraphicButton *button, const Vec4f *fontColorO
float anim= GraphicComponent::getAnim();
if(anim>0.5f) anim= 1.f-anim;
if(button->getLighted() && button->getEditable()){
bool renderLighted = (button->getLighted() && button->getEditable());
if(lightedOverride != NULL) {
renderLighted = *lightedOverride;
}
if(renderLighted) {
const int lightSize= 0;
const Vec4f color1= Vec4f(color.x, color.y, color.z, 0.1f+anim*0.5f);
const Vec4f color2= Vec4f(color.x, color.y, color.z, 0.3f+anim);

View File

@ -354,7 +354,7 @@ public:
void renderLabel(const GraphicLabel *label);
void renderLabel(const GraphicLabel *label,const Vec3f *color);
void renderLabel(const GraphicLabel *label,const Vec4f *color);
void renderButton(const GraphicButton *button,const Vec4f *fontColorOverride=NULL);
void renderButton(const GraphicButton *button,const Vec4f *fontColorOverride=NULL,bool *lightedOverride=NULL);
void renderCheckBox(const GraphicCheckBox *box);
void renderLine(const GraphicLine *line);
void renderScrollBar(const GraphicScrollBar *sb);

View File

@ -26,8 +26,6 @@
namespace Glest{ namespace Game{
static const string ITEM_MISSING = "***missing***";
using namespace Shared::Util;
struct FormatString {
@ -66,22 +64,27 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
keyTechScrollBarTitle1.registerGraphicComponent(containerName,"keyTechScrollBarTitle1");
keyTechScrollBarTitle1.init(techInfoXPos,scrollListsYPos + 20,labelWidth,20);
keyTechScrollBarTitle1.setText(lang.get("TechTitle1"));
keyTechScrollBarTitle1.setFont(CoreData::getInstance().getMenuFontBig());
keyTechScrollBarTitle2.registerGraphicComponent(containerName,"keyTechScrollBarTitle2");
keyTechScrollBarTitle2.init(techInfoXPos + 200,scrollListsYPos + 20,labelWidth,20);
keyTechScrollBarTitle2.setText(lang.get("TechTitle2"));
keyTechScrollBarTitle2.setFont(CoreData::getInstance().getMenuFontBig());
int mapInfoXPos = 270;
keyMapScrollBarTitle1.registerGraphicComponent(containerName,"keyMapScrollBarTitle1");
keyMapScrollBarTitle1.init(mapInfoXPos,scrollListsYPos + 20,labelWidth,20);
keyMapScrollBarTitle1.setText(lang.get("MapTitle1"));
keyMapScrollBarTitle1.setFont(CoreData::getInstance().getMenuFontBig());
keyMapScrollBarTitle2.registerGraphicComponent(containerName,"keyMapScrollBarTitle2");
keyMapScrollBarTitle2.init(mapInfoXPos + 200,scrollListsYPos + 20,labelWidth,20);
keyMapScrollBarTitle2.setText(lang.get("MapTitle2"));
keyMapScrollBarTitle2.setFont(CoreData::getInstance().getMenuFontBig());
int tilesetInfoXPos = 530;
keyTilesetScrollBarTitle1.registerGraphicComponent(containerName,"keyTilesetScrollBarTitle1");
keyTilesetScrollBarTitle1.init(tilesetInfoXPos,scrollListsYPos + 20,labelWidth,20);
keyTilesetScrollBarTitle1.setText(lang.get("TilesetTitle1"));
keyTilesetScrollBarTitle1.setFont(CoreData::getInstance().getMenuFontBig());
mainMessageBoxState = ftpmsg_None;
mainMessageBox.registerGraphicComponent(containerName,"mainMessageBox");
@ -136,7 +139,7 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
Tokenize(tilesetsMetaData,tilesetListRemote,"\n");
getTilesetsLocalList();
for(int i=0; i < tilesetListRemote.size(); i++) {
for(unsigned int i=0; i < tilesetListRemote.size(); i++) {
string tilesetInfo = tilesetListRemote[i];
std::vector<std::string> tilesetInfoList;
Tokenize(tilesetInfo,tilesetInfoList,"|");
@ -162,12 +165,24 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
keyTilesetButtons.push_back(button);
}
}
for(unsigned int i=0; i < tilesetFilesUserData.size(); i++) {
string tilesetName = tilesetFilesUserData[i];
bool alreadyHasTileset = (tilesetCacheList.find(tilesetName) != tilesetCacheList.end());
if(alreadyHasTileset == false) {
GraphicButton *button=new GraphicButton();
button->init(tilesetInfoXPos, keyButtonsYBase, keyButtonsWidth,keyButtonsHeight);
button->setText(tilesetName);
button->setUseCustomTexture(true);
button->setCustomTexture(CoreData::getInstance().getCustomTexture());
keyTilesetButtons.push_back(button);
}
}
techListRemote.clear();
Tokenize(techsMetaData,techListRemote,"\n");
getTechsLocalList();
for(int i=0; i < techListRemote.size(); i++) {
for(unsigned int i=0; i < techListRemote.size(); i++) {
string techInfo = techListRemote[i];
std::vector<std::string> techInfoList;
Tokenize(techInfo,techInfoList,"|");
@ -198,12 +213,36 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
labelsTech.push_back(label);
}
}
for(unsigned int i=0; i < techTreeFilesUserData.size(); i++) {
string techName = techTreeFilesUserData[i];
bool alreadyHasTech = (techCacheList.find(techName) != techCacheList.end());
if(alreadyHasTech == false) {
vector<string> techPaths = config.getPathListForType(ptTechs);
string &techPath = techPaths[1];
endPathWithSlash(techPath);
vector<string> factions;
findAll(techPath + techName + "/factions/*.", factions, false, false);
GraphicButton *button=new GraphicButton();
button->init(techInfoXPos, keyButtonsYBase, keyButtonsWidth,keyButtonsHeight);
button->setText(techName);
button->setUseCustomTexture(true);
button->setCustomTexture(CoreData::getInstance().getCustomTexture());
keyTechButtons.push_back(button);
int techFactionCount = factions.size();
GraphicLabel *label=new GraphicLabel();
label->init(techInfoXPos + keyButtonsWidth+10,keyButtonsYBase,labelWidth,20);
label->setText(intToStr(techFactionCount));
labelsTech.push_back(label);
}
}
mapListRemote.clear();
Tokenize(mapsMetaData,mapListRemote,"\n");
getMapsLocalList();
for(int i=0; i < mapListRemote.size(); i++) {
for(unsigned int i=0; i < mapListRemote.size(); i++) {
string mapInfo = mapListRemote[i];
std::vector<std::string> mapInfoList;
Tokenize(mapInfo,mapInfoList,"|");
@ -223,17 +262,38 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
button->setText(mapName);
button->setUseCustomTexture(true);
button->setCustomTexture(CoreData::getInstance().getCustomTexture());
//if(alreadyHasMap == true) {
// button->setEnabled(false);
//}
keyMapButtons.push_back(button);
GraphicLabel *label=new GraphicLabel();
label->init(mapInfoXPos + keyButtonsWidth + 10,keyButtonsYBase,labelWidth,20);
label->setText(mapPlayerCount);
labelsMap.push_back(label);
}
}
for(unsigned int i=0; i < mapFilesUserData.size(); i++) {
string mapName = mapFilesUserData[i];
bool alreadyHasMap = (mapCacheList.find(mapName) != mapCacheList.end());
if(alreadyHasMap == false) {
vector<string> mapPaths = config.getPathListForType(ptMaps);
string &mapPath = mapPaths[1];
endPathWithSlash(mapPath);
mapPath += mapName;
MapInfo mapInfo = loadMapInfo(mapPath);
GraphicButton *button=new GraphicButton();
button->init(mapInfoXPos, keyButtonsYBase, keyButtonsWidth,keyButtonsHeight);
button->setText(mapName);
button->setUseCustomTexture(true);
button->setCustomTexture(CoreData::getInstance().getCustomTexture());
keyMapButtons.push_back(button);
int mapPlayerCount = mapInfo.players;
GraphicLabel *label=new GraphicLabel();
label->init(mapInfoXPos + keyButtonsWidth + 10,keyButtonsYBase,labelWidth,20);
label->setText(intToStr(mapPlayerCount));
labelsMap.push_back(label);
}
}
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
@ -300,11 +360,48 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
}
MapInfo MenuStateMods::loadMapInfo(string file) {
Lang &lang= Lang::getInstance();
MapInfo mapInfo;
//memset(&mapInfo,0,sizeof(mapInfo));
try{
FILE *f= fopen(file.c_str(), "rb");
if(f != NULL) {
MapFileHeader header;
size_t readBytes = fread(&header, sizeof(MapFileHeader), 1, f);
mapInfo.size.x= header.width;
mapInfo.size.y= header.height;
mapInfo.players= header.maxFactions;
mapInfo.desc= lang.get("MaxPlayers")+": "+intToStr(mapInfo.players)+"\n";
mapInfo.desc+=lang.get("Size")+": "+intToStr(mapInfo.size.x) + " x " + intToStr(mapInfo.size.y);
fclose(f);
}
}
catch(exception &e) {
SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error [%s] loading map [%s]\n",__FILE__,__FUNCTION__,__LINE__,e.what(),file.c_str());
throw runtime_error("Error loading map file: [" + file + "] msg: " + e.what());
}
return mapInfo;
}
void MenuStateMods::getTechsLocalList() {
Config &config = Config::getInstance();
vector<string> results;
findDirs(config.getPathListForType(ptTechs), results);
techTreeFiles = results;
techTreeFilesUserData.clear();
if(config.getPathListForType(ptTechs).size() > 1) {
string path = config.getPathListForType(ptTechs)[1];
endPathWithSlash(path);
findDirs(path, techTreeFilesUserData, false, false);
}
}
void MenuStateMods::refreshTechs() {
@ -335,6 +432,13 @@ void MenuStateMods::getTilesetsLocalList() {
vector<string> results;
findDirs(config.getPathListForType(ptTilesets), results);
tilesetFiles = results;
tilesetFilesUserData.clear();
if(config.getPathListForType(ptTilesets).size() > 1) {
string path = config.getPathListForType(ptTilesets)[1];
endPathWithSlash(path);
findDirs(path, tilesetFilesUserData, false, false);
}
}
void MenuStateMods::refreshTilesets() {
@ -372,6 +476,28 @@ void MenuStateMods::getMapsLocalList() {
copy(allMaps.begin(), allMaps.end(), std::back_inserter(results));
mapFiles = results;
mapFilesUserData.clear();
if(config.getPathListForType(ptMaps).size() > 1) {
string path = config.getPathListForType(ptMaps)[1];
endPathWithSlash(path);
vector<string> results2;
set<string> allMaps2;
findAll(path + "*.gbm", results2, false, false);
copy(results2.begin(), results2.end(), std::inserter(allMaps2, allMaps2.begin()));
results2.clear();
findAll(path + "*.mgm", results2, false, false);
copy(results2.begin(), results2.end(), std::inserter(allMaps2, allMaps2.begin()));
results2.clear();
copy(allMaps2.begin(), allMaps2.end(), std::back_inserter(results2));
mapFilesUserData = results2;
printf("\n\nMap path [%s] mapFilesUserData.size() = %d\n\n\n",path.c_str(),mapFilesUserData.size());
}
}
void MenuStateMods::refreshMaps() {
@ -482,6 +608,21 @@ void MenuStateMods::mouseClick(int x, int y, MouseButton mouseButton) {
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Removing Map [%s]\n",removeMap.c_str());
removeFile(removeMap);
bool remoteHasMap = (mapCacheList.find(selectedMapName) != mapCacheList.end());
if(remoteHasMap == false) {
for(unsigned int i = 0; i < keyMapButtons.size(); ++i) {
GraphicButton *button = keyMapButtons[i];
if(button != NULL && button->getText() == selectedMapName) {
delete button;
keyMapButtons.erase(keyMapButtons.begin() + i);
labelsMap.erase(labelsMap.begin() + i);
keyMapScrollBar.setElementCount(keyMapButtons.size());
break;
}
}
}
selectedMapName = "";
refreshMaps();
Checksum::clearFileCache();
@ -500,6 +641,18 @@ void MenuStateMods::mouseClick(int x, int y, MouseButton mouseButton) {
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Removing Tileset [%s]\n",removeTileset.c_str());
removeFolder(removeTileset);
bool remoteHasTileset = (tilesetCacheList.find(selectedTilesetName) != tilesetCacheList.end());
if(remoteHasTileset == false) {
for(unsigned int i = 0; i < keyTilesetButtons.size(); ++i) {
GraphicButton *button = keyTilesetButtons[i];
if(button != NULL && button->getText() == selectedTilesetName) {
delete button;
keyTilesetButtons.erase(keyTilesetButtons.begin() + i);
keyTilesetScrollBar.setElementCount(keyTilesetButtons.size());
break;
}
}
}
MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__));
safeMutexFTPProgress.Lock();
Checksum::clearFileCache();
@ -527,6 +680,20 @@ void MenuStateMods::mouseClick(int x, int y, MouseButton mouseButton) {
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Removing Techtree [%s]\n",removeTech.c_str());
removeFolder(removeTech);
bool remoteHasTech = (techCacheList.find(selectedTechName) != techCacheList.end());
if(remoteHasTech == false) {
for(unsigned int i = 0; i < keyTechButtons.size(); ++i) {
GraphicButton *button = keyTechButtons[i];
if(button != NULL && button->getText() == selectedTechName) {
delete button;
keyTechButtons.erase(keyTechButtons.begin() + i);
labelsTech.erase(labelsTech.begin() + i);
keyTechScrollBar.setElementCount(keyTechButtons.size());
break;
}
}
}
MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__));
// Clear the CRC file Cache
safeMutexFTPProgress.Lock();
@ -697,63 +864,36 @@ void MenuStateMods::mouseClick(int x, int y, MouseButton mouseButton) {
}
else {
if(keyMapScrollBar.getElementCount() != 0) {
for (int i = keyMapScrollBar.getVisibleStart(); i
<= keyMapScrollBar.getVisibleEnd(); ++i) {
for (int i = keyMapScrollBar.getVisibleStart();
i <= keyMapScrollBar.getVisibleEnd(); ++i) {
if(keyMapButtons[i]->mouseClick(x, y) && keyMapButtons[i]->getEnabled()) {
string mapName = keyMapButtons[i]->getText();
if(mapName != "") {
//string mapURL = mapCacheList[mapName];
//ftpClientThread->addMapToRequests(mapName,mapURL);
//MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__));
//fileFTPProgressList[mapName] = pair<int,string>(0,"");
//safeMutexFTPProgress.ReleaseLock();
selectedMapName = mapName;
//bool alreadyHasMap = (std::find(mapFiles.begin(),mapFiles.end(),selectedMapName) != mapFiles.end());
//buttonInstallMap.setEnabled(alreadyHasMap == false);
//buttonRemoveMap.setEnabled(alreadyHasMap);
}
break;
}
}
}
if(keyTechScrollBar.getElementCount() != 0) {
for (int i = keyTechScrollBar.getVisibleStart(); i
<= keyTechScrollBar.getVisibleEnd(); ++i) {
for (int i = keyTechScrollBar.getVisibleStart();
i <= keyTechScrollBar.getVisibleEnd(); ++i) {
if(keyTechButtons[i]->mouseClick(x, y) && keyTechButtons[i]->getEnabled()) {
string techName = keyTechButtons[i]->getText();
if(techName != "") {
//string techURL = techCacheList[techName];
//ftpClientThread->addTechtreeToRequests(techName,techURL);
//MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__));
//fileFTPProgressList[techName] = pair<int,string>(0,"");
//safeMutexFTPProgress.ReleaseLock();
selectedTechName = techName;
//bool alreadyHasTech = (std::find(techTreeFiles.begin(),techTreeFiles.end(),selectedTechName) != techTreeFiles.end());
//buttonInstallTech.setEnabled(alreadyHasTech == false);
//buttonRemoveTech.setEnabled(alreadyHasTech);
}
break;
}
}
}
if(keyTilesetScrollBar.getElementCount() != 0) {
for (int i = keyTilesetScrollBar.getVisibleStart(); i
<= keyTilesetScrollBar.getVisibleEnd(); ++i) {
for (int i = keyTilesetScrollBar.getVisibleStart();
i <= keyTilesetScrollBar.getVisibleEnd(); ++i) {
if(keyTilesetButtons[i]->mouseClick(x, y) && keyTilesetButtons[i]->getEnabled()) {
string tilesetName = keyTilesetButtons[i]->getText();
if(tilesetName != "") {
//string tilesetURL = tilesetCacheList[tilesetName];
//ftpClientThread->addTilesetToRequests(tilesetName,tilesetURL);
//MutexSafeWrapper safeMutexFTPProgress((ftpClientThread != NULL ? ftpClientThread->getProgressMutex() : NULL),string(__FILE__) + "_" + intToStr(__LINE__));
//fileFTPProgressList[tilesetName] = pair<int,string>(0,"");
//safeMutexFTPProgress.ReleaseLock();
selectedTilesetName = tilesetName;
//bool alreadyHasTileset = (std::find(tilesetFiles.begin(),tilesetFiles.end(),selectedTilesetName) != tilesetFiles.end());
//buttonInstallTileset.setEnabled(alreadyHasTileset == false);
//buttonRemoveTileset.setEnabled(alreadyHasTileset);
}
break;
}
@ -809,8 +949,6 @@ void MenuStateMods::mouseMove(int x, int y, const MouseState *ms) {
void MenuStateMods::render() {
try {
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
Renderer &renderer= Renderer::getInstance();
renderer.renderButton(&buttonReturn);
@ -821,8 +959,6 @@ void MenuStateMods::render() {
renderer.renderButton(&buttonInstallMap);
renderer.renderButton(&buttonRemoveMap);
//renderer.renderTextureQuad(300,200,200,400,NULL,0.5);
// Render Tech List
renderer.renderLabel(&keyTechScrollBarTitle1);
renderer.renderLabel(&keyTechScrollBarTitle2);
@ -830,16 +966,17 @@ void MenuStateMods::render() {
for(int i = keyTechScrollBar.getVisibleStart();
i <= keyTechScrollBar.getVisibleEnd(); ++i) {
bool alreadyHasTech = (std::find(techTreeFiles.begin(),techTreeFiles.end(),keyTechButtons[i]->getText()) != techTreeFiles.end());
if(alreadyHasTech == true) {
Vec4f buttonColor = CYAN;
buttonColor.w = 0.7f;
if(keyTechButtons[i]->getText() == selectedTechName) {
bool lightedOverride = true;
renderer.renderButton(keyTechButtons[i],&WHITE,&lightedOverride);
}
else if(alreadyHasTech == true) {
Vec4f buttonColor = WHITE;
buttonColor.w = 0.75f;
renderer.renderButton(keyTechButtons[i],&buttonColor);
}
else if(keyTechButtons[i]->getText() == selectedTechName) {
renderer.renderButton(keyTechButtons[i],&YELLOW);
}
else {
Vec4f fontColor=Vec4f(1.f, 1.f, 1.f, 0.7f);
Vec4f fontColor=Vec4f(200.0f/255.0f, 187.0f/255.0f, 190.0f/255.0f, 0.75f);
renderer.renderButton(keyTechButtons[i],&fontColor);
}
renderer.renderLabel(labelsTech[i]);
@ -853,16 +990,17 @@ void MenuStateMods::render() {
for(int i = keyTilesetScrollBar.getVisibleStart();
i <= keyTilesetScrollBar.getVisibleEnd(); ++i) {
bool alreadyHasTileset = (std::find(tilesetFiles.begin(),tilesetFiles.end(),keyTilesetButtons[i]->getText()) != tilesetFiles.end());
if(alreadyHasTileset == true) {
Vec4f buttonColor = CYAN;
buttonColor.w = 0.7f;
if(keyTilesetButtons[i]->getText() == selectedTilesetName) {
bool lightedOverride = true;
renderer.renderButton(keyTilesetButtons[i],&WHITE,&lightedOverride);
}
else if(alreadyHasTileset == true) {
Vec4f buttonColor = WHITE;
buttonColor.w = 0.75f;
renderer.renderButton(keyTilesetButtons[i],&buttonColor);
}
else if(keyTilesetButtons[i]->getText() == selectedTilesetName) {
renderer.renderButton(keyTilesetButtons[i],&YELLOW);
}
else {
Vec4f fontColor=Vec4f(1.f, 1.f, 1.f, 0.7f);
Vec4f fontColor=Vec4f(200.0f/255.0f, 187.0f/255.0f, 190.0f/255.0f, 0.75f);
renderer.renderButton(keyTilesetButtons[i],&fontColor);
}
}
@ -876,16 +1014,17 @@ void MenuStateMods::render() {
for(int i = keyMapScrollBar.getVisibleStart();
i <= keyMapScrollBar.getVisibleEnd(); ++i) {
bool alreadyHasMap = (std::find(mapFiles.begin(),mapFiles.end(),keyMapButtons[i]->getText()) != mapFiles.end());
if(alreadyHasMap == true) {
Vec4f buttonColor = CYAN;
buttonColor.w = 0.7f;
if(keyMapButtons[i]->getText() == selectedMapName) {
bool lightedOverride = true;
renderer.renderButton(keyMapButtons[i],&WHITE,&lightedOverride);
}
else if(alreadyHasMap == true) {
Vec4f buttonColor = WHITE;
buttonColor.w = 0.75f;
renderer.renderButton(keyMapButtons[i],&buttonColor);
}
else if(keyMapButtons[i]->getText() == selectedMapName) {
renderer.renderButton(keyMapButtons[i],&YELLOW);
}
else {
Vec4f fontColor=Vec4f(1.f, 1.f, 1.f, 0.7f);
Vec4f fontColor=Vec4f(200.0f/255.0f, 187.0f/255.0f, 190.0f/255.0f, 0.75f);
renderer.renderButton(keyMapButtons[i],&fontColor);
}
renderer.renderLabel(labelsMap[i]);
@ -936,8 +1075,14 @@ void MenuStateMods::update() {
// Tech List
if (keyTechScrollBar.getElementCount() != 0) {
for (int i = keyTechScrollBar.getVisibleStart(); i
<= keyTechScrollBar.getVisibleEnd(); ++i) {
for (int i = keyTechScrollBar.getVisibleStart();
i <= keyTechScrollBar.getVisibleEnd(); ++i) {
if(i >= keyTechButtons.size()) {
char szBuf[1024]="";
sprintf(szBuf,"i >= keyTechButtons.size(), i = %d, keyTechButtons.size() = %d",i,(int)keyTechButtons.size());
throw runtime_error(szBuf);
}
keyTechButtons[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i
- keyTechScrollBar.getVisibleStart()));
labelsTech[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i
@ -947,19 +1092,30 @@ void MenuStateMods::update() {
// Tech List
if (keyTilesetScrollBar.getElementCount() != 0) {
for (int i = keyTilesetScrollBar.getVisibleStart(); i
<= keyTilesetScrollBar.getVisibleEnd(); ++i) {
keyTilesetButtons[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i
- keyTilesetScrollBar.getVisibleStart()));
labelsTech[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i
- keyTilesetScrollBar.getVisibleStart()));
for (int i = keyTilesetScrollBar.getVisibleStart();
i <= keyTilesetScrollBar.getVisibleEnd(); ++i) {
if(i >= keyTilesetButtons.size()) {
char szBuf[1024]="";
sprintf(szBuf,"i >= keyTilesetButtons.size(), i = %d, keyTilesetButtons.size() = %d",i,(int)keyTilesetButtons.size());
throw runtime_error(szBuf);
}
int yPos = keyButtonsYBase - keyButtonsLineHeight *
(i - keyTilesetScrollBar.getVisibleStart());
keyTilesetButtons[i]->setY(yPos);
}
}
// Map List
if (keyMapScrollBar.getElementCount() != 0) {
for (int i = keyMapScrollBar.getVisibleStart(); i
<= keyMapScrollBar.getVisibleEnd(); ++i) {
for (int i = keyMapScrollBar.getVisibleStart();
i <= keyMapScrollBar.getVisibleEnd(); ++i) {
if(i >= keyMapButtons.size()) {
char szBuf[1024]="";
sprintf(szBuf,"i >= keyMapButtons.size(), i = %d, keyMapButtons.size() = %d",i,(int)keyMapButtons.size());
throw runtime_error(szBuf);
}
keyMapButtons[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i
- keyMapScrollBar.getVisibleStart()));
labelsMap[i]->setY(keyButtonsYBase - keyButtonsLineHeight * (i

View File

@ -80,19 +80,20 @@ private:
string selectedTechName;
std::vector<std::string> techListRemote;
std::map<string, string> techCacheList;
vector<string> techTreeFiles;
vector<string> techTreeFilesUserData;
string selectedTilesetName;
std::vector<std::string> tilesetListRemote;
std::map<string, string> tilesetCacheList;
vector<string> tilesetFiles;
vector<string> tilesetFilesUserData;
string selectedMapName;
std::vector<std::string> mapListRemote;
std::map<string, string> mapCacheList;
vector<string> mapFiles;
vector<string> techTreeFiles;
vector<string> tilesetFiles;
vector<string> factionFiles;
vector<string> mapFilesUserData;
FTPClientThread *ftpClientThread;
std::map<string,pair<int,string> > fileFTPProgressList;
@ -122,6 +123,7 @@ public:
private:
MapInfo loadMapInfo(string file);
void showMessageBox(const string &text, const string &header, bool toggle);
void clearUserButtons();
virtual void FTPClient_CallbackEvent(string itemName,