diff -r 7f77fa908a4e -r 217ed62e872c QTfrontend/ui/widget/mapContainer.cpp --- a/QTfrontend/ui/widget/mapContainer.cpp Thu Apr 26 16:15:37 2012 +0200 +++ b/QTfrontend/ui/widget/mapContainer.cpp Fri Apr 27 11:47:37 2012 +0200 @@ -68,11 +68,12 @@ chooseMap = new QComboBox(mapWidget); chooseMap->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + m_mapModel = DataManager::instance().mapModel(); + chooseMap->setModel(m_mapModel); - loadMapList(); - connect(&DataManager::instance(), SIGNAL(updated()), this, SLOT(loadMapList())); + // update model views after model changes (to e.g. re-adjust separators) + connect(&DataManager::instance(), SIGNAL(updated()), this, SLOT(updateModelViews())); - connect(chooseMap, SIGNAL(activated(int)), this, SLOT(mapChanged(int))); mapLayout->addWidget(chooseMap, 1, 1); QLabel * lblMap = new QLabel(tr("Map"), mapWidget); @@ -172,6 +173,13 @@ setRandomSeed(); setRandomTheme(); + + chooseMap->setCurrentIndex(0); + m_mapInfo = MapModel::mapInfoFromData(chooseMap->itemData(0)); + mapChanged(0); + connect(chooseMap, SIGNAL(activated(int)), this, SLOT(mapChanged(int))); + + updateModelViews(); } void HWMapContainer::setImage(const QImage newImage) @@ -202,9 +210,11 @@ void HWMapContainer::mapChanged(int index) { - switch(index) + m_mapInfo = MapModel::mapInfoFromData(chooseMap->itemData(chooseMap->currentIndex())); + + switch(m_mapInfo.type) { - case MAPGEN_REGULAR: + case MapModel::GeneratedMap: mapgen = MAPGEN_REGULAR; updatePreview(); gbThemes->show(); @@ -213,9 +223,9 @@ maze_size_label->hide(); cbMazeSize->hide(); emit mapChanged("+rnd+"); - emit themeChanged(chooseMap->itemData(index).toList()[1].toString()); + emit themeChanged(m_mapInfo.theme); break; - case MAPGEN_MAZE: + case MapModel::GeneratedMaze: mapgen = MAPGEN_MAZE; updatePreview(); gbThemes->show(); @@ -224,9 +234,9 @@ maze_size_label->show(); cbMazeSize->show(); emit mapChanged("+maze+"); - emit themeChanged(chooseMap->itemData(index).toList()[1].toString()); + emit themeChanged(m_mapInfo.theme); break; - case MAPGEN_DRAWN: + case MapModel::HandDrawnMap: mapgen = MAPGEN_DRAWN; updatePreview(); gbThemes->show(); @@ -235,7 +245,7 @@ maze_size_label->hide(); cbMazeSize->hide(); emit mapChanged("+drawn+"); - emit themeChanged(chooseMap->itemData(index).toList()[1].toString()); + emit themeChanged(m_mapInfo.theme); break; default: mapgen = MAPGEN_MAP; @@ -245,7 +255,7 @@ cbTemplateFilter->hide(); maze_size_label->hide(); cbMazeSize->hide(); - emit mapChanged(chooseMap->itemData(index).toList()[0].toString()); + emit mapChanged(m_mapInfo.name); } emit mapgenChanged(mapgen); @@ -316,19 +326,17 @@ QString HWMapContainer::getCurrentMap() const { - if(chooseMap->currentIndex() < MAPGEN_MAP) return QString(); - return chooseMap->itemData(chooseMap->currentIndex()).toList()[0].toString(); + return(m_mapInfo.name); } QString HWMapContainer::getCurrentTheme() const { - return chooseMap->itemData(chooseMap->currentIndex()).toList()[1].toString(); + return(m_mapInfo.theme); } bool HWMapContainer::getCurrentIsMission() const { - if(!chooseMap->currentIndex()) return false; - return chooseMap->itemData(chooseMap->currentIndex()).toList()[3].toBool(); + return(m_mapInfo.type == MapModel::MissionMap); } int HWMapContainer::getCurrentHHLimit() const @@ -338,12 +346,12 @@ QString HWMapContainer::getCurrentScheme() const { - return chooseMap->itemData(chooseMap->currentIndex()).toList()[4].toString(); + return(m_mapInfo.scheme); } QString HWMapContainer::getCurrentWeapons() const { - return chooseMap->itemData(chooseMap->currentIndex()).toList()[5].toString(); + return(m_mapInfo.weapons); } quint32 HWMapContainer::getTemplateFilter() const @@ -367,7 +375,7 @@ void HWMapContainer::setSeed(const QString & seed) { intSetSeed(seed); - if (chooseMap->currentIndex() < MAPGEN_DRAWN) + if ((m_mapInfo.type == MapModel::GeneratedMap) || (m_mapInfo.type == MapModel::GeneratedMaze)) updatePreview(); } @@ -375,11 +383,15 @@ { int id = 0; for(int i = 0; i < chooseMap->count(); i++) - if(!chooseMap->itemData(i).isNull() && chooseMap->itemData(i).toList()[0].toString() == map) + { + MapModel::MapInfo mapInfo = MapModel::mapInfoFromData(chooseMap->itemData(i)); + + if (mapInfo.name == map) { id = i; break; } + } if(id > 0) { @@ -410,21 +422,23 @@ void HWMapContainer::setRandomMap() { setRandomSeed(); - switch(chooseMap->currentIndex()) + switch(m_mapInfo.type) { - case MAPGEN_REGULAR: - case MAPGEN_MAZE: + case MapModel::GeneratedMap: + case MapModel::GeneratedMaze: setRandomTheme(); break; - case MAPGEN_DRAWN: + case MapModel::HandDrawnMap: emit drawMapRequested(); break; - default: - if(chooseMap->currentIndex() <= numMissions + MAPGEN_MAP + 1) - setRandomMission(); - else - setRandomStatic(); + case MapModel::MissionMap: + setRandomMission(); break; + case MapModel::StaticMap: + setRandomStatic(); + break; + case MapModel::Invalid: + Q_ASSERT(false); } } @@ -444,11 +458,8 @@ void HWMapContainer::setRandomSeed() { - m_seed = QUuid::createUuid().toString(); - seedEdit->setText(m_seed); + setSeed(QUuid::createUuid().toString()); emit seedChanged(m_seed); - if (chooseMap->currentIndex() < MAPGEN_MAP) - updatePreview(); } void HWMapContainer::setRandomTheme() @@ -552,31 +563,29 @@ void HWMapContainer::updatePreview() { - int curIndex = chooseMap->currentIndex(); - - switch(curIndex) + switch(m_mapInfo.type) { - case MAPGEN_REGULAR: + case MapModel::GeneratedMap: askForGeneratedPreview(); break; - case MAPGEN_MAZE: + case MapModel::GeneratedMaze: askForGeneratedPreview(); break; - case MAPGEN_DRAWN: + case MapModel::HandDrawnMap: askForGeneratedPreview(); break; default: QPixmap mapImage; QFile tmpfile; - tmpfile.setFileName(cfgdir->absolutePath() + "/Data/Maps/" + chooseMap->itemData(curIndex).toList()[0].toString() + "/preview.png"); - if (!tmpfile.exists()) tmpfile.setFileName(datadir->absolutePath() + "/Maps/" + chooseMap->itemData(curIndex).toList()[0].toString() + "/preview.png"); + tmpfile.setFileName(cfgdir->absolutePath() + "/Data/Maps/" + m_mapInfo.name + "/preview.png"); + if (!tmpfile.exists()) tmpfile.setFileName(datadir->absolutePath() + "/Maps/" + m_mapInfo.name + "/preview.png"); if(!mapImage.load(QFileInfo(tmpfile).absoluteFilePath())) { imageButt->setIcon(QIcon()); return; } - hhLimit = chooseMap->itemData(curIndex).toList()[2].toInt(); + hhLimit = m_mapInfo.limit; addInfoToPreview(mapImage); } } @@ -593,104 +602,20 @@ } -void HWMapContainer::loadMapList() +void HWMapContainer::updateModelViews() { - // TODO: convert to model - - // remember previous selection - QString selMap = getCurrentMap(); - - chooseMap->clear(); - - chooseMap->addItem( -// FIXME - need real icons. Disabling until then -//QIcon(":/res/mapRandom.png"), - QComboBox::tr("generated map...")); - chooseMap->addItem( -// FIXME - need real icons. Disabling until then -//QIcon(":/res/mapMaze.png"), - QComboBox::tr("generated maze...")); - - chooseMap->addItem(QComboBox::tr("hand drawn map...")); - - chooseMap->insertSeparator(chooseMap->count()); // separator between generators and missions - chooseMap->insertSeparator(chooseMap->count()); // separator between generators and missions + numMissions = m_mapModel->missionCount(); - int missionindex = chooseMap->count(); - numMissions = 0; - QFile mapLuaFile; - QFile mapCfgFile; - - DataManager & dataMgr = DataManager::instance(); - - QStringList mapList = dataMgr.entryList( - QString("Maps"), - QDir::Dirs | QDir::NoDotAndDotDot - ); + intSetMap(m_mapInfo.name); - foreach (QString map, mapList) - { - mapCfgFile.setFileName( - dataMgr.findFileForRead(QString("Maps/%1/map.cfg").arg(map))); - mapLuaFile.setFileName( - dataMgr.findFileForRead(QString("Maps/%1/map.lua").arg(map))); - - if (mapCfgFile.open(QFile::ReadOnly)) - { - QString theme; - quint32 limit = 0; - QString scheme; - QString weapons; - QList mapInfo; - bool isMission = mapLuaFile.exists(); +/* + int nGenMaps = m_mapModel->generatorCount(); - QTextStream input(&mapCfgFile); - input >> theme; - input >> limit; - input >> scheme; - input >> weapons; - mapInfo.push_back(map); - mapInfo.push_back(theme); - if (limit) - mapInfo.push_back(limit); - else - mapInfo.push_back(18); - - - mapInfo.push_back(isMission); - - if (scheme.isEmpty()) - scheme = "locked"; - scheme.replace("_", " "); - - if (weapons.isEmpty()) - weapons = "locked"; - weapons.replace("_", " "); + // insert double separator after random maps/mazes/etc + chooseMap->insertSeparator(nGenMaps); + chooseMap->insertSeparator(nGenMaps); - mapInfo.push_back(scheme); - mapInfo.push_back(weapons); - - if(isMission) - { - chooseMap->insertItem(missionindex++, -// FIXME - need real icons. Disabling until then -//QIcon(":/res/mapMission.png"), - QComboBox::tr("Mission") + ": " + map, mapInfo); - numMissions++; - } - else - chooseMap->addItem( -// FIXME - need real icons. Disabling until then -//QIcon(":/res/mapCustom.png"), - map, mapInfo); - mapCfgFile.close(); - } - } - - chooseMap->insertSeparator(missionindex); // separator between missions and maps - - // if a map was selected already let's reselect it after reloading the map list - if (!selMap.isEmpty()) { - setMap(selMap); - } + // separator between missions and regular maps + chooseMap->insertSeparator(nGenMaps + m_mapModel->missionCount()); +*/ }