mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-19 14:50:53 +01:00
Query can be edited. Project database can be exported
User can now define the information to display in the nomenclature table. WIP The internal database of project can be exported to file.
This commit is contained in:
@@ -102,7 +102,8 @@ INCLUDEPATH += sources \
|
|||||||
sources/NameList/ui \
|
sources/NameList/ui \
|
||||||
sources/utils \
|
sources/utils \
|
||||||
sources/pugixml \
|
sources/pugixml \
|
||||||
sources/dataBase
|
sources/dataBase \
|
||||||
|
sources/dataBase/ui
|
||||||
|
|
||||||
|
|
||||||
# Fichiers sources
|
# Fichiers sources
|
||||||
@@ -132,7 +133,8 @@ HEADERS += $$files(sources/*.h) $$files(sources/ui/*.h) \
|
|||||||
$$files(sources/NameList/ui/*.h) \
|
$$files(sources/NameList/ui/*.h) \
|
||||||
$$files(sources/utils/*.h) \
|
$$files(sources/utils/*.h) \
|
||||||
$$files(sources/pugixml/*.hpp) \
|
$$files(sources/pugixml/*.hpp) \
|
||||||
$$files(sources/dataBase/*.h)
|
$$files(sources/dataBase/*.h) \
|
||||||
|
$$files(sources/dataBase/ui/*.h)
|
||||||
|
|
||||||
SOURCES += $$files(sources/*.cpp) \
|
SOURCES += $$files(sources/*.cpp) \
|
||||||
$$files(sources/editor/*.cpp) \
|
$$files(sources/editor/*.cpp) \
|
||||||
@@ -161,7 +163,8 @@ SOURCES += $$files(sources/*.cpp) \
|
|||||||
$$files(sources/NameList/ui/*.cpp) \
|
$$files(sources/NameList/ui/*.cpp) \
|
||||||
$$files(sources/utils/*.cpp) \
|
$$files(sources/utils/*.cpp) \
|
||||||
$$files(sources/pugixml/*.cpp) \
|
$$files(sources/pugixml/*.cpp) \
|
||||||
$$files(sources/dataBase/*.cpp)
|
$$files(sources/dataBase/*.cpp) \
|
||||||
|
$$files(sources/dataBase/ui/*.cpp)
|
||||||
|
|
||||||
# Liste des fichiers qui seront incorpores au binaire en tant que ressources Qt
|
# Liste des fichiers qui seront incorpores au binaire en tant que ressources Qt
|
||||||
RESOURCES += qelectrotech.qrc
|
RESOURCES += qelectrotech.qrc
|
||||||
@@ -184,7 +187,8 @@ FORMS += $$files(sources/richtext/*.ui) \
|
|||||||
$$files(sources/ui/configpage/*.ui) \
|
$$files(sources/ui/configpage/*.ui) \
|
||||||
$$files(sources/SearchAndReplace/ui/*.ui) \
|
$$files(sources/SearchAndReplace/ui/*.ui) \
|
||||||
$$files(sources/NameList/ui/*.ui) \
|
$$files(sources/NameList/ui/*.ui) \
|
||||||
$$files(sources/qetgraphicsitem/ViewItem/ui/*.ui)
|
$$files(sources/qetgraphicsitem/ViewItem/ui/*.ui) \
|
||||||
|
$$files(sources/dataBase/ui/*.ui)
|
||||||
|
|
||||||
UI_SOURCES_DIR = sources/ui/
|
UI_SOURCES_DIR = sources/ui/
|
||||||
UI_HEADERS_DIR = sources/ui/
|
UI_HEADERS_DIR = sources/ui/
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2006-2020 QElectroTech Team
|
Copyright 2006-2020 QElectroTech Team
|
||||||
This file is part of QElectroTech.
|
This file is part of QElectroTech.
|
||||||
|
|
||||||
@@ -20,6 +20,8 @@
|
|||||||
#include "qetproject.h"
|
#include "qetproject.h"
|
||||||
#include "elementprovider.h"
|
#include "elementprovider.h"
|
||||||
#include "element.h"
|
#include "element.h"
|
||||||
|
#include "diagram.h"
|
||||||
|
#include "diagramposition.h"
|
||||||
|
|
||||||
#include <QSqlError>
|
#include <QSqlError>
|
||||||
|
|
||||||
@@ -36,6 +38,13 @@ projectDataBase::projectDataBase(QETProject *project, QObject *parent) :
|
|||||||
createDataBase();
|
createDataBase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
projectDataBase::projectDataBase(QETProject *project, const QString &connection_name, const QString &path, QObject *parent) :
|
||||||
|
QObject(parent),
|
||||||
|
m_project(project)
|
||||||
|
{
|
||||||
|
createDataBase(connection_name, path);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief projectDataBase::~projectDataBase
|
* @brief projectDataBase::~projectDataBase
|
||||||
* Destructor
|
* Destructor
|
||||||
@@ -75,6 +84,39 @@ QVector<QStringList> projectDataBase::elementsInfoFromQuery(const QString &query
|
|||||||
return result_;
|
return result_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief projectDataBase::headersFromElementsInfoQuery
|
||||||
|
* @param query
|
||||||
|
* @return the header according to @query.
|
||||||
|
* Header can be false, notably when user create is own query.
|
||||||
|
*/
|
||||||
|
QStringList projectDataBase::headersFromElementsInfoQuery(const QString &query)
|
||||||
|
{
|
||||||
|
QStringList header_string;
|
||||||
|
if (query.startsWith("SELECT ") && query.contains("FROM"))
|
||||||
|
{
|
||||||
|
auto header = query;
|
||||||
|
header.remove(0, 7); //Remove SELECT from the string;
|
||||||
|
header.truncate(header.indexOf("FROM")); //Now we only have the string between SELECT and FROM
|
||||||
|
header.replace(" ", ""); //remove white space
|
||||||
|
QStringList list = header.split(",");
|
||||||
|
|
||||||
|
if (!list.isEmpty())
|
||||||
|
{
|
||||||
|
for (int i=0 ; i<list.size() ; i++)
|
||||||
|
{
|
||||||
|
if (list.at(i) == "pos") {
|
||||||
|
header_string.append(tr("Position"));
|
||||||
|
} else {
|
||||||
|
header_string.append(QETApp::elementTranslatedInfoKey(list.at(i)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return header_string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief projectDataBase::updateDB
|
* @brief projectDataBase::updateDB
|
||||||
* Up to date the content of the data base.
|
* Up to date the content of the data base.
|
||||||
@@ -89,20 +131,33 @@ void projectDataBase::updateDB()
|
|||||||
emit dataBaseUpdated();
|
emit dataBaseUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief projectDataBase::project
|
||||||
|
* @return the project of this database
|
||||||
|
*/
|
||||||
|
QETProject *projectDataBase::project() const {
|
||||||
|
return m_project;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief projectDataBase::createDataBase
|
* @brief projectDataBase::createDataBase
|
||||||
* Create the data base
|
* Create the data base
|
||||||
* @return : true if the data base was successfully created.
|
* @return : true if the data base was successfully created.
|
||||||
*/
|
*/
|
||||||
bool projectDataBase::createDataBase()
|
bool projectDataBase::createDataBase(const QString &connection_name, const QString &name)
|
||||||
{
|
{
|
||||||
QString connect_name("qet_project_db_" + m_project->uuid().toString());
|
|
||||||
|
QString connect_name=connection_name;
|
||||||
|
if (connect_name.isEmpty()) {
|
||||||
|
connect_name = "qet_project_db_" + m_project->uuid().toString();
|
||||||
|
}
|
||||||
if (m_data_base.connectionNames().contains(connect_name)) {
|
if (m_data_base.connectionNames().contains(connect_name)) {
|
||||||
m_data_base = QSqlDatabase::database(connect_name);
|
m_data_base = QSqlDatabase::database(connect_name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_data_base = QSqlDatabase::addDatabase("QSQLITE", connect_name);
|
m_data_base = QSqlDatabase::addDatabase("QSQLITE", connect_name);
|
||||||
|
m_data_base.setDatabaseName(name);
|
||||||
if(!m_data_base.open())
|
if(!m_data_base.open())
|
||||||
{
|
{
|
||||||
m_data_base.close();
|
m_data_base.close();
|
||||||
@@ -177,6 +232,7 @@ void projectDataBase::populateElementsTable()
|
|||||||
|
|
||||||
query.bindValue(":element_type", elmt->linkTypeToString());
|
query.bindValue(":element_type", elmt->linkTypeToString());
|
||||||
query.bindValue(":element_subtype", elmt->kindInformations()["type"].toString());
|
query.bindValue(":element_subtype", elmt->kindInformations()["type"].toString());
|
||||||
|
query.bindValue(":pos", elmt->diagram()->convertPosition(elmt->scenePos()).toString());
|
||||||
|
|
||||||
if (!query.exec()) {
|
if (!query.exec()) {
|
||||||
qDebug() << "projectDataBase::populateElementsTable insert error : " << query.lastError();
|
qDebug() << "projectDataBase::populateElementsTable insert error : " << query.lastError();
|
||||||
@@ -210,10 +266,47 @@ QHash<QString, QString> projectDataBase::elementInfoToString(Element *elmt)
|
|||||||
* @brief projectDataBase::elementsInfoKeys
|
* @brief projectDataBase::elementsInfoKeys
|
||||||
* @return QETApp::elementInfoKeys() + "element_type" and "element_subtype"
|
* @return QETApp::elementInfoKeys() + "element_type" and "element_subtype"
|
||||||
*/
|
*/
|
||||||
QStringList projectDataBase::elementsInfoKeys() const
|
QStringList projectDataBase::elementsInfoKeys()
|
||||||
{
|
{
|
||||||
auto keys_ = QETApp::elementInfoKeys();
|
auto keys_ = QETApp::elementInfoKeys();
|
||||||
keys_<< "element_type" << "element_subtype";
|
keys_<< "element_type" << "subtype" << "pos";
|
||||||
|
|
||||||
return keys_;
|
return keys_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief projectDataBase::exportDb
|
||||||
|
* @param parent
|
||||||
|
* @param caption
|
||||||
|
* @param dir
|
||||||
|
* @param filter
|
||||||
|
* @param selectedFilter
|
||||||
|
* @param options
|
||||||
|
*/
|
||||||
|
void projectDataBase::exportDb(projectDataBase *db, QWidget *parent, const QString &caption, const QString &dir)
|
||||||
|
{
|
||||||
|
auto caption_ = caption;
|
||||||
|
if (caption_.isEmpty()) {
|
||||||
|
caption_ = tr("Exporter la base de données interne du projet");
|
||||||
|
}
|
||||||
|
|
||||||
|
auto dir_ = dir;
|
||||||
|
if(dir_.isEmpty()) {
|
||||||
|
dir_ = db->project()->filePath();
|
||||||
|
if (dir_.isEmpty()) {
|
||||||
|
dir_ = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first();
|
||||||
|
dir_ += QString("/") += tr("sans_nom") += ".sqlite";
|
||||||
|
} else {
|
||||||
|
dir_.remove(".qet");
|
||||||
|
dir_.append(".sqlite");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto path_ = QFileDialog::getSaveFileName(parent, caption_, dir_, "*.sqlite");
|
||||||
|
if (path_.isNull()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Database is filled at creation, work is done.
|
||||||
|
projectDataBase file_db(db->project(), "export_project_db_" + db->project()->uuid().toString(), path_);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2006-2020 QElectroTech Team
|
Copyright 2006-2020 QElectroTech Team
|
||||||
This file is part of QElectroTech.
|
This file is part of QElectroTech.
|
||||||
|
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
#include <QSqlDatabase>
|
#include <QSqlDatabase>
|
||||||
#include <QSqlQuery>
|
#include <QSqlQuery>
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
|
#include <QFileDialog>
|
||||||
|
|
||||||
class Element;
|
class Element;
|
||||||
class QETProject;
|
class QETProject;
|
||||||
@@ -39,24 +40,33 @@ class projectDataBase : public QObject
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
projectDataBase(QETProject *project, QObject *parent = nullptr);
|
projectDataBase(QETProject *project, QObject *parent = nullptr);
|
||||||
|
private:
|
||||||
|
projectDataBase(QETProject *project, const QString &connection_name, const QString &path, QObject *parent = nullptr);
|
||||||
|
public:
|
||||||
virtual ~projectDataBase() override;
|
virtual ~projectDataBase() override;
|
||||||
|
|
||||||
QVector<QStringList> elementsInfoFromQuery(const QString &query);
|
QVector<QStringList> elementsInfoFromQuery(const QString &query);
|
||||||
void updateDB();
|
void updateDB();
|
||||||
|
QETProject *project() const;
|
||||||
|
|
||||||
|
static QStringList elementsInfoKeys();
|
||||||
|
static QStringList headersFromElementsInfoQuery(const QString &query);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void dataBaseUpdated();
|
void dataBaseUpdated();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool createDataBase();
|
bool createDataBase(const QString &connection_name= QString(), const QString &name = QString());
|
||||||
void populateElementsTable();
|
void populateElementsTable();
|
||||||
static QHash<QString, QString> elementInfoToString(Element *elmt);
|
static QHash<QString, QString> elementInfoToString(Element *elmt);
|
||||||
QStringList elementsInfoKeys() const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPointer<QETProject> m_project;
|
QPointer<QETProject> m_project;
|
||||||
QSqlDatabase m_data_base;
|
QSqlDatabase m_data_base;
|
||||||
QSqlQuery m_insert_elements_query;
|
QSqlQuery m_insert_elements_query;
|
||||||
|
|
||||||
|
public:
|
||||||
|
static void exportDb(projectDataBase *db, QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString());
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PROJECTDATABASE_H
|
#endif // PROJECTDATABASE_H
|
||||||
|
|||||||
274
sources/dataBase/ui/elementquerywidget.cpp
Normal file
274
sources/dataBase/ui/elementquerywidget.cpp
Normal file
@@ -0,0 +1,274 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2006-2020 The 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 "elementquerywidget.h"
|
||||||
|
#include "ui_elementquerywidget.h"
|
||||||
|
#include "qetapp.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementQueryWidget::ElementQueryWidget
|
||||||
|
* @param parent
|
||||||
|
*/
|
||||||
|
ElementQueryWidget::ElementQueryWidget(QWidget *parent) :
|
||||||
|
QWidget(parent),
|
||||||
|
ui(new Ui::ElementQueryWidget)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
m_export_info.insert("pos", tr("Position"));
|
||||||
|
// m_export_info.insert("folio_title", tr("Titre du folio"));
|
||||||
|
// m_export_info.insert("folio_pos", tr("Position de folio"));
|
||||||
|
// m_export_info.insert("folio_num", tr("Numéro de folio"));
|
||||||
|
// m_export_info.insert("designation_qty", tr("Quantité (Numéro d'article)"));
|
||||||
|
|
||||||
|
m_button_group.setExclusive(false);
|
||||||
|
m_button_group.addButton(ui->m_all_cb, 0);
|
||||||
|
m_button_group.addButton(ui->m_terminal_cb, 1);
|
||||||
|
m_button_group.addButton(ui->m_simple_cb, 2);
|
||||||
|
m_button_group.addButton(ui->m_button_cb, 3);
|
||||||
|
m_button_group.addButton(ui->m_coil_cb, 4);
|
||||||
|
m_button_group.addButton(ui->m_protection_cb, 5);
|
||||||
|
connect(&m_button_group, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), [this](int id)
|
||||||
|
{
|
||||||
|
auto check_box = static_cast<QCheckBox *>(m_button_group.button(0));
|
||||||
|
if (id == 0)
|
||||||
|
{
|
||||||
|
switch (check_box->checkState()) {
|
||||||
|
case Qt::Checked :
|
||||||
|
for (auto button : m_button_group.buttons()) {
|
||||||
|
button->setChecked(true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Qt::Unchecked :
|
||||||
|
for (auto button : m_button_group.buttons()) {
|
||||||
|
button->setChecked(false);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int checked = 0;
|
||||||
|
for (int i=1 ; i<5 ; ++i) {
|
||||||
|
if (m_button_group.button(i)->isChecked()) {++checked;}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (checked)
|
||||||
|
{
|
||||||
|
case 0 :
|
||||||
|
check_box->setCheckState(Qt::Unchecked);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
check_box->setCheckState(Qt::Checked);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
check_box->setCheckState(Qt::PartiallyChecked);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateQueryLine();
|
||||||
|
});
|
||||||
|
|
||||||
|
setUpItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementQueryWidget::~ElementQueryWidget
|
||||||
|
*/
|
||||||
|
ElementQueryWidget::~ElementQueryWidget() {
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementQueryWidget::queryStr
|
||||||
|
* @return The current query
|
||||||
|
*/
|
||||||
|
QString ElementQueryWidget::queryStr() const
|
||||||
|
{
|
||||||
|
//User define is own query
|
||||||
|
if (ui->m_edit_sql_query_cb->isChecked()) {
|
||||||
|
return ui->m_sql_query->text();
|
||||||
|
}
|
||||||
|
//Made a string list with the colomns (keys) choosen by the user
|
||||||
|
QStringList keys = selectedKeys();
|
||||||
|
|
||||||
|
QString select ="SELECT ";
|
||||||
|
QString order_by = " ORDER BY ";
|
||||||
|
|
||||||
|
QString column;
|
||||||
|
bool first = true;
|
||||||
|
for (auto key: keys) {
|
||||||
|
if (first) {
|
||||||
|
first = false;
|
||||||
|
} else {
|
||||||
|
column += ", ";
|
||||||
|
order_by += ", ";
|
||||||
|
}
|
||||||
|
column += key;
|
||||||
|
order_by += key;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString from = " FROM element_info";
|
||||||
|
QString where;
|
||||||
|
if (ui->m_all_cb->checkState() == Qt::PartiallyChecked)
|
||||||
|
{
|
||||||
|
if (ui->m_terminal_cb->isChecked()) {
|
||||||
|
where = " WHERE element_type = 'Terminale'";
|
||||||
|
}
|
||||||
|
if (ui->m_simple_cb->isChecked()) {
|
||||||
|
auto str = where.isEmpty() ? " WHERE element_type = 'Simple'" : " AND element_type = 'Simple'";
|
||||||
|
where += str;
|
||||||
|
}
|
||||||
|
if (ui->m_button_cb->isChecked()) {
|
||||||
|
auto str = where.isEmpty() ? " WHERE element_subtype = 'commutator'" : " AND element_subtype = 'commutator'";
|
||||||
|
where += str;
|
||||||
|
}
|
||||||
|
if (ui->m_coil_cb->isChecked()) {
|
||||||
|
auto str = where.isEmpty() ? " WHERE element_subtype = 'coil'" : " AND element_subtype = 'coil'";
|
||||||
|
where += str;
|
||||||
|
}
|
||||||
|
if (ui->m_protection_cb->isChecked()) {
|
||||||
|
auto str = where.isEmpty() ? " WHERE element_subtype = 'protection'" : " AND element_subtype = 'protection'";
|
||||||
|
where += str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString q(select + column + from + where + order_by);
|
||||||
|
return q;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementQueryWidget::updateQueryLine
|
||||||
|
*/
|
||||||
|
void ElementQueryWidget::updateQueryLine() {
|
||||||
|
ui->m_sql_query->setText(queryStr());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementQueryWidget::selectedKeys
|
||||||
|
* @return the current keys of selected infos to be exported
|
||||||
|
*/
|
||||||
|
QStringList ElementQueryWidget::selectedKeys() const
|
||||||
|
{
|
||||||
|
//Made a string list with the colomns (keys) choosen by the user
|
||||||
|
QStringList keys;
|
||||||
|
int row = 0;
|
||||||
|
while (auto *item = ui->m_choosen_list->item(row))
|
||||||
|
{
|
||||||
|
keys.append(item->data(Qt::UserRole).toString());
|
||||||
|
++row;
|
||||||
|
}
|
||||||
|
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ElementQueryWidget::setUpItems()
|
||||||
|
{
|
||||||
|
for(QString key : QETApp::elementInfoKeys())
|
||||||
|
{
|
||||||
|
auto item = new QListWidgetItem(QETApp::elementTranslatedInfoKey(key), ui->m_var_list);
|
||||||
|
item->setData(Qt::UserRole, key);
|
||||||
|
m_items_list << item;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto key : m_export_info.keys())
|
||||||
|
{
|
||||||
|
auto item = new QListWidgetItem(m_export_info.value(key), ui->m_var_list);
|
||||||
|
item->setData(Qt::UserRole, key);
|
||||||
|
m_items_list << item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementQueryWidget::on_m_up_pb_clicked
|
||||||
|
*/
|
||||||
|
void ElementQueryWidget::on_m_up_pb_clicked()
|
||||||
|
{
|
||||||
|
auto row = ui->m_choosen_list->currentRow();
|
||||||
|
if(row <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto *item = ui->m_choosen_list->takeItem(row);
|
||||||
|
ui->m_choosen_list->insertItem(row-1, item);
|
||||||
|
ui->m_choosen_list->setCurrentItem(item);
|
||||||
|
|
||||||
|
updateQueryLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementQueryWidget::on_m_add_pb_clicked
|
||||||
|
*/
|
||||||
|
void ElementQueryWidget::on_m_add_pb_clicked()
|
||||||
|
{
|
||||||
|
if (auto *item = ui->m_var_list->takeItem(ui->m_var_list->currentRow())) {
|
||||||
|
ui->m_choosen_list->addItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateQueryLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementQueryWidget::on_m_remove_pb_clicked
|
||||||
|
*/
|
||||||
|
void ElementQueryWidget::on_m_remove_pb_clicked()
|
||||||
|
{
|
||||||
|
if (auto *item = ui->m_choosen_list->takeItem(ui->m_choosen_list->currentRow())) {
|
||||||
|
ui->m_var_list->addItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateQueryLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementQueryWidget::on_m_down_pb_clicked
|
||||||
|
*/
|
||||||
|
void ElementQueryWidget::on_m_down_pb_clicked()
|
||||||
|
{
|
||||||
|
auto row = ui->m_choosen_list->currentRow();
|
||||||
|
if (row == -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto *item = ui->m_choosen_list->takeItem(row);
|
||||||
|
ui->m_choosen_list->insertItem(row+1, item);
|
||||||
|
ui->m_choosen_list->setCurrentItem(item);
|
||||||
|
|
||||||
|
updateQueryLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ElementQueryWidget::on_m_edit_sql_query_cb_clicked
|
||||||
|
*/
|
||||||
|
void ElementQueryWidget::on_m_edit_sql_query_cb_clicked()
|
||||||
|
{
|
||||||
|
ui->m_sql_query->setEnabled(ui->m_edit_sql_query_cb->isChecked());
|
||||||
|
ui->m_info_widget->setDisabled(ui->m_edit_sql_query_cb->isChecked());
|
||||||
|
ui->m_parametre_widget->setDisabled(ui->m_edit_sql_query_cb->isChecked());
|
||||||
|
|
||||||
|
if (ui->m_edit_sql_query_cb->isChecked() && !m_custom_query.isEmpty())
|
||||||
|
{
|
||||||
|
ui->m_sql_query->setText(m_custom_query);
|
||||||
|
}
|
||||||
|
else if (!ui->m_edit_sql_query_cb->isChecked())
|
||||||
|
{
|
||||||
|
m_custom_query = ui->m_sql_query->text();
|
||||||
|
updateQueryLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
64
sources/dataBase/ui/elementquerywidget.h
Normal file
64
sources/dataBase/ui/elementquerywidget.h
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2006-2020 The 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 ELEMENTQUERYWIDGET_H
|
||||||
|
#define ELEMENTQUERYWIDGET_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QButtonGroup>
|
||||||
|
|
||||||
|
class QListWidgetItem;
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class ElementQueryWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The ElementQueryWidget class
|
||||||
|
* A widget use to edit a sql query for get element information
|
||||||
|
* This widget only work to get information from ProjectDataBase
|
||||||
|
*/
|
||||||
|
class ElementQueryWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ElementQueryWidget(QWidget *parent = nullptr);
|
||||||
|
~ElementQueryWidget();
|
||||||
|
|
||||||
|
QString queryStr() const;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_m_up_pb_clicked();
|
||||||
|
void on_m_add_pb_clicked();
|
||||||
|
void on_m_remove_pb_clicked();
|
||||||
|
void on_m_down_pb_clicked();
|
||||||
|
void on_m_edit_sql_query_cb_clicked();
|
||||||
|
|
||||||
|
void updateQueryLine();
|
||||||
|
QStringList selectedKeys() const;
|
||||||
|
void setUpItems();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::ElementQueryWidget *ui;
|
||||||
|
QHash <QString, QString> m_export_info;
|
||||||
|
QButtonGroup m_button_group;
|
||||||
|
QList <QListWidgetItem *> m_items_list;
|
||||||
|
QString m_custom_query;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // ELEMENTQUERYWIDGET_H
|
||||||
363
sources/dataBase/ui/elementquerywidget.ui
Normal file
363
sources/dataBase/ui/elementquerywidget.ui
Normal file
@@ -0,0 +1,363 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ElementQueryWidget</class>
|
||||||
|
<widget class="QWidget" name="ElementQueryWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>341</width>
|
||||||
|
<height>457</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QWidget" name="m_info_widget" native="true">
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Informations disponibles</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Informations à exporter</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="margin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QListWidget" name="m_var_list"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QListWidget" name="m_choosen_list"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,0,0,0,0,0">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="sizeConstraint">
|
||||||
|
<enum>QLayout::SetDefaultConstraint</enum>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="m_up_pb">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Monter la sélection</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../qelectrotech.qrc">
|
||||||
|
<normaloff>:/ico/16x16/go-up.png</normaloff>:/ico/16x16/go-up.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="m_add_pb">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Ajouter la sélection</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../qelectrotech.qrc">
|
||||||
|
<normaloff>:/ico/16x16/list-add.png</normaloff>:/ico/16x16/list-add.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="m_remove_pb">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Supprimer la sélection</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../qelectrotech.qrc">
|
||||||
|
<normaloff>:/ico/16x16/list-remove.png</normaloff>:/ico/16x16/list-remove.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="m_down_pb">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Descendre la sélection</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../qelectrotech.qrc">
|
||||||
|
<normaloff>:/ico/16x16/go-down.png</normaloff>:/ico/16x16/go-down.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QWidget" name="m_parametre_widget" native="true">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_3">
|
||||||
|
<property name="title">
|
||||||
|
<string>Type d'éléments</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QCheckBox" name="m_simple_cb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Simples</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QCheckBox" name="m_all_cb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Tous</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QCheckBox" name="m_coil_cb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Contacteurs et relais</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QCheckBox" name="m_button_cb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Boutons et commutateurs</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QCheckBox" name="m_terminal_cb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Borniers</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QCheckBox" name="m_protection_cb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Organes de protection</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Configuration</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QPushButton" name="m_load_pb">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Ouvrir la configuration sélectionné</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../qelectrotech.qrc">
|
||||||
|
<normaloff>:/ico/16x16/folder-open.png</normaloff>:/ico/16x16/folder-open.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QComboBox" name="m_conf_cb">
|
||||||
|
<property name="editable">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLineEdit" name="m_save_name_le"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QPushButton" name="m_save_current_conf_pb">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Sauvegarder la configuration actuelle</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../qelectrotech.qrc">
|
||||||
|
<normaloff>:/ico/16x16/document-save.png</normaloff>:/ico/16x16/document-save.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="flat">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line_3">
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Sunken</enum>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="m_edit_sql_query_cb">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Requête SQL personnalisée</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Requête SQL :</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="m_sql_query">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources>
|
||||||
|
<include location="../../../qelectrotech.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
@@ -412,16 +412,11 @@ void QETDiagramEditor::setUpActions()
|
|||||||
|
|
||||||
/*******ONLY FOR TEST DURING DEVEL*********/
|
/*******ONLY FOR TEST DURING DEVEL*********/
|
||||||
auto model = new NomenclatureModel(this->currentProject(), this->currentProject());
|
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->query("SELECT plant, location, label, pos, 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), Qt::AlignLeft, Qt::TextAlignmentRole);
|
||||||
model->setData(model->index(0,0), QETApp::diagramTextsFont(), Qt::FontRole);
|
model->setData(model->index(0,0), QETApp::diagramTextsFont(), Qt::FontRole);
|
||||||
model->setHeaderData(0, Qt::Horizontal, Qt::AlignHCenter, Qt::TextAlignmentRole);
|
model->setHeaderData(0, Qt::Horizontal, Qt::AlignHCenter, Qt::TextAlignmentRole);
|
||||||
model->setHeaderData(0, Qt::Horizontal, QETApp::diagramTextsFont(), Qt::FontRole);
|
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);
|
table->setModel(model);
|
||||||
/******************************************/
|
/******************************************/
|
||||||
|
|
||||||
@@ -445,6 +440,11 @@ void QETDiagramEditor::setUpActions()
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
m_export_project_db = new QAction(QET::Icons::DocumentSpreadsheet, tr("Exporter la base de donnée interne du projet"), this);
|
||||||
|
connect(m_export_project_db, &QAction::triggered, [this]() {
|
||||||
|
projectDataBase::exportDb(this->currentProject()->dataBase(), this);
|
||||||
|
});
|
||||||
|
|
||||||
//MDI view style
|
//MDI view style
|
||||||
m_tabbed_view_mode = new QAction(tr("en utilisant des onglets"), this);
|
m_tabbed_view_mode = new QAction(tr("en utilisant des onglets"), this);
|
||||||
m_tabbed_view_mode->setStatusTip(tr("Présente les différents projets ouverts des onglets", "status bar tip"));
|
m_tabbed_view_mode->setStatusTip(tr("Présente les différents projets ouverts des onglets", "status bar tip"));
|
||||||
@@ -789,6 +789,8 @@ void QETDiagramEditor::setUpMenu() {
|
|||||||
menu_project -> addAction(m_csv_export);
|
menu_project -> addAction(m_csv_export);
|
||||||
menu_project -> addAction(m_project_export_conductor_num);
|
menu_project -> addAction(m_project_export_conductor_num);
|
||||||
menu_project -> addAction(m_project_terminalBloc);
|
menu_project -> addAction(m_project_terminalBloc);
|
||||||
|
menu_project -> addSeparator();
|
||||||
|
menu_project -> addAction(m_export_project_db);
|
||||||
|
|
||||||
main_tool_bar -> toggleViewAction() -> setStatusTip(tr("Affiche ou non la barre d'outils principale"));
|
main_tool_bar -> toggleViewAction() -> setStatusTip(tr("Affiche ou non la barre d'outils principale"));
|
||||||
view_tool_bar -> toggleViewAction() -> setStatusTip(tr("Affiche ou non la barre d'outils Affichage"));
|
view_tool_bar -> toggleViewAction() -> setStatusTip(tr("Affiche ou non la barre d'outils Affichage"));
|
||||||
|
|||||||
@@ -187,6 +187,7 @@ class QETDiagramEditor : public QETMainWindow
|
|||||||
QAction *m_add_nomenclature; ///< Add nomenclature graphics item;
|
QAction *m_add_nomenclature; ///< Add nomenclature graphics item;
|
||||||
QAction *m_project_terminalBloc; ///< generate terminal block
|
QAction *m_project_terminalBloc; ///< generate terminal block
|
||||||
QAction *m_project_export_conductor_num; ///<Export the wire num to csv
|
QAction *m_project_export_conductor_num; ///<Export the wire num to csv
|
||||||
|
QAction *m_export_project_db; ///Export to file the internal database of the current project
|
||||||
QAction *m_tile_window; ///< Show MDI subwindows as tile
|
QAction *m_tile_window; ///< Show MDI subwindows as tile
|
||||||
QAction *m_cascade_window; ///< Show MDI subwindows as cascade
|
QAction *m_cascade_window; ///< Show MDI subwindows as cascade
|
||||||
QAction *m_previous_window; ///< Switch to the previous document
|
QAction *m_previous_window; ///< Switch to the previous document
|
||||||
|
|||||||
@@ -102,12 +102,16 @@ QVariant NomenclatureModel::headerData(int section, Qt::Orientation orientation,
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_header_data.contains(section))
|
||||||
|
{
|
||||||
auto hash_ = m_header_data.value(section);
|
auto hash_ = m_header_data.value(section);
|
||||||
if (role == Qt::DisplayRole && !hash_.contains(Qt::DisplayRole)) { //special case to have the same behavior as Qt
|
if (role == Qt::DisplayRole && !hash_.contains(Qt::DisplayRole)) { //special case to have the same behavior as Qt
|
||||||
return hash_.value(Qt::EditRole);
|
return hash_.value(Qt::EditRole);
|
||||||
}
|
}
|
||||||
return m_header_data.value(section).value(role);
|
return m_header_data.value(section).value(role);
|
||||||
}
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief NomenclatureModel::setData
|
* @brief NomenclatureModel::setData
|
||||||
@@ -160,11 +164,35 @@ QVariant NomenclatureModel::data(const QModelIndex &index, int role) const
|
|||||||
*/
|
*/
|
||||||
void NomenclatureModel::query(const QString &query)
|
void NomenclatureModel::query(const QString &query)
|
||||||
{
|
{
|
||||||
|
auto rm_ = m_query != query;
|
||||||
|
if (rm_)
|
||||||
|
{
|
||||||
|
auto headers = projectDataBase::headersFromElementsInfoQuery(query);
|
||||||
|
for (auto i=0 ; i<headers.size() ; ++i) {
|
||||||
|
this->setHeaderData(i, Qt::Horizontal, headers.at(i));
|
||||||
|
}
|
||||||
|
emit beginResetModel();
|
||||||
|
}
|
||||||
|
|
||||||
m_query = query;
|
m_query = query;
|
||||||
|
|
||||||
if (m_project) {
|
if (m_project)
|
||||||
m_project->dataBase()->updateDB();
|
{
|
||||||
|
if (rm_) {
|
||||||
|
disconnect(m_project->dataBase(), &projectDataBase::dataBaseUpdated, this, &NomenclatureModel::dataBaseUpdated);
|
||||||
}
|
}
|
||||||
|
m_project->dataBase()->updateDB();
|
||||||
|
if (rm_) {
|
||||||
|
m_record = m_project->dataBase()->elementsInfoFromQuery(m_query);
|
||||||
|
connect(m_project->dataBase(), &projectDataBase::dataBaseUpdated, this, &NomenclatureModel::dataBaseUpdated);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rm_) { emit endResetModel();}
|
||||||
|
}
|
||||||
|
|
||||||
|
QETProject *NomenclatureModel::project() const {
|
||||||
|
return m_project.data();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -173,10 +201,22 @@ void NomenclatureModel::query(const QString &query)
|
|||||||
*/
|
*/
|
||||||
void NomenclatureModel::dataBaseUpdated()
|
void NomenclatureModel::dataBaseUpdated()
|
||||||
{
|
{
|
||||||
m_record.clear();
|
auto new_record = m_project->dataBase()->elementsInfoFromQuery(m_query);
|
||||||
m_record = m_project->dataBase()->elementsInfoFromQuery(m_query);
|
|
||||||
|
|
||||||
|
//This a very special case, if this nomenclature model is added
|
||||||
|
//befor any element, column count return 0, so in this case we emit column inserted
|
||||||
|
if (new_record.size() != m_record.size())
|
||||||
|
{
|
||||||
|
emit beginInsertColumns(index(0,0), 0, m_record.size()-1);
|
||||||
|
m_record = new_record;
|
||||||
|
emit endInsertColumns();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_record = new_record;
|
||||||
auto row = m_record.size();
|
auto row = m_record.size();
|
||||||
auto col = row ? m_record.first().count() : 1;
|
auto col = row ? m_record.first().count() : 1;
|
||||||
|
|
||||||
emit dataChanged(this->index(0,0), this->index(row-1, col-1), QVector<int>(Qt::DisplayRole));
|
emit dataChanged(this->index(0,0), this->index(row-1, col-1), QVector<int>(Qt::DisplayRole));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ class NomenclatureModel : public QAbstractTableModel
|
|||||||
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) 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;
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
void query(const QString &query);
|
void query(const QString &query);
|
||||||
|
QETProject *project() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void dataBaseUpdated();
|
void dataBaseUpdated();
|
||||||
|
|||||||
@@ -42,10 +42,14 @@ void QetGraphicsHeaderItem::setModel(QAbstractItemModel *model)
|
|||||||
{
|
{
|
||||||
if (m_model) {
|
if (m_model) {
|
||||||
disconnect(m_model, &QAbstractItemModel::headerDataChanged, this, &QetGraphicsHeaderItem::headerDataChanged);
|
disconnect(m_model, &QAbstractItemModel::headerDataChanged, this, &QetGraphicsHeaderItem::headerDataChanged);
|
||||||
|
disconnect(m_model, &QAbstractItemModel::modelReset, this, &QetGraphicsHeaderItem::modelReseted);
|
||||||
|
disconnect(m_model, &QAbstractItemModel::columnsInserted, this, &QetGraphicsHeaderItem::modelReseted);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_model = model;
|
m_model = model;
|
||||||
connect(m_model, &QAbstractItemModel::headerDataChanged, this, &QetGraphicsHeaderItem::headerDataChanged);
|
connect(m_model, &QAbstractItemModel::headerDataChanged, this, &QetGraphicsHeaderItem::headerDataChanged);
|
||||||
|
connect(m_model, &QAbstractItemModel::modelReset, this, &QetGraphicsHeaderItem::modelReseted);
|
||||||
|
connect(m_model, &QAbstractItemModel::columnsInserted, this, &QetGraphicsHeaderItem::modelReseted);
|
||||||
setUpMinimumSectionsSize();
|
setUpMinimumSectionsSize();
|
||||||
m_current_sections_width.clear();
|
m_current_sections_width.clear();
|
||||||
m_current_sections_width.resize(m_sections_minimum_width.size());
|
m_current_sections_width.resize(m_sections_minimum_width.size());
|
||||||
@@ -264,3 +268,11 @@ void QetGraphicsHeaderItem::adjustSize()
|
|||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QetGraphicsHeaderItem::modelReseted()
|
||||||
|
{
|
||||||
|
setUpMinimumSectionsSize();
|
||||||
|
m_current_sections_width.clear();
|
||||||
|
m_current_sections_width.resize(m_sections_minimum_width.size());
|
||||||
|
adjustSize();
|
||||||
|
}
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ class QetGraphicsHeaderItem : public QGraphicsObject
|
|||||||
void setUpBoundingRect();
|
void setUpBoundingRect();
|
||||||
void headerDataChanged(Qt::Orientations orientation, int first, int last);
|
void headerDataChanged(Qt::Orientations orientation, int first, int last);
|
||||||
void adjustSize();
|
void adjustSize();
|
||||||
|
void modelReseted();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QRectF m_bounding_rect;
|
QRectF m_bounding_rect;
|
||||||
|
|||||||
@@ -66,8 +66,10 @@ QetGraphicsTableItem::~QetGraphicsTableItem()
|
|||||||
*/
|
*/
|
||||||
void QetGraphicsTableItem::setModel(QAbstractItemModel *model)
|
void QetGraphicsTableItem::setModel(QAbstractItemModel *model)
|
||||||
{
|
{
|
||||||
if (m_model) {
|
if (m_model)
|
||||||
|
{
|
||||||
disconnect(m_model, &QAbstractItemModel::dataChanged, this, &QetGraphicsTableItem::dataChanged);
|
disconnect(m_model, &QAbstractItemModel::dataChanged, this, &QetGraphicsTableItem::dataChanged);
|
||||||
|
disconnect(m_model, &QAbstractItemModel::modelReset, this, &QetGraphicsTableItem::modelReseted);
|
||||||
}
|
}
|
||||||
m_model = model;
|
m_model = model;
|
||||||
m_header_item->setModel(model);
|
m_header_item->setModel(model);
|
||||||
@@ -77,6 +79,7 @@ void QetGraphicsTableItem::setModel(QAbstractItemModel *model)
|
|||||||
|
|
||||||
m_header_item->setPos(0, -m_header_item->rect().height());
|
m_header_item->setPos(0, -m_header_item->rect().height());
|
||||||
connect(m_model, &QAbstractItemModel::dataChanged, this, &QetGraphicsTableItem::dataChanged);
|
connect(m_model, &QAbstractItemModel::dataChanged, this, &QetGraphicsTableItem::dataChanged);
|
||||||
|
connect(m_model, &QAbstractItemModel::modelReset, this, &QetGraphicsTableItem::modelReseted);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -274,6 +277,10 @@ bool QetGraphicsTableItem::sceneEventFilter(QGraphicsItem *watched, QEvent *even
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QetGraphicsTableItem::modelReseted() {
|
||||||
|
dataChanged(m_model->index(0,0), m_model->index(0,0), QVector<int>());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief QetGraphicsTableItem::setUpColumnAndRowMinimumSize
|
* @brief QetGraphicsTableItem::setUpColumnAndRowMinimumSize
|
||||||
* Calcule the minimum row height and the minimum column width for each columns
|
* Calcule the minimum row height and the minimum column width for each columns
|
||||||
@@ -377,7 +384,8 @@ void QetGraphicsTableItem::adjustColumnsWidth()
|
|||||||
auto b = a/std::max(1,m_model->columnCount()); //avoid divide by 0
|
auto b = a/std::max(1,m_model->columnCount()); //avoid divide by 0
|
||||||
|
|
||||||
for(auto i= 0 ; i<m_model->columnCount() ; ++i) {
|
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);
|
m_header_item->resizeSection(i, std::max(m_minimum_column_width.at(std::min(m_minimum_column_width.size()-1, i)),
|
||||||
|
m_header_item->minimumSectionWidth().at(std::min(m_header_item->minimumSectionWidth().size()-1, i))) + b);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -391,7 +399,6 @@ void QetGraphicsTableItem::dataChanged(const QModelIndex &topLeft, const QModelI
|
|||||||
setUpColumnAndRowMinimumSize();
|
setUpColumnAndRowMinimumSize();
|
||||||
adjustSize();
|
adjustSize();
|
||||||
setSize(size_);
|
setSize(size_);
|
||||||
qDebug() << "data changed";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -18,6 +18,10 @@
|
|||||||
#include "nomenclaturemodelpropertieswidget.h"
|
#include "nomenclaturemodelpropertieswidget.h"
|
||||||
#include "ui_nomenclaturemodelpropertieswidget.h"
|
#include "ui_nomenclaturemodelpropertieswidget.h"
|
||||||
#include "nomenclaturemodel.h"
|
#include "nomenclaturemodel.h"
|
||||||
|
#include "qetproject.h"
|
||||||
|
#include "elementquerywidget.h"
|
||||||
|
|
||||||
|
#include <QDialogButtonBox>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief NomenclatureModelPropertiesWidget::NomenclatureModelPropertiesWidget
|
* @brief NomenclatureModelPropertiesWidget::NomenclatureModelPropertiesWidget
|
||||||
@@ -49,11 +53,30 @@ void NomenclatureModelPropertiesWidget::setModel(NomenclatureModel *model) {
|
|||||||
m_model = model;
|
m_model = model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief NomenclatureModelPropertiesWidget::on_m_edit_query_pb_clicked
|
||||||
|
*/
|
||||||
void NomenclatureModelPropertiesWidget::on_m_edit_query_pb_clicked()
|
void NomenclatureModelPropertiesWidget::on_m_edit_query_pb_clicked()
|
||||||
{}
|
{
|
||||||
|
QDialog d(this);
|
||||||
|
auto l = new QVBoxLayout(this);
|
||||||
|
d.setLayout(l);
|
||||||
|
|
||||||
|
auto query_widget = new ElementQueryWidget(&d);
|
||||||
|
l->addWidget(query_widget);
|
||||||
|
|
||||||
|
auto button_box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
||||||
|
l->addWidget(button_box);
|
||||||
|
connect(button_box, &QDialogButtonBox::accepted, &d, &QDialog::accept);
|
||||||
|
connect(button_box, &QDialogButtonBox::rejected, &d, &QDialog::reject);
|
||||||
|
|
||||||
|
if (d.exec()) {
|
||||||
|
m_model->query(query_widget->queryStr());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void NomenclatureModelPropertiesWidget::on_m_refresh_pb_clicked() {
|
void NomenclatureModelPropertiesWidget::on_m_refresh_pb_clicked() {
|
||||||
if (m_model) {
|
if (m_model && m_model->project()) {
|
||||||
m_model->query("SELECT plant, location, label, comment, description FROM element_info ORDER BY plant, location, label, comment, description");
|
m_model->project()->dataBase()->updateDB();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ class BOMExportDialog : public QDialog
|
|||||||
QString headers() const;
|
QString headers() const;
|
||||||
bool createDataBase();
|
bool createDataBase();
|
||||||
void populateDataBase();
|
void populateDataBase();
|
||||||
void prepareQuery(QStringList keys);
|
|
||||||
QHash<QString, QString> elementInfoToString(Element *elmt) const;
|
QHash<QString, QString> elementInfoToString(Element *elmt) const;
|
||||||
QString queryStr() const;
|
QString queryStr() const;
|
||||||
void updateQueryLine();
|
void updateQueryLine();
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2006-2019 The QElectroTech Team
|
Copyright 2006-2020 The QElectroTech Team
|
||||||
This file is part of QElectroTech.
|
This file is part of QElectroTech.
|
||||||
|
|
||||||
QElectroTech is free software: you can redistribute it and/or modify
|
QElectroTech is free software: you can redistribute it and/or modify
|
||||||
|
|||||||
Reference in New Issue
Block a user