mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-18 22:00:35 +01:00
Add nomenclature model
Add class NomenclatureModel witch is used with QetGraphicsTableItem. Add ProjectDataBase class, the goal of this class is to store all information of a project at an instant T to easilly find it. This class is still in development and not provide all information that she should.
This commit is contained in:
@@ -102,6 +102,7 @@ INCLUDEPATH += sources \
|
||||
sources/NameList/ui \
|
||||
sources/utils \
|
||||
sources/pugixml \
|
||||
sources/dataBase
|
||||
|
||||
|
||||
# Fichiers sources
|
||||
@@ -130,7 +131,8 @@ HEADERS += $$files(sources/*.h) $$files(sources/ui/*.h) \
|
||||
$$files(sources/NameList/*.h) \
|
||||
$$files(sources/NameList/ui/*.h) \
|
||||
$$files(sources/utils/*.h) \
|
||||
$$files(sources/pugixml/*.hpp)
|
||||
$$files(sources/pugixml/*.hpp) \
|
||||
$$files(sources/dataBase/*.h)
|
||||
|
||||
SOURCES += $$files(sources/*.cpp) \
|
||||
$$files(sources/editor/*.cpp) \
|
||||
@@ -158,7 +160,8 @@ SOURCES += $$files(sources/*.cpp) \
|
||||
$$files(sources/NameList/*.cpp) \
|
||||
$$files(sources/NameList/ui/*.cpp) \
|
||||
$$files(sources/utils/*.cpp) \
|
||||
$$files(sources/pugixml/*.cpp)
|
||||
$$files(sources/pugixml/*.cpp) \
|
||||
$$files(sources/dataBase/*.cpp)
|
||||
|
||||
# Liste des fichiers qui seront incorpores au binaire en tant que ressources Qt
|
||||
RESOURCES += qelectrotech.qrc
|
||||
|
||||
206
sources/dataBase/projectdatabase.cpp
Normal file
206
sources/dataBase/projectdatabase.cpp
Normal file
@@ -0,0 +1,206 @@
|
||||
/*
|
||||
Copyright 2006-2020 QElectroTech Team
|
||||
This file is part of QElectroTech.
|
||||
|
||||
QElectroTech is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
QElectroTech is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "projectdatabase.h"
|
||||
#include "qetapp.h"
|
||||
#include "qetproject.h"
|
||||
#include "elementprovider.h"
|
||||
#include "element.h"
|
||||
|
||||
#include <QSqlError>
|
||||
|
||||
/**
|
||||
* @brief projectDataBase::projectDataBase
|
||||
* Default constructor
|
||||
* @param project : project from the database work
|
||||
* @param parent : parent QObject
|
||||
*/
|
||||
projectDataBase::projectDataBase(QETProject *project, QObject *parent) :
|
||||
QObject(parent),
|
||||
m_project(project)
|
||||
{
|
||||
createDataBase();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief projectDataBase::~projectDataBase
|
||||
* Destructor
|
||||
*/
|
||||
projectDataBase::~projectDataBase() {
|
||||
m_data_base.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief projectDataBase::elementsInfoFromQuery
|
||||
* @param query
|
||||
* @return quickly return all information about elements from @query, ensure that all
|
||||
* record returned by the query can be casted to string.
|
||||
* Each item of the Qvector represent an element and each value of the QStringList represent the recorded value.
|
||||
*/
|
||||
QVector<QStringList> projectDataBase::elementsInfoFromQuery(const QString &query)
|
||||
{
|
||||
QVector<QStringList> result_;
|
||||
|
||||
QSqlQuery query_(query, m_data_base);
|
||||
if (!query_.exec()) {
|
||||
qDebug() << "Query error : " << query_.lastError();
|
||||
}
|
||||
|
||||
while (query_.next())
|
||||
{
|
||||
QStringList record_;
|
||||
auto i=0;
|
||||
while (query_.value(i).isValid())
|
||||
{
|
||||
record_ << query_.value(i).toString();
|
||||
++i;
|
||||
}
|
||||
result_ << record_;
|
||||
}
|
||||
|
||||
return result_;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief projectDataBase::createDataBase
|
||||
* Create the data base
|
||||
* @return : true if the data base was successfully created.
|
||||
*/
|
||||
bool projectDataBase::createDataBase()
|
||||
{
|
||||
QString connect_name("qet_project_db_" + m_project->uuid().toString());
|
||||
if (m_data_base.connectionNames().contains(connect_name)) {
|
||||
m_data_base = QSqlDatabase::database(connect_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_data_base = QSqlDatabase::addDatabase("QSQLITE", connect_name);
|
||||
if(!m_data_base.open())
|
||||
{
|
||||
m_data_base.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
//Create the elements table
|
||||
QString elements_table("CREATE TABLE element_info(");
|
||||
bool first = true;
|
||||
for (auto string : elementsInfoKeys())
|
||||
{
|
||||
if (first) {
|
||||
first = false;
|
||||
} else {
|
||||
elements_table += ",";
|
||||
}
|
||||
|
||||
elements_table += string += " VARCHAR(512)";
|
||||
}
|
||||
elements_table += ");";
|
||||
|
||||
QSqlQuery query_(elements_table, m_data_base);
|
||||
query_.exec();
|
||||
}
|
||||
|
||||
populateElementsTable();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief projectDataBase::populateElementsTable
|
||||
* Populate the elements table
|
||||
*/
|
||||
void projectDataBase::populateElementsTable()
|
||||
{
|
||||
//Very ugly, in futur we should update the table instead of delete all
|
||||
QSqlQuery clear_table(m_data_base);
|
||||
if (!clear_table.exec("DELETE FROM element_info")) {
|
||||
qDebug() << "last error " << clear_table.lastError();
|
||||
}
|
||||
|
||||
//Prepare the query used for insert new record
|
||||
QStringList bind_values;
|
||||
for (auto key : elementsInfoKeys()) {
|
||||
bind_values << key.prepend(":");
|
||||
}
|
||||
QString insert("INSERT INTO element_info (" +
|
||||
elementsInfoKeys().join(", ") +
|
||||
") VALUES (" +
|
||||
bind_values.join(", ") +
|
||||
")");
|
||||
|
||||
QSqlQuery query(m_data_base);
|
||||
query.prepare(insert);
|
||||
|
||||
|
||||
for (auto *diagram : m_project->diagrams())
|
||||
{
|
||||
ElementProvider ep(diagram);
|
||||
QList<Element *> elements_list = ep.find(Element::Simple | Element::Terminale | Element::Master);
|
||||
|
||||
//Insert all value into the database
|
||||
for (auto elmt : elements_list)
|
||||
{
|
||||
auto hash = elementInfoToString(elmt);
|
||||
for (auto key : hash.keys())
|
||||
{
|
||||
QString value = hash.value(key);
|
||||
QString bind = key.prepend(":");
|
||||
query.bindValue(bind, value);
|
||||
}
|
||||
|
||||
query.bindValue(":element_type", elmt->linkTypeToString());
|
||||
query.bindValue(":element_subtype", elmt->kindInformations()["type"].toString());
|
||||
|
||||
if (!query.exec()) {
|
||||
qDebug() << "projectDataBase::populateElementsTable insert error : " << query.lastError();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief projectDataBase::elementInfoToString
|
||||
* @param elmt
|
||||
* @return the element information in hash as key for the info name and value as the information value.
|
||||
*/
|
||||
QHash<QString, QString> projectDataBase::elementInfoToString(Element *elmt)
|
||||
{
|
||||
QHash<QString, QString> hash; //Store the value for each columns
|
||||
for (auto key : QETApp::elementInfoKeys())
|
||||
{
|
||||
if (key == "label") {
|
||||
hash.insert(key, elmt->actualLabel());
|
||||
}
|
||||
else {
|
||||
hash.insert(key, elmt->elementInformations()[key].toString());
|
||||
}
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief projectDataBase::elementsInfoKeys
|
||||
* @return QETApp::elementInfoKeys() + "element_type" and "element_subtype"
|
||||
*/
|
||||
QStringList projectDataBase::elementsInfoKeys() const
|
||||
{
|
||||
auto keys_ = QETApp::elementInfoKeys();
|
||||
keys_<< "element_type" << "element_subtype";
|
||||
|
||||
return keys_;
|
||||
}
|
||||
59
sources/dataBase/projectdatabase.h
Normal file
59
sources/dataBase/projectdatabase.h
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
Copyright 2006-2020 QElectroTech Team
|
||||
This file is part of QElectroTech.
|
||||
|
||||
QElectroTech is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
QElectroTech is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef PROJECTDATABASE_H
|
||||
#define PROJECTDATABASE_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QSqlDatabase>
|
||||
#include <QSqlQuery>
|
||||
#include <QPointer>
|
||||
|
||||
#include "qetproject.h"
|
||||
|
||||
class Element;
|
||||
|
||||
/**
|
||||
* @brief The projectDataBase class
|
||||
* This class wrap a sqlite data base where you can find several thing about
|
||||
* the content of a project.
|
||||
*
|
||||
* NOTE this class is still in developement.
|
||||
*/
|
||||
class projectDataBase : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
projectDataBase(QETProject *project, QObject *parent = nullptr);
|
||||
virtual ~projectDataBase() override;
|
||||
|
||||
QVector<QStringList> elementsInfoFromQuery(const QString &query);
|
||||
|
||||
private:
|
||||
bool createDataBase();
|
||||
void populateElementsTable();
|
||||
static QHash<QString, QString> elementInfoToString(Element *elmt);
|
||||
QStringList elementsInfoKeys() const;
|
||||
|
||||
private:
|
||||
QPointer<QETProject> m_project;
|
||||
QSqlDatabase m_data_base;
|
||||
QSqlQuery m_insert_elements_query;
|
||||
};
|
||||
|
||||
#endif // PROJECTDATABASE_H
|
||||
@@ -297,15 +297,15 @@ QStringList QETApp::elementInfoKeys()
|
||||
|
||||
<< "comment"
|
||||
<< "function"
|
||||
<< "tension-protocol"
|
||||
<< "tension_protocol"
|
||||
<< "auxiliary1"
|
||||
<< "auxiliary2"
|
||||
|
||||
<< "description"
|
||||
<< "designation"
|
||||
<< "manufacturer"
|
||||
<< "manufacturer-reference"
|
||||
<< "machine-manufacturer-reference"
|
||||
<< "manufacturer_reference"
|
||||
<< "machine_manufacturer_reference"
|
||||
<< "supplier"
|
||||
<< "quantity"
|
||||
<< "unity";
|
||||
@@ -328,15 +328,15 @@ QString QETApp::elementTranslatedInfoKey(const QString &info)
|
||||
|
||||
else if (info == "comment") return tr("Commentaire");
|
||||
else if (info == "function") return tr("Fonction");
|
||||
else if (info == "tension-protocol") return tr("Tension / Protocole");
|
||||
else if (info == "tension_protocol") return tr("Tension / Protocole");
|
||||
else if (info == "auxiliary1") return tr("Bloc auxiliaire 1");
|
||||
else if (info == "auxiliary2") return tr("Bloc auxiliaire 2");
|
||||
|
||||
else if (info == "description") return tr("Description textuelle");
|
||||
else if (info == "designation") return tr("Numéro d'article");
|
||||
else if (info == "manufacturer") return tr("Fabricant");
|
||||
else if (info == "manufacturer-reference") return tr("Numéro de commande");
|
||||
else if (info == "machine-manufacturer-reference") return tr("Numéro interne");
|
||||
else if (info == "manufacturer_reference") return tr("Numéro de commande");
|
||||
else if (info == "machine_manufacturer_reference") return tr("Numéro interne");
|
||||
else if (info == "supplier") return tr("Fournisseur");
|
||||
else if (info == "quantity") return tr("Quantité");
|
||||
else if (info == "unity") return tr("Unité");
|
||||
@@ -362,16 +362,16 @@ QString QETApp::elementInfoToVar(const QString &info)
|
||||
else if (info == "description") return QString("%{description}");
|
||||
else if (info == "designation") return QString("%{designation}");
|
||||
else if (info == "manufacturer") return QString("%{manufacturer}");
|
||||
else if (info == "manufacturer-reference") return QString("%{manufacturer-reference}");
|
||||
else if (info == "manufacturer_reference") return QString("%{manufacturer_reference}");
|
||||
else if (info == "supplier") return QString("%{supplier}");
|
||||
else if (info == "quantity") return QString("%{quantity}");
|
||||
else if (info == "unity") return QString("%{unity}");
|
||||
else if (info == "auxiliary1") return QString("%{auxiliary1}");
|
||||
else if (info == "auxiliary2") return QString("%{auxiliary2}");
|
||||
else if (info == "machine-manufacturer-reference") return QString("%{machine-manufacturer-reference}");
|
||||
else if (info == "machine_manufacturer_reference") return QString("%{machine_manufacturer_reference}");
|
||||
else if (info == "location") return QString("%{location}");
|
||||
else if (info == "function") return QString("%{function}");
|
||||
else if (info == "tension-protocol") return QString("%{tension-protocol}");
|
||||
else if (info == "tension_protocol") return QString("%{tension_protocol}");
|
||||
|
||||
return (QString ("%{void}"));
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "addelementtextcommand.h"
|
||||
#include "conductornumexport.h"
|
||||
#include "qetgraphicstableitem.h"
|
||||
#include "nomenclaturemodel.h"
|
||||
|
||||
#include <QMessageBox>
|
||||
#include <QStandardPaths>
|
||||
@@ -403,9 +404,29 @@ void QETDiagramEditor::setUpActions()
|
||||
|
||||
//Add a nomenclature item
|
||||
m_add_nomenclature = new QAction(QET::Icons::TableOfContent, tr("Ajouter un tableau lambda (Fonctionnalité en cours de devellopement)"),this);
|
||||
connect(m_add_nomenclature, &QAction::triggered, [this]() {
|
||||
if(this->currentDiagramView()) {
|
||||
this->currentDiagramView()->diagram()->addItem(new QetGraphicsTableItem());
|
||||
connect(m_add_nomenclature, &QAction::triggered, [this]()
|
||||
{
|
||||
if(this->currentDiagramView())
|
||||
{
|
||||
auto table = new QetGraphicsTableItem();
|
||||
|
||||
/*******ONLY FOR TEST DURING DEVEL*********/
|
||||
auto model = new NomenclatureModel(this->currentProject(), this->currentProject());
|
||||
model->query("SELECT plant, location, label, comment, description FROM element_info ORDER BY plant, location, label, comment, description");
|
||||
model->setData(model->index(0,0), Qt::AlignLeft, Qt::TextAlignmentRole);
|
||||
model->setData(model->index(0,0), QETApp::diagramTextsFont(), Qt::FontRole);
|
||||
model->setHeaderData(0, Qt::Horizontal, Qt::AlignHCenter, Qt::TextAlignmentRole);
|
||||
model->setHeaderData(0, Qt::Horizontal, QETApp::diagramTextsFont(), Qt::FontRole);
|
||||
model->setHeaderData(0, Qt::Horizontal, "Installation");
|
||||
model->setHeaderData(1, Qt::Horizontal, "Localisation");
|
||||
model->setHeaderData(2, Qt::Horizontal, "Label");
|
||||
model->setHeaderData(3, Qt::Horizontal, "Commentaire");
|
||||
model->setHeaderData(4, Qt::Horizontal, "Description");
|
||||
table->setModel(model);
|
||||
/******************************************/
|
||||
|
||||
this->currentDiagramView()->diagram()->addItem(table);
|
||||
table->setPos(50,50);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
164
sources/qetgraphicsitem/ViewItem/nomenclaturemodel.cpp
Normal file
164
sources/qetgraphicsitem/ViewItem/nomenclaturemodel.cpp
Normal file
@@ -0,0 +1,164 @@
|
||||
/*
|
||||
Copyright 2006-2020 QElectroTech Team
|
||||
This file is part of QElectroTech.
|
||||
|
||||
QElectroTech is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
QElectroTech is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "nomenclaturemodel.h"
|
||||
#include "qetapp.h"
|
||||
|
||||
#include <QModelIndex>
|
||||
#include <QFont>
|
||||
|
||||
/**
|
||||
* @brief NomenclatureModel::NomenclatureModel
|
||||
* @param project :project of this nomenclature
|
||||
* @param parent : parent QObject
|
||||
*/
|
||||
NomenclatureModel::NomenclatureModel(QETProject *project, QObject *parent) :
|
||||
QAbstractTableModel(parent),
|
||||
m_project(project),
|
||||
m_database(project)
|
||||
{}
|
||||
|
||||
/**
|
||||
* @brief NomenclatureModel::rowCount
|
||||
* Reimplemented for QAbstractTableModel
|
||||
* @param parent
|
||||
* @return
|
||||
*/
|
||||
int NomenclatureModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
if (parent.isValid())
|
||||
return 0;
|
||||
|
||||
return m_record.count();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief NomenclatureModel::columnCount
|
||||
* Reimplemented for QAbstractTableModel
|
||||
* @param parent
|
||||
* @return
|
||||
*/
|
||||
int NomenclatureModel::columnCount(const QModelIndex &parent) const
|
||||
{
|
||||
if (parent.isValid())
|
||||
return 0;
|
||||
|
||||
if (m_record.count()) {
|
||||
return m_record.first().count();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief NomenclatureModel::setHeaderData
|
||||
* Reimplemented from QAbstractTableModel.
|
||||
* Only horizontal orientation is accepted.
|
||||
* @param section
|
||||
* @param orientation
|
||||
* @param value
|
||||
* @param role
|
||||
* @return
|
||||
*/
|
||||
bool NomenclatureModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role)
|
||||
{
|
||||
if (orientation == Qt::Vertical) {
|
||||
return false;
|
||||
}
|
||||
auto hash_ = m_header_data.value(section);
|
||||
hash_.insert(role, value);
|
||||
m_header_data.insert(section, hash_);
|
||||
headerDataChanged(orientation, section, section);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief NomenclatureModel::headerData
|
||||
* Reimplemented from QAbstractTableModel.
|
||||
* @param section
|
||||
* @param orientation
|
||||
* @param role
|
||||
* @return
|
||||
*/
|
||||
QVariant NomenclatureModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||
{
|
||||
if (orientation == Qt::Vertical) {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
auto hash_ = m_header_data.value(section);
|
||||
if (role == Qt::DisplayRole && !hash_.contains(Qt::DisplayRole)) { //special case to have the same behavior as Qt
|
||||
return hash_.value(Qt::EditRole);
|
||||
}
|
||||
return m_header_data.value(section).value(role);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief NomenclatureModel::setData
|
||||
* Only store the data for the index 0.0
|
||||
* @param index
|
||||
* @param value
|
||||
* @param role
|
||||
* @return
|
||||
*/
|
||||
bool NomenclatureModel::setData(const QModelIndex &index, const QVariant &value, int role)
|
||||
{
|
||||
if (!index.isValid() || index.row() != 0 || index.column() != 0) {
|
||||
return false;
|
||||
}
|
||||
m_index_0_0_data.insert(role, value);
|
||||
emit dataChanged(index, index, QVector<int>(role));
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief NomenclatureModel::data
|
||||
* Reimplemented for QAbstractTableModel
|
||||
* @param index
|
||||
* @param role
|
||||
* @return
|
||||
*/
|
||||
QVariant NomenclatureModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (!index.isValid())
|
||||
return QVariant();
|
||||
|
||||
if (index.row() == 0 &&
|
||||
index.column() == 0 &&
|
||||
role != Qt::DisplayRole) {
|
||||
return m_index_0_0_data.value(role);
|
||||
}
|
||||
|
||||
if (role == Qt::DisplayRole) {
|
||||
QVariant v(m_record.at(index.row()).at(index.column()));
|
||||
return v;
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief NomenclatureModel::query
|
||||
* Query the internall bd with @query.
|
||||
* @param query
|
||||
*/
|
||||
void NomenclatureModel::query(const QString &query)
|
||||
{
|
||||
m_query = query;
|
||||
m_record.clear();
|
||||
m_record = m_database.elementsInfoFromQuery(query);
|
||||
}
|
||||
57
sources/qetgraphicsitem/ViewItem/nomenclaturemodel.h
Normal file
57
sources/qetgraphicsitem/ViewItem/nomenclaturemodel.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
Copyright 2006-2020 QElectroTech Team
|
||||
This file is part of QElectroTech.
|
||||
|
||||
QElectroTech is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
QElectroTech is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef NOMENCLATUREMODEL_H
|
||||
#define NOMENCLATUREMODEL_H
|
||||
|
||||
#include <QAbstractTableModel>
|
||||
#include <QPointer>
|
||||
#include "projectdatabase.h"
|
||||
|
||||
|
||||
class QETProject;
|
||||
|
||||
/**
|
||||
* @brief The NomenclatureModel class
|
||||
* An element nomenclature Model.
|
||||
* This model represent a 2D data.
|
||||
*/
|
||||
class NomenclatureModel : public QAbstractTableModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit NomenclatureModel(QETProject *project, QObject *parent = nullptr);
|
||||
|
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
||||
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
|
||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||
void query(const QString &query);
|
||||
|
||||
private:
|
||||
QPointer<QETProject> m_project;
|
||||
QString m_query;
|
||||
projectDataBase m_database;
|
||||
QVector<QStringList> m_record;
|
||||
QHash<int, QHash<int, QVariant>> m_header_data;
|
||||
QHash<int, QVariant> m_index_0_0_data;
|
||||
};
|
||||
|
||||
#endif // NOMENCLATUREMODEL_H
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2006-2019 QElectroTech Team
|
||||
Copyright 2006-2020 QElectroTech Team
|
||||
This file is part of QElectroTech.
|
||||
|
||||
QElectroTech is free software: you can redistribute it and/or modify
|
||||
|
||||
@@ -52,31 +52,6 @@ QetGraphicsTableItem::QetGraphicsTableItem(QGraphicsItem *parent) :
|
||||
connect(m_header_item, &QetGraphicsHeaderItem::heightResized, this, [this]() {
|
||||
m_header_item->setPos(0, 0-m_header_item->rect().height());
|
||||
});
|
||||
|
||||
/*******ONLY FOR TEST DURING DEVEL*********/
|
||||
auto model = new QStandardItemModel(this);
|
||||
int r = 20;
|
||||
int c = 5;
|
||||
|
||||
for (int row = 0; row < r; ++row)
|
||||
{
|
||||
for (int column = 0; column < c; ++column) {
|
||||
QStandardItem *item = new QStandardItem(QString("row %0, column %1").arg(row).arg(column));
|
||||
model->setItem(row, column, item);
|
||||
}
|
||||
}
|
||||
model->setData(model->index(0,0), Qt::AlignLeft, Qt::TextAlignmentRole);
|
||||
model->setData(model->index(0,0), QETApp::diagramTextsFont(), Qt::FontRole);
|
||||
model->setHeaderData(0, Qt::Horizontal, Qt::AlignHCenter, Qt::TextAlignmentRole);
|
||||
model->setHeaderData(0, Qt::Horizontal, QETApp::diagramTextsFont(), Qt::FontRole);
|
||||
model->setHeaderData(0, Qt::Horizontal, "Label");
|
||||
model->setHeaderData(1, Qt::Horizontal, "Folio");
|
||||
model->setHeaderData(2, Qt::Horizontal, "Fonction");
|
||||
model->setHeaderData(3, Qt::Horizontal, "Fabricant");
|
||||
model->setHeaderData(4, Qt::Horizontal, "Installation");
|
||||
this->setModel(model);
|
||||
this->setPos(50,50);
|
||||
/******************************************/
|
||||
}
|
||||
|
||||
QetGraphicsTableItem::~QetGraphicsTableItem()
|
||||
@@ -399,7 +374,7 @@ void QetGraphicsTableItem::handlerMouseReleaseEvent(QGraphicsSceneMouseEvent *ev
|
||||
void QetGraphicsTableItem::adjustColumnsWidth()
|
||||
{
|
||||
auto a = m_current_size.width() - minimumSize().width();
|
||||
auto b = a/m_model->columnCount();
|
||||
auto b = a/std::max(1,m_model->columnCount()); //avoid divide by 0
|
||||
|
||||
for(auto i= 0 ; i<m_model->columnCount() ; ++i) {
|
||||
m_header_item->resizeSection(i, std::max(m_minimum_column_width.at(i), m_header_item->minimumSectionWidth().at(i)) + b);
|
||||
|
||||
@@ -35,6 +35,8 @@ class QetGraphicsHeaderItem;
|
||||
* Text font.
|
||||
* Text alignment in the cell
|
||||
* These two last parameters are not settable directly with the table but trough the model to be displayed by the table.
|
||||
* The table search for font and alignment only in the index(0,0) for all the table.
|
||||
* By consequence, set data in other index than 0,0 is useless also the alignment and font can't be set individually for each cell.
|
||||
*/
|
||||
class QetGraphicsTableItem : public QetGraphicsItem
|
||||
{
|
||||
|
||||
@@ -249,8 +249,10 @@ void GraphicsTablePropertiesEditor::updateUi()
|
||||
return;
|
||||
}
|
||||
|
||||
m_header_button_group->button(m_table_item->model()->headerData(0, Qt::Horizontal, Qt::TextAlignmentRole).toInt())->setChecked(true);
|
||||
m_table_button_group->button(m_table_item->model()->data(m_table_item->model()->index(0,0), Qt::TextAlignmentRole).toInt())->setChecked(true);
|
||||
if (auto button = m_header_button_group->button(m_table_item->model()->headerData(0, Qt::Horizontal, Qt::TextAlignmentRole).toInt()))
|
||||
button->setChecked(true);
|
||||
if (auto button = m_table_button_group->button(m_table_item->model()->data(m_table_item->model()->index(0,0), Qt::TextAlignmentRole).toInt()))
|
||||
button->setChecked(true);
|
||||
|
||||
setUpEditConnection();
|
||||
}
|
||||
|
||||
@@ -112,6 +112,14 @@ QETProject::~QETProject() {
|
||||
qDeleteAll(m_diagrams_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief QETProject::uuid
|
||||
* @return the uuid of this project
|
||||
*/
|
||||
QUuid QETProject::uuid() const {
|
||||
return m_uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief QETProject::init
|
||||
*/
|
||||
|
||||
@@ -71,6 +71,7 @@ class QETProject : public QObject
|
||||
|
||||
// methods
|
||||
public:
|
||||
QUuid uuid() const;
|
||||
ProjectState state() const;
|
||||
QList<Diagram *> diagrams() const;
|
||||
int getFolioSheetsQuantity() const; /// get the folio sheets quantity for this project
|
||||
@@ -266,6 +267,7 @@ class QETProject : public QObject
|
||||
QTimer m_save_backup_timer,
|
||||
m_autosave_timer;
|
||||
KAutoSaveFile *m_backup_file = nullptr;
|
||||
QUuid m_uuid = QUuid::createUuid();
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(QETProject *)
|
||||
|
||||
Reference in New Issue
Block a user