treasureselector.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * treasureselector.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 "treasureselector.h"
  12. #include "ui_treasureselector.h"
  13. #include "../../lib/GameLibrary.h"
  14. #include "../../lib/texts/CGeneralTextHandler.h"
  15. #include "../../lib/rmg/CRmgTemplate.h"
  16. TreasureSelector::TreasureSelector(std::vector<CTreasureInfo> & treasures) :
  17. ui(new Ui::TreasureSelector),
  18. treasures(treasures)
  19. {
  20. ui->setupUi(this);
  21. setWindowTitle(tr("Treasure Selector"));
  22. setWindowModality(Qt::ApplicationModal);
  23. ui->tableWidgetTreasures->setColumnCount(4);
  24. ui->tableWidgetTreasures->setRowCount(treasures.size() + 1);
  25. ui->tableWidgetTreasures->setHorizontalHeaderLabels({tr("Min"), tr("Max"), tr("Density"), tr("Action")});
  26. auto addRow = [this](int min, int max, int density, int row){
  27. auto spinBoxMin = new QSpinBox();
  28. spinBoxMin->setRange(0, 1000000);
  29. spinBoxMin->setValue(min);
  30. ui->tableWidgetTreasures->setCellWidget(row, 0, spinBoxMin);
  31. auto spinBoxMax = new QSpinBox();
  32. spinBoxMax->setRange(0, 1000000);
  33. spinBoxMax->setValue(max);
  34. ui->tableWidgetTreasures->setCellWidget(row, 1, spinBoxMax);
  35. auto spinBoxDensity = new QSpinBox();
  36. spinBoxDensity->setRange(0, 1000);
  37. spinBoxDensity->setValue(density);
  38. ui->tableWidgetTreasures->setCellWidget(row, 2, spinBoxDensity);
  39. auto deleteButton = new QPushButton("Delete");
  40. ui->tableWidgetTreasures->setCellWidget(row, 3, deleteButton);
  41. connect(deleteButton, &QPushButton::clicked, this, [this, deleteButton]() {
  42. for (int r = 0; r < ui->tableWidgetTreasures->rowCount(); ++r) {
  43. if (ui->tableWidgetTreasures->cellWidget(r, 3) == deleteButton) {
  44. ui->tableWidgetTreasures->removeRow(r);
  45. break;
  46. }
  47. }
  48. });
  49. };
  50. for (int row = 0; row < treasures.size(); ++row)
  51. addRow(treasures[row].min, treasures[row].max, treasures[row].density, row);
  52. auto addButton = new QPushButton("Add");
  53. ui->tableWidgetTreasures->setCellWidget(ui->tableWidgetTreasures->rowCount() - 1, 3, addButton);
  54. connect(addButton, &QPushButton::clicked, this, [this, addRow, treasures]() {
  55. ui->tableWidgetTreasures->insertRow(ui->tableWidgetTreasures->rowCount() - 1);
  56. addRow(0, 0, 0, ui->tableWidgetTreasures->rowCount() - 2);
  57. });
  58. ui->tableWidgetTreasures->resizeColumnsToContents();
  59. show();
  60. }
  61. void TreasureSelector::showTreasureSelector(std::vector<CTreasureInfo> & treasures)
  62. {
  63. auto * dialog = new TreasureSelector(treasures);
  64. dialog->setAttribute(Qt::WA_DeleteOnClose);
  65. dialog->exec();
  66. }
  67. void TreasureSelector::on_buttonBoxResult_accepted()
  68. {
  69. treasures.clear();
  70. for (int row = 0; row < ui->tableWidgetTreasures->rowCount() - 1; ++row)
  71. {
  72. CTreasureInfo info;
  73. info.min = static_cast<QSpinBox *>(ui->tableWidgetTreasures->cellWidget(row, 0))->value();
  74. info.max = static_cast<QSpinBox *>(ui->tableWidgetTreasures->cellWidget(row, 1))->value();
  75. info.density = static_cast<QSpinBox *>(ui->tableWidgetTreasures->cellWidget(row, 2))->value();
  76. treasures.push_back(info);
  77. }
  78. close();
  79. }
  80. void TreasureSelector::on_buttonBoxResult_rejected()
  81. {
  82. close();
  83. }