-
Notifications
You must be signed in to change notification settings - Fork 2
/
TreeModel.h
140 lines (124 loc) · 4.6 KB
/
TreeModel.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
#ifndef TREEMODEL_H
#define TREEMODEL_H
#include <QObject>
#include <QAbstractItemModel>
#include <QListWidget>
class NotesManager;
class FilterKit;
class Note;
class TreeItem;
class Document;
class TagManager;
/*!
* \brief The TreeModel class Cette classe conforme a la framework MVC du Qt. Ceci permet d'afficher une TreeView qui montre clairement la relations entre les documents et les notes.
*/
class TreeModel : public QAbstractItemModel
{
Q_OBJECT
public:
TreeModel(QObject *parent = 0);
~TreeModel();
QVariant data(const QModelIndex &index, int role) const;
/*!
* \brief headerData Methode virtuelle du \link<QAbstractListModel>. Ceci permet de redefinir le comportement de headerData (c'est le data qui sera affiche sur chaque item.)
* \param section
* \param orientation
* \param role
* \return
*/
QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const;
QModelIndex index(int row, int column,
const QModelIndex &parent = QModelIndex()) const;
QModelIndex parent(const QModelIndex &index) const;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
/*!
* \brief flags ces flags permettent de definir le comportement du item lors qu'on double click dessus.
* \param index l'indice de TreeItem
* \return
*/
Qt::ItemFlags flags(const QModelIndex &index) const;
/*!
* \brief setData Cette methode permet de declencher un signal setData, qui permet de mettre a jour le titre des documents
* \deprecated {pour la meme raison mentionne dans \link<TreeItem.h>}
* \param index
* \param value
* \param role
* \return
*/
bool setData(const QModelIndex &index, const QVariant &value,
int role = Qt::EditRole);
bool setHeaderData(int section, Qt::Orientation orientation,
const QVariant &value, int role = Qt::EditRole);
/*!
* \brief insertColumns Methode neccesaire lors qu'on sous classer QAbstractItemModel
* \param position
* \param columns
* \param parent
* \return
*/
bool insertColumns(int position, int columns,
const QModelIndex &parent = QModelIndex());
/*!
* \brief insertColumns Methode neccesaire lors qu'on sous classer QAbstractItemModel
* \param position
* \param columns
* \param parent
* \return
*/
bool removeColumns(int position, int columns,
const QModelIndex &parent = QModelIndex());
/*!
* \brief insertColumns Methode neccesaire lors qu'on sous classer QAbstractItemModel
* \param position
* \param columns
* \param parent
* \return
*/
bool insertRows(int position, int rows,
const QModelIndex &parent = QModelIndex());
/*!
* \brief insertColumns Methode neccesaire lors qu'on sous classer QAbstractItemModel
* \param position
* \param columns
* \param parent
* \return
*/
bool removeRows(int position, int rows,
const QModelIndex &parent = QModelIndex());
/*!
* \brief getItem
* \param index
* \return Retourne l'item associe a un indice index.
*/
TreeItem *getItem(const QModelIndex &index) const;
private:
/*!
* \brief deployDocument Cette methode deployer un document recursivement dans un treeview.
* L'ensemble des Filtres actives seront applique dans la metode setupModelData();
* Lors qu'on ajoute un nouveau filtre, il suffit de l'ajouter dans le singleton FilterKit pour qu'il entre en effet.
* \todo {replacer cette methode en utilisant l'iterateur profondeur d'abord}
* \param current
* \param parents une QList qui enreigistre l'item qui est le parent pendant ce deploiement courant
* \param indent une QList des indents qui stock indentation correcte pour item actuelle
*/
void deployDocument(Document* current, QList<TreeItem*>& parents, QList<int>& indent);
/*!
* \brief setupModelData cet methode initialise les donnes dans le TreeView. Elle fait appel a deployDocument recursivement.
* \param parent
*/
void setupModelData(TreeItem *parent);
/*!
* \brief rootItem TreeItem racine
*/
TreeItem *rootItem;
NotesManager *nm;
/*!
* \brief filterKit L'ensemble des Filtres actives seront applique dans la metode setupModelData();
*/
FilterKit *filterKit;
TagManager *tm;
QListWidget* tagListModel;
};
#endif // TREEMODEL_H