Advertisement
Guest User

Classeurs_Model does not name a type...

a guest
Feb 10th, 2015
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.32 KB | None | 0 0
  1. // classeurs_treeview.h file (an error at declaration time
  2. #ifndef CLASSEURS_TREEVIEW_H
  3. #define CLASSEURS_TREEVIEW_H
  4. #include "Classeurs/classeur.h"
  5. #include "Classeurs/classeurs_model.h"
  6.  
  7. #include <QtGui>
  8. #include <QObject>
  9. #include <QTreeView>
  10. #include <QStandardItem>
  11. #include <QMenu>
  12.  
  13.  
  14. struct infos_generales_classeurs {
  15. QList<int> id;
  16. Classeur *root_classeur;
  17. Classeurs_Model *classeurs_model; // ERROR: "Classeurs_Model does not name a type"
  18. }; // structure de log des classeurs à insérer dans "Structures"
  19.  
  20.  
  21. class Classeurs_treeView : public QTreeView
  22. {
  23. Q_OBJECT
  24.  
  25. public:
  26. Classeurs_treeView(const QStringList &header, QWidget *parent);
  27. ~Classeurs_treeView();
  28. infos_generales_classeurs Classeurs;
  29. void add_classeur(const QVariant &name = "",
  30. const QVariant &comment = "",
  31. const QVariant &id_parent = "",
  32. const QModelIndex &parent = QModelIndex());
  33. Classeurs_Model *getModel(); // ERROR: "Classeurs_Model does not name a type"
  34.  
  35. protected:
  36. QMenu *menu_middle;
  37. QMenu *menu_right;
  38. QAction *supprimer;
  39. int next_id;
  40. void delete_row();
  41.  
  42. protected slots:
  43. void dataChanged (const QModelIndex &topLeft,
  44. const QModelIndex &bottomRight,
  45. const QVector<int> &roles = QVector<int> ());
  46. void mouseReleaseEvent ( QMouseEvent * event );
  47.  
  48. signals:
  49. void clicked(QModelIndex);
  50. void delete_classeur(QModelIndexList list_indexs);
  51. void change_data(const QModelIndex &topLeft,
  52. const QModelIndex &bottomRight,
  53. const QVector<int> &roles);
  54.  
  55. };
  56.  
  57.  
  58. #endif // CLASSEURS_TREEVIEW_H
  59.  
  60. // classeurs_model.h file
  61.  
  62. #ifndef CLASSEURS_MODEL_H
  63. #define CLASSEURS_MODEL_H
  64.  
  65. #include <QObject>
  66. #include <QAbstractItemModel>
  67. #include "Classeurs/classeur.h"
  68. #include "Classeurs/classeurs_treeview.h"
  69.  
  70.  
  71.  
  72. class Classeurs_Model : public QAbstractItemModel
  73. {
  74. Q_OBJECT
  75.  
  76. enum order {
  77. ASC, DESC
  78. };
  79.  
  80.  
  81. public:
  82. explicit Classeurs_Model(QObject *parent = 0);
  83. ~Classeurs_Model();
  84. QModelIndex parent(const QModelIndex &child) const;
  85. QModelIndex index(int row,
  86. int column,
  87. const QModelIndex &parent) const;
  88. Qt::ItemFlags flags(const QModelIndex &index) const;
  89. QVariant headerData(int section,
  90. Qt::Orientation orientation,
  91. int role) const;
  92. QVariant data(const QModelIndex &index,
  93. int role) const;
  94. Classeur getClasseur(const QModelIndex &index);
  95. int columnCount(const QModelIndex &parent) const;
  96. int rowCount(const QModelIndex &parent) const;
  97. int totalRowCount(const QModelIndex &parent) const;
  98. Files_Model *getCurrent_Files_model(QModelIndex &index);
  99. void setModel(const QString &colFK,
  100. const int &idFK,
  101. const QList<QString> &fields = QList("id_tree",
  102. "id_tree_parent",
  103. "nom",
  104. "comment"),
  105. const QString &table = "Classeurs",
  106. const QString &fTable = "ClasseurRef");
  107. void setQueryOrder(const QList<QString> &order_list,
  108. const order &type = ASC);
  109. void addClasseur(const QList<QVariant> &datas,
  110. const QModelIndex &parent);
  111.  
  112. protected:
  113. Classeur *root_classeur;
  114. QHash <QVariant, // id_parent =>
  115. QHash <QVariant, // id =>
  116. QList<QVariant> > > db_Classeurs; // [name, comment]
  117. QString query_str;
  118. bool datas_valid;
  119. bool extractDatas();
  120. void find_Childs(int id,
  121. Classeur *ref);
  122.  
  123. protected slots:
  124. void rowsInserted(const QModelIndex &parent,
  125. int start, int end) ;
  126.  
  127. signals:
  128. void add_classeur(const QModelIndex &parent,
  129. int start, int end);
  130.  
  131. };
  132.  
  133.  
  134.  
  135. #endif // CLASSEURS_MODEL_H
  136.  
  137. // classeurs_model.cpp file:
  138.  
  139. #include "Classeurs/classeurs_model.h"
  140. #include "Classeurs/classeurs_treeview.h"
  141. #include "Classeurs/classeur.h"
  142. #include "user_controler.h"
  143. #include <QSqlQuery>
  144. #include <QSqlRecord>
  145.  
  146. Classeurs_Model::Classeurs_Model(QObject *parent):
  147. QAbstractItemModel(parent) {
  148. user_controler::initdb();
  149. datas_valid = false;
  150. QList<QVariant> headers;
  151. headers << tr("Nom") << tr("Description") << tr("id") << tr("id parent");
  152. root_classeur = new Classeur(headers);
  153. this->setHeaderData(0, Qt::Horizontal, QVariant(headers[0]));
  154. this->setHeaderData(1, Qt::Horizontal, QVariant(headers[1]));
  155. this->setHeaderData(2, Qt::Horizontal, QVariant(headers[2]));
  156. this->setHeaderData(3, Qt::Horizontal, QVariant(headers[3]));
  157. if(extractDatas())
  158. datas_valid = true;
  159. }
  160.  
  161. Classeurs_Model::~Classeurs_Model() {
  162.  
  163. }
  164.  
  165.  
  166. Qt::ItemFlags flags(const QModelIndex &index) const {
  167. if(!index.isValid())
  168. return 0;
  169. return Qt::ItemIsEditable |
  170. Qt::ItemIsEnabled |
  171. Qt::ItemIsSelectable;
  172. }
  173.  
  174.  
  175. void Classeurs_Model::setModel(const QString &colFK,
  176. const int &idFK,
  177. const QList<QString> &fields,
  178. const QString &table,
  179. const QString &fTable) {
  180. QString field_list;
  181. foreach(QVariant field, fields)
  182. field_list += (!field_list.isEmpty()) ?
  183. QString(", c.%1").arg(field) :
  184. QString(" c.%1").arg(field);
  185. query_str = QString("SELECT %1 FROM \"%2\" c, \"%3\" r "
  186. "WHERE c.id = r.id_classeur "
  187. "AND r.%4 = %5 ;")
  188. .arg(field_list).arg(table)
  189. .arg(fTable).arg(colFK).arg(idFK);
  190. }
  191.  
  192. void Classeurs_Model::setQueryOrder(const QList<QString> &order_list,
  193. const order &type) {
  194. QString list_order;
  195. foreach(QVariant field, order_list)
  196. list_order += (!list_order.isEmpty()) ?
  197. QString("ORDER BY (%1").arg(field) :
  198. QString(", %2").arg(field);
  199. list_order += ") ";
  200. switch (type) {
  201. case ASC: list_order += "ASC "; break;
  202. case DESC: list_order += "DESC"; break; }
  203. query_str.insert(-1, list_order);
  204. }
  205.  
  206. bool Classeurs_Model::extractDatas() {
  207. QSqlQuery query;
  208. if (!query_str.isEmpty() &&
  209. datas_valid == false) {
  210. query.prepare(query_str);
  211. user_controler::execDB(query);
  212. int c_id = query.record().indexof("id");
  213. int c_id_parent = query.record().indexOf("id_parent");
  214. int c_name = query.record().indexOf("nom");
  215. int c_comment = query.record().indexOf("comment");
  216. int i(0);
  217. db_Classeurs.clear();
  218. while(query.next()) {
  219. QList<QVariant> values(query.value(c_name),
  220. query.value(c_comment));
  221. db_Classeurs[query.value(c_id_parent)]
  222. .insert(query.value(c_id),
  223. values); }
  224. datas_valid = true;
  225. find_childs(0, root_classeur); }
  226. }
  227.  
  228. void Classeurs_Model::find_Childs(int id_parent,
  229. Classeur *parent) {
  230. QHash<QVariant, QList<QVariant> > col_id = db_Classeurs[id_parent];
  231. foreach(QVariant id, col_id.keys()) {
  232. QList<QVariant> row;
  233. row.clear();
  234. row << col_id.value(id) << id << id_parent;
  235. Classeur *classeur_to_add = new Classeur(row, parent);
  236. if(!db_Classeurs[id].isEmpty())
  237. find_Childs(id, classeur_to_add); }
  238. }
  239.  
  240. void Classeurs_Model::addClasseur(const QList<QVariant> &datas,
  241. const QModelIndex &parent) {
  242. Classeur *classeurParent;
  243. if(!parentParent.isValid())
  244. classeurParent = root_classeur;
  245. else
  246. classeurParent = reinterpret_cast<Classeur*>(parent.internalPointer());
  247. Classeur *new_classeur;
  248. new_classeur = new Classeur(datas, classeurParent);
  249. }
  250.  
  251. QVariant Classeurs_Model::data(const QModelIndex &index,
  252. int role) const {
  253. Classeur *classeur;
  254. if(!index.isValid())
  255. classeur = root_classeur;
  256. else
  257. classeur = reinterpret_cast<Classeur*>(index.internalPointer());
  258. if(role == Qt::DisplayRole) {
  259. switch (index.column()) {
  260. case 0: { return classeur->Classeur_Info.name; break; }
  261. case 1: { return classeur->Classeur_Info.comment; break; }
  262. case 2: { return classeur->Classeur_Info.id; break; }
  263. case 2: { return classeur->Classeur_Info.id_parent; break; } } }
  264. }
  265.  
  266. QModelIndex Classeurs_Model::index(int row,
  267. int column,
  268. const QModelIndex &parent) const {
  269. Classeur *parentClasseur;
  270. if(!parent.isValid())
  271. return root_classeur;
  272. else
  273. parentClasseur = reinterpret_cast<Classeur*>(parent.internalPointer());
  274. Classeur *classeur = parentClasseur->children().at(row);
  275. return createIndex(row, column, classeur);
  276. }
  277.  
  278. QModelIndex Classeurs_Model::parent(const QModelIndex &child) const {
  279. if(!child.isValid())
  280. return QModelIndex();
  281. Classeur *classeur = reinterpret_cast<Classeur*>(child.internalPointer());
  282. Classeur *parentClasseur = classeur->parent();
  283. if(parentClasseur == root_classeur)
  284. return QModelIndex();
  285. int row = parentClasseur->parent()->children().indexOf(parentClasseur);
  286. return createIndex(row, 0, parentClasseur);
  287. }
  288.  
  289. Files_Model* Classeurs_Model::getCurrent_Files_model(QModelIndex &index) {
  290. if(!index.isValid())
  291. return Files_Model();
  292. Classeur *classeur = reinterpret_cast<Classeur*>(index.internalPointer());
  293. return classeur->Classeur_Info.files_model;
  294. }
  295.  
  296. Classeur* Classeurs_Model::getClasseur(const QModelIndex &index) {
  297. if(!index.isValid())
  298. return Files_Model();
  299. Classeur *classeur = reinterpret_cast<Classeur*>(index.internalPointer());
  300. return classeur;
  301. }
  302.  
  303. int Classeurs_Model::columnCount(const QModelIndex &parent) const {
  304. return 4;
  305. }
  306.  
  307. int Classeurs_Model::rowCount(const QModelIndex &parent) const {
  308. if(!parent.isValid())
  309. return root_classeur->children().size();
  310. Classeur *classeur = reinterpret_cast<Classeur*>(parent.internalPointer());
  311. return classeur->children().size();
  312. }
  313.  
  314. int Classeurs_Model::totalRowCount(const QModelIndex &parent) const {
  315.  
  316. }
  317.  
  318. void Classeurs_Model::rowsInserted(const QModelIndex &parent,
  319. int start, int end) {
  320. emit add_classeur(parent, start, end);
  321. }
  322. // classeur.h file:
  323. #ifndef CLASSEUR_H
  324. #define CLASSEUR_H
  325.  
  326. #include <QObject>
  327. #include <QSqlDatabase>
  328. #include <QStandardItem>
  329. #include <QStandardItemModel>
  330. #include "user_controler.h"
  331. #include "Files/files_model.h"
  332.  
  333.  
  334. struct classeur_infos {
  335. int id;
  336. int id_parent;
  337. QString name;
  338. QString comment;
  339. QStandardItem *files_root;
  340. Files_Model *files_model;
  341. };
  342.  
  343. class Classeur
  344. {
  345. Q_OBJECT
  346.  
  347. public:
  348. explicit Classeur(const QList<QVariant> &data,
  349. Classeur *parent = 0);
  350. ~Classeur();
  351. classeur_infos Classeur_Info;
  352. void setInfos(QString name, QString comment);
  353. void setComment(QString comment);
  354. void appendChild(Classeur *child);
  355. Classeur *child(int row);
  356. bool insertChildren(int position,
  357. int count,
  358. int columns);
  359. bool removeChildren(int position,
  360. int count);
  361. int childCount() const;
  362. int countColumn() const;
  363. QVariant data(int column) const;
  364. bool setData(int column,
  365. const QVariant &value);
  366. void setHeaders(const QList<QVariant> &headers);
  367. int row() const;
  368. Classeur *parent();
  369. void add_file(QList<int> tree_posit, QStandardItem row_items);
  370. void edit_file(QList<int> tree_posit, int column,
  371. QStandardItem *item, QString content = "");
  372. void del_files(QList<int> tree_posit);
  373. void read_file_item(QStandardItem *item);
  374. void read_file_posit(QList<int> tree_posit);
  375. void read_file_index(QModelIndex index);
  376.  
  377. private:
  378. QList<Classeur*> childsClasseur;
  379. QList<QVariant> classeurData;
  380. Classeur *parentClasseur;
  381.  
  382. signals:
  383.  
  384. public slots:
  385. };
  386.  
  387. #endif // CLASSEUR_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement