File: rewardswidget.h

package info (click to toggle)
vcmi 1.1.0%2Bdfsg-1
  • links: PTS, VCS
  • area: contrib
  • in suites: bookworm
  • size: 14,672 kB
  • sloc: cpp: 181,738; sh: 220; python: 178; ansic: 69; objc: 66; xml: 59; makefile: 34
file content (98 lines) | stat: -rw-r--r-- 2,425 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
 * rewardswidget.h, part of VCMI engine
 *
 * Authors: listed in file AUTHORS in main folder
 *
 * License: GNU General Public License v2.0 or later
 * Full text of license available in license.txt file, in main folder
 *
 */
#pragma once
#include "../StdInc.h"
#include <QDialog>
#include "../lib/mapObjects/CGPandoraBox.h"
#include "../lib/mapObjects/CQuest.h"
#include "../lib/mapping/CMap.h"

namespace Ui {
class RewardsWidget;
}

const std::array<std::string, 10> rewardTypes{"Experience", "Mana", "Morale", "Luck", "Resource", "Primary skill", "Secondary skill", "Artifact", "Spell", "Creature"};

class RewardsWidget : public QDialog
{
	Q_OBJECT

public:
	enum RewardType
	{
		EXPERIENCE = 0, MANA, MORALE, LUCK, RESOURCE, PRIMARY_SKILL, SECONDARY_SKILL, ARTIFACT, SPELL, CREATURE
	};
	
	explicit RewardsWidget(const CMap &, CGPandoraBox &, QWidget *parent = nullptr);
	explicit RewardsWidget(const CMap &, CGSeerHut &, QWidget *parent = nullptr);
	~RewardsWidget();
	
	void obtainData();
	bool commitChanges();

private slots:
	void on_rewardType_activated(int index);

	void on_rewardList_activated(int index);

	void on_buttonAdd_clicked();

	void on_buttonRemove_clicked();

	void on_buttonClear_clicked();

	void on_rewardsTable_itemSelectionChanged();

private:
	void addReward(RewardType typeId, int listId, int amount);
	QList<QString> getListForType(RewardType typeId);
	
	Ui::RewardsWidget *ui;
	CGPandoraBox * pandora;
	CGSeerHut * seerhut;
	const CMap & map;
	int rewards = 0;
};

class RewardsDelegate : public QStyledItemDelegate
{
	Q_OBJECT
public:
	using QStyledItemDelegate::QStyledItemDelegate;
	
	void setEditorData(QWidget *editor, const QModelIndex &index) const override;
	void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
};

class RewardsPandoraDelegate : public RewardsDelegate
{
	Q_OBJECT
public:
	RewardsPandoraDelegate(const CMap &, CGPandoraBox &);
	
	QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
	
private:
	CGPandoraBox & pandora;
	const CMap & map;
};

class RewardsSeerhutDelegate : public RewardsDelegate
{
	Q_OBJECT
public:
	RewardsSeerhutDelegate(const CMap &, CGSeerHut &);
	
	QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
	
private:
	CGSeerHut & seerhut;
	const CMap & map;
};