-
Notifications
You must be signed in to change notification settings - Fork 2
/
Note.h
156 lines (125 loc) · 4.69 KB
/
Note.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
#ifndef NOTE_H
#define NOTE_H
#include <QSet>
#include <QString>
#include "Editor.h"
#include "NotesException.h"
#include "NoteFactory.h"
class Document;
class ExportStrategy;
class Document;
class Tag;
typedef QList<Note *>::const_iterator nListIt;
/*!
* \brief The Note class La classe de base pour tous les Notes.
*/
class Note{
QString title;
/*!
* \brief filePath Le chemin du fichier est utilise comme identifiant unique du Note.
*/
QString filePath;
/*!
* \brief tags La liste des tags seront enreigistre comme une propriete des Notes. Au lancement du programme, tous les tags associes aux notes existants seront charge dans le programme.
*
* Ceci permet un acces directe aux tags associe aux notes. cf \link<Tag>
*/
QSet<Tag*> tags;
/*!
* the Editor associated. Ceci permet une association etroite entre un objet Note et son editor. Association est assuree au moment du creation de editeur
*/
Editor* editor;
/*!
* All documents that directly contains this note. For fast access in editors
*/
QSet<Document*> inDocuments;
bool modified;
/*!
* \brief deleted Cet attribut est manipule uniquement par le singleton \link<Trash>.
*/
bool deleted;
public:
/*!
* \brief type Ce type est determine au moment de la construction de Note. Ceci nous permet d'eviter les exceptions non necessaire lors de la duplication des notes (cf. NoteFactory, buildNoteCopy etc...)
*/
NoteType type;
Note(const QString &path);
Note(const QString &path, const QString& ti);
virtual ~Note();
const QSet<Tag*>& getTags() const{
return tags;
}
void setTags(const QSet<Tag*> value) {this->setModified(true); this->tags = value;}
void addTag(Tag *tag) {this->setModified(true); tags << tag;}
void removeTag(Tag *tag) {this->setModified(true); tags.remove(tag);}
/*!
* \brief addNote Purement pour facilier a hirarchiser les Notes dans nm.Et puis ca sert a visualiser cette hirarchie dans QTreeView.
*/
virtual void addNote(Note *){throw NotesException("Should not happen! addNote called for non Document object.");}
/*!
* \brief operator == Les notes sont identifie a partir de leurs chemin.
* \param other
* \return
*/
bool operator==(const Note& other);
const QString &getTitle() const;
void setTitle(const QString &t);
const QString &getFilePath() const;
void setFilePath(const QString &p);
void setModified(bool b);
bool isModified() const;
void setDeleted(bool b);
bool isDeleted() const;
/*!
* \brief createAndAttachEditor Methode template qui fait appel aux createEditor() des classes filles et puis associe l'editeur construite a note lui meme.
* \return
*/
Editor *createAndAttachEditor();
/*!
* \brief createEditor Methode virtuelle pure definie dans les classes filles
* \return
*/
virtual Editor *createEditor() = 0;
/*!
* \brief createEditor Methode virtuelle pure definie dans les classes filles
* \return
*/
virtual QString exportNote(const ExportStrategy *es, unsigned int level = 0) = 0;
/*!
* \brief isDocument \deprecated{ Methode prevu pour distinguer les documents. Distinguer le type du note par rapport a son type dans le futur}
* \return
*/
bool isDocument() const;
/*!
* \brief begin retourne 0 si Note n'est pas du type Document. Retourne un iterator sur le premier Note contenue dans note s'il est un document
* \return
*/
nListIt begin() const;
/*!
* \brief begin retourne 0 si Note n'est pas du type Document. Retourne un iterator sur l'apres dernier Note contenue dans note s'il est un document
* \return
*/
nListIt end() const;
Editor *getEditor() const;
void setEditor(Editor *value);
void addToDocument(Document* doc);
void removeFromDocument(Document *doc);
bool belongs(Document *doc);
/*!
* \brief beginInDoc
* \return Retourner un iterateur sur le premier element dans la liste des document ou se trouve ce note.
*/
QSet<Document *>::const_iterator beginInDoc(){return inDocuments.begin();}
/*!
* \brief beginInDoc
* \return Retourner un iterateur sur apres dernier element dans la liste des document ou se trouve ce note.
*/
QSet<Document *>::const_iterator endInDoc(){return inDocuments.end();}
QSet<Document *> getInDocuments() const;
void setInDocuments(const QSet<Document *> &value);
/*!
* \brief resetInDocuments Methode raccourci utilise principalement pour disassocie le note et les documents qui englobe cette note.
*/
void resetInDocuments(){inDocuments.clear();}
};
#endif