Advertisement
Guest User

help me to se my datas inside the tree please

a guest
Feb 15th, 2015
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.53 KB | None | 0 0
  1. // classeurs_model.cpp (qabstractitemmodel for binder files container from SQL database: ont able for binder,
  2. // one table for link foreign keys to other tables... each object on the app could have a binder or more...
  3. // each binder has files/directries content)
  4. // but... with the debugger, i can see all is construct,
  5. // Classeur is ok , childs and parents ok, root is ok... headers ok... view is set by the model...
  6. // but never see the result inside the treeview. Same if i add a binder (classeur is french world for binder)
  7. // WHY ? i think i forget something but... what ?
  8. #include "Classeurs/classeurs_model.h"
  9. #include "Classeurs/classeurs_treeview.h"
  10. #include "Classeurs/classeur.h"
  11. #include "user_controler.h"
  12. #include <QSqlQuery>
  13. #include <QSqlRecord>
  14.  
  15. Classeurs_Model::Classeurs_Model(QObject *parent):
  16. QAbstractItemModel(parent) {
  17. db_coordonates.col_FK = "";
  18. db_coordonates.fields << "nom" << "comment"
  19. << "tree_id" << "tree_id_parent"
  20. << "id";
  21. db_coordonates.id_FK = 0;
  22. db_coordonates.table = "Classeurs";
  23. db_coordonates.linker_table = "ClasseurRef";
  24. datas_valid = false;
  25. QList<QVariant> headers;
  26. headers << tr("Nom") << tr("Description") << tr("id") << tr("id parent") << "ID";
  27. root_classeur = new Classeur(headers);
  28. for(int i(0); i < headers.count(); i++)
  29. setHeaderData(i, Qt::Horizontal, headers[i]);
  30. }
  31.  
  32. Classeurs_Model::~Classeurs_Model() {
  33.  
  34. }
  35.  
  36. QModelIndex Classeurs_Model::parent(const QModelIndex &index) const {
  37. if(!index.isValid())
  38. return QModelIndex();
  39. Classeur *childClasseur = getClasseur(index);
  40. Classeur *parentClasseur = childClasseur->parent();
  41. if(parentClasseur == root_classeur)
  42. return QModelIndex();
  43. return createIndex(parentClasseur->childNumber(), 0, parentClasseur);
  44. }
  45.  
  46. QModelIndex Classeurs_Model::index(int row,
  47. int column,
  48. const QModelIndex &parent) const {
  49. if(parent.isValid()) {
  50. Classeur *parentClasseur = reinterpret_cast<Classeur*>
  51. (parent.internalPointer());
  52. Classeur *classeur = parentClasseur->child(row);
  53. return createIndex(row, column, classeur); }
  54. return QModelIndex();
  55. }
  56.  
  57. Qt::ItemFlags Classeurs_Model::flags(const QModelIndex &index) const {
  58. if(!index.isValid())
  59. return 0;
  60. return Qt::ItemIsEditable |
  61. Qt::ItemIsEnabled |
  62. Qt::ItemIsSelectable |
  63. QAbstractItemModel::flags(index);
  64. }
  65.  
  66. QVariant Classeurs_Model::data(const QModelIndex &index,
  67. int role) const {
  68. if(index.isValid() && role == Qt::DisplayRole) {
  69. Classeur *classeur;
  70. classeur = getClasseur(index);
  71. return classeur->data(index.column()); }
  72. return QVariant();
  73. }
  74.  
  75. bool Classeurs_Model::setData(const QModelIndex &index,
  76. const QVariant &value,
  77. int role) {
  78. if (role != Qt::EditRole || !index.isValid())
  79. return false;
  80. Classeur *classeur = getClasseur(index);
  81. bool result = classeur->setData(index.column(), value);
  82. if (result)
  83. emit dataChanged(index, index);
  84. return result;
  85. }
  86.  
  87. int Classeurs_Model::columnCount(const QModelIndex &parent) const {
  88. return 4;
  89. }
  90.  
  91. int Classeurs_Model::rowCount(const QModelIndex &parent) const {
  92. Classeur *parentClasseur = getClasseur(parent);
  93. return parentClasseur->childCount();
  94. }
  95.  
  96. QVariant Classeurs_Model::headerData(int section,
  97. Qt::Orientation orientation,
  98. int role) const {
  99. if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
  100. return root_classeur->data(section);
  101. return QVariant();
  102. }
  103.  
  104. bool Classeurs_Model::setHeaderData(int section,
  105. Qt::Orientation orientation,
  106. const QVariant &value,
  107. int role) {
  108. if (role != Qt::EditRole || orientation != Qt::Horizontal)
  109. return false;
  110. bool result = root_classeur->setData(section, value);
  111. if (result)
  112. emit headerDataChanged(orientation, section, section);
  113. return result;
  114. }
  115.  
  116. bool Classeurs_Model::insertRows(int position,
  117. int rows,
  118. const QModelIndex &parent) {
  119. Classeur *parentClasseur = getClasseur(parent);
  120. bool success;
  121. beginInsertRows(parent, position, position + rows - 1);
  122. success = parentClasseur->insertChildren(position, rows, 5);
  123. endInsertRows();
  124. return success;
  125. }
  126.  
  127. bool Classeurs_Model::insertClasseur(const QModelIndex &parent,
  128. int position,
  129. Classeur *new_classeur) {
  130. Classeur *parentClasseur = getClasseur(parent);
  131. beginInsertRows(parent, position, position);
  132. parentClasseur->insertClasseur(position, new_classeur);
  133. endInsertRows();
  134. return true;
  135. }
  136.  
  137. bool Classeurs_Model::removeRows(int position,
  138. int rows,
  139. const QModelIndex &parent) {
  140. Classeur *parentClasseur = getClasseur(parent);
  141. bool success = true;
  142. beginRemoveRows(parent, position, position + rows - 1);
  143. success = parentClasseur->removeChildren(position, rows);
  144. endRemoveRows();
  145. return success;
  146. }
  147. //int Classeurs_Model::totalRowCount(const QModelIndex &parent) const {
  148. //}
  149.  
  150. void Classeurs_Model::setModel(const QString &colFK,
  151. const int &idFK,
  152. const QStringList &fields,
  153. const QString &table,
  154. const QString &fTable) {
  155.  
  156. QString field_list;
  157. QStringList fields_default = fields;
  158. if(fields_default.isEmpty())
  159. fields_default << "nom" << "comment"
  160. << "tree_id" << "tree_id_parent" << "id";
  161. db_coordonates.col_FK = colFK;
  162. db_coordonates.id_FK = idFK;
  163. db_coordonates.fields = fields;
  164. db_coordonates.table = table;
  165. db_coordonates.linker_table = fTable;
  166. foreach(QString field, fields_default)
  167. field_list += (!field_list.isEmpty()) ?
  168. QString(", c.%1").arg(field) :
  169. QString(" c.%1").arg(field);
  170. query_str = QString("SELECT %1 FROM \"%2\" c, \"%3\" r "
  171. "WHERE c.id = r.id_classeur "
  172. "AND r.%4 = %5 ;")
  173. .arg(field_list).arg(table)
  174. .arg(fTable).arg(colFK).arg(idFK);
  175. }
  176.  
  177. void Classeurs_Model::setQueryOrder(const QStringList &order_list,
  178. const order &type) {
  179. QString list_order;
  180. foreach(QVariant field, order_list)
  181. list_order += (!list_order.isEmpty()) ?
  182. QString("ORDER BY (%1").arg(field.toString()) :
  183. QString(", %2").arg(field.toString());
  184. list_order += ") ";
  185. switch (type) {
  186. case ASC: list_order += "ASC "; break;
  187. case DESC: list_order += "DESC"; break; }
  188. query_str.insert(-1, list_order);
  189. }
  190.  
  191. bool Classeurs_Model::extractDatas() {
  192. QSqlQuery query;
  193. if (!query_str.isEmpty() &&
  194. datas_valid == false) {
  195. query.prepare(query_str);
  196. query.exec();
  197. int c_name = query.record().indexOf(db_coordonates.fields[0]);
  198. int c_comment = query.record().indexOf(db_coordonates.fields[1]);
  199. int c_id = query.record().indexOf(db_coordonates.fields[2]);
  200. int c_id_parent = query.record().indexOf(db_coordonates.fields[3]);
  201. int c_id_DB = query.record().indexOf(db_coordonates.fields[4]);
  202. db_Classeurs.clear();
  203. while(query.next()) {
  204. QList<QVariant> values;
  205. values << query.value(c_name)
  206. << query.value(c_comment)
  207. << query.value(c_id_DB);
  208. db_Classeurs[query.value(c_id_parent).toInt()]
  209. .insert(query.value(c_id).toInt(),
  210. values); }
  211. datas_valid = true;
  212. find_Childs(0, root_classeur); }
  213. }
  214.  
  215. void Classeurs_Model::find_Childs(int id_parent,
  216. Classeur *parent) {
  217. QHash<int, QList<QVariant> > col_id = db_Classeurs[id_parent];
  218. foreach(int id, col_id.keys()) {
  219. QList<QVariant> row;
  220. row.clear();
  221. row << col_id.value(id)[0] << col_id.value(id)[1]
  222. << QVariant(id) << QVariant(id_parent)
  223. << col_id.value(id)[2];
  224. Classeur *classeur_to_add = new Classeur(row, parent);
  225. if(!db_Classeurs[id].isEmpty())
  226. find_Childs(id, classeur_to_add); }
  227. }
  228.  
  229. void Classeurs_Model::addClasseur(const QList<QVariant> &datas,
  230. const QModelIndex &parent) {
  231. QList<QVariant> new_datas = datas;
  232. Classeur *classeurParent;
  233. if(!parent.isValid())
  234. classeurParent = root_classeur;
  235. else
  236. classeurParent = reinterpret_cast<Classeur*>(parent.internalPointer());
  237. //** find the next id_tree from static id_tree_MAX of root_classeur
  238. int last_id_tree = root_classeur->get_id_MAX();
  239. new_datas[2] = last_id_tree + 1;
  240. int id_DB(0);
  241. id_DB = insertIntoDB(new_datas); // return the Id of new DB entry
  242. if(new_datas.count() < 5)
  243. new_datas << QVariant(id_DB);
  244. Classeur *new_classeur = new Classeur(new_datas);
  245. int new_row = this->rowCount(parent);
  246. this->insertClasseur(parent, new_row, new_classeur);
  247. }
  248.  
  249. int Classeurs_Model::insertIntoDB(const QList<QVariant> &fields) {
  250. QSqlQuery query;
  251. query.prepare(QString("INSERT INTO \"%1\" "
  252. " ( %2, %3, %4, %5) "
  253. "VALUES ( :name, :comment, :tree_id, :tree_id_p) "
  254. "RETURNING id ;").arg(db_coordonates.table)
  255. .arg(db_coordonates.fields[0])
  256. .arg(db_coordonates.fields[1])
  257. .arg(db_coordonates.fields[2])
  258. .arg(db_coordonates.fields[3]));
  259. query.bindValue(":name", fields[0].toString());
  260. query.bindValue(":comment", fields[1].toString());
  261. query.bindValue(":tree_id", fields[2].toInt());
  262. query.bindValue(":tree_id_p", fields[3].toInt());
  263. query.exec();
  264. int new_ID;
  265. while(query.next())
  266. new_ID = query.value(0).toInt();
  267. return new_ID;
  268. }
  269.  
  270.  
  271. Files_Model* Classeurs_Model::getCurrent_Files_model(QModelIndex &index) const {
  272. if(!index.isValid())
  273. return NULL;
  274. Classeur *classeur = reinterpret_cast<Classeur*>(index.internalPointer());
  275. return classeur->getFiles_model();
  276. }
  277.  
  278. Classeur* Classeurs_Model::getClasseur(const QModelIndex &index) const {
  279. if(!index.isValid())
  280. return root_classeur;
  281. Classeur *classeur = reinterpret_cast<Classeur*>(index.internalPointer());
  282. return classeur;
  283. }
  284.  
  285.  
  286. void Classeurs_Model::rowsInserted(const QModelIndex &parent,
  287. int start, int end) {
  288. emit add_classeur(parent, start, end);
  289. }
  290.  
  291. // classeurs_model.h
  292. CLASSEURS_MODEL_H
  293. #define CLASSEURS_MODEL_H
  294.  
  295. #include <QObject>
  296. #include <QAbstractItemModel>
  297. #include <QFlags>
  298. #include "Classeurs/classeur.h"
  299.  
  300. enum order {
  301. ASC, DESC
  302. };
  303.  
  304. struct database_classeurs_fields {
  305. QString col_FK;
  306. int id_FK;
  307. QStringList fields;
  308. QString table;
  309. QString linker_table;
  310. };
  311.  
  312. class Classeurs_Model : public QAbstractItemModel
  313. {
  314. Q_OBJECT
  315.  
  316. public:
  317. explicit Classeurs_Model(QObject *parent = 0);
  318. ~Classeurs_Model();
  319. QModelIndex parent(const QModelIndex &child) const;
  320. QModelIndex index(int row,
  321. int column,
  322. const QModelIndex &parent) const;
  323. Qt::ItemFlags flags(const QModelIndex &index) const;
  324. QVariant data(const QModelIndex &index,
  325. int role = Qt::DisplayRole) const;
  326. bool setData(const QModelIndex &index,
  327. const QVariant &value,
  328. int role = Qt::EditRole);
  329. int columnCount(const QModelIndex &parent) const;
  330. int rowCount(const QModelIndex &parent) const;
  331. QVariant headerData(int section,
  332. Qt::Orientation orientation,
  333. int role) const;
  334. bool setHeaderData(int section,
  335. Qt::Orientation orientation,
  336. const QVariant & value,
  337. int role = Qt::EditRole);
  338. bool insertRows(int position,
  339. int rows,
  340. const QModelIndex &parent);
  341. bool insertClasseur(const QModelIndex &parent,
  342. int position,
  343. Classeur *new_classeur);
  344. bool removeRows(int position,
  345. int rows,
  346. const QModelIndex &parent);
  347. // int totalRowCount(const QModelIndex &parent) const;
  348. void setModel(const QString &colFK,
  349. const int &idFK,
  350. const QStringList &fields = QStringList(),
  351. const QString &table = "Classeurs",
  352. const QString &fTable = "ClasseurRef");
  353. void setQueryOrder(const QStringList &order_list,
  354. const order &type = ASC);
  355. Classeur *getClasseur(const QModelIndex &index) const;
  356. Files_Model *getCurrent_Files_model(QModelIndex &index) const;
  357. void addClasseur(const QList<QVariant> &datas,
  358. const QModelIndex &parent);
  359. bool extractDatas();
  360.  
  361. protected:
  362. Classeur *root_classeur;
  363. QHash <int, // id_parent =>
  364. QHash <int, // id =>
  365. QList<QVariant> > > db_Classeurs; // [name, comment]
  366. QString query_str;
  367. bool datas_valid;
  368. database_classeurs_fields db_coordonates;
  369. void find_Childs(int id_parent,
  370. Classeur *parent);
  371. int insertIntoDB(const QList<QVariant> &fields);
  372.  
  373. protected slots:
  374. void rowsInserted(const QModelIndex &parent,
  375. int start, int end) ;
  376.  
  377. signals:
  378. void add_classeur(const QModelIndex &parent,
  379. int start, int end);
  380. // void dataChanged(const QModelIndex &start,
  381. // const QModelIndex &end);
  382.  
  383. };
  384.  
  385.  
  386.  
  387. #endif // CLASSEURS_MODEL_H
  388.  
  389. //classeur.cpp
  390. #include "classeur.h"
  391.  
  392. #include <QDebug>
  393. #include <QSqlDatabase>
  394. #include <QSqlQuery>
  395. #include <QSqlError>
  396. #include <QMessageBox>
  397.  
  398.  
  399. Classeur::Classeur(const QList<QVariant> &data,
  400. Classeur *parent)
  401. {
  402. parentClasseur = parent;
  403. classeurData = data;
  404. childsClasseur = QList<Classeur*>();
  405. if(parent != 0)
  406. parent->childsClasseur.append(this);
  407. if(data.count() == 5) {
  408. if(classeurData[2] == 0)
  409. classeurData[2] = id_tree_MAX + 1;
  410. if(classeurData[2].toInt() > id_tree_MAX)
  411. id_tree_MAX = classeurData[2].toInt();
  412. files_model = new Files_Model();
  413. files_root = files_model->invisibleRootItem();
  414. files_model->setColumnCount(4); }
  415. }
  416.  
  417. Classeur::~Classeur()
  418. {
  419. qDeleteAll(childsClasseur);
  420. // qDeleteAll(Classeur_Info.files_model);
  421. // qDeleteAll(Classeur_Info.files_root);
  422. }
  423.  
  424. int Classeur::id_tree_MAX = 0;
  425.  
  426.  
  427. void Classeur::appendChild(Classeur *classeur) {
  428. childsClasseur.append(classeur);
  429. classeur->parentClasseur = this;
  430. }
  431.  
  432. void Classeur::insertClasseur(int position,
  433. Classeur *new_classeur) {
  434. childsClasseur.insert(position, new_classeur);
  435. new_classeur->parentClasseur = this;
  436. }
  437.  
  438. Classeur *Classeur::child(int number) {
  439. return childsClasseur.value(number);
  440. }
  441.  
  442.  
  443. int Classeur::childNumber() const {
  444. if(parentClasseur)
  445. return parentClasseur->childsClasseur.indexOf(
  446. const_cast<Classeur*>(this));
  447. return 0;
  448. }
  449.  
  450. bool Classeur::hasChildren() {
  451. if(childsClasseur.isEmpty())
  452. return false;
  453. return true;
  454. }
  455.  
  456. bool Classeur::insertChildren(int position,
  457. int count,
  458. int columns) {
  459. if(position < 0 ||
  460. columns != 5)
  461. return false;
  462. if(position > childsClasseur.size())
  463. position = childsClasseur.size();
  464. for(int row = 0; row < count; ++row) {
  465. QList<QVariant> datas;
  466. for(int i(0); i < columns; ++i)
  467. datas << QVariant();
  468. Classeur *classeur = new Classeur(datas, this);
  469. childsClasseur.insert(position, classeur);
  470. }
  471. return true;
  472. }
  473.  
  474. bool Classeur::removeChildren(int position,
  475. int count) {
  476. if (position < 0 ||
  477. position + count > childsClasseur.size())
  478. return false;
  479. for(int row(0); row < count; ++row)
  480. delete childsClasseur.takeAt(position);
  481. return true;
  482. }
  483.  
  484. int Classeur::childCount() const {
  485. return childsClasseur.count();
  486. }
  487.  
  488. int Classeur::row() const {
  489. if (parentClasseur)
  490. return parentClasseur->childsClasseur.indexOf(const_cast<Classeur*>(this));
  491. return 0;
  492. }
  493.  
  494. int Classeur::columnCount() const {
  495. return classeurData.count();
  496. }
  497.  
  498. QVariant Classeur::data(int column) const {
  499. return classeurData.value(column);
  500. }
  501.  
  502. bool Classeur::setData(int column,
  503. const QVariant &value) {
  504. if(column < 0 ||
  505. column > classeurData.size() - 1)
  506. return false;
  507. classeurData[column] = value;
  508. return true;
  509. }
  510.  
  511. Classeur* Classeur::parent() {
  512. return parentClasseur;
  513. }
  514.  
  515. Files_Model* Classeur::getFiles_model() {
  516. return files_model;
  517. }
  518.  
  519. QStandardItem* Classeur::getFiles_root() {
  520. return files_root;
  521. }
  522.  
  523. int Classeur::getID_tree() {
  524. return classeurData[2].toInt();
  525. }
  526.  
  527. int Classeur::getID_tree_parent() {
  528. return classeurData[3].toInt();
  529. }
  530.  
  531. int Classeur::get_id_MAX() {
  532. return id_tree_MAX;
  533. }
  534. // classeur.h
  535. #ifndef CLASSEUR_H
  536. #define CLASSEUR_H
  537.  
  538. #include <QObject>
  539. #include <QSqlDatabase>
  540. #include <QStandardItem>
  541. #include <QStandardItemModel>
  542. #include "user_controler.h"
  543. #include "Files/files_model.h"
  544.  
  545.  
  546. class Classeur
  547. {
  548.  
  549. public:
  550. explicit Classeur(const QList<QVariant> &data = QList<QVariant>(),
  551. Classeur *parent = 0);
  552. ~Classeur();
  553. Classeur *parent();
  554. void appendChild(Classeur *child);
  555. void insertClasseur(int position,
  556. Classeur *new_classeur);
  557. Classeur *child(int number);
  558. int childCount() const;
  559. int columnCount() const;
  560. QVariant data(int column) const;
  561. int row() const;
  562. void setInfos(QString name, QString comment);
  563. void setComment(QString comment);
  564. bool insertChildren(int position,
  565. int count,
  566. int columns);
  567. bool removeChildren(int position,
  568. int count);
  569. int childNumber() const;
  570. bool setData(int column,
  571. const QVariant &value);
  572. bool hasChildren();
  573. int get_id_MAX();
  574. Files_Model *getFiles_model();
  575. QStandardItem *getFiles_root();
  576. int getID_tree();
  577. int getID_tree_parent();
  578.  
  579. private:
  580. QList<Classeur*> childsClasseur;
  581. QList<QVariant> classeurData;
  582. Classeur *parentClasseur;
  583. QStandardItem *files_root;
  584. Files_Model *files_model;
  585. static int id_tree_MAX;
  586.  
  587. signals:
  588.  
  589. public slots:
  590. };
  591.  
  592. #endif // CLASSEUR_H
  593. // classeurs_treeview.cpp
  594. #include "classeurs_treeview.h"
  595. #include "classeur.h"
  596. #include <QMessageBox>
  597.  
  598. //infos_generales_classeurs Classeurs_treeView::Classeurs;
  599.  
  600. Classeurs_treeView::Classeurs_treeView(QWidget *parent) {
  601. Classeurs.classeurs_model = new Classeurs_Model;
  602. this->setModel(Classeurs.classeurs_model);
  603. this->setAcceptDrops(false);
  604. this->setSelectionMode(QAbstractItemView::ExtendedSelection);
  605. this->setColumnHidden(2, true);
  606. this->setColumnHidden(3, true);
  607. this->setColumnHidden(4, true);
  608. supprimer = new QAction(tr("Supprimer"), this);
  609. QObject::connect(supprimer, &QAction::triggered, this, &Classeurs_treeView::delete_row);
  610. }
  611.  
  612. Classeurs_treeView::~Classeurs_treeView()
  613. {
  614.  
  615. }
  616. //****** Methods "get" ***********************************************
  617. Classeurs_Model *Classeurs_treeView::getModel() {
  618. return Classeurs.classeurs_model;
  619. // return this->model();
  620. }
  621.  
  622.  
  623. //******* add classeurs methods ****************************************
  624. void Classeurs_treeView::add_classeur(const QVariant &name,
  625. const QVariant &comment,
  626. const QVariant &id_parent,
  627. const QModelIndex &parent) { // ajoute un classeur
  628. qSort(Classeurs.id.begin(), Classeurs.id.end());
  629. next_id = (!Classeurs.id.isEmpty()) ? Classeurs.id.last() + 1 : 1;
  630. QList<QVariant> new_row;
  631. new_row << name << comment << QVariant(next_id) << id_parent;
  632. Classeurs.classeurs_model->addClasseur(new_row, parent);
  633. }
  634.  
  635. //****** Delete classeurs **************************************************
  636. void Classeurs_treeView::delete_row() { // peut supprimer une ou plusieurs sélections et leurs fils
  637. int answer = QMessageBox::question(this,"SUPPRIMER",
  638. tr("Voulez vous supprimer le(s) classeur(s) ?"),
  639. tr("Oui"), tr("Non"));
  640. if (answer == 0) { // si la réponse est "oui" j'efface le fichier ou le dossier sélectionné...
  641. emit delete_classeur(this->selectionModel()->selectedIndexes());
  642. }
  643. }
  644. //****** Event mouse click **************************************************
  645. void Classeurs_treeView::mouseReleaseEvent ( QMouseEvent * event ) {
  646. if(event->button() == Qt::RightButton) {
  647. menu_middle = new QMenu(this);
  648. if (this->indexAt(event->pos()).isValid()) {
  649. menu_middle->addAction(supprimer);
  650. menu_middle->popup(this->viewport()->mapToGlobal(event->pos())); } }
  651. if(event->button() == Qt::LeftButton)
  652. emit clicked(this->indexAt(event->pos()));
  653. }
  654.  
  655. void Classeurs_treeView::dataChanged(const QModelIndex &topLeft,
  656. const QModelIndex &bottomRight,
  657. const QVector<int> &roles) {
  658. emit change_data(topLeft, bottomRight, roles);
  659. }
  660. //classeurs_treeview.h
  661.  
  662. #ifndef CLASSEURS_TREEVIEW_H
  663. #define CLASSEURS_TREEVIEW_H
  664. #include "Classeurs/classeur.h"
  665. #include "Classeurs/classeurs_model.h"
  666.  
  667. #include <QtGui>
  668. #include <QObject>
  669. #include <QTreeView>
  670. #include <QStandardItem>
  671. #include <QMenu>
  672.  
  673.  
  674. struct infos_generales_classeurs {
  675. QList<int> id;
  676. Classeur *root_classeur;
  677. Classeurs_Model *classeurs_model;
  678. }; // structure de log des classeurs à insérer dans "Structures"
  679.  
  680.  
  681. class Classeurs_treeView : public QTreeView
  682. {
  683. Q_OBJECT
  684.  
  685. public:
  686. explicit Classeurs_treeView(QWidget *parent);
  687. ~Classeurs_treeView();
  688. infos_generales_classeurs Classeurs;
  689. void add_classeur(const QVariant &name = QVariant(""),
  690. const QVariant &comment = QVariant(""),
  691. const QVariant &id_parent = QVariant(0),
  692. const QModelIndex &parent = QModelIndex());
  693. Classeurs_Model *getModel();
  694.  
  695. protected:
  696. QMenu *menu_middle;
  697. QMenu *menu_right;
  698. QAction *supprimer;
  699. int next_id;
  700. void delete_row();
  701.  
  702. protected slots:
  703. void dataChanged (const QModelIndex &topLeft,
  704. const QModelIndex &bottomRight,
  705. const QVector<int> &roles = QVector<int> ());
  706. void mouseReleaseEvent ( QMouseEvent * event );
  707.  
  708. signals:
  709. void clicked(QModelIndex);
  710. void delete_classeur(QModelIndexList list_indexs);
  711. void change_data(const QModelIndex &topLeft,
  712. const QModelIndex &bottomRight,
  713. const QVector<int> &roles);
  714.  
  715. };
  716.  
  717.  
  718. #endif // CLASSEURS_TREEVIEW_H
  719.  
  720. // part of call for add a classeur: a button call a dialogbox, this dialogbox record some datas,
  721. // this datas are read back at result time from accept button of this dialogbox and calal with datas
  722. // the treeview concerned (the datas are ok... the debugger show them well)... but nothing is show in the tree
  723. // part of new_projet.cpp
  724. void new_project::on_pushButton_add_classeur_clicked() { // définir le classeur à ajouter
  725. classeurs_model = ui_new_project->treeView_classeur->getModel();
  726. add_classeur_files *dialog_add_classeur = new add_classeur_files(this,
  727. ui_new_project->
  728. lineEdit_project_name->text(),
  729. classeurs_model);
  730. dialog_add_classeur->open();
  731. QObject::connect(dialog_add_classeur,
  732. &QDialog::finished,
  733. [dialog_add_classeur, this](int result){
  734. if(result) { // ajoute un classeur à la liste et on créé un id
  735. ui_new_project->treeView_classeur->
  736. add_classeur(dialog_add_classeur->New_classeur.name,
  737. dialog_add_classeur->New_classeur.comment,
  738. dialog_add_classeur->New_classeur.id_parent,
  739. dialog_add_classeur->New_classeur.parent_selected); }
  740. dialog_add_classeur->deleteLater(); });
  741. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement