playersettings.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "StdInc.h"
  2. #include "playersettings.h"
  3. #include "ui_playersettings.h"
  4. #include "playerparams.h"
  5. #include "mainwindow.h"
  6. PlayerSettings::PlayerSettings(MapController & ctrl, QWidget *parent) :
  7. QDialog(parent),
  8. ui(new Ui::PlayerSettings),
  9. controller(ctrl)
  10. {
  11. ui->setupUi(this);
  12. show();
  13. int players = 0;
  14. for(auto & p : controller.map()->players)
  15. {
  16. if(p.canAnyonePlay())
  17. {
  18. paramWidgets.push_back(new PlayerParams(controller, players));
  19. ui->playersLayout->addWidget(paramWidgets.back());
  20. ++players;
  21. }
  22. }
  23. if(players < 2)
  24. ui->playersCount->setCurrentText("");
  25. else
  26. ui->playersCount->setCurrentIndex(players - 2);
  27. setAttribute(Qt::WA_DeleteOnClose);
  28. }
  29. PlayerSettings::~PlayerSettings()
  30. {
  31. delete ui;
  32. }
  33. void PlayerSettings::on_playersCount_currentIndexChanged(int index)
  34. {
  35. assert(index + 2 <= controller.map()->players.size());
  36. for(int i = 0; i < index + 2; ++i)
  37. {
  38. if(i < paramWidgets.size())
  39. continue;
  40. auto & p = controller.map()->players[i];
  41. p.canComputerPlay = true;
  42. paramWidgets.push_back(new PlayerParams(controller, i));
  43. ui->playersLayout->addWidget(paramWidgets.back());
  44. }
  45. assert(!paramWidgets.empty());
  46. for(int i = paramWidgets.size() - 1; i >= index + 2; --i)
  47. {
  48. auto & p = controller.map()->players[i];
  49. p.canComputerPlay = false;
  50. p.canHumanPlay = false;
  51. ui->playersLayout->removeWidget(paramWidgets[i]);
  52. delete paramWidgets[i];
  53. paramWidgets.pop_back();
  54. }
  55. }
  56. void PlayerSettings::on_pushButton_clicked()
  57. {
  58. for(auto * w : paramWidgets)
  59. {
  60. controller.map()->players[w->playerColor] = w->playerInfo;
  61. }
  62. controller.commitChangeWithoutRedraw();
  63. close();
  64. }