-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathcharactersheetmodel.h
178 lines (150 loc) · 6.35 KB
/
charactersheetmodel.h
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/***************************************************************************
* Copyright (C) 2009 by Renaud Guezennec *
* https://rolisteam.org/contact *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef CHARACTERSHEETMODEL_H
#define CHARACTERSHEETMODEL_H
#include <QAbstractItemModel>
#include <QFile>
#include <QPointF>
#include <QTextStream>
#ifndef RCSE
#include "network/networkmessagereader.h"
#include "network/networkmessagewriter.h"
#endif
#include "charactersheetitem.h"
#include "formula/formulamanager.h"
class CharacterSheet;
class Section;
/**
* @brief CharacterSheetModel is part of the MVC architecture for charactersheet viewer. it herits from
* QAbstractItemModel it also provides features for adding data into stored CharacterSheet.
*/
class CharacterSheetModel : public QAbstractItemModel
{
Q_OBJECT
public:
enum CustomRole
{
FormulaRole= Qt::UserRole + 1,
ValueRole,
UuidRole,
NameRole
};
Q_ENUM(CustomRole)
/**
* @brief default constructor
*/
CharacterSheetModel();
virtual ~CharacterSheetModel();
/**
* @brief compulsory function which returns the row count : should be the higher index count of stored
* characterSheets
* @param parent useless in tablemodel (only relevant with a tree.)
*/
int rowCount(const QModelIndex& parent= QModelIndex()) const;
/**
* @brief build an index with the given location and parent.
* It should return invalide index when location is out of data range.
* @param row : the row coordinate
* @param column : the column coordinate
* @param parent : all items in the table should be child of an invalide QModelIndex.
*/
QModelIndex index(int row, int column, const QModelIndex& parent= QModelIndex()) const;
/**
* @brief build the parent of given index. Useless in our case.
*/
QModelIndex parent(const QModelIndex& index) const;
/**
* @brief compulsory function which returns the column count: it is egal to the number of characterSheet stored in
* the model.
* @param : parent useless because in a tableview/model all items have the same parent (root).
*/
int columnCount(const QModelIndex& parent= QModelIndex()) const;
/**
* @brief compulsory function which returns the value of the given index.
* @param index : the location of the wished element
* @param role : the data role.
*/
QVariant data(const QModelIndex& index, int role= Qt::DisplayRole) const;
/**
* @brief allows editing. The model can modify the data beacause of the function.
* @param index : location of the amended data.
* @param value : new value
* @param role : the data role
*/
bool setData(const QModelIndex& index, const QVariant& value, int role= Qt::EditRole);
/**
* @brief adds section after the given Index.
* @param index location of the new section
*/
void addSection(/*int index*/);
/**
* @brief adds line at the given index
* @param index location of the new line.
*/
void addLine(const QModelIndex& index);
Qt::ItemFlags flags(const QModelIndex& index) const;
bool hasChildren(const QModelIndex& parent) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
CharacterSheetItem* indexToSection(const QModelIndex& index);
QModelIndex indexToSectionIndex(const QModelIndex& index);
CharacterSheet* getCharacterSheet(int id);
// QList<CharacterSheetItem *>* getExportedList(CharacterSheet*);
bool writeModel(QJsonObject& file, bool data= true);
void readModel(const QJsonObject& file, bool readRootSection);
CharacterSheetItem* addSection(QString title);
void addLine(CharacterSheetItem* parentItem, QString name, const QModelIndex& parent);
void setRootSection(Section* rootSection);
Section* getRootSection() const;
void addCharacterSheet(CharacterSheet* sheet, int pos);
CharacterSheet* getCharacterSheetById(QString id);
int getCharacterSheetCount() const;
#ifndef RCSE
void readRootSection(NetworkMessageReader* msg);
void fillRootSection(NetworkMessageWriter* msg);
#endif
void removeCharacterSheet(int index);
void removeCharacterSheet(CharacterSheet* sheet);
/**
* @brief adds an empty CharacterSheet into the model.
*/
CharacterSheet* addCharacterSheet();
public slots:
void clearModel();
void checkCharacter(Section* section);
void addSubChildRoot(CharacterSheetItem* item);
void fieldHasBeenChanged(CharacterSheet* sheet, CharacterSheetItem* item, const QString&);
void addSubChild(CharacterSheet* sheet, CharacterSheetItem* item);
signals:
void characterSheetHasBeenAdded(CharacterSheet* sheet);
void dataCharacterChange();
protected:
void computeFormula(QString path, CharacterSheet* sheet);
private:
void checkTableItem();
private:
/**
* @brief QList which stores pointer to CharacterSheet.
*/
QList<CharacterSheet*>* m_characterList= nullptr;
// int m_characterCount;
Section* m_rootSection= nullptr;
Formula::FormulaManager* m_formulaManager= nullptr;
};
#endif // CHARACTERSHEETMODEL_H