rewardswidget.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * rewardswidget.h, 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. #pragma once
  11. #include <QDialog>
  12. #include "../lib/mapObjects/CGPandoraBox.h"
  13. #include "../lib/mapObjects/CQuest.h"
  14. #include "../lib/mapping/CMap.h"
  15. namespace Ui {
  16. class RewardsWidget;
  17. }
  18. const std::array<std::string, 10> rewardTypes{"Experience", "Mana", "Morale", "Luck", "Resource", "Primary skill", "Secondary skill", "Artifact", "Spell", "Creature"};
  19. class RewardsWidget : public QDialog
  20. {
  21. Q_OBJECT
  22. public:
  23. enum RewardType
  24. {
  25. EXPERIENCE = 0, MANA, MORALE, LUCK, RESOURCE, PRIMARY_SKILL, SECONDARY_SKILL, ARTIFACT, SPELL, CREATURE
  26. };
  27. explicit RewardsWidget(const CMap &, CGPandoraBox &, QWidget *parent = nullptr);
  28. explicit RewardsWidget(const CMap &, CGSeerHut &, QWidget *parent = nullptr);
  29. ~RewardsWidget();
  30. void obtainData();
  31. bool commitChanges();
  32. private slots:
  33. void on_rewardType_activated(int index);
  34. void on_rewardList_activated(int index);
  35. void on_buttonAdd_clicked();
  36. void on_buttonRemove_clicked();
  37. void on_buttonClear_clicked();
  38. void on_rewardsTable_itemSelectionChanged();
  39. private:
  40. void addReward(RewardType typeId, int listId, int amount);
  41. QList<QString> getListForType(RewardType typeId);
  42. Ui::RewardsWidget *ui;
  43. CGPandoraBox * pandora;
  44. CGSeerHut * seerhut;
  45. const CMap & map;
  46. int rewards = 0;
  47. };
  48. class RewardsDelegate : public QStyledItemDelegate
  49. {
  50. Q_OBJECT
  51. public:
  52. using QStyledItemDelegate::QStyledItemDelegate;
  53. void setEditorData(QWidget *editor, const QModelIndex &index) const override;
  54. void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
  55. };
  56. class RewardsPandoraDelegate : public RewardsDelegate
  57. {
  58. Q_OBJECT
  59. public:
  60. RewardsPandoraDelegate(const CMap &, CGPandoraBox &);
  61. QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
  62. private:
  63. CGPandoraBox & pandora;
  64. const CMap & map;
  65. };
  66. class RewardsSeerhutDelegate : public RewardsDelegate
  67. {
  68. Q_OBJECT
  69. public:
  70. RewardsSeerhutDelegate(const CMap &, CGSeerHut &);
  71. QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
  72. private:
  73. CGSeerHut & seerhut;
  74. const CMap & map;
  75. };