rewardswidget.h 2.4 KB

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