Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // classeurs_treeview.h file (an error at declaration time
- #ifndef CLASSEURS_TREEVIEW_H
- #define CLASSEURS_TREEVIEW_H
- #include "Classeurs/classeur.h"
- #include "Classeurs/classeurs_model.h"
- #include <QtGui>
- #include <QObject>
- #include <QTreeView>
- #include <QStandardItem>
- #include <QMenu>
- struct infos_generales_classeurs {
- QList<int> id;
- Classeur *root_classeur;
- Classeurs_Model *classeurs_model; // ERROR: "Classeurs_Model does not name a type"
- }; // structure de log des classeurs à insérer dans "Structures"
- class Classeurs_treeView : public QTreeView
- {
- Q_OBJECT
- public:
- Classeurs_treeView(const QStringList &header, QWidget *parent);
- ~Classeurs_treeView();
- infos_generales_classeurs Classeurs;
- void add_classeur(const QVariant &name = "",
- const QVariant &comment = "",
- const QVariant &id_parent = "",
- const QModelIndex &parent = QModelIndex());
- Classeurs_Model *getModel(); // ERROR: "Classeurs_Model does not name a type"
- protected:
- QMenu *menu_middle;
- QMenu *menu_right;
- QAction *supprimer;
- int next_id;
- void delete_row();
- protected slots:
- void dataChanged (const QModelIndex &topLeft,
- const QModelIndex &bottomRight,
- const QVector<int> &roles = QVector<int> ());
- void mouseReleaseEvent ( QMouseEvent * event );
- signals:
- void clicked(QModelIndex);
- void delete_classeur(QModelIndexList list_indexs);
- void change_data(const QModelIndex &topLeft,
- const QModelIndex &bottomRight,
- const QVector<int> &roles);
- };
- #endif // CLASSEURS_TREEVIEW_H
- // classeurs_model.h file
- #ifndef CLASSEURS_MODEL_H
- #define CLASSEURS_MODEL_H
- #include <QObject>
- #include <QAbstractItemModel>
- #include "Classeurs/classeur.h"
- #include "Classeurs/classeurs_treeview.h"
- class Classeurs_Model : public QAbstractItemModel
- {
- Q_OBJECT
- enum order {
- ASC, DESC
- };
- public:
- explicit Classeurs_Model(QObject *parent = 0);
- ~Classeurs_Model();
- QModelIndex parent(const QModelIndex &child) const;
- QModelIndex index(int row,
- int column,
- const QModelIndex &parent) const;
- Qt::ItemFlags flags(const QModelIndex &index) const;
- QVariant headerData(int section,
- Qt::Orientation orientation,
- int role) const;
- QVariant data(const QModelIndex &index,
- int role) const;
- Classeur getClasseur(const QModelIndex &index);
- int columnCount(const QModelIndex &parent) const;
- int rowCount(const QModelIndex &parent) const;
- int totalRowCount(const QModelIndex &parent) const;
- Files_Model *getCurrent_Files_model(QModelIndex &index);
- void setModel(const QString &colFK,
- const int &idFK,
- const QList<QString> &fields = QList("id_tree",
- "id_tree_parent",
- "nom",
- "comment"),
- const QString &table = "Classeurs",
- const QString &fTable = "ClasseurRef");
- void setQueryOrder(const QList<QString> &order_list,
- const order &type = ASC);
- void addClasseur(const QList<QVariant> &datas,
- const QModelIndex &parent);
- protected:
- Classeur *root_classeur;
- QHash <QVariant, // id_parent =>
- QHash <QVariant, // id =>
- QList<QVariant> > > db_Classeurs; // [name, comment]
- QString query_str;
- bool datas_valid;
- bool extractDatas();
- void find_Childs(int id,
- Classeur *ref);
- protected slots:
- void rowsInserted(const QModelIndex &parent,
- int start, int end) ;
- signals:
- void add_classeur(const QModelIndex &parent,
- int start, int end);
- };
- #endif // CLASSEURS_MODEL_H
- // classeurs_model.cpp file:
- #include "Classeurs/classeurs_model.h"
- #include "Classeurs/classeurs_treeview.h"
- #include "Classeurs/classeur.h"
- #include "user_controler.h"
- #include <QSqlQuery>
- #include <QSqlRecord>
- Classeurs_Model::Classeurs_Model(QObject *parent):
- QAbstractItemModel(parent) {
- user_controler::initdb();
- datas_valid = false;
- QList<QVariant> headers;
- headers << tr("Nom") << tr("Description") << tr("id") << tr("id parent");
- root_classeur = new Classeur(headers);
- this->setHeaderData(0, Qt::Horizontal, QVariant(headers[0]));
- this->setHeaderData(1, Qt::Horizontal, QVariant(headers[1]));
- this->setHeaderData(2, Qt::Horizontal, QVariant(headers[2]));
- this->setHeaderData(3, Qt::Horizontal, QVariant(headers[3]));
- if(extractDatas())
- datas_valid = true;
- }
- Classeurs_Model::~Classeurs_Model() {
- }
- Qt::ItemFlags flags(const QModelIndex &index) const {
- if(!index.isValid())
- return 0;
- return Qt::ItemIsEditable |
- Qt::ItemIsEnabled |
- Qt::ItemIsSelectable;
- }
- void Classeurs_Model::setModel(const QString &colFK,
- const int &idFK,
- const QList<QString> &fields,
- const QString &table,
- const QString &fTable) {
- QString field_list;
- foreach(QVariant field, fields)
- field_list += (!field_list.isEmpty()) ?
- QString(", c.%1").arg(field) :
- QString(" c.%1").arg(field);
- query_str = QString("SELECT %1 FROM \"%2\" c, \"%3\" r "
- "WHERE c.id = r.id_classeur "
- "AND r.%4 = %5 ;")
- .arg(field_list).arg(table)
- .arg(fTable).arg(colFK).arg(idFK);
- }
- void Classeurs_Model::setQueryOrder(const QList<QString> &order_list,
- const order &type) {
- QString list_order;
- foreach(QVariant field, order_list)
- list_order += (!list_order.isEmpty()) ?
- QString("ORDER BY (%1").arg(field) :
- QString(", %2").arg(field);
- list_order += ") ";
- switch (type) {
- case ASC: list_order += "ASC "; break;
- case DESC: list_order += "DESC"; break; }
- query_str.insert(-1, list_order);
- }
- bool Classeurs_Model::extractDatas() {
- QSqlQuery query;
- if (!query_str.isEmpty() &&
- datas_valid == false) {
- query.prepare(query_str);
- user_controler::execDB(query);
- int c_id = query.record().indexof("id");
- int c_id_parent = query.record().indexOf("id_parent");
- int c_name = query.record().indexOf("nom");
- int c_comment = query.record().indexOf("comment");
- int i(0);
- db_Classeurs.clear();
- while(query.next()) {
- QList<QVariant> values(query.value(c_name),
- query.value(c_comment));
- db_Classeurs[query.value(c_id_parent)]
- .insert(query.value(c_id),
- values); }
- datas_valid = true;
- find_childs(0, root_classeur); }
- }
- void Classeurs_Model::find_Childs(int id_parent,
- Classeur *parent) {
- QHash<QVariant, QList<QVariant> > col_id = db_Classeurs[id_parent];
- foreach(QVariant id, col_id.keys()) {
- QList<QVariant> row;
- row.clear();
- row << col_id.value(id) << id << id_parent;
- Classeur *classeur_to_add = new Classeur(row, parent);
- if(!db_Classeurs[id].isEmpty())
- find_Childs(id, classeur_to_add); }
- }
- void Classeurs_Model::addClasseur(const QList<QVariant> &datas,
- const QModelIndex &parent) {
- Classeur *classeurParent;
- if(!parentParent.isValid())
- classeurParent = root_classeur;
- else
- classeurParent = reinterpret_cast<Classeur*>(parent.internalPointer());
- Classeur *new_classeur;
- new_classeur = new Classeur(datas, classeurParent);
- }
- QVariant Classeurs_Model::data(const QModelIndex &index,
- int role) const {
- Classeur *classeur;
- if(!index.isValid())
- classeur = root_classeur;
- else
- classeur = reinterpret_cast<Classeur*>(index.internalPointer());
- if(role == Qt::DisplayRole) {
- switch (index.column()) {
- case 0: { return classeur->Classeur_Info.name; break; }
- case 1: { return classeur->Classeur_Info.comment; break; }
- case 2: { return classeur->Classeur_Info.id; break; }
- case 2: { return classeur->Classeur_Info.id_parent; break; } } }
- }
- QModelIndex Classeurs_Model::index(int row,
- int column,
- const QModelIndex &parent) const {
- Classeur *parentClasseur;
- if(!parent.isValid())
- return root_classeur;
- else
- parentClasseur = reinterpret_cast<Classeur*>(parent.internalPointer());
- Classeur *classeur = parentClasseur->children().at(row);
- return createIndex(row, column, classeur);
- }
- QModelIndex Classeurs_Model::parent(const QModelIndex &child) const {
- if(!child.isValid())
- return QModelIndex();
- Classeur *classeur = reinterpret_cast<Classeur*>(child.internalPointer());
- Classeur *parentClasseur = classeur->parent();
- if(parentClasseur == root_classeur)
- return QModelIndex();
- int row = parentClasseur->parent()->children().indexOf(parentClasseur);
- return createIndex(row, 0, parentClasseur);
- }
- Files_Model* Classeurs_Model::getCurrent_Files_model(QModelIndex &index) {
- if(!index.isValid())
- return Files_Model();
- Classeur *classeur = reinterpret_cast<Classeur*>(index.internalPointer());
- return classeur->Classeur_Info.files_model;
- }
- Classeur* Classeurs_Model::getClasseur(const QModelIndex &index) {
- if(!index.isValid())
- return Files_Model();
- Classeur *classeur = reinterpret_cast<Classeur*>(index.internalPointer());
- return classeur;
- }
- int Classeurs_Model::columnCount(const QModelIndex &parent) const {
- return 4;
- }
- int Classeurs_Model::rowCount(const QModelIndex &parent) const {
- if(!parent.isValid())
- return root_classeur->children().size();
- Classeur *classeur = reinterpret_cast<Classeur*>(parent.internalPointer());
- return classeur->children().size();
- }
- int Classeurs_Model::totalRowCount(const QModelIndex &parent) const {
- }
- void Classeurs_Model::rowsInserted(const QModelIndex &parent,
- int start, int end) {
- emit add_classeur(parent, start, end);
- }
- // classeur.h file:
- #ifndef CLASSEUR_H
- #define CLASSEUR_H
- #include <QObject>
- #include <QSqlDatabase>
- #include <QStandardItem>
- #include <QStandardItemModel>
- #include "user_controler.h"
- #include "Files/files_model.h"
- struct classeur_infos {
- int id;
- int id_parent;
- QString name;
- QString comment;
- QStandardItem *files_root;
- Files_Model *files_model;
- };
- class Classeur
- {
- Q_OBJECT
- public:
- explicit Classeur(const QList<QVariant> &data,
- Classeur *parent = 0);
- ~Classeur();
- classeur_infos Classeur_Info;
- void setInfos(QString name, QString comment);
- void setComment(QString comment);
- void appendChild(Classeur *child);
- Classeur *child(int row);
- bool insertChildren(int position,
- int count,
- int columns);
- bool removeChildren(int position,
- int count);
- int childCount() const;
- int countColumn() const;
- QVariant data(int column) const;
- bool setData(int column,
- const QVariant &value);
- void setHeaders(const QList<QVariant> &headers);
- int row() const;
- Classeur *parent();
- void add_file(QList<int> tree_posit, QStandardItem row_items);
- void edit_file(QList<int> tree_posit, int column,
- QStandardItem *item, QString content = "");
- void del_files(QList<int> tree_posit);
- void read_file_item(QStandardItem *item);
- void read_file_posit(QList<int> tree_posit);
- void read_file_index(QModelIndex index);
- private:
- QList<Classeur*> childsClasseur;
- QList<QVariant> classeurData;
- Classeur *parentClasseur;
- signals:
- public slots:
- };
- #endif // CLASSEUR_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement