terrainselector.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * terrainselector.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "terrainselector.h"
  12. #include "ui_terrainselector.h"
  13. #include "../../lib/GameLibrary.h"
  14. #include "../../lib/TerrainHandler.h"
  15. TerrainSelector::TerrainSelector(std::set<TerrainId> & terrains) :
  16. ui(new Ui::TerrainSelector),
  17. terrainsSelected(terrains)
  18. {
  19. ui->setupUi(this);
  20. setWindowTitle(tr("Terrain Selector"));
  21. setWindowModality(Qt::ApplicationModal);
  22. for(auto const & objectPtr : LIBRARY->terrainTypeHandler->objects)
  23. {
  24. auto * item = new QListWidgetItem(QString::fromStdString(objectPtr->getNameTranslated()));
  25. item->setData(Qt::UserRole, QVariant::fromValue(objectPtr->getIndex()));
  26. item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
  27. item->setCheckState(terrains.count(objectPtr->getId()) ? Qt::Checked : Qt::Unchecked);
  28. ui->listWidgetTerrains->addItem(item);
  29. }
  30. show();
  31. }
  32. void TerrainSelector::showTerrainSelector(std::set<TerrainId> & terrains)
  33. {
  34. auto * dialog = new TerrainSelector(terrains);
  35. dialog->setAttribute(Qt::WA_DeleteOnClose);
  36. dialog->exec();
  37. }
  38. void TerrainSelector::on_buttonBoxResult_accepted()
  39. {
  40. terrainsSelected.clear();
  41. for(int i = 0; i < ui->listWidgetTerrains->count(); ++i)
  42. {
  43. auto * item = ui->listWidgetTerrains->item(i);
  44. if(item->checkState() == Qt::Checked)
  45. terrainsSelected.insert(item->data(Qt::UserRole).toInt());
  46. }
  47. close();
  48. }
  49. void TerrainSelector::on_buttonBoxResult_rejected()
  50. {
  51. close();
  52. }