# HG changeset patch # User unc0rr # Date 1292778084 -10800 # Node ID b55f78fd2bf6d523816677b3b1023fe984b9f742 # Parent da9d27bc6ea6333edab6f7dae69da131afd4ddb4 - Simplify map container code a bit diff -r da9d27bc6ea6 -r b55f78fd2bf6 QTfrontend/hwmap.cpp --- a/QTfrontend/hwmap.cpp Sun Dec 19 19:24:15 2010 +0300 +++ b/QTfrontend/hwmap.cpp Sun Dec 19 20:01:24 2010 +0300 @@ -33,7 +33,7 @@ templateFilter = filter; m_mapgen = mapgen; m_maze_size = maze_size; - m_drawMapData = drawMapData; + if(mapgen == MAPGEN_MAZE) m_drawMapData = drawMapData; Start(); } diff -r da9d27bc6ea6 -r b55f78fd2bf6 QTfrontend/hwmap.h --- a/QTfrontend/hwmap.h Sun Dec 19 19:24:15 2010 +0300 +++ b/QTfrontend/hwmap.h Sun Dec 19 20:01:24 2010 +0300 @@ -30,7 +30,7 @@ MAPGEN_REGULAR, MAPGEN_MAZE, MAPGEN_DRAWN, - MAPGEN_LAST + MAPGEN_MAP }; class HWMap : public TCPBase diff -r da9d27bc6ea6 -r b55f78fd2bf6 QTfrontend/mapContainer.cpp --- a/QTfrontend/mapContainer.cpp Sun Dec 19 19:24:15 2010 +0300 +++ b/QTfrontend/mapContainer.cpp Sun Dec 19 20:01:24 2010 +0300 @@ -30,6 +30,7 @@ #include #include #include +#include #include "hwconsts.h" #include "mapContainer.h" @@ -39,8 +40,7 @@ QWidget(parent), mainLayout(this), pMap(0), - mapgen(MAPGEN_REGULAR), - maze_size(0) + mapgen(MAPGEN_REGULAR) { hhSmall.load(":/res/hh_small.png"); hhLimit = 18; @@ -171,7 +171,7 @@ maze_size_selection->addItem(tr("Medium floating islands"), 4); maze_size_selection->addItem(tr("Large floating islands"), 5); maze_size_selection->setCurrentIndex(1); - maze_size = 1; + mapLayout->addWidget(maze_size_selection, 2, 1); maze_size_selection->hide(); connect(maze_size_selection, SIGNAL(currentIndexChanged(int)), this, SLOT(setMaze_size(int))); @@ -272,7 +272,7 @@ switch(index) { case MAPGEN_REGULAR: mapgen = MAPGEN_REGULAR; - changeImage(); + updatePreview(); gbThemes->show(); lblFilter->show(); CB_TemplateFilter->show(); @@ -284,7 +284,7 @@ break; case MAPGEN_MAZE: mapgen = MAPGEN_MAZE; - changeImage(); + updatePreview(); gbThemes->show(); lblFilter->hide(); CB_TemplateFilter->hide(); @@ -296,7 +296,7 @@ break; case MAPGEN_DRAWN: mapgen = MAPGEN_DRAWN; - changeImage(); + updatePreview(); gbThemes->show(); lblFilter->hide(); CB_TemplateFilter->hide(); @@ -307,7 +307,7 @@ emit themeChanged(chooseMap->itemData(index).toList()[1].toString()); break; default: - loadMap(index); + updatePreview(); gbThemes->hide(); lblFilter->hide(); CB_TemplateFilter->hide(); @@ -317,19 +317,6 @@ } } -void HWMapContainer::loadMap(int index) -{ - QPixmap mapImage; - if(!mapImage.load(datadir->absolutePath() + "/Maps/" + chooseMap->itemData(index).toList()[0].toString() + "/preview.png")) { - changeImage(); - chooseMap->setCurrentIndex(0); - return; - } - - hhLimit = chooseMap->itemData(index).toList()[2].toInt(); - addInfoToPreview(mapImage); -} - // Should this add text to identify map size? void HWMapContainer::addInfoToPreview(QPixmap image) { @@ -350,7 +337,7 @@ imageButt->setIconSize(image.size()); } -void HWMapContainer::changeImage() +void HWMapContainer::askForGeneratedPreview() { if (pMap) { @@ -362,7 +349,12 @@ pMap = new HWMap(); connect(pMap, SIGNAL(ImageReceived(const QImage)), this, SLOT(setImage(const QImage))); connect(pMap, SIGNAL(HHLimitReceived(int)), this, SLOT(setHHLimit(int))); - pMap->getImage(m_seed, getTemplateFilter(), mapgen, maze_size, getDrawnMapData()); + pMap->getImage(m_seed, + getTemplateFilter(), + get_mapgen(), + get_maze_size(), + getDrawnMapData() + ); } void HWMapContainer::themeSelected(int currentRow) @@ -389,7 +381,7 @@ QString HWMapContainer::getCurrentMap() const { - if(chooseMap->currentIndex() <= 2) return QString(); + if(chooseMap->currentIndex() < MAPGEN_MAP) return QString(); return chooseMap->itemData(chooseMap->currentIndex()).toList()[0].toString(); } @@ -435,18 +427,12 @@ m_seed = seed; if (seed != seedEdit->text()) seedEdit->setText(seed); - if (chooseMap->currentIndex() < MAPGEN_LAST) - changeImage(); + if (chooseMap->currentIndex() < MAPGEN_MAP) + updatePreview(); } void HWMapContainer::setMap(const QString & map) { - if(map == "+rnd+" || map == "+maze+" || map == "+drawn+") - { - changeImage(); - return; - } - int id = 0; for(int i = 0; i < chooseMap->count(); i++) if(!chooseMap->itemData(i).isNull() && chooseMap->itemData(i).toList()[0].toString() == map) @@ -460,10 +446,11 @@ { disconnect(pMap, 0, this, SLOT(setImage(const QImage))); disconnect(pMap, 0, this, SLOT(setHHLimit(int))); + pMap->deleteLater(); pMap = 0; } chooseMap->setCurrentIndex(id); - loadMap(id); + updatePreview(); } } @@ -473,7 +460,7 @@ if(items.size()) lwThemes->setCurrentItem(items.at(0)); } -#include + void HWMapContainer::setRandomMap() { setRandomSeed(); @@ -512,8 +499,8 @@ m_seed = QUuid::createUuid().toString(); seedEdit->setText(m_seed); emit seedChanged(m_seed); - if (chooseMap->currentIndex() < MAPGEN_LAST) - changeImage(); + if (chooseMap->currentIndex() < MAPGEN_MAP) + askForGeneratedPreview(); } void HWMapContainer::setRandomTheme() @@ -531,7 +518,7 @@ void HWMapContainer::templateFilterChanged(int filter) { emit newTemplateFilter(filter); - changeImage(); + updatePreview(); } MapGenerator HWMapContainer::get_mapgen(void) const @@ -541,28 +528,28 @@ int HWMapContainer::get_maze_size(void) const { - return maze_size; + return maze_size_selection->currentIndex(); } void HWMapContainer::setMaze_size(int size) { - maze_size = size; maze_size_selection->setCurrentIndex(size); emit maze_sizeChanged(size); - changeImage(); + updatePreview(); } void HWMapContainer::setMapgen(MapGenerator m) { mapgen = m; + chooseMap->setCurrentIndex(m); emit mapgenChanged(m); - changeImage(); + updatePreview(); } void HWMapContainer::setDrawnMapData(const QByteArray & ar) { drawMapScene.decode(ar); - changeImage(); + updatePreview(); } QByteArray HWMapContainer::getDrawnMapData() @@ -590,5 +577,31 @@ { emit drawnMapChanged(getDrawnMapData()); - changeImage(); + updatePreview(); } + +void HWMapContainer::updatePreview() +{ + switch(chooseMap->currentIndex()) + { + case MAPGEN_REGULAR: + askForGeneratedPreview(); + break; + case MAPGEN_MAZE: + askForGeneratedPreview(); + break; + case MAPGEN_DRAWN: + askForGeneratedPreview(); + break; + default: + int curIndex = chooseMap->currentIndex(); + QPixmap mapImage; + if(!mapImage.load(datadir->absolutePath() + "/Maps/" + chooseMap->itemData(curIndex).toList()[0].toString() + "/preview.png")) { + imageButt->setIcon(QIcon()); + return; + } + + hhLimit = chooseMap->itemData(curIndex).toList()[2].toInt(); + addInfoToPreview(mapImage); + } +} diff -r da9d27bc6ea6 -r b55f78fd2bf6 QTfrontend/mapContainer.h --- a/QTfrontend/mapContainer.h Sun Dec 19 19:24:15 2010 +0300 +++ b/QTfrontend/mapContainer.h Sun Dec 19 20:01:24 2010 +0300 @@ -58,7 +58,7 @@ void mapDrawingFinished(); public slots: - void changeImage(); + void askForGeneratedPreview(); void setSeed(const QString & seed); void setMap(const QString & map); void setTheme(const QString & theme); @@ -113,10 +113,9 @@ QComboBox *maze_size_selection; MapGenerator mapgen; int numMissions; - int maze_size; DrawMapScene drawMapScene; - void loadMap(int index); + void updatePreview(); }; #endif // _HWMAP_CONTAINER_INCLUDED diff -r da9d27bc6ea6 -r b55f78fd2bf6 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Sun Dec 19 19:24:15 2010 +0300 +++ b/hedgewars/uLand.pas Sun Dec 19 20:01:24 2010 +0300 @@ -1045,6 +1045,8 @@ 0: GenBlank(EdgeTemplates[SelectTemplate]); 1: GenMaze; 2: GenDrawnMap; + else + OutError('Unknown mapgen', true); end; AddProgress(); @@ -1286,6 +1288,8 @@ 0: GenBlank(EdgeTemplates[SelectTemplate]); 1: GenMaze; 2: GenDrawnMap; + else + OutError('Unknown mapgen', true); end; lh:= LAND_HEIGHT div 128;