mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-05-30 02:53:14 +02:00
Compare commits
42 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 34eb6e9f71 | |||
| faf4235bed | |||
| 0a51e22b7d | |||
| 632fba5366 | |||
| 0ca883f114 | |||
| 170d856007 | |||
| 0424eb9fba | |||
| 8210f06919 | |||
| 468618adda | |||
| 8141a75738 | |||
| 8f201a6e5d | |||
| b8745c0a6b | |||
| 7c3bde9118 | |||
| 28cd389695 | |||
| 56bb2a399b | |||
| dc726792d3 | |||
| d8707a4ef2 | |||
| 77710e1cc5 | |||
| 1d2c00819d | |||
| eee0469bd7 | |||
| 5118037cb5 | |||
| 1f53c39290 | |||
| b71aec9548 | |||
| c7798e1a80 | |||
| f97edad75a | |||
| 454b2c8a0f | |||
| b2782bc460 | |||
| 059f0eb1b6 | |||
| ce318ac667 | |||
| be2067148e | |||
| 444f62a1f8 | |||
| 8f85cacb06 | |||
| ffe3d98279 | |||
| dea926e4b4 | |||
| a1779d1a7a | |||
| 252106178b | |||
| a00404bc9f | |||
| e2ebb445a8 | |||
| 24ec94d73e | |||
| edb42caa16 | |||
| c110acc0ac | |||
| 3467c09c1e |
@@ -131,28 +131,3 @@ target_include_directories(
|
||||
${QET_DIR}/sources/factory/ui
|
||||
${QET_DIR}/sources/print
|
||||
)
|
||||
|
||||
install(TARGETS ${PROJECT_NAME})
|
||||
install(DIRECTORY ico/breeze-icons/16x16 DESTINATION ${QET_ICONS_PATH})
|
||||
install(DIRECTORY ico/breeze-icons/22x22 DESTINATION ${QET_ICONS_PATH})
|
||||
install(DIRECTORY ico/breeze-icons/32x32 DESTINATION ${QET_ICONS_PATH})
|
||||
install(DIRECTORY ico/breeze-icons/48x48 DESTINATION ${QET_ICONS_PATH})
|
||||
install(DIRECTORY ico/breeze-icons/64x64 DESTINATION ${QET_ICONS_PATH})
|
||||
install(DIRECTORY ico/breeze-icons/128x128 DESTINATION ${QET_ICONS_PATH})
|
||||
install(DIRECTORY ico/breeze-icons/256x256 DESTINATION ${QET_ICONS_PATH})
|
||||
install(DIRECTORY elements DESTINATION share/qelectrotech)
|
||||
install(DIRECTORY examples DESTINATION share/qelectrotech)
|
||||
install(DIRECTORY titleblocks DESTINATION share/qelectrotech)
|
||||
install(FILES LICENSE ELEMENTS.LICENSE CREDIT README ChangeLog DESTINATION share/doc/qelectrotech)
|
||||
install(FILES misc/qelectrotech.desktop DESTINATION share/applications)
|
||||
install(FILES misc/x-qet-element.xml
|
||||
misc/x-qet-project.xml
|
||||
misc/x-qet-titleblock.xml
|
||||
DESTINATION share/mime/application)
|
||||
install(FILES misc/x-qet-element.desktop
|
||||
misc/x-qet-project.desktop
|
||||
misc/x-qet-titleblock.desktop
|
||||
DESTINATION share/mimelnk/application)
|
||||
install(FILES misc/qelectrotech.xml DESTINATION share/mime/packages)
|
||||
install(FILES misc/qelectrotech.appdata.xml DESTINATION ${QET_APPDATA_PATH})
|
||||
install(FILES ${QM_FILES} DESTINATION ${QET_LANG_PATH})
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "org.qelectrotech.QElectroTech",
|
||||
"runtime": "org.kde.Platform",
|
||||
"runtime-version": "5.14",
|
||||
"runtime-version": "5.15",
|
||||
"sdk": "org.kde.Sdk",
|
||||
"command": "qelectrotech",
|
||||
"rename-desktop-file": "qelectrotech.desktop",
|
||||
|
||||
@@ -19,9 +19,9 @@ message(" - fetch_kdeaddons")
|
||||
if(DEFINED BUILD_WITH_KF5)
|
||||
Include(FetchContent)
|
||||
|
||||
option(BUILD_KF5 "Build KF5 libraries, use system ones otherwise" YES)
|
||||
set(BUILD_KF5_YES "YES")
|
||||
|
||||
if(BUILD_KF5)
|
||||
if(DEFINED BUILD_KF5_YES)
|
||||
|
||||
if(NOT DEFINED KF5_GIT_TAG)
|
||||
#https://qelectrotech.org/forum/viewtopic.php?pid=13924#p13924
|
||||
|
||||
@@ -18,16 +18,9 @@ message(" - fetch_pugixml")
|
||||
|
||||
Include(FetchContent)
|
||||
|
||||
option(BUILD_PUGIXML "Build pugixml library, use system one otherwise" YES)
|
||||
FetchContent_Declare(
|
||||
pugixml
|
||||
GIT_REPOSITORY https://github.com/zeux/pugixml.git
|
||||
GIT_TAG v1.11.4)
|
||||
|
||||
if(BUILD_PUGIXML)
|
||||
|
||||
FetchContent_Declare(
|
||||
pugixml
|
||||
GIT_REPOSITORY https://github.com/zeux/pugixml.git
|
||||
GIT_TAG v1.11.4)
|
||||
|
||||
FetchContent_MakeAvailable(pugixml)
|
||||
else()
|
||||
find_package(pugixml REQUIRED)
|
||||
endif()
|
||||
FetchContent_MakeAvailable(pugixml)
|
||||
|
||||
@@ -28,6 +28,9 @@ if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
|
||||
# This strips terminating newline in the variable
|
||||
string(REGEX REPLACE "\n$" "" GIT_COMMIT_SHA "${GIT_COMMIT_SHA}")
|
||||
|
||||
# This adds to definitions => .cpp
|
||||
add_definitions(-DGIT_COMMIT_SHA="${GIT_COMMIT_SHA}")
|
||||
|
||||
if(NOT GIT_COMMIT_RESULT EQUAL "0")
|
||||
message(
|
||||
FATAL_ERROR
|
||||
@@ -36,6 +39,3 @@ if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
|
||||
", please check")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# This adds to definitions => .cpp
|
||||
add_definitions(-DGIT_COMMIT_SHA="${GIT_COMMIT_SHA}")
|
||||
|
||||
@@ -383,8 +383,6 @@ set(QET_SRC_FILES
|
||||
${QET_DIR}/sources/properties/terminaldata.h
|
||||
${QET_DIR}/sources/properties/xrefproperties.cpp
|
||||
${QET_DIR}/sources/properties/xrefproperties.h
|
||||
${QET_DIR}/sources/properties/userproperties.cpp
|
||||
${QET_DIR}/sources/properties/userproperties.h
|
||||
|
||||
${QET_DIR}/sources/PropertiesEditor/propertieseditordialog.h
|
||||
${QET_DIR}/sources/PropertiesEditor/propertieseditordockwidget.cpp
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 309 KiB |
+712
-583
File diff suppressed because it is too large
Load Diff
+720
-591
File diff suppressed because it is too large
Load Diff
+712
-583
File diff suppressed because it is too large
Load Diff
+723
-592
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+723
-595
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+1006
-874
File diff suppressed because it is too large
Load Diff
+719
-590
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+721
-590
File diff suppressed because it is too large
Load Diff
+714
-585
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+708
-579
File diff suppressed because it is too large
Load Diff
+711
-582
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+718
-587
File diff suppressed because it is too large
Load Diff
+723
-594
File diff suppressed because it is too large
Load Diff
+712
-583
File diff suppressed because it is too large
Load Diff
+708
-579
File diff suppressed because it is too large
Load Diff
+712
-583
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+722
-591
File diff suppressed because it is too large
Load Diff
+720
-591
File diff suppressed because it is too large
Load Diff
+720
-588
File diff suppressed because it is too large
Load Diff
+714
-585
File diff suppressed because it is too large
Load Diff
+712
-583
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+2167
-2154
File diff suppressed because it is too large
Load Diff
+708
-579
File diff suppressed because it is too large
Load Diff
+708
-579
File diff suppressed because it is too large
Load Diff
+708
-579
File diff suppressed because it is too large
Load Diff
+712
-583
File diff suppressed because it is too large
Load Diff
+708
-579
File diff suppressed because it is too large
Load Diff
@@ -17,7 +17,7 @@
|
||||
*/
|
||||
#include "elementscollectionwidget.h"
|
||||
|
||||
#include "../editor/qetelementeditor.h"
|
||||
#include "../editor/ui/qetelementeditor.h"
|
||||
#include "../elementscategoryeditor.h"
|
||||
#include "../newelementwizard.h"
|
||||
#include "../qetapp.h"
|
||||
@@ -38,6 +38,9 @@
|
||||
#include <QUrl>
|
||||
#include <QVBoxLayout>
|
||||
#include <QtGlobal>
|
||||
#include <QProgressBar>
|
||||
#include <QStatusBar>
|
||||
#include <QLineEdit>
|
||||
|
||||
/**
|
||||
@brief ElementsCollectionWidget::ElementsCollectionWidget
|
||||
|
||||
@@ -331,7 +331,6 @@ void BorderTitleBlock::importTitleBlock(const TitleBlockProperties &ip) {
|
||||
// through setFolioData(),
|
||||
// which in turn calls updateDiagramContextForTitleBlock().
|
||||
emit(needTitleBlockTemplate(ip.template_name));
|
||||
emit informationChanged();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -245,12 +245,6 @@ class BorderTitleBlock : public QObject
|
||||
since it does not know of its parent project.
|
||||
*/
|
||||
void needTitleBlockTemplate(const QString &);
|
||||
|
||||
/**
|
||||
* @brief infoChanged
|
||||
* Signal emitted when the informations changed.
|
||||
*/
|
||||
void informationChanged();
|
||||
|
||||
// attributes
|
||||
private:
|
||||
|
||||
@@ -368,14 +368,6 @@ void ConductorProperties::fromXml(QDomElement &e)
|
||||
"vertical-alignment",
|
||||
"AlignRight"
|
||||
).toStdString().data()));
|
||||
|
||||
//Keep retrocompatible with version older than 0,4
|
||||
//If the propertie @type is simple (removed since QET 0,4), we set text no visible.
|
||||
//@TODO remove this code for qet 0.6 or later
|
||||
#if TODO_LIST
|
||||
#pragma message("@TODO remove this code for qet 0.6 or later")
|
||||
#endif
|
||||
if (e.attribute("type") == "simple") m_show_text = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
@param parent QWidget parent
|
||||
*/
|
||||
ConfigDialog::ConfigDialog(QWidget *parent) : QDialog(parent) {
|
||||
Machine_info *mymachineinfo= new Machine_info(this);
|
||||
//ScrollArea for low screens
|
||||
QScrollArea *scroll = new QScrollArea(this);
|
||||
scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||
@@ -35,7 +36,7 @@ ConfigDialog::ConfigDialog(QWidget *parent) : QDialog(parent) {
|
||||
// liste des pages
|
||||
pages_list = new QListWidget();
|
||||
pages_list -> setViewMode(QListView::IconMode);
|
||||
if(MachineInfo::instance()->i_max_screen_height()<1000){
|
||||
if(mymachineinfo->i_max_screen_height()<1000){
|
||||
pages_list -> setIconSize(QSize(64, 64));
|
||||
} else {
|
||||
pages_list -> setIconSize(QSize(128, 128));
|
||||
@@ -79,8 +80,8 @@ ConfigDialog::ConfigDialog(QWidget *parent) : QDialog(parent) {
|
||||
connect(pages_list, SIGNAL(currentRowChanged(int)),
|
||||
pages_widget, SLOT(setCurrentIndex(int)));
|
||||
|
||||
setMaximumSize(MachineInfo::instance()->i_max_screen_width(),
|
||||
MachineInfo::instance()->i_max_screen_height());
|
||||
setMaximumSize(mymachineinfo->i_max_screen_width(),
|
||||
mymachineinfo->i_max_screen_height());
|
||||
resize(1400,1000);
|
||||
|
||||
#ifdef Q_OS_MACOS
|
||||
|
||||
@@ -157,41 +157,40 @@ void ElementQueryWidget::setQuery(const QString &query)
|
||||
//Element type filter
|
||||
if (where.contains("element_sub_type") || where.contains("element_type"))
|
||||
{
|
||||
QRegularExpression rx("^(\\( .+?\\))");
|
||||
auto rxm = rx.match(where);
|
||||
if (rxm.hasMatch())
|
||||
{
|
||||
auto str_type = rxm.captured(1);
|
||||
where.remove(str_type);
|
||||
|
||||
int c=0;
|
||||
ui->m_simple_cb->setChecked (str_type.contains("Simple") ? true : false);
|
||||
if (ui->m_simple_cb->isChecked()) {
|
||||
++c;
|
||||
}
|
||||
ui->m_terminal_cb->setChecked (str_type.contains("Terminale") ? true : false);
|
||||
if (ui->m_terminal_cb->isChecked()) {
|
||||
++c;
|
||||
}
|
||||
ui->m_coil_cb->setChecked (str_type.contains("coil") ? true : false);
|
||||
if (ui->m_coil_cb->isChecked()) {
|
||||
++c;
|
||||
}
|
||||
ui->m_button_cb->setChecked (str_type.contains("commutator") ? true : false);
|
||||
if (ui->m_button_cb->isChecked()) {
|
||||
++c;
|
||||
}
|
||||
ui->m_protection_cb->setChecked(str_type.contains("protection") ? true : false);
|
||||
if (ui->m_protection_cb) {
|
||||
++c;
|
||||
}
|
||||
|
||||
if (c == 5) {
|
||||
ui->m_all_cb->setCheckState(Qt::Checked);
|
||||
} else if (c > 0) {
|
||||
ui->m_all_cb->setCheckState(Qt::PartiallyChecked);
|
||||
}
|
||||
int c=0;
|
||||
ui->m_simple_cb->setChecked (where.contains("Simple") ? true : false);
|
||||
if (ui->m_simple_cb->isChecked()) {
|
||||
++c;
|
||||
where.remove("element_type = 'Simple' ");
|
||||
}
|
||||
ui->m_terminal_cb->setChecked (where.contains("Terminale") ? true : false);
|
||||
if (ui->m_terminal_cb->isChecked()) {
|
||||
++c;
|
||||
where.remove("element_type = 'Terminale'");
|
||||
}
|
||||
ui->m_coil_cb->setChecked (where.contains("coil") ? true : false);
|
||||
if (ui->m_coil_cb->isChecked()) {
|
||||
++c;
|
||||
where.remove("element_sub_type = 'coil' ");
|
||||
}
|
||||
ui->m_button_cb->setChecked (where.contains("commutator") ? true : false);
|
||||
if (ui->m_button_cb->isChecked()) {
|
||||
++c;
|
||||
where.remove("element_sub_type = 'commutator' ");
|
||||
}
|
||||
ui->m_protection_cb->setChecked(where.contains("protection") ? true : false);
|
||||
if (ui->m_protection_cb) {
|
||||
++c;
|
||||
where.remove("element_sub_type = 'protection'");
|
||||
}
|
||||
|
||||
if (c == 5) {
|
||||
ui->m_all_cb->setCheckState(Qt::Checked);
|
||||
} else if (c > 0) {
|
||||
ui->m_all_cb->setCheckState(Qt::PartiallyChecked);
|
||||
}
|
||||
|
||||
where.remove("OR");
|
||||
}
|
||||
else // There is not "element_sub_type" or "element_type" that mean every element are selected
|
||||
{
|
||||
@@ -207,16 +206,20 @@ void ElementQueryWidget::setQuery(const QString &query)
|
||||
strl.append(item->data(Qt::UserRole).toString());
|
||||
}
|
||||
|
||||
QString join_str = strl.join("|");
|
||||
QString beginning_rx;
|
||||
beginning_rx.append(QString("^(").append(strl.join("|")));
|
||||
beginning_rx.append(")");
|
||||
|
||||
QRegularExpression rx_is_not_null(beginning_rx + " IS NOT NULL$");
|
||||
QRegularExpression rx_is_null (beginning_rx + " IS NULL$");
|
||||
QRegularExpression rx_like (beginning_rx + QString(" LIKE'%(.+)%'$"));
|
||||
QRegularExpression rx_not_like (beginning_rx + QString(" NOT LIKE'%(.+)%'$"));
|
||||
QRegularExpression rx_equal (beginning_rx + QString("='(.+)'$"));
|
||||
QRegularExpression rx_not_equal (beginning_rx + QString("!='(.+)'$"));
|
||||
|
||||
QRegularExpression rx_is_not_null(QStringLiteral("^(%1) != ''$").arg(join_str));
|
||||
QRegularExpression rx_is_null (QStringLiteral("^\\((%1) IS NULL OR (%1) = ''\\)").arg(join_str));
|
||||
QRegularExpression rx_like (QStringLiteral("^(%1) LIKE'%(.+)%'$").arg(join_str));
|
||||
QRegularExpression rx_not_like (QStringLiteral("^(%1) NOT LIKE'%(.+)%'$").arg(join_str));
|
||||
QRegularExpression rx_equal (QStringLiteral("^(%1)='(.+)'$").arg(join_str));
|
||||
QRegularExpression rx_not_equal (QStringLiteral("^(%1)!='(.+)'$").arg(join_str));
|
||||
|
||||
QStringList split_where;
|
||||
|
||||
//Remove the white space at begin and end of each string
|
||||
for (auto str : where.split("AND "))
|
||||
{
|
||||
@@ -307,22 +310,22 @@ QString ElementQueryWidget::queryStr() const
|
||||
case 0: //No filter
|
||||
break;
|
||||
case 1: //Not empty
|
||||
filter_ += QStringLiteral(" AND ") += key += " != ''";
|
||||
filter_ += QString(" AND ") += key += " IS NOT NULL";
|
||||
break;
|
||||
case 2: //empty
|
||||
filter_ += QStringLiteral(" AND (%1 IS NULL OR %1 = '')").arg(key);
|
||||
filter_ += QString(" AND ") += key += " IS NULL";
|
||||
break;
|
||||
case 3: // contain
|
||||
filter_ += QStringLiteral(" AND ") += key += QStringLiteral(" LIKE'%") += f.second += "%'";
|
||||
filter_ += QString(" AND ") += key += QString(" LIKE'%") += f.second += "%'";
|
||||
break;
|
||||
case 4: // not contain
|
||||
filter_ += QStringLiteral(" AND ") += key += QStringLiteral(" NOT LIKE'%") += f.second += "%'";
|
||||
filter_ += QString(" AND ") += key += QString(" NOT LIKE'%") += f.second += "%'";
|
||||
break;
|
||||
case 5: // is equal
|
||||
filter_ += QStringLiteral(" AND ") += key += QStringLiteral("='") += f.second += "'";
|
||||
filter_ += QString(" AND ") += key += QString("='") += f.second += "'";
|
||||
break;
|
||||
case 6: // is not equal
|
||||
filter_ += QStringLiteral(" AND ") += key += QStringLiteral("!='") += f.second += "'";
|
||||
filter_ += QString(" AND ") += key += QString("!='") += f.second += "'";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+170
-187
@@ -92,9 +92,6 @@ Diagram::Diagram(QETProject *project) :
|
||||
pen.setColor(Qt::black);
|
||||
conductor_setter_ -> setPen(pen);
|
||||
|
||||
connect(&border_and_titleblock,
|
||||
&BorderTitleBlock::informationChanged,
|
||||
this, &Diagram::diagramInformationChanged);
|
||||
connect(&border_and_titleblock,
|
||||
&BorderTitleBlock::needTitleBlockTemplate,
|
||||
this, &Diagram::setTitleBlockTemplate);
|
||||
@@ -137,20 +134,15 @@ Diagram::~Diagram()
|
||||
delete m_event_interface;
|
||||
|
||||
// list removable items
|
||||
QVector<QGraphicsItem *> deletable_items;
|
||||
for(const auto &qgi : items())
|
||||
QList<QGraphicsItem *> deletable_items;
|
||||
for(QGraphicsItem *qgi : items())
|
||||
{
|
||||
if (qgi->parentItem())
|
||||
continue;
|
||||
if (qgraphicsitem_cast<Conductor *>(qgi))
|
||||
continue;
|
||||
deletable_items.append(qgi);
|
||||
}
|
||||
for (const auto &item : qAsConst(deletable_items))
|
||||
{
|
||||
removeItem(item);
|
||||
delete item;
|
||||
if (qgi -> parentItem()) continue;
|
||||
if (qgraphicsitem_cast<Conductor *>(qgi)) continue;
|
||||
deletable_items << qgi;
|
||||
}
|
||||
|
||||
qDeleteAll (deletable_items);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -197,12 +189,12 @@ void Diagram::drawBackground(QPainter *p, const QRectF &r) {
|
||||
// If user allow zoom out beyond of folio,
|
||||
// we draw grid outside of border.
|
||||
QSettings settings;
|
||||
int xGrid = settings.value(QStringLiteral("diagrameditor/Xgrid"),
|
||||
Diagram::xGrid).toInt();
|
||||
int yGrid = settings.value(QStringLiteral("diagrameditor/Ygrid"),
|
||||
Diagram::yGrid).toInt();
|
||||
int xGrid = settings.value("diagrameditor/Xgrid",
|
||||
Diagram::xGrid).toInt();
|
||||
int yGrid = settings.value("diagrameditor/Ygrid",
|
||||
Diagram::yGrid).toInt();
|
||||
QRectF rect = settings.value(
|
||||
QStringLiteral("diagrameditor/zoom-out-beyond-of-folio"),
|
||||
"diagrameditor/zoom-out-beyond-of-folio",
|
||||
false).toBool() ? r
|
||||
: border_and_titleblock
|
||||
.insideBorderRect()
|
||||
@@ -332,6 +324,15 @@ void Diagram::wheelEvent(QGraphicsSceneWheelEvent *event)
|
||||
*/
|
||||
void Diagram::keyPressEvent(QKeyEvent *event)
|
||||
{
|
||||
QSettings settings;
|
||||
int xKeyGrid = settings.value("diagrameditor/key_Xgrid",
|
||||
Diagram::xKeyGrid).toInt();
|
||||
int yKeyGrid = settings.value("diagrameditor/key_Ygrid",
|
||||
Diagram::yKeyGrid).toInt();
|
||||
int xKeyGridFine = settings.value("diagrameditor/key_fine_Xgrid",
|
||||
Diagram::xKeyGridFine).toInt();
|
||||
int yKeyGridFine = settings.value("diagrameditor/key_fine_Ygrid",
|
||||
Diagram::yKeyGridFine).toInt();
|
||||
event->setAccepted(false);
|
||||
|
||||
if (m_event_interface) {
|
||||
@@ -360,11 +361,6 @@ void Diagram::keyPressEvent(QKeyEvent *event)
|
||||
//Move item with the keyboard arrow
|
||||
if(event->modifiers() == Qt::NoModifier)
|
||||
{
|
||||
QSettings settings;
|
||||
int xKeyGrid = settings.value(QStringLiteral("diagrameditor/key_Xgrid"),
|
||||
Diagram::xKeyGrid).toInt();
|
||||
int yKeyGrid = settings.value(QStringLiteral("diagrameditor/key_Ygrid"),
|
||||
Diagram::yKeyGrid).toInt();
|
||||
switch(event->key())
|
||||
{
|
||||
case Qt::Key_Left:
|
||||
@@ -403,11 +399,6 @@ void Diagram::keyPressEvent(QKeyEvent *event)
|
||||
}
|
||||
else if(event->modifiers() == Qt::AltModifier)
|
||||
{
|
||||
QSettings settings;
|
||||
int xKeyGridFine = settings.value(QStringLiteral("diagrameditor/key_fine_Xgrid"),
|
||||
Diagram::xKeyGridFine).toInt();
|
||||
int yKeyGridFine = settings.value(QStringLiteral("diagrameditor/key_fine_Ygrid"),
|
||||
Diagram::yKeyGridFine).toInt();
|
||||
switch(event->key())
|
||||
{
|
||||
case Qt::Key_Left:
|
||||
@@ -741,7 +732,7 @@ QDomDocument Diagram::toXml(bool whole_content) {
|
||||
|
||||
// XML tree root
|
||||
// racine de l'arbre XML
|
||||
auto dom_root = document.createElement(QStringLiteral("diagram"));
|
||||
auto dom_root = document.createElement("diagram");
|
||||
|
||||
// schema properties
|
||||
// proprietes du schema
|
||||
@@ -751,24 +742,24 @@ QDomDocument Diagram::toXml(bool whole_content) {
|
||||
|
||||
// Default conductor properties
|
||||
QDomElement default_conductor =
|
||||
document.createElement(QStringLiteral("defaultconductor"));
|
||||
document.createElement("defaultconductor");
|
||||
defaultConductorProperties.toXml(default_conductor);
|
||||
dom_root.appendChild(default_conductor);
|
||||
|
||||
// Conductor autonum
|
||||
if (!m_conductors_autonum_name.isEmpty()) {
|
||||
dom_root.setAttribute(QStringLiteral("conductorAutonum"),
|
||||
dom_root.setAttribute("conductorAutonum",
|
||||
m_conductors_autonum_name);
|
||||
}
|
||||
|
||||
//Default New Element
|
||||
dom_root.setAttribute(QStringLiteral("freezeNewElement"),
|
||||
m_freeze_new_elements ? QStringLiteral("true") : QStringLiteral("false"));
|
||||
dom_root.setAttribute("freezeNewElement",
|
||||
m_freeze_new_elements ? "true" : "false");
|
||||
|
||||
//Default New Conductor
|
||||
dom_root.setAttribute(QStringLiteral("freezeNewConductor"),
|
||||
dom_root.setAttribute("freezeNewConductor",
|
||||
m_freeze_new_conductors_
|
||||
? QStringLiteral("true") : QStringLiteral("false"));
|
||||
? "true" : "false");
|
||||
|
||||
//Element Folio Sequential Variables
|
||||
if (!m_elmt_unitfolio_max.isEmpty()
|
||||
@@ -776,37 +767,37 @@ QDomDocument Diagram::toXml(bool whole_content) {
|
||||
|| !m_elmt_hundredfolio_max.isEmpty()) {
|
||||
QDomElement elmtfoliosequential =
|
||||
document.createElement(
|
||||
QStringLiteral("elementautonumfoliosequentials"));
|
||||
"elementautonumfoliosequentials");
|
||||
if (!m_elmt_unitfolio_max.isEmpty()) {
|
||||
QDomElement elmtfolioseq =
|
||||
document.createElement(
|
||||
QStringLiteral("elementunitfolioseq"));
|
||||
"elementunitfolioseq");
|
||||
folioSequentialsToXml(&m_elmt_unitfolio_max,
|
||||
&elmtfolioseq,
|
||||
QStringLiteral("sequf_"),
|
||||
QStringLiteral("unitfolioseq"),
|
||||
"sequf_",
|
||||
"unitfolioseq",
|
||||
&document);
|
||||
elmtfoliosequential.appendChild(elmtfolioseq);
|
||||
}
|
||||
if (!m_elmt_tenfolio_max.isEmpty()) {
|
||||
QDomElement elmtfolioseq =
|
||||
document.createElement(
|
||||
QStringLiteral("elementtenfolioseq"));
|
||||
"elementtenfolioseq");
|
||||
folioSequentialsToXml(&m_elmt_tenfolio_max,
|
||||
&elmtfolioseq,
|
||||
QStringLiteral("seqtf_"),
|
||||
QStringLiteral("tenfolioseq"),
|
||||
"seqtf_",
|
||||
"tenfolioseq",
|
||||
&document);
|
||||
elmtfoliosequential.appendChild(elmtfolioseq);
|
||||
}
|
||||
if (!m_elmt_hundredfolio_max.isEmpty()) {
|
||||
QDomElement elmtfolioseq =
|
||||
document.createElement(
|
||||
QStringLiteral("elementhundredfolioseq"));
|
||||
"elementhundredfolioseq");
|
||||
folioSequentialsToXml(&m_elmt_hundredfolio_max,
|
||||
&elmtfolioseq,
|
||||
QStringLiteral("seqhf_"),
|
||||
QStringLiteral("hundredfolioseq"),
|
||||
"seqhf_",
|
||||
"hundredfolioseq",
|
||||
&document);
|
||||
elmtfoliosequential.appendChild(elmtfolioseq);
|
||||
}
|
||||
@@ -818,38 +809,38 @@ QDomDocument Diagram::toXml(bool whole_content) {
|
||||
!m_cnd_hundredfolio_max.isEmpty()) {
|
||||
QDomElement cndfoliosequential =
|
||||
document.createElement(
|
||||
QStringLiteral("conductorautonumfoliosequentials"));
|
||||
"conductorautonumfoliosequentials");
|
||||
QHash<QString, QStringList>::iterator i;
|
||||
if (!m_cnd_unitfolio_max.isEmpty()) {
|
||||
QDomElement cndfolioseq =
|
||||
document.createElement(
|
||||
QStringLiteral("conductorunitfolioseq"));
|
||||
"conductorunitfolioseq");
|
||||
folioSequentialsToXml(&m_cnd_unitfolio_max,
|
||||
&cndfolioseq,
|
||||
QStringLiteral("sequf_"),
|
||||
QStringLiteral("unitfolioseq"),
|
||||
"sequf_",
|
||||
"unitfolioseq",
|
||||
&document);
|
||||
cndfoliosequential.appendChild(cndfolioseq);
|
||||
}
|
||||
if (!m_cnd_tenfolio_max.isEmpty()) {
|
||||
QDomElement cndfolioseq =
|
||||
document.createElement(
|
||||
QStringLiteral("conductortenfolioseq"));
|
||||
"conductortenfolioseq");
|
||||
folioSequentialsToXml(&m_cnd_tenfolio_max,
|
||||
&cndfolioseq,
|
||||
QStringLiteral("seqtf_"),
|
||||
QStringLiteral("tenfolioseq"),
|
||||
"seqtf_",
|
||||
"tenfolioseq",
|
||||
&document);
|
||||
cndfoliosequential.appendChild(cndfolioseq);
|
||||
}
|
||||
if (!m_cnd_hundredfolio_max.isEmpty()) {
|
||||
QDomElement cndfolioseq =
|
||||
document.createElement(
|
||||
QStringLiteral("conductorhundredfolioseq"));
|
||||
"conductorhundredfolioseq");
|
||||
folioSequentialsToXml(&m_cnd_hundredfolio_max,
|
||||
&cndfolioseq,
|
||||
QStringLiteral("seqhf_"),
|
||||
QStringLiteral("hundredfolioseq"),
|
||||
"seqhf_",
|
||||
"hundredfolioseq",
|
||||
&document);
|
||||
cndfoliosequential.appendChild(cndfolioseq);
|
||||
}
|
||||
@@ -860,7 +851,7 @@ QDomDocument Diagram::toXml(bool whole_content) {
|
||||
//this method with whole_content to false,
|
||||
//is often use to copy and paste the current selection
|
||||
//so we add the id of the project where copy occur.
|
||||
dom_root.setAttribute(QStringLiteral("projectId"), QETApp::projectId(m_project));
|
||||
dom_root.setAttribute("projectId", QETApp::projectId(m_project));
|
||||
}
|
||||
document.appendChild(dom_root);
|
||||
|
||||
@@ -930,7 +921,7 @@ QDomDocument Diagram::toXml(bool whole_content) {
|
||||
QHash<Terminal *, int> table_adr_id;
|
||||
|
||||
if (!list_elements.isEmpty()) {
|
||||
auto dom_elements = document.createElement(QStringLiteral("elements"));
|
||||
auto dom_elements = document.createElement("elements");
|
||||
for (auto elmt : list_elements) {
|
||||
dom_elements.appendChild(elmt->toXml(document,
|
||||
table_adr_id));
|
||||
@@ -939,7 +930,7 @@ QDomDocument Diagram::toXml(bool whole_content) {
|
||||
}
|
||||
|
||||
if (!list_conductors.isEmpty()) {
|
||||
auto dom_conductors = document.createElement(QStringLiteral("conductors"));
|
||||
auto dom_conductors = document.createElement("conductors");
|
||||
for (auto cond : list_conductors) {
|
||||
dom_conductors.appendChild(cond->toXml(document,
|
||||
table_adr_id));
|
||||
@@ -948,7 +939,7 @@ QDomDocument Diagram::toXml(bool whole_content) {
|
||||
}
|
||||
|
||||
if (!list_texts.isEmpty()) {
|
||||
auto dom_texts = document.createElement(QStringLiteral("inputs"));
|
||||
auto dom_texts = document.createElement("inputs");
|
||||
for (auto dti : list_texts) {
|
||||
dom_texts.appendChild(dti->toXml(document));
|
||||
}
|
||||
@@ -956,7 +947,7 @@ QDomDocument Diagram::toXml(bool whole_content) {
|
||||
}
|
||||
|
||||
if (!list_images.isEmpty()) {
|
||||
auto dom_images = document.createElement(QStringLiteral("images"));
|
||||
auto dom_images = document.createElement("images");
|
||||
for (auto dii : list_images) {
|
||||
dom_images.appendChild(dii->toXml(document));
|
||||
}
|
||||
@@ -964,7 +955,7 @@ QDomDocument Diagram::toXml(bool whole_content) {
|
||||
}
|
||||
|
||||
if (!list_shapes.isEmpty()) {
|
||||
auto dom_shapes = document.createElement(QStringLiteral("shapes"));
|
||||
auto dom_shapes = document.createElement("shapes");
|
||||
for (auto dii : list_shapes) {
|
||||
dom_shapes.appendChild(dii -> toXml(document));
|
||||
}
|
||||
@@ -972,7 +963,7 @@ QDomDocument Diagram::toXml(bool whole_content) {
|
||||
}
|
||||
|
||||
if (table_vector.size()) {
|
||||
auto tables = document.createElement(QStringLiteral("tables"));
|
||||
auto tables = document.createElement("tables");
|
||||
for (auto table : table_vector) {
|
||||
tables.appendChild(table->toXml(document));
|
||||
}
|
||||
@@ -996,15 +987,11 @@ void Diagram::folioSequentialsToXml(QHash<QString,
|
||||
QDomElement *domElement,
|
||||
const QString& seq_type,
|
||||
const QString& type,
|
||||
QDomDocument *doc)
|
||||
{
|
||||
QDomDocument *doc) {
|
||||
QHash<QString, QStringList>::iterator i;
|
||||
|
||||
for (i = hash->begin(); i != hash->end(); i++)
|
||||
{
|
||||
for (i = hash->begin(); i != hash->end(); i++) {
|
||||
QDomElement folioseq = doc->createElement(type);
|
||||
folioseq.setAttribute(QStringLiteral("title"), i.key());
|
||||
|
||||
folioseq.setAttribute("title", i.key());
|
||||
for (int j = 0; j < i.value().size(); j++) {
|
||||
folioseq.setAttribute(seq_type + QString::number(j+1),
|
||||
i.value().at(j));
|
||||
@@ -1109,15 +1096,14 @@ bool Diagram::initFromXml(QDomElement &document,
|
||||
@return
|
||||
*/
|
||||
Terminal* findTerminal(int conductor_index,
|
||||
QDomElement& f,
|
||||
QHash<int,Terminal *>& table_adr_id,
|
||||
QList<Element *>& added_elements)
|
||||
{
|
||||
QDomElement& f,
|
||||
QHash<int,
|
||||
Terminal *>& table_adr_id,
|
||||
QList<Element *>& added_elements) {
|
||||
assert(conductor_index == 1 || conductor_index == 2);
|
||||
|
||||
auto str_index = QString::number(conductor_index);
|
||||
QString element_index = QStringLiteral("element") + str_index;
|
||||
QString terminal_index = QStringLiteral("terminal") + str_index;
|
||||
QString element_index = "element" + QString::number(conductor_index);
|
||||
QString terminal_index = "terminal" + QString::number(conductor_index);
|
||||
|
||||
if (f.hasAttribute(element_index)) {
|
||||
QUuid element_uuid = QUuid(f.attribute(element_index));
|
||||
@@ -1199,13 +1185,10 @@ Terminal* findTerminal(int conductor_index,
|
||||
bool Diagram::fromXml(QDomElement &document,
|
||||
QPointF position,
|
||||
bool consider_informations,
|
||||
DiagramContent *content_ptr)
|
||||
{
|
||||
DiagramContent *content_ptr) {
|
||||
const QDomElement& root = document;
|
||||
// The first element must be a diagram
|
||||
if (root.tagName() != QLatin1String("diagram")) {
|
||||
return(false);
|
||||
}
|
||||
// The first element must be a diagram
|
||||
if (root.tagName() != "diagram") return(false);
|
||||
|
||||
// Read attributes of this diagram
|
||||
if (consider_informations)
|
||||
@@ -1214,57 +1197,56 @@ bool Diagram::fromXml(QDomElement &document,
|
||||
border_and_titleblock.titleBlockFromXml(root);
|
||||
border_and_titleblock.borderFromXml(root);
|
||||
|
||||
// Find the element "defaultconductor".
|
||||
// If found, load default conductor properties.
|
||||
// Find the element "defaultconductor".
|
||||
// If found, load default conductor properties.
|
||||
QDomElement default_conductor_elmt =
|
||||
root.firstChildElement(QStringLiteral("defaultconductor"));
|
||||
root.firstChildElement("defaultconductor");
|
||||
if (!default_conductor_elmt.isNull()) {
|
||||
defaultConductorProperties.fromXml(default_conductor_elmt);
|
||||
}
|
||||
|
||||
// Load the autonum
|
||||
m_conductors_autonum_name = root.attribute(QStringLiteral("conductorAutonum"));
|
||||
// Load the autonum
|
||||
m_conductors_autonum_name = root.attribute("conductorAutonum");
|
||||
|
||||
// Load Freeze New Element
|
||||
m_freeze_new_elements = root.attribute(QStringLiteral("freezeNewElement")).toInt();
|
||||
// Load Freeze New Element
|
||||
m_freeze_new_elements = root.attribute("freezeNewElement").toInt();
|
||||
|
||||
// Load Freeze New Conductor
|
||||
m_freeze_new_conductors_ = root.attribute(QStringLiteral("freezeNewConductor")).toInt();
|
||||
// Load Freeze New Conductor
|
||||
m_freeze_new_conductors_ = root.attribute("freezeNewConductor").toInt();
|
||||
|
||||
//Load Element Folio Sequential
|
||||
//Load Element Folio Sequential
|
||||
folioSequentialsFromXml(root,
|
||||
&m_elmt_unitfolio_max,
|
||||
QStringLiteral("elementunitfolioseq"),
|
||||
QStringLiteral("sequf_"),
|
||||
QStringLiteral("unitfolioseq"),
|
||||
QStringLiteral("elementautonumfoliosequentials"));
|
||||
"elementunitfolioseq",
|
||||
"sequf_",
|
||||
"unitfolioseq",
|
||||
"elementautonumfoliosequentials");
|
||||
folioSequentialsFromXml(root, &m_elmt_tenfolio_max,
|
||||
QStringLiteral("elementtenfolioseq"),
|
||||
QStringLiteral("seqtf_"),
|
||||
QStringLiteral("tenfolioseq"),
|
||||
QStringLiteral("elementautonumfoliosequentials"));
|
||||
"elementtenfolioseq",
|
||||
"seqtf_",
|
||||
"tenfolioseq",
|
||||
"elementautonumfoliosequentials");
|
||||
folioSequentialsFromXml(root, &m_elmt_hundredfolio_max,
|
||||
QStringLiteral("elementhundredfolioseq"),
|
||||
QStringLiteral("seqhf_"),
|
||||
QStringLiteral("hundredfolioseq"),
|
||||
QStringLiteral("elementautonumfoliosequentials"));
|
||||
"elementhundredfolioseq",
|
||||
"seqhf_",
|
||||
"hundredfolioseq",
|
||||
"elementautonumfoliosequentials");
|
||||
|
||||
//Load Conductor Folio Sequential
|
||||
//Load Conductor Folio Sequential
|
||||
folioSequentialsFromXml(root, &m_cnd_unitfolio_max,
|
||||
QStringLiteral("conductorunitfolioseq"),
|
||||
QStringLiteral("sequf_"),
|
||||
QStringLiteral("unitfolioseq"),
|
||||
QStringLiteral("conductorautonumfoliosequentials"));
|
||||
"conductorunitfolioseq",
|
||||
"sequf_",
|
||||
"unitfolioseq",
|
||||
"conductorautonumfoliosequentials");
|
||||
folioSequentialsFromXml(root, &m_cnd_tenfolio_max,
|
||||
QStringLiteral("conductortenfolioseq"),
|
||||
QStringLiteral("seqtf_"),
|
||||
QStringLiteral("tenfolioseq"),
|
||||
QStringLiteral("conductorautonumfoliosequentials"));
|
||||
"conductortenfolioseq",
|
||||
"seqtf_","tenfolioseq",
|
||||
"conductorautonumfoliosequentials");
|
||||
folioSequentialsFromXml(root, &m_cnd_hundredfolio_max,
|
||||
QStringLiteral("conductorhundredfolioseq"),
|
||||
QStringLiteral("seqhf_"),
|
||||
QStringLiteral("hundredfolioseq"),
|
||||
QStringLiteral("conductorautonumfoliosequentials"));
|
||||
"conductorhundredfolioseq",
|
||||
"seqhf_",
|
||||
"hundredfolioseq",
|
||||
"conductorautonumfoliosequentials");
|
||||
}
|
||||
|
||||
// if child haven't got a child, loading is finish (diagram is empty)
|
||||
@@ -1273,10 +1255,10 @@ bool Diagram::fromXml(QDomElement &document,
|
||||
}
|
||||
|
||||
//If paste from another project
|
||||
if (root.hasAttribute(QStringLiteral("projectId")))
|
||||
{
|
||||
QETProject *other_project = QETApp::project(root.attribute(QStringLiteral("projectId"),
|
||||
QStringLiteral("-1")).toInt());
|
||||
if (root.hasAttribute("projectId")) {
|
||||
QETProject *other_project = QETApp::project(
|
||||
root.attribute("projectId",
|
||||
"-1").toInt());
|
||||
|
||||
/* We try to paste from another project,
|
||||
* then befor paste elements,
|
||||
@@ -1284,18 +1266,17 @@ bool Diagram::fromXml(QDomElement &document,
|
||||
* (owned by other project)
|
||||
* in the embedded collection of this project
|
||||
*/
|
||||
if (other_project && other_project != m_project)
|
||||
{
|
||||
if (other_project && other_project != m_project) {
|
||||
ElementCollectionHandler ech;
|
||||
for (auto element_xml :
|
||||
foreach (QDomElement element_xml,
|
||||
QET::findInDomElement(root,
|
||||
QStringLiteral("elements"),
|
||||
QStringLiteral("element"))) {
|
||||
"elements",
|
||||
"element")) {
|
||||
if (!Element::valideXml(element_xml)) continue;
|
||||
|
||||
QString type_id = element_xml.attribute(QStringLiteral("type"));
|
||||
QString type_id = element_xml.attribute("type");
|
||||
|
||||
if (type_id.startsWith(QStringLiteral("embed://"))) {
|
||||
if (type_id.startsWith("embed://")) {
|
||||
ElementsLocation location(
|
||||
type_id,
|
||||
other_project);
|
||||
@@ -1308,15 +1289,15 @@ bool Diagram::fromXml(QDomElement &document,
|
||||
//Load all elements from the XML
|
||||
QList<Element *> added_elements;
|
||||
QHash<int, Terminal *> table_adr_id;
|
||||
for (auto element_xml :
|
||||
QET::findInDomElement(root, QStringLiteral("elements"), QStringLiteral("element")))
|
||||
foreach (QDomElement element_xml,
|
||||
QET::findInDomElement(root, "elements", "element"))
|
||||
{
|
||||
if (!Element::valideXml(element_xml)) continue;
|
||||
|
||||
// cree un element dont le type correspond a l'id type
|
||||
QString type_id = element_xml.attribute(QStringLiteral("type"));
|
||||
QString type_id = element_xml.attribute("type");
|
||||
ElementsLocation element_location;
|
||||
if (type_id.startsWith(QStringLiteral("embed://"))) {
|
||||
if (type_id.startsWith("embed://")) {
|
||||
element_location = ElementsLocation(type_id, m_project);
|
||||
}
|
||||
else {
|
||||
@@ -1345,7 +1326,8 @@ bool Diagram::fromXml(QDomElement &document,
|
||||
{
|
||||
removeItem(nvel_elmt);
|
||||
delete nvel_elmt;
|
||||
qDebug() << QStringLiteral("Diagram::fromXml() : Le chargement des parametres d'un element a echoue");
|
||||
qDebug() << "Diagram::fromXml() : Le chargement des "
|
||||
"parametres d'un element a echoue";
|
||||
} else {
|
||||
added_elements << nvel_elmt;
|
||||
}
|
||||
@@ -1353,9 +1335,9 @@ bool Diagram::fromXml(QDomElement &document,
|
||||
|
||||
// Load text
|
||||
QList<IndependentTextItem *> added_texts;
|
||||
for (auto text_xml : QET::findInDomElement(root,
|
||||
QStringLiteral("inputs"),
|
||||
QStringLiteral("input"))) {
|
||||
foreach (QDomElement text_xml, QET::findInDomElement(root,
|
||||
"inputs",
|
||||
"input")) {
|
||||
IndependentTextItem *iti = new IndependentTextItem();
|
||||
iti -> fromXml(text_xml);
|
||||
addItem(iti);
|
||||
@@ -1364,9 +1346,9 @@ bool Diagram::fromXml(QDomElement &document,
|
||||
|
||||
// Load image
|
||||
QList<DiagramImageItem *> added_images;
|
||||
for (auto image_xml : QET::findInDomElement(root,
|
||||
QStringLiteral("images"),
|
||||
QStringLiteral("image"))) {
|
||||
foreach (QDomElement image_xml, QET::findInDomElement(root,
|
||||
"images",
|
||||
"image")) {
|
||||
DiagramImageItem *dii = new DiagramImageItem ();
|
||||
dii -> fromXml(image_xml);
|
||||
addItem(dii);
|
||||
@@ -1375,9 +1357,9 @@ bool Diagram::fromXml(QDomElement &document,
|
||||
|
||||
// Load shape
|
||||
QList<QetShapeItem *> added_shapes;
|
||||
for (auto shape_xml : QET::findInDomElement(root,
|
||||
QStringLiteral("shapes"),
|
||||
QStringLiteral("shape"))) {
|
||||
foreach (QDomElement shape_xml, QET::findInDomElement(root,
|
||||
"shapes",
|
||||
"shape")) {
|
||||
QetShapeItem *dii = new QetShapeItem (QPointF(0,0));
|
||||
dii -> fromXml(shape_xml);
|
||||
addItem(dii);
|
||||
@@ -1386,9 +1368,9 @@ bool Diagram::fromXml(QDomElement &document,
|
||||
|
||||
// Load conductor
|
||||
QList<Conductor *> added_conductors;
|
||||
for (auto f : QET::findInDomElement(root,
|
||||
QStringLiteral("conductors"),
|
||||
QStringLiteral("conductor")))
|
||||
foreach (QDomElement f, QET::findInDomElement(root,
|
||||
"conductors",
|
||||
"conductor"))
|
||||
{
|
||||
if (!Conductor::valideXml(f)) continue;
|
||||
|
||||
@@ -1413,9 +1395,10 @@ bool Diagram::fromXml(QDomElement &document,
|
||||
|
||||
//Load tables
|
||||
QVector<QetGraphicsTableItem *> added_tables;
|
||||
for (const auto &dom_table : QETXML::subChild(root,
|
||||
QStringLiteral("tables"),
|
||||
QetGraphicsTableItem::xmlTagName()))
|
||||
for (auto dom_table
|
||||
: QETXML::subChild(root,
|
||||
"tables",
|
||||
QetGraphicsTableItem::xmlTagName()))
|
||||
{
|
||||
auto table = new QetGraphicsTableItem();
|
||||
addItem(table);
|
||||
@@ -1427,12 +1410,12 @@ bool Diagram::fromXml(QDomElement &document,
|
||||
if (position != QPointF())
|
||||
{
|
||||
QVector <QGraphicsItem *> added_items;
|
||||
for (auto element : qAsConst(added_elements )) added_items << element;
|
||||
for (auto cond : qAsConst(added_conductors )) added_items << cond;
|
||||
for (auto shape : qAsConst(added_shapes )) added_items << shape;
|
||||
for (auto text : qAsConst(added_texts )) added_items << text;
|
||||
for (auto image : qAsConst(added_images )) added_items << image;
|
||||
for (auto table : qAsConst(added_tables )) added_items << table;
|
||||
for (auto element : added_elements ) added_items << element;
|
||||
for (auto cond : added_conductors) added_items << cond;
|
||||
for (auto shape : added_shapes ) added_items << shape;
|
||||
for (auto text : added_texts ) added_items << text;
|
||||
for (auto image : added_images ) added_items << image;
|
||||
for (auto table : added_tables ) added_items << table;
|
||||
|
||||
//Get the top left corner of the rectangle that contain all added items
|
||||
QRectF items_rect;
|
||||
@@ -1504,7 +1487,7 @@ void Diagram::folioSequentialsFromXml(const QDomElement &root,
|
||||
= folioSeqAutoNum.firstChildElement(type);
|
||||
!folioseq.isNull();
|
||||
folioseq = folioseq.nextSiblingElement(type)) {
|
||||
QString title = folioseq.attribute(QStringLiteral("title"));
|
||||
QString title = folioseq.attribute("title");
|
||||
QStringList list;
|
||||
int i = 1;
|
||||
while (folioseq.hasAttribute(seq
|
||||
@@ -1888,10 +1871,10 @@ void Diagram::loadElmtFolioSeq()
|
||||
|| !m_elmt_unitfolio_max.contains(title)) {
|
||||
//Insert Initial Value
|
||||
if (project()->elementAutoNumCurrentFormula().contains(
|
||||
QStringLiteral("%sequf_"))) {
|
||||
"%sequf_")) {
|
||||
insertFolioSeqHash(&m_elmt_unitfolio_max,
|
||||
title,
|
||||
QStringLiteral("unitfolio"),
|
||||
"unitfolio",
|
||||
&nc);
|
||||
project()->addElementAutoNum(title,nc);
|
||||
}
|
||||
@@ -1899,10 +1882,10 @@ void Diagram::loadElmtFolioSeq()
|
||||
else if (m_elmt_unitfolio_max.contains(title)) {
|
||||
//Load Folio Current Value
|
||||
if (project()->elementAutoNumCurrentFormula().contains(
|
||||
QStringLiteral("%sequf_"))) {
|
||||
"%sequf_")) {
|
||||
loadFolioSeqHash(&m_elmt_unitfolio_max,
|
||||
title,
|
||||
QStringLiteral("unitfolio"),
|
||||
"unitfolio",
|
||||
&nc);
|
||||
project()->addElementAutoNum(title,nc);
|
||||
}
|
||||
@@ -1913,10 +1896,10 @@ void Diagram::loadElmtFolioSeq()
|
||||
|| !m_elmt_tenfolio_max.contains(title)) {
|
||||
//Insert Initial Value
|
||||
if (project()->elementAutoNumCurrentFormula().contains(
|
||||
QStringLiteral("%seqtf_"))) {
|
||||
"%seqtf_")) {
|
||||
insertFolioSeqHash(&m_elmt_tenfolio_max,
|
||||
title,
|
||||
QStringLiteral("tenfolio"),
|
||||
"tenfolio",
|
||||
&nc);
|
||||
project()->addElementAutoNum(title,nc);
|
||||
}
|
||||
@@ -1924,10 +1907,10 @@ void Diagram::loadElmtFolioSeq()
|
||||
else if (m_elmt_tenfolio_max.contains(title)) {
|
||||
//Load Folio Current Value
|
||||
if (project()->elementAutoNumCurrentFormula().contains(
|
||||
QStringLiteral("%seqtf_"))) {
|
||||
"%seqtf_")) {
|
||||
loadFolioSeqHash(&m_elmt_tenfolio_max,
|
||||
title,
|
||||
QStringLiteral("tenfolio"),
|
||||
"tenfolio",
|
||||
&nc);
|
||||
project()->addElementAutoNum(title,nc);
|
||||
}
|
||||
@@ -1938,10 +1921,10 @@ void Diagram::loadElmtFolioSeq()
|
||||
|| !m_elmt_hundredfolio_max.contains(title)) {
|
||||
//Insert Initial Value
|
||||
if (project()->elementAutoNumCurrentFormula().contains(
|
||||
QStringLiteral("%seqhf_"))) {
|
||||
"%seqhf_")) {
|
||||
insertFolioSeqHash(&m_elmt_hundredfolio_max,
|
||||
title,
|
||||
QStringLiteral("hundredfolio"),
|
||||
"hundredfolio",
|
||||
&nc);
|
||||
project()->addElementAutoNum(title,nc);
|
||||
}
|
||||
@@ -1949,10 +1932,10 @@ void Diagram::loadElmtFolioSeq()
|
||||
else if (m_elmt_hundredfolio_max.contains(title)) {
|
||||
//Load Folio Current Value
|
||||
if (project()->elementAutoNumCurrentFormula().contains(
|
||||
QStringLiteral("%seqhf_"))) {
|
||||
"%seqhf_")) {
|
||||
loadFolioSeqHash(&m_elmt_hundredfolio_max,
|
||||
title,
|
||||
QStringLiteral("hundredfolio"),
|
||||
"hundredfolio",
|
||||
&nc);
|
||||
project()->addElementAutoNum(title,nc);
|
||||
}
|
||||
@@ -1975,20 +1958,20 @@ void Diagram::loadCndFolioSeq()
|
||||
if (m_cnd_unitfolio_max.isEmpty()
|
||||
|| !m_cnd_unitfolio_max.contains(title)) {
|
||||
//Insert Initial Value
|
||||
if (formula.contains(QStringLiteral("%sequf_"))) {
|
||||
if (formula.contains("%sequf_")) {
|
||||
insertFolioSeqHash(&m_cnd_unitfolio_max,
|
||||
title,
|
||||
QStringLiteral("unitfolio"),
|
||||
"unitfolio",
|
||||
&nc);
|
||||
project()->addConductorAutoNum(title,nc);
|
||||
}
|
||||
}
|
||||
else if (m_cnd_unitfolio_max.contains(title)) {
|
||||
//Load Folio Current Value
|
||||
if (formula.contains(QStringLiteral("%sequf_"))) {
|
||||
if (formula.contains("%sequf_")) {
|
||||
loadFolioSeqHash(&m_cnd_unitfolio_max,
|
||||
title,
|
||||
QStringLiteral("unitfolio"),
|
||||
"unitfolio",
|
||||
&nc);
|
||||
project()->addConductorAutoNum(title,nc);
|
||||
}
|
||||
@@ -1998,20 +1981,20 @@ void Diagram::loadCndFolioSeq()
|
||||
if (m_cnd_tenfolio_max.isEmpty()
|
||||
|| !m_cnd_tenfolio_max.contains(title)) {
|
||||
//Insert Initial Value
|
||||
if (formula.contains(QStringLiteral("%seqtf_"))) {
|
||||
if (formula.contains("%seqtf_")) {
|
||||
insertFolioSeqHash(&m_cnd_tenfolio_max,
|
||||
title,
|
||||
QStringLiteral("tenfolio"),
|
||||
"tenfolio",
|
||||
&nc);
|
||||
project()->addConductorAutoNum(title,nc);
|
||||
}
|
||||
}
|
||||
else if (m_cnd_tenfolio_max.contains(title)) {
|
||||
//Load Folio Current Value
|
||||
if (formula.contains(QStringLiteral("%seqtf_"))) {
|
||||
if (formula.contains("%seqtf_")) {
|
||||
loadFolioSeqHash(&m_cnd_tenfolio_max,
|
||||
title,
|
||||
QStringLiteral("tenfolio"),
|
||||
"tenfolio",
|
||||
&nc);
|
||||
project()->addConductorAutoNum(title,nc);
|
||||
}
|
||||
@@ -2021,20 +2004,20 @@ void Diagram::loadCndFolioSeq()
|
||||
if (m_cnd_hundredfolio_max.isEmpty()
|
||||
|| !m_cnd_hundredfolio_max.contains(title)) {
|
||||
//Insert Initial Value
|
||||
if (formula.contains(QStringLiteral("%seqhf_"))) {
|
||||
if (formula.contains("%seqhf_")) {
|
||||
insertFolioSeqHash(&m_cnd_hundredfolio_max,
|
||||
title,
|
||||
QStringLiteral("hundredfolio"),
|
||||
"hundredfolio",
|
||||
&nc);
|
||||
project()->addConductorAutoNum(title,nc);
|
||||
}
|
||||
}
|
||||
else if (m_cnd_hundredfolio_max.contains(title)) {
|
||||
//Load Folio Current Value
|
||||
if (formula.contains(QStringLiteral("%seqhf_"))) {
|
||||
if (formula.contains("%seqhf_")) {
|
||||
loadFolioSeqHash(&m_cnd_hundredfolio_max,
|
||||
title,
|
||||
QStringLiteral("hundredfolio"),
|
||||
"hundredfolio",
|
||||
&nc);
|
||||
project()->addConductorAutoNum(title,nc);
|
||||
}
|
||||
@@ -2274,10 +2257,10 @@ DiagramPosition Diagram::convertPosition(const QPointF &pos) {
|
||||
QPointF Diagram::snapToGrid(const QPointF &p)
|
||||
{
|
||||
QSettings settings;
|
||||
int xGrid = settings.value(QStringLiteral("diagrameditor/Xgrid"),
|
||||
Diagram::xGrid).toInt();
|
||||
int yGrid = settings.value(QStringLiteral("diagrameditor/Ygrid"),
|
||||
Diagram::yGrid).toInt();
|
||||
int xGrid = settings.value("diagrameditor/Xgrid",
|
||||
Diagram::xGrid).toInt();
|
||||
int yGrid = settings.value("diagrameditor/Ygrid",
|
||||
Diagram::yGrid).toInt();
|
||||
|
||||
//Return a point rounded to the nearest pixel
|
||||
if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier))
|
||||
@@ -2347,8 +2330,8 @@ QSet<Conductor *> Diagram::selectedConductors() const
|
||||
bool Diagram::clipboardMayContainDiagram()
|
||||
{
|
||||
QString clipboard_text = QApplication::clipboard() -> text().trimmed();
|
||||
bool may_be_diagram = clipboard_text.startsWith(QStringLiteral("<diagram"))
|
||||
&& clipboard_text.endsWith(QStringLiteral("</diagram>"));
|
||||
bool may_be_diagram = clipboard_text.startsWith("<diagram")
|
||||
&& clipboard_text.endsWith("</diagram>");
|
||||
return(may_be_diagram);
|
||||
}
|
||||
|
||||
|
||||
@@ -283,7 +283,6 @@ class Diagram : public QGraphicsScene
|
||||
void findElementRequired(const ElementsLocation &);
|
||||
|
||||
void diagramActivated();
|
||||
void diagramInformationChanged();
|
||||
};
|
||||
Q_DECLARE_METATYPE(Diagram *)
|
||||
|
||||
|
||||
@@ -222,11 +222,6 @@ void DiagramEventAddElement::addElement()
|
||||
element -> setPos(m_element->pos());
|
||||
element -> setRotation(m_element -> rotation());
|
||||
m_diagram -> addItem(element);
|
||||
|
||||
//The element is dropped by the user, the dynamic text field stored in m_converted_text_from_xml_description
|
||||
//can be moved to m_dynamic_text_list, because we are sure fromXml will be not called.
|
||||
element->m_dynamic_text_list.append(element->m_converted_text_from_xml_description.keys());
|
||||
element->m_converted_text_from_xml_description.clear();
|
||||
|
||||
QUndoCommand *undo_object = new QUndoCommand(tr("Ajouter %1").arg(element->name()));
|
||||
new AddGraphicsObjectCommand(element, m_diagram, m_element -> pos(), undo_object);
|
||||
|
||||
+3
-10
@@ -1219,20 +1219,13 @@ QList<QAction *> DiagramView::contextMenuActions() const
|
||||
*/
|
||||
void DiagramView::contextMenuEvent(QContextMenuEvent *e)
|
||||
{
|
||||
if (auto qgi = m_diagram->itemAt(mapToScene(e->pos()), transform()))
|
||||
if (QGraphicsItem *qgi = m_diagram->itemAt(mapToScene(e->pos()), transform()))
|
||||
{
|
||||
if (!qgi->isSelected()) {
|
||||
if (!qgi -> isSelected()) {
|
||||
m_diagram->clearSelection();
|
||||
}
|
||||
|
||||
// At this step qgi can be deleted for exemple if qgi is a QetGraphicsHandlerItem.
|
||||
// When we call clearSelection the parent item of the handler
|
||||
// is deselected and so delete all handlers, in this case,
|
||||
// qgi become a dangling pointer.
|
||||
// we need to call again itemAt.
|
||||
if (auto item_ = m_diagram->itemAt(mapToScene(e->pos()), transform())) {
|
||||
item_->setSelected(true);
|
||||
}
|
||||
qgi->setSelected(true);
|
||||
}
|
||||
|
||||
if (m_diagram->selectedItems().isEmpty())
|
||||
|
||||
@@ -282,13 +282,17 @@ ChangeNamesCommand::~ChangeNamesCommand()
|
||||
/// Annule le changement
|
||||
void ChangeNamesCommand::undo()
|
||||
{
|
||||
m_scene -> setNames(names_before);
|
||||
auto data = m_scene->elementData();
|
||||
data.m_names_list = names_before;
|
||||
m_scene->setElementData(data);
|
||||
}
|
||||
|
||||
/// Refait le changement
|
||||
void ChangeNamesCommand::redo()
|
||||
{
|
||||
m_scene -> setNames(names_after);
|
||||
auto data = m_scene->elementData();
|
||||
data.m_names_list = names_after;
|
||||
m_scene->setElementData(data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -453,13 +457,17 @@ ChangeInformationsCommand::~ChangeInformationsCommand()
|
||||
/// Annule le changement d'autorisation pour les connexions internes
|
||||
void ChangeInformationsCommand::undo()
|
||||
{
|
||||
m_scene -> setInformations(old_informations_);
|
||||
auto data = m_scene->elementData();
|
||||
data.m_drawing_information = old_informations_;
|
||||
m_scene->setElementData(data);
|
||||
}
|
||||
|
||||
/// Refait le changement d'autorisation pour les connexions internes
|
||||
void ChangeInformationsCommand::redo()
|
||||
{
|
||||
m_scene -> setInformations(new_informations_);
|
||||
auto data = m_scene->elementData();
|
||||
data.m_drawing_information = new_informations_;
|
||||
m_scene->setElementData(data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -572,45 +580,32 @@ void ScalePartsCommand::adjustText()
|
||||
setText(QObject::tr("redimensionnement de %1 primitives", "undo caption -- %1 always > 1").arg(scaled_primitives_.count()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@brief ChangePropertiesCommand::ChangePropertiesCommand
|
||||
Change the properties of the drawed element
|
||||
@param scene : scene to belong the property
|
||||
@param type : new type of element.
|
||||
@param info
|
||||
@param elmt_info : new info about type.
|
||||
@param parent : parent undo
|
||||
*/
|
||||
ChangePropertiesCommand::ChangePropertiesCommand(
|
||||
ElementScene *scene,
|
||||
const QString& type,
|
||||
const DiagramContext& info,
|
||||
const DiagramContext& elmt_info,
|
||||
QUndoCommand *parent) :
|
||||
ElementEditionCommand(scene, nullptr, parent)
|
||||
* @brief changeElementDataCommand::changeElementDataCommand
|
||||
* Change the properties of the drawed element
|
||||
* @param scene : scene to belong the property
|
||||
* @param old_data : old data
|
||||
* @param new_data : new data
|
||||
* @param parent : parent undo command
|
||||
*/
|
||||
changeElementDataCommand::changeElementDataCommand(ElementScene *scene,
|
||||
ElementData old_data,
|
||||
ElementData new_data,
|
||||
QUndoCommand *parent) :
|
||||
ElementEditionCommand(scene, nullptr, parent),
|
||||
m_old(old_data),
|
||||
m_new(new_data)
|
||||
{
|
||||
m_type << scene->m_elmt_type << type;
|
||||
m_kind_info << scene->m_elmt_kindInfo << info;
|
||||
m_elmt_info << scene->m_elmt_information << elmt_info;
|
||||
setText(QObject::tr("Modifier les propriétés"));
|
||||
setText(QObject::tr("Modifier les propriétées de l'élément"));
|
||||
}
|
||||
|
||||
ChangePropertiesCommand::~ChangePropertiesCommand()
|
||||
{}
|
||||
|
||||
void ChangePropertiesCommand::undo()
|
||||
{
|
||||
m_scene->m_elmt_type = m_type.first();
|
||||
m_scene->m_elmt_kindInfo = m_kind_info.first();
|
||||
m_scene->setElementInfo(m_elmt_info.first());
|
||||
void changeElementDataCommand::undo() {
|
||||
m_scene->setElementData(m_old);
|
||||
QUndoCommand::undo();
|
||||
}
|
||||
|
||||
void ChangePropertiesCommand::redo()
|
||||
{
|
||||
m_scene->m_elmt_type = m_type.last();
|
||||
m_scene->m_elmt_kindInfo = m_kind_info.last();
|
||||
m_scene->setElementInfo(m_elmt_info.last());
|
||||
void changeElementDataCommand::redo() {
|
||||
m_scene->setElementData(m_new);
|
||||
QUndoCommand::redo();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -262,23 +262,21 @@ class ScalePartsCommand : public ElementEditionCommand {
|
||||
bool first_redo;
|
||||
};
|
||||
|
||||
class ChangePropertiesCommand : public ElementEditionCommand {
|
||||
class changeElementDataCommand : public ElementEditionCommand
|
||||
{
|
||||
public:
|
||||
ChangePropertiesCommand (
|
||||
ElementScene *scene,
|
||||
const QString& type,
|
||||
const DiagramContext& info,
|
||||
const DiagramContext& elmt_info,
|
||||
QUndoCommand *parent=nullptr);
|
||||
~ChangePropertiesCommand () override;
|
||||
changeElementDataCommand(ElementScene *scene,
|
||||
ElementData old_data,
|
||||
ElementData new_data,
|
||||
QUndoCommand *parent = nullptr);
|
||||
~changeElementDataCommand() override {}
|
||||
|
||||
void undo() override;
|
||||
void redo() override;
|
||||
void undo() override;
|
||||
void redo() override;
|
||||
|
||||
private:
|
||||
QList <QString> m_type;
|
||||
QList <DiagramContext> m_kind_info;
|
||||
QList < DiagramContext> m_elmt_info;
|
||||
ElementData m_old,
|
||||
m_new;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "elementitemeditor.h"
|
||||
#include "qetelementeditor.h"
|
||||
#include "ui/qetelementeditor.h"
|
||||
#include "editorcommands.h"
|
||||
|
||||
/**
|
||||
|
||||
+55
-105
@@ -33,7 +33,7 @@
|
||||
#include "graphicspart/partrectangle.h"
|
||||
#include "graphicspart/partterminal.h"
|
||||
#include "graphicspart/parttext.h"
|
||||
#include "qetelementeditor.h"
|
||||
#include "ui/qetelementeditor.h"
|
||||
#include "ui/elementpropertieseditorwidget.h"
|
||||
|
||||
#include <QKeyEvent>
|
||||
@@ -51,7 +51,6 @@
|
||||
*/
|
||||
ElementScene::ElementScene(QETElementEditor *editor, QObject *parent) :
|
||||
QGraphicsScene(parent),
|
||||
m_elmt_type("simple"),
|
||||
m_qgi_manager(this),
|
||||
m_element_editor(editor)
|
||||
{
|
||||
@@ -71,7 +70,25 @@ ElementScene::ElementScene(QETElementEditor *editor, QObject *parent) :
|
||||
connect(&m_undo_stack, SIGNAL(indexChanged(int)),
|
||||
this, SLOT(managePrimitivesGroups()));
|
||||
connect(this, SIGNAL(selectionChanged()),
|
||||
this, SLOT(managePrimitivesGroups()));
|
||||
this, SLOT(managePrimitivesGroups()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ElementScene::elementData
|
||||
* @return the elementdata using by the scene
|
||||
*/
|
||||
ElementData ElementScene::elementData() {
|
||||
return m_element_data;
|
||||
}
|
||||
|
||||
void ElementScene::setElementData(ElementData data)
|
||||
{
|
||||
bool emit_ = m_element_data.m_informations != data.m_informations;
|
||||
|
||||
m_element_data = data;
|
||||
|
||||
if (emit_)
|
||||
emit elementInfoChanged();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -437,7 +454,7 @@ const QDomDocument ElementScene::toXml(bool all_parts)
|
||||
-(qRound(size.y() - (ymargin/2)))));
|
||||
|
||||
root.setAttribute("version", QET::version);
|
||||
root.setAttribute("link_type", m_elmt_type);
|
||||
root.setAttribute("link_type", m_element_data.typeToString(m_element_data.m_type));
|
||||
|
||||
//Uuid used to compare two elements
|
||||
QDomElement uuid = xml_document.createElement("uuid");
|
||||
@@ -445,29 +462,29 @@ const QDomDocument ElementScene::toXml(bool all_parts)
|
||||
root.appendChild(uuid);
|
||||
|
||||
//names of element
|
||||
root.appendChild(m_names_list.toXml(xml_document));
|
||||
root.appendChild(m_element_data.m_names_list.toXml(xml_document));
|
||||
|
||||
if (m_elmt_type == "slave" || m_elmt_type == "master")
|
||||
auto type_ = m_element_data.m_type;
|
||||
if (type_ == ElementData::Slave ||
|
||||
type_ == ElementData::Master ||
|
||||
type_ == ElementData::Terminale)
|
||||
{
|
||||
QDomElement kindInfo = xml_document.createElement("kindInformations");
|
||||
m_elmt_kindInfo.toXml(kindInfo, "kindInformation");
|
||||
root.appendChild(kindInfo);
|
||||
root.appendChild(m_element_data.kindInfoToXml(xml_document));
|
||||
}
|
||||
|
||||
if(
|
||||
m_elmt_type == "simple"
|
||||
|| m_elmt_type == "master"
|
||||
|| m_elmt_type == "terminal")
|
||||
if(type_ == ElementData::Simple ||
|
||||
type_ == ElementData::Master ||
|
||||
type_ == ElementData::Terminale)
|
||||
{
|
||||
QDomElement element_info = xml_document.createElement("elementInformations");
|
||||
m_elmt_information.toXml(element_info, "elementInformation");
|
||||
m_element_data.m_informations.toXml(element_info, "elementInformation");
|
||||
root.appendChild(element_info);
|
||||
}
|
||||
|
||||
//complementary information about the element
|
||||
QDomElement informations_element = xml_document.createElement("informations");
|
||||
root.appendChild(informations_element);
|
||||
informations_element.appendChild(xml_document.createTextNode(informations()));
|
||||
informations_element.appendChild(xml_document.createTextNode(m_element_data.m_drawing_information));
|
||||
|
||||
QDomElement description = xml_document.createElement("description");
|
||||
|
||||
@@ -545,9 +562,16 @@ void ElementScene::fromXml(
|
||||
{
|
||||
bool state = true;
|
||||
|
||||
//Consider the informations of the element
|
||||
if (consider_informations) {
|
||||
state = applyInformations(xml_document);
|
||||
//Consider the informations of the element
|
||||
if (consider_informations)
|
||||
{
|
||||
// Root must be an element definition
|
||||
QDomElement root = xml_document.documentElement();
|
||||
|
||||
if (root.tagName() == "definition" &&
|
||||
root.attribute("type") == "element") {
|
||||
m_element_data.fromXml(root);
|
||||
}
|
||||
}
|
||||
|
||||
if (state)
|
||||
@@ -699,19 +723,6 @@ QETElementEditor* ElementScene::editor() const
|
||||
return m_element_editor;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief ElementScene::setElementInfo
|
||||
@param dc
|
||||
*/
|
||||
void ElementScene::setElementInfo(const DiagramContext& dc)
|
||||
{
|
||||
if(m_elmt_information != dc)
|
||||
{
|
||||
m_elmt_information = dc;
|
||||
emit elementInfoChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@brief ElementScene::slot_select
|
||||
Select the item in content,
|
||||
@@ -833,7 +844,7 @@ void ElementScene::slot_editAuthorInformations()
|
||||
// ajoute un QTextEdit au dialogue
|
||||
QTextEdit *text_field = new QTextEdit();
|
||||
text_field -> setAcceptRichText(false);
|
||||
text_field -> setPlainText(informations());
|
||||
text_field -> setPlainText(m_element_data.m_drawing_information);
|
||||
text_field -> setReadOnly(is_read_only);
|
||||
dialog_layout -> addWidget(text_field);
|
||||
|
||||
@@ -851,10 +862,10 @@ void ElementScene::slot_editAuthorInformations()
|
||||
if (dialog_author.exec() == QDialog::Accepted && !is_read_only)
|
||||
{
|
||||
QString new_infos = text_field -> toPlainText().remove(QChar(13)); // CR-less text
|
||||
if (new_infos != informations())
|
||||
if (new_infos != m_element_data.m_drawing_information)
|
||||
{
|
||||
undoStack().push(new ChangeInformationsCommand(
|
||||
this, informations(), new_infos));
|
||||
this, m_element_data.m_drawing_information, new_infos));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -865,20 +876,15 @@ void ElementScene::slot_editAuthorInformations()
|
||||
*/
|
||||
void ElementScene::slot_editProperties()
|
||||
{
|
||||
QString type = m_elmt_type;
|
||||
DiagramContext kind_info = m_elmt_kindInfo;
|
||||
DiagramContext elmt_info = m_elmt_information;
|
||||
|
||||
ElementPropertiesEditorWidget epew(type, kind_info, elmt_info);
|
||||
ElementPropertiesEditorWidget epew(m_element_data);
|
||||
epew.exec();
|
||||
|
||||
if (type != m_elmt_type ||
|
||||
kind_info != m_elmt_kindInfo ||
|
||||
elmt_info != m_elmt_information)
|
||||
undoStack().push(new ChangePropertiesCommand(this,
|
||||
type,
|
||||
kind_info,
|
||||
elmt_info));
|
||||
if (m_element_data != epew.editedData())
|
||||
{
|
||||
undoStack().push(new changeElementDataCommand(this,
|
||||
m_element_data,
|
||||
epew.editedData()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -898,15 +904,15 @@ void ElementScene::slot_editNames()
|
||||
dialog_.setInformationText(tr("Vous pouvez spécifier le nom de l'élément dans plusieurs langues."));
|
||||
|
||||
NameListWidget *nlw_ = dialog_.namelistWidget();
|
||||
nlw_->setNames(m_names_list);
|
||||
nlw_->setNames(m_element_data.m_names_list);
|
||||
nlw_->setReadOnly(is_read_only);
|
||||
|
||||
if (dialog_.exec() == QDialog::Accepted && !is_read_only && !nlw_->isEmpty())
|
||||
{
|
||||
NamesList new_names = nlw_->names();
|
||||
if (new_names != m_names_list) {
|
||||
if (new_names != m_element_data. m_names_list) {
|
||||
undoStack().push(new ChangeNamesCommand(this,
|
||||
m_names_list,
|
||||
m_element_data.m_names_list,
|
||||
new_names));
|
||||
}
|
||||
}
|
||||
@@ -1087,62 +1093,6 @@ QRectF ElementScene::elementContentBoundingRect(
|
||||
return(bounding_rect);
|
||||
}
|
||||
|
||||
/**
|
||||
@brief ElementScene::applyInformations
|
||||
Applies the information (dimensions, hostpot, orientations,
|
||||
internal connections, names and additional information)
|
||||
contained in an XML document.
|
||||
\~French Applique les informations (dimensions, hostpot, orientations,
|
||||
connexions internes, noms et informations complementaires)
|
||||
contenu dans un document XML.
|
||||
\~ @param xml_document : Document XML a analyser
|
||||
\~ @return
|
||||
true if reading and applying the information went well, false otherwise.
|
||||
\~French true si la lecture et l'application
|
||||
des informations s'est bien passee, false sinon.
|
||||
*/
|
||||
bool ElementScene::applyInformations(const QDomDocument &xml_document)
|
||||
{
|
||||
// Root must be an element definition
|
||||
QDomElement root = xml_document.documentElement();
|
||||
|
||||
if (
|
||||
root.tagName() != "definition"
|
||||
||
|
||||
root.attribute("type") != "element")
|
||||
return(false);
|
||||
|
||||
//Extract info about element type
|
||||
m_elmt_type = root.attribute("link_type", "simple");
|
||||
m_elmt_kindInfo.fromXml(
|
||||
root.firstChildElement("kindInformations"),
|
||||
"kindInformation");
|
||||
//Extract info of element
|
||||
m_elmt_information.fromXml(
|
||||
root.firstChildElement("elementInformations"),
|
||||
"elementInformation");
|
||||
|
||||
//Extract names of xml definition
|
||||
m_names_list.fromXml(root);
|
||||
|
||||
//extract additional informations
|
||||
setInformations(QString());
|
||||
for (QDomNode node = root.firstChild() ;
|
||||
!node.isNull() ;
|
||||
node = node.nextSibling())
|
||||
{
|
||||
QDomElement elmt = node.toElement();
|
||||
if (elmt.isNull()) continue;
|
||||
if (elmt.tagName() == "informations")
|
||||
{
|
||||
setInformations(elmt.text());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
/**
|
||||
@brief ElementScene::loadContent
|
||||
Create and load the content describe in the xml document.
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "../diagramcontext.h"
|
||||
#include "../qgimanager.h"
|
||||
#include "elementcontent.h"
|
||||
#include "../properties/elementdata.h"
|
||||
|
||||
#include <QtWidgets>
|
||||
#include <QtXml>
|
||||
@@ -65,11 +66,7 @@ class ElementScene : public QGraphicsScene
|
||||
|
||||
// attributes
|
||||
private:
|
||||
NamesList m_names_list; /// List of localized names
|
||||
QString m_informations; /// Extra informations
|
||||
QString m_elmt_type; /// element type
|
||||
DiagramContext m_elmt_kindInfo,
|
||||
m_elmt_information; /// element kind info
|
||||
ElementData m_element_data; ///ElementData. Actualy in transition with old data storage
|
||||
QGIManager m_qgi_manager;
|
||||
QUndoStack m_undo_stack;
|
||||
|
||||
@@ -90,21 +87,20 @@ class ElementScene : public QGraphicsScene
|
||||
|
||||
// methods
|
||||
public:
|
||||
ElementData elementData();
|
||||
void setElementData(ElementData data);
|
||||
|
||||
void setEventInterface (ESEventInterface *event_interface);
|
||||
void clearEventInterface();
|
||||
|
||||
void setBehavior (ElementScene::Behavior);
|
||||
ElementScene::Behavior behavior() const;
|
||||
|
||||
QPointF snapToGrid(QPointF point);
|
||||
void setNames(const NamesList &);
|
||||
NamesList names() const;
|
||||
QString informations() const;
|
||||
void setInformations(const QString &);
|
||||
QString elementType () const {return m_elmt_type;}
|
||||
DiagramContext elementKindInfo () const {return m_elmt_kindInfo;}
|
||||
DiagramContext elementInformation() const {return m_elmt_information;}
|
||||
virtual int xGrid() const;
|
||||
virtual int yGrid() const;
|
||||
virtual void setGrid(int, int);
|
||||
|
||||
virtual const QDomDocument toXml(bool = true);
|
||||
virtual QRectF boundingRectFromXml(const QDomDocument &);
|
||||
virtual void fromXml(const QDomDocument &,
|
||||
@@ -128,7 +124,6 @@ class ElementScene : public QGraphicsScene
|
||||
void cut();
|
||||
void copy();
|
||||
QETElementEditor* editor() const;
|
||||
void setElementInfo(const DiagramContext& dc);
|
||||
|
||||
protected:
|
||||
void mouseMoveEvent (QGraphicsSceneMouseEvent *) override;
|
||||
@@ -137,12 +132,10 @@ class ElementScene : public QGraphicsScene
|
||||
void mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event) override;
|
||||
void keyPressEvent (QKeyEvent *event) override;
|
||||
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
|
||||
|
||||
void drawForeground(QPainter *, const QRectF &) override;
|
||||
|
||||
private:
|
||||
QRectF elementContentBoundingRect(const ElementContent &) const;
|
||||
bool applyInformations(const QDomDocument &);
|
||||
ElementContent loadContent(const QDomDocument &);
|
||||
ElementContent addContent(const ElementContent &);
|
||||
ElementContent addContentAtPos(const ElementContent &, const QPointF &);
|
||||
@@ -180,39 +173,4 @@ class ElementScene : public QGraphicsScene
|
||||
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(ElementScene::ItemOptions)
|
||||
|
||||
|
||||
/**
|
||||
@brief ElementScene::setNames
|
||||
@param nameslist New set of naes for the currently edited element
|
||||
*/
|
||||
inline void ElementScene::setNames(const NamesList &nameslist) {
|
||||
m_names_list = nameslist;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief ElementScene::names
|
||||
@return the list of names of the currently edited element
|
||||
*/
|
||||
inline NamesList ElementScene::names() const
|
||||
{
|
||||
return(m_names_list);
|
||||
}
|
||||
|
||||
/**
|
||||
@brief ElementScene::informations
|
||||
@return extra informations of the currently edited element
|
||||
*/
|
||||
inline QString ElementScene::informations() const
|
||||
{
|
||||
return(m_informations);
|
||||
}
|
||||
|
||||
/**
|
||||
@brief ElementScene::setInformations
|
||||
@param infos new extra information for the currently edited element
|
||||
*/
|
||||
inline void ElementScene::setInformations(const QString &infos) {
|
||||
m_informations = infos;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
#include "../qetapp.h"
|
||||
#include "UndoCommand/pastepartscommand.h"
|
||||
#include "qetelementeditor.h"
|
||||
#include "ui/qetelementeditor.h"
|
||||
/**
|
||||
Constructeur
|
||||
@param scene ElementScene visualisee par cette ElementView
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include "../editorcommands.h"
|
||||
#include "../elementscene.h"
|
||||
#include "../graphicspart/partline.h"
|
||||
#include "../qetelementeditor.h"
|
||||
#include "../ui/qetelementeditor.h"
|
||||
|
||||
#include <QGraphicsSceneMouseEvent>
|
||||
#include <QObject>
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
#include "eseventinterface.h"
|
||||
|
||||
#include "../elementscene.h"
|
||||
#include "../qetelementeditor.h"
|
||||
#include "../ui/qetelementeditor.h"
|
||||
#include "../elementview.h"
|
||||
|
||||
#include <QGraphicsSceneMouseEvent>
|
||||
|
||||
@@ -40,7 +41,7 @@ ESEventInterface::ESEventInterface(ElementScene *scene) :
|
||||
void ESEventInterface::init()
|
||||
{
|
||||
m_scene->setBehavior(ElementScene::Behavior::AddPart);
|
||||
m_editor->slot_setNoDragToView();
|
||||
m_editor->elementView()->setDragMode(QGraphicsView::NoDrag);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -53,31 +54,31 @@ ESEventInterface::~ESEventInterface()
|
||||
delete m_help_verti;
|
||||
|
||||
m_scene->setBehavior(ElementScene::Behavior::Normal);
|
||||
m_editor->slot_setRubberBandToView();
|
||||
m_editor->elementView()->setDragMode(QGraphicsView::RubberBandDrag);
|
||||
}
|
||||
|
||||
bool ESEventInterface::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) {
|
||||
Q_UNUSED (event);
|
||||
Q_UNUSED (event)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ESEventInterface::mousePressEvent(QGraphicsSceneMouseEvent *event) {
|
||||
Q_UNUSED (event);
|
||||
Q_UNUSED (event)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ESEventInterface::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
|
||||
Q_UNUSED (event);
|
||||
Q_UNUSED (event)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ESEventInterface::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
|
||||
Q_UNUSED (event);
|
||||
Q_UNUSED (event)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ESEventInterface::wheelEvent(QGraphicsSceneWheelEvent *event) {
|
||||
Q_UNUSED (event);
|
||||
Q_UNUSED (event)
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -97,7 +98,7 @@ bool ESEventInterface::keyPressEvent(QKeyEvent *event) {
|
||||
}
|
||||
|
||||
bool ESEventInterface::KeyReleaseEvent(QKeyEvent *event) {
|
||||
Q_UNUSED (event);
|
||||
Q_UNUSED (event)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1264,24 +1264,6 @@ void CustomElementGraphicPart::drawShadowShape(QPainter *painter)
|
||||
painter -> restore ();
|
||||
}
|
||||
|
||||
/**
|
||||
@brief CustomElementGraphicPart::itemChange
|
||||
Reimplemented from QGraphicsObject.
|
||||
If the item position change call updateCurrentPartEditor()
|
||||
the change is always send to QGraphicsObject
|
||||
@param change
|
||||
@param value
|
||||
@return the returned value of QGraphicsObject::itemChange
|
||||
*/
|
||||
QVariant CustomElementGraphicPart::itemChange(GraphicsItemChange change, const QVariant &value)
|
||||
{
|
||||
if (scene())
|
||||
if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemPositionHasChanged)
|
||||
updateCurrentPartEditor();
|
||||
|
||||
return(QGraphicsObject::itemChange(change, value));
|
||||
}
|
||||
|
||||
/**
|
||||
@brief CustomElementGraphicPart::hoverEnterEvent
|
||||
Reimplemented from QGraphicsObject.
|
||||
@@ -1308,29 +1290,14 @@ void CustomElementGraphicPart::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
|
||||
|
||||
void CustomElementGraphicPart::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
if(event->button() == Qt::LeftButton) {
|
||||
if(event->button() == Qt::LeftButton)
|
||||
m_origin_pos = this->pos();
|
||||
m_first_move = true;
|
||||
}
|
||||
|
||||
QGraphicsObject::mousePressEvent(event);
|
||||
}
|
||||
|
||||
void CustomElementGraphicPart::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
//m_first_move is used to avoid an unwanted behavior
|
||||
//when the properties dock widget is displayed :
|
||||
//1 there is no selection
|
||||
//2 the dock widget width is set to minimum
|
||||
//3 select a part, the dock widget gain new widgets used to edit
|
||||
//the current selected part and the width of the dock grow
|
||||
//so the width of the QGraphicsView is reduced and cause a mouse move event.
|
||||
//When this case occur the part is moved but they should not. This bool fix it.
|
||||
if (Q_UNLIKELY(m_first_move)) {
|
||||
m_first_move = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if((event->buttons() & Qt::LeftButton) && (flags() & QGraphicsItem::ItemIsMovable))
|
||||
{
|
||||
QPointF pos = event->scenePos() + (m_origin_pos - event->buttonDownScenePos(Qt::LeftButton));
|
||||
|
||||
@@ -309,8 +309,6 @@ class CustomElementGraphicPart : public QGraphicsObject, public CustomElementPar
|
||||
void applyStylesToQPainter(QPainter &) const;
|
||||
void drawShadowShape (QPainter *painter);
|
||||
|
||||
QVariant itemChange(GraphicsItemChange change,
|
||||
const QVariant &value) override;
|
||||
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
|
||||
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
|
||||
|
||||
@@ -328,7 +326,6 @@ class CustomElementGraphicPart : public QGraphicsObject, public CustomElementPar
|
||||
Color _color;
|
||||
bool _antialiased;
|
||||
QPointF m_origin_pos;
|
||||
bool m_first_move;
|
||||
};
|
||||
|
||||
typedef CustomElementGraphicPart CEGP;
|
||||
|
||||
@@ -17,7 +17,8 @@
|
||||
*/
|
||||
#include "customelementpart.h"
|
||||
|
||||
#include "../qetelementeditor.h"
|
||||
#include "../ui/qetelementeditor.h"
|
||||
#include "../elementscene.h"
|
||||
|
||||
/// @return le QETElementEditor auquel cet editeur appartient
|
||||
QETElementEditor *CustomElementPart::elementEditor() const
|
||||
|
||||
@@ -318,7 +318,7 @@ void PartDynamicTextField::setText(const QString &text) {
|
||||
void PartDynamicTextField::setInfoName(const QString &info_name) {
|
||||
m_info_name = info_name;
|
||||
if(m_text_from == DynamicElementTextItem::ElementInfo && elementScene())
|
||||
setPlainText(elementScene() -> elementInformation().value(m_info_name).toString());
|
||||
setPlainText(elementScene()->elementData().m_informations.value(m_info_name).toString());
|
||||
emit infoNameChanged(m_info_name);
|
||||
}
|
||||
|
||||
@@ -338,7 +338,7 @@ QString PartDynamicTextField::infoName() const{
|
||||
void PartDynamicTextField::setCompositeText(const QString &text) {
|
||||
m_composite_text = text;
|
||||
if(m_text_from == DynamicElementTextItem::CompositeText && elementScene())
|
||||
setPlainText(autonum::AssignVariables::replaceVariable(m_composite_text, elementScene() -> elementInformation()));
|
||||
setPlainText(autonum::AssignVariables::replaceVariable(m_composite_text, elementScene()->elementData().m_informations));
|
||||
emit compositeTextChanged(m_composite_text);
|
||||
}
|
||||
|
||||
@@ -551,10 +551,10 @@ void PartDynamicTextField::elementInfoChanged()
|
||||
return;
|
||||
|
||||
if(m_text_from == DynamicElementTextItem::ElementInfo)
|
||||
setPlainText(elementScene() -> elementInformation().value(m_info_name).toString());
|
||||
setPlainText(elementScene()->elementData().m_informations.value(m_info_name).toString());
|
||||
else if (m_text_from == DynamicElementTextItem::CompositeText && elementScene())
|
||||
setPlainText(autonum::AssignVariables::replaceVariable(
|
||||
m_composite_text, elementScene() -> elementInformation()));
|
||||
m_composite_text, elementScene()->elementData().m_informations));
|
||||
}
|
||||
|
||||
void PartDynamicTextField::prepareAlignment()
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include "../../QetGraphicsItemModeler/qetgraphicshandlerutility.h"
|
||||
#include "../../qeticons.h"
|
||||
#include "../elementscene.h"
|
||||
#include "../qetelementeditor.h"
|
||||
#include "../ui/qetelementeditor.h"
|
||||
|
||||
/**
|
||||
@brief PartPolygon::PartPolygon
|
||||
|
||||
@@ -72,7 +72,7 @@ void PartTerminal::paint(
|
||||
const QStyleOptionGraphicsItem *options,
|
||||
QWidget *widget)
|
||||
{
|
||||
Q_UNUSED(widget);
|
||||
Q_UNUSED(widget)
|
||||
painter -> save();
|
||||
|
||||
// annulation des renderhints
|
||||
@@ -98,7 +98,7 @@ void PartTerminal::paint(
|
||||
// dessin de la borne en rouge
|
||||
t.setColor(isSelected() ? Terminal::neutralColor : Qt::red);
|
||||
painter -> setPen(t);
|
||||
painter -> drawLine(QPointF(0.0, 0.0), d -> second_point);
|
||||
painter -> drawLine(QPointF(0.0, 0.0), d -> m_second_point);
|
||||
|
||||
// dessin du point d'amarrage au conducteur en bleu
|
||||
t.setColor(isSelected() ? Qt::red : Terminal::neutralColor);
|
||||
@@ -118,7 +118,7 @@ void PartTerminal::paint(
|
||||
QPainterPath PartTerminal::shape() const
|
||||
{
|
||||
QPainterPath shape;
|
||||
shape.lineTo(d -> second_point);
|
||||
shape.lineTo(d -> m_second_point);
|
||||
|
||||
QPainterPathStroker pps;
|
||||
pps.setWidth(1);
|
||||
@@ -132,7 +132,7 @@ QPainterPath PartTerminal::shape() const
|
||||
*/
|
||||
QRectF PartTerminal::boundingRect() const
|
||||
{
|
||||
QRectF br(QPointF(0, 0), d -> second_point);
|
||||
QRectF br(QPointF(0, 0), d -> m_second_point);
|
||||
br = br.normalized();
|
||||
|
||||
qreal adjust = (SHADOWS_HEIGHT + 1) / 2;
|
||||
@@ -161,6 +161,20 @@ void PartTerminal::setName(QString& name) {
|
||||
emit nameChanged();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief PartTerminal::setTerminalType
|
||||
* Set the type of terminal to 'type'
|
||||
* @param type
|
||||
*/
|
||||
void PartTerminal::setTerminalType(TerminalData::Type type)
|
||||
{
|
||||
if (d->m_type == type) {
|
||||
return;
|
||||
}
|
||||
d->m_type = type;
|
||||
emit terminalTypeChanged();
|
||||
}
|
||||
|
||||
void PartTerminal::setNewUuid()
|
||||
{
|
||||
d -> m_uuid = QUuid::createUuid();
|
||||
@@ -174,10 +188,10 @@ void PartTerminal::updateSecondPoint()
|
||||
{
|
||||
qreal ts = 4.0; // terminal size
|
||||
switch(d -> m_orientation) {
|
||||
case Qet::North: d -> second_point = QPointF(0.0, ts); break;
|
||||
case Qet::East : d -> second_point = QPointF(-ts, 0.0); break;
|
||||
case Qet::South: d -> second_point = QPointF(0.0, -ts); break;
|
||||
case Qet::West : d -> second_point = QPointF(ts, 0.0); break;
|
||||
case Qet::North: d -> m_second_point = QPointF(0.0, ts); break;
|
||||
case Qet::East : d -> m_second_point = QPointF(-ts, 0.0); break;
|
||||
case Qet::South: d -> m_second_point = QPointF(0.0, -ts); break;
|
||||
case Qet::West : d -> m_second_point = QPointF(ts, 0.0); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,10 +27,13 @@
|
||||
This class represents a terminal which may be used to compose the drawing of
|
||||
an electrical element within the element editor.
|
||||
*/
|
||||
class PartTerminal : public CustomElementGraphicPart {
|
||||
class PartTerminal : public CustomElementGraphicPart
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(Qet::Orientation orientation READ orientation WRITE setOrientation)
|
||||
Q_PROPERTY(QString name READ name WRITE setName)
|
||||
Q_PROPERTY(TerminalData::Type terminal_type READ terminalType WRITE setTerminalType)
|
||||
|
||||
public:
|
||||
// constructors, destructor
|
||||
@@ -42,6 +45,7 @@ class PartTerminal : public CustomElementGraphicPart {
|
||||
signals:
|
||||
void orientationChanged();
|
||||
void nameChanged();
|
||||
void terminalTypeChanged();
|
||||
|
||||
// methods
|
||||
public:
|
||||
@@ -51,7 +55,6 @@ class PartTerminal : public CustomElementGraphicPart {
|
||||
@return the QGraphicsItem type
|
||||
*/
|
||||
int type() const override { return Type; }
|
||||
QString name() const override { return d -> m_name; }
|
||||
QString xmlName() const override { return(QString("terminal")); }
|
||||
void fromXml(const QDomElement &) override;
|
||||
const QDomElement toXml(QDomDocument &) const override;
|
||||
@@ -71,7 +74,12 @@ class PartTerminal : public CustomElementGraphicPart {
|
||||
Qet::Orientation orientation() const {return d -> m_orientation;}
|
||||
void setOrientation(Qet::Orientation ori);
|
||||
|
||||
QString name() const override { return d -> m_name; }
|
||||
void setName(QString& name);
|
||||
|
||||
TerminalData::Type terminalType() const {return d->m_type;}
|
||||
void setTerminalType(TerminalData::Type type);
|
||||
|
||||
void setNewUuid();
|
||||
|
||||
private:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,189 +0,0 @@
|
||||
/*
|
||||
Copyright 2006-2021 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 CUSTOM_ELEMENT_EDITOR_H
|
||||
#define CUSTOM_ELEMENT_EDITOR_H
|
||||
#include "../ElementsCollection/elementslocation.h"
|
||||
#include "../qet.h"
|
||||
#include "../qetmainwindow.h"
|
||||
#include "elementscene.h"
|
||||
|
||||
class ElementItemEditor;
|
||||
class ElementView;
|
||||
|
||||
/**
|
||||
This class represents an element editor, allowing users to draw, change and
|
||||
configure a particular electrical element.
|
||||
*/
|
||||
class QETElementEditor : public QETMainWindow {
|
||||
Q_OBJECT
|
||||
|
||||
// constructor, destructor
|
||||
public:
|
||||
QETElementEditor(QWidget * = nullptr);
|
||||
~QETElementEditor() override;
|
||||
private:
|
||||
QETElementEditor(const QETElementEditor &);
|
||||
void setupActions();
|
||||
void setupMenus();
|
||||
void setupInterface();
|
||||
|
||||
// attributes
|
||||
private:
|
||||
/// whether the editor is "read-only"
|
||||
bool read_only;
|
||||
/// menus
|
||||
QMenu *file_menu, *edit_menu, *paste_from_menu, *display_menu, *tools_menu;
|
||||
/// view widget for the editing scene
|
||||
ElementView *m_view;
|
||||
/// editing scene
|
||||
ElementScene *m_elmt_scene;
|
||||
/// container for widgets dedicated to primitive edition
|
||||
QDockWidget *m_tools_dock;
|
||||
/// Stack of widgets for tools_dock
|
||||
QStackedWidget *m_tools_dock_stack;
|
||||
/// label displayed when several primitives are selected
|
||||
QLabel *m_default_informations;
|
||||
/// Hash associating primitive names with their matching edition widget
|
||||
QHash<QString, ElementItemEditor *> m_editors;
|
||||
/// container for the undo list
|
||||
QDockWidget *m_undo_dock;
|
||||
/// Container for the list of existing primitives
|
||||
QDockWidget *m_parts_dock;
|
||||
/// List of primitives
|
||||
QListWidget *m_parts_list;
|
||||
/// actions for the "file" menu
|
||||
QAction *new_element, *open, *open_dxf, *open_file, *save, *save_as, *save_as_file, *reload, *quit;
|
||||
/// actions for the "edit" menu
|
||||
QAction *selectall, *deselectall, *inv_select;
|
||||
QAction *cut, *copy, *paste, *paste_in_area, *paste_from_file, *paste_from_elmt;
|
||||
QAction *undo, *redo;
|
||||
QAction *edit_delete, *edit_size_hs, *edit_names, *edit_author, *m_edit_properties;
|
||||
/// toolbars
|
||||
QToolBar *parts_toolbar, *main_toolbar, *view_toolbar, *depth_toolbar, *element_toolbar;
|
||||
/// Action group
|
||||
QActionGroup *parts, *m_zoom_ag, *m_depth_action_group;
|
||||
/// minimum window title
|
||||
QString min_title;
|
||||
/// filename of the currently edited element
|
||||
QString filename_;
|
||||
/// location of the currently edited element
|
||||
ElementsLocation location_;
|
||||
/// whether the currently edited element comes from a file or a location
|
||||
bool opened_from_file;
|
||||
|
||||
// methods
|
||||
public:
|
||||
void setNames(const NamesList &);
|
||||
void setLocation(const ElementsLocation &);
|
||||
ElementsLocation location() const;
|
||||
void setFileName(const QString &);
|
||||
QString fileName() const;
|
||||
void setReadOnly(bool);
|
||||
bool isReadOnly() const;
|
||||
void fromFile(const QString &);
|
||||
void fromLocation(const ElementsLocation &);
|
||||
bool toFile(const QString &);
|
||||
bool toLocation(const ElementsLocation &location);
|
||||
bool isEditing(const ElementsLocation &);
|
||||
bool isEditing(const QString &);
|
||||
ElementScene *elementScene() const;
|
||||
void readSettings();
|
||||
void writeSettings();
|
||||
static QPointF pasteOffset();
|
||||
static QString getOpenElementFileName(QWidget * = nullptr, const QString & = QString());
|
||||
void contextMenu(QPoint p, QList<QAction *> actions = QList<QAction*>());
|
||||
|
||||
signals:
|
||||
void saveToLocation(ElementsLocation loc);
|
||||
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *) override;
|
||||
void firstActivation(QEvent *) override;
|
||||
|
||||
private:
|
||||
bool canClose();
|
||||
QWidget *clearToolsDock();
|
||||
void copyAndPasteXml(const QDomDocument &);
|
||||
|
||||
public slots:
|
||||
void addLine();
|
||||
void addRect();
|
||||
void addEllipse();
|
||||
void addPolygon();
|
||||
void addArc();
|
||||
void addText();
|
||||
void addTerminal();
|
||||
void addDynamicTextField();
|
||||
void UncheckAddPrimitive();
|
||||
|
||||
void slot_new();
|
||||
void slot_open();
|
||||
void slot_openDxf();
|
||||
void slot_openFile();
|
||||
void openRecentFile(const QString &);
|
||||
void openElement(const QString &);
|
||||
void slot_reload();
|
||||
bool slot_save();
|
||||
bool slot_saveAs();
|
||||
bool slot_saveAsFile();
|
||||
void slot_setRubberBandToView();
|
||||
void slot_setNoDragToView();
|
||||
void slot_updateInformations();
|
||||
void slot_updateMenus();
|
||||
void slot_updateTitle();
|
||||
void slot_createPartsList();
|
||||
void slot_updatePartsList();
|
||||
void slot_updateSelectionFromPartsList();
|
||||
bool checkElement();
|
||||
void pasteFromFile();
|
||||
void pasteFromElement();
|
||||
void updateCurrentPartEditor();
|
||||
};
|
||||
|
||||
/**
|
||||
@param nameslist the new list of names for the currently edited element
|
||||
*/
|
||||
inline void QETElementEditor::setNames(const NamesList &nameslist) {
|
||||
m_elmt_scene -> setNames(nameslist);
|
||||
}
|
||||
|
||||
/**
|
||||
@return the location of the currently edited element
|
||||
*/
|
||||
inline ElementsLocation QETElementEditor::location() const
|
||||
{
|
||||
return(location_);
|
||||
}
|
||||
|
||||
/**
|
||||
@return the filename of the currently edited element
|
||||
*/
|
||||
inline QString QETElementEditor::fileName() const
|
||||
{
|
||||
return(filename_);
|
||||
}
|
||||
|
||||
/**
|
||||
@return the editing scene
|
||||
*/
|
||||
inline ElementScene *QETElementEditor::elementScene() const
|
||||
{
|
||||
return(m_elmt_scene);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -389,12 +389,12 @@ StyleEditor::StyleEditor(QETElementEditor *editor, CustomElementGraphicPart *p,
|
||||
auto grid_layout = new QGridLayout(this);
|
||||
grid_layout->addWidget(new QLabel(tr("Contour :")), 0,0, Qt::AlignRight);
|
||||
grid_layout->addWidget(outline_color, 0, 1);
|
||||
grid_layout->addWidget(new QLabel(tr("Remplissage :")), 1, 0, Qt::AlignRight);
|
||||
grid_layout->addWidget(filling_color, 1, 1);
|
||||
grid_layout->addWidget(new QLabel(tr("Style :")), 2, 0, Qt::AlignRight);
|
||||
grid_layout->addWidget(line_style, 2, 1);
|
||||
grid_layout->addWidget(new QLabel(tr("Épaisseur :")), 3, 0, Qt::AlignRight);
|
||||
grid_layout->addWidget(size_weight, 3 ,1);
|
||||
grid_layout->addWidget(new QLabel(tr("Remplissage :")), 0, 2, Qt::AlignRight);
|
||||
grid_layout->addWidget(filling_color, 0, 3);
|
||||
grid_layout->addWidget(new QLabel(tr("Style :")), 1, 0, Qt::AlignRight);
|
||||
grid_layout->addWidget(line_style, 1, 1);
|
||||
grid_layout->addWidget(new QLabel(tr("Épaisseur :")), 1, 2, Qt::AlignRight);
|
||||
grid_layout->addWidget(size_weight, 1 ,3);
|
||||
main_layout->addItem(grid_layout);
|
||||
|
||||
main_layout -> addWidget(antialiasing);
|
||||
|
||||
@@ -1,322 +0,0 @@
|
||||
/*
|
||||
Copyright 2006-2021 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 "terminaleditor.h"
|
||||
|
||||
#include "../QPropertyUndoCommand/qpropertyundocommand.h"
|
||||
#include "../editor/graphicspart/partterminal.h"
|
||||
#include "../qeticons.h"
|
||||
|
||||
#include <QComboBox>
|
||||
#include <QDoubleSpinBox>
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
/**
|
||||
@brief TerminalEditor::TerminalEditor
|
||||
@param editor
|
||||
@param parent
|
||||
*/
|
||||
TerminalEditor::TerminalEditor(QETElementEditor* editor, QWidget* parent):
|
||||
ElementItemEditor(editor, parent) {
|
||||
m_part = nullptr;
|
||||
m_terminals.clear();
|
||||
init();
|
||||
}
|
||||
|
||||
/**
|
||||
@brief TerminalEditor::TerminalEditor
|
||||
Constructeur
|
||||
@param editor :
|
||||
L'editeur d'element concerne
|
||||
@param terms :
|
||||
La borne a editer
|
||||
@param parent :
|
||||
QWidget parent de ce widget
|
||||
*/
|
||||
TerminalEditor::TerminalEditor(
|
||||
QETElementEditor *editor,
|
||||
QList<PartTerminal *> &terms,
|
||||
QWidget *parent) :
|
||||
ElementItemEditor(editor, parent),
|
||||
m_terminals(terms),
|
||||
m_part(terms.first()) {
|
||||
init();
|
||||
}
|
||||
|
||||
/**
|
||||
@brief TerminalEditor::init
|
||||
*/
|
||||
void TerminalEditor::init()
|
||||
{
|
||||
qle_x = new QDoubleSpinBox();
|
||||
qle_y = new QDoubleSpinBox();
|
||||
name = new QLineEdit();
|
||||
|
||||
qle_x -> setRange(-5000, 5000);
|
||||
qle_y -> setRange(-5000, 5000);
|
||||
|
||||
orientation = new QComboBox();
|
||||
orientation -> addItem(QET::Icons::North, tr("Nord"), Qet::North);
|
||||
orientation -> addItem(QET::Icons::East, tr("Est"), Qet::East);
|
||||
orientation -> addItem(QET::Icons::South, tr("Sud"), Qet::South);
|
||||
orientation -> addItem(QET::Icons::West, tr("Ouest"), Qet::West);
|
||||
|
||||
QVBoxLayout *main_layout = new QVBoxLayout();
|
||||
main_layout -> addWidget(new QLabel(tr("Position : ")));
|
||||
|
||||
QHBoxLayout *position = new QHBoxLayout();
|
||||
position -> addWidget(new QLabel(tr("x : ")));
|
||||
position -> addWidget(qle_x );
|
||||
position -> addWidget(new QLabel(tr("y : ")));
|
||||
position -> addWidget(qle_y );
|
||||
main_layout -> addLayout(position);
|
||||
|
||||
QHBoxLayout *ori = new QHBoxLayout();
|
||||
ori -> addWidget(new QLabel(tr("Orientation : ")));
|
||||
ori -> addWidget(orientation );
|
||||
main_layout -> addLayout(ori);
|
||||
|
||||
QHBoxLayout *lay_name = new QHBoxLayout();
|
||||
lay_name -> addWidget(new QLabel(tr("Name : ")));
|
||||
lay_name -> addWidget(name);
|
||||
main_layout -> addLayout(lay_name);
|
||||
|
||||
main_layout -> addStretch();
|
||||
setLayout(main_layout);
|
||||
|
||||
activeConnections(true);
|
||||
updateForm();
|
||||
}
|
||||
|
||||
/**
|
||||
@brief TerminalEditor::~TerminalEditor
|
||||
Destructeur
|
||||
*/
|
||||
TerminalEditor::~TerminalEditor()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
Permet de specifier a cet editeur quelle primitive il doit editer. A noter
|
||||
qu'un editeur peut accepter ou refuser d'editer une primitive.
|
||||
L'editeur de borne acceptera d'editer la primitive new_part s'il s'agit d'un
|
||||
objet de la classe PartTerminal.
|
||||
@param new_part Nouvelle primitive a editer
|
||||
@return true si l'editeur a accepter d'editer la primitive, false sinon
|
||||
*/
|
||||
bool TerminalEditor::setPart(CustomElementPart* new_part) {
|
||||
m_terminals.clear();
|
||||
if (!new_part) {
|
||||
if (m_part) {
|
||||
disconnect(m_part, &PartTerminal::orientationChanged, this, &TerminalEditor::updateForm);
|
||||
}
|
||||
m_part = nullptr;
|
||||
return(true);
|
||||
}
|
||||
if (PartTerminal *part_terminal = static_cast<PartTerminal *>(new_part)) {
|
||||
if(m_part == part_terminal) return true;
|
||||
if (m_part) {
|
||||
disconnect(m_part, &PartTerminal::orientationChanged, this, &TerminalEditor::updateForm);
|
||||
}
|
||||
m_part = part_terminal;
|
||||
updateForm();
|
||||
connect(m_part, &PartTerminal::orientationChanged, this, &TerminalEditor::updateForm);
|
||||
return(true);
|
||||
}
|
||||
return(false);
|
||||
}
|
||||
|
||||
bool TerminalEditor::setParts(QList<CustomElementPart *> parts) {
|
||||
if (parts.isEmpty()) {
|
||||
m_terminals.clear();
|
||||
if (m_part) {
|
||||
disconnect(m_part, &PartTerminal::orientationChanged, this, &TerminalEditor::updateForm);
|
||||
}
|
||||
m_part = nullptr;
|
||||
return(true);
|
||||
}
|
||||
|
||||
if (PartTerminal *part_terminal = static_cast<PartTerminal *>(parts.first())) {
|
||||
if (m_part) {
|
||||
disconnect(m_part, &PartTerminal::orientationChanged, this, &TerminalEditor::updateForm);
|
||||
}
|
||||
m_part = part_terminal;
|
||||
m_terminals.clear();
|
||||
m_terminals.append(part_terminal);
|
||||
for (int i=1; i < parts.length(); i++) {
|
||||
m_terminals.append(static_cast<PartTerminal*>(parts[i]));
|
||||
}
|
||||
updateForm();
|
||||
connect(m_part, &PartTerminal::orientationChanged, this, &TerminalEditor::updateForm);
|
||||
return(true);
|
||||
}
|
||||
return(false);
|
||||
}
|
||||
|
||||
/**
|
||||
@return la primitive actuellement editee, ou 0 si ce widget n'en edite pas
|
||||
*/
|
||||
CustomElementPart *TerminalEditor::currentPart() const
|
||||
{
|
||||
return(m_part);
|
||||
}
|
||||
|
||||
QList<CustomElementPart*> TerminalEditor::currentParts() const
|
||||
{
|
||||
QList<CustomElementPart*> parts;
|
||||
for (auto term: m_terminals) {
|
||||
parts.append(static_cast<CustomElementPart*>(term));
|
||||
}
|
||||
return parts;
|
||||
}
|
||||
|
||||
/// Met a jour l'orientation de la borne et cree un objet d'annulation
|
||||
void TerminalEditor::updateTerminalO()
|
||||
{
|
||||
if (m_locked) return;
|
||||
m_locked = true;
|
||||
QVariant var(orientation -> itemData(orientation -> currentIndex()));
|
||||
|
||||
for (int i=0; i < m_terminals.length(); i++) {
|
||||
PartTerminal* term = m_terminals[i];
|
||||
if (var != term->property("orientation"))
|
||||
{
|
||||
QPropertyUndoCommand *undo = new QPropertyUndoCommand(term, "orientation", term->property("orientation"), var);
|
||||
undo->setText(tr("Modifier l'orientation d'une borne"));
|
||||
undoStack().push(undo);
|
||||
}
|
||||
}
|
||||
m_locked = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief TerminalEditor::updateXPos
|
||||
*/
|
||||
void TerminalEditor::updateXPos()
|
||||
{
|
||||
if (m_locked) return;
|
||||
m_locked = true;
|
||||
QPointF new_pos(qle_x->value(), 0);
|
||||
|
||||
for (int i=0; i < m_terminals.length(); i++) {
|
||||
PartTerminal* term = m_terminals[i];
|
||||
new_pos.setY(term->pos().y()); // change only x value
|
||||
if (term->pos() != new_pos) {
|
||||
QPropertyUndoCommand *undo = new QPropertyUndoCommand(term, "pos", term->property("pos"), new_pos);
|
||||
undo->setText(tr("Déplacer une borne"));
|
||||
undo->enableAnimation();
|
||||
undoStack().push(undo);
|
||||
}
|
||||
}
|
||||
m_locked=false;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief TerminalEditor::updateYPos
|
||||
*/
|
||||
void TerminalEditor::updateYPos()
|
||||
{
|
||||
if (m_locked) return;
|
||||
m_locked = true;
|
||||
QPointF new_pos(0, qle_y->value()); // change only y value
|
||||
|
||||
for (int i=0; i < m_terminals.length(); i++) {
|
||||
PartTerminal* term = m_terminals[i];
|
||||
new_pos.setX(term->pos().x());
|
||||
if (term->pos() != new_pos) {
|
||||
QPropertyUndoCommand *undo = new QPropertyUndoCommand(term, "pos", term->property("pos"), new_pos);
|
||||
undo->setText(tr("Déplacer une borne"));
|
||||
undo->enableAnimation();
|
||||
undoStack().push(undo);
|
||||
}
|
||||
}
|
||||
m_locked=false;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief TerminalEditor::updateName
|
||||
SLOT set name to Terminal
|
||||
*/
|
||||
void TerminalEditor::updateName() {
|
||||
if (m_locked) return;
|
||||
m_locked = true;
|
||||
QVariant var(name->text());
|
||||
|
||||
for (int i=0; i < m_terminals.length(); i++) {
|
||||
PartTerminal* term = m_terminals[i];
|
||||
if (var != term->property("name"))
|
||||
{
|
||||
QPropertyUndoCommand *undo;
|
||||
undo = new QPropertyUndoCommand(term,
|
||||
"name",
|
||||
term->property("name"),
|
||||
var);
|
||||
undo->setText(tr("Modifier le nom du terminal"));
|
||||
undoStack().push(undo);
|
||||
}
|
||||
}
|
||||
m_locked=false;
|
||||
|
||||
}
|
||||
|
||||
/// update Number and name, create cancel object
|
||||
|
||||
/**
|
||||
Met a jour le formulaire d'edition
|
||||
*/
|
||||
void TerminalEditor::updateForm()
|
||||
{
|
||||
if (!m_part) return;
|
||||
activeConnections(false);
|
||||
qle_x -> setValue(m_part->property("x").toReal());
|
||||
qle_y -> setValue(m_part->property("y").toReal());
|
||||
orientation -> setCurrentIndex(orientation->findData(m_part->property("orientation")));
|
||||
name -> setText(m_part->name());
|
||||
activeConnections(true);
|
||||
}
|
||||
|
||||
/**
|
||||
Active ou desactive les connexionx signaux/slots entre les widgets internes.
|
||||
@param active true pour activer les connexions, false pour les desactiver
|
||||
*/
|
||||
void TerminalEditor::activeConnections(bool active) {
|
||||
if (active) {
|
||||
connect(qle_x,
|
||||
&QDoubleSpinBox::editingFinished,
|
||||
this, &TerminalEditor::updateXPos);
|
||||
connect(qle_y,
|
||||
&QDoubleSpinBox::editingFinished,
|
||||
this, &TerminalEditor::updateYPos);
|
||||
connect(orientation,
|
||||
QOverload<int>::of(&QComboBox::activated),
|
||||
this, &TerminalEditor::updateTerminalO);
|
||||
connect(name, &QLineEdit::editingFinished,
|
||||
this, &TerminalEditor::updateName);
|
||||
}
|
||||
else {
|
||||
disconnect(qle_x, &QDoubleSpinBox::editingFinished,
|
||||
this, &TerminalEditor::updateXPos);
|
||||
disconnect(qle_y, &QDoubleSpinBox::editingFinished,
|
||||
this, &TerminalEditor::updateYPos);
|
||||
disconnect(orientation, QOverload<int>::of(&QComboBox::activated),
|
||||
this, &TerminalEditor::updateTerminalO);
|
||||
disconnect(name, &QLineEdit::editingFinished,
|
||||
this, &TerminalEditor::updateName);
|
||||
}
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
/*
|
||||
Copyright 2006-2021 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 TERMINAL_EDITOR_H
|
||||
#define TERMINAL_EDITOR_H
|
||||
|
||||
#include "elementitemeditor.h"
|
||||
|
||||
#include <QLineEdit>
|
||||
|
||||
class PartTerminal;
|
||||
class QDoubleSpinBox;
|
||||
class QComboBox;
|
||||
|
||||
/**
|
||||
@brief The TerminalEditor class
|
||||
This class provides a widget to edit terminals within the element editor.
|
||||
The class is capable to change the values of multiple parts of the same time.
|
||||
The displayed values are from the first selected element
|
||||
*/
|
||||
class TerminalEditor : public ElementItemEditor {
|
||||
Q_OBJECT
|
||||
|
||||
// Constructors, destructor
|
||||
public:
|
||||
TerminalEditor(
|
||||
QETElementEditor *,
|
||||
QList<PartTerminal *>& terms,
|
||||
QWidget * = nullptr);
|
||||
TerminalEditor(QETElementEditor *, QWidget * = nullptr);
|
||||
~TerminalEditor() override;
|
||||
private:
|
||||
TerminalEditor(const TerminalEditor &);
|
||||
void init();
|
||||
|
||||
// attributes
|
||||
private:
|
||||
QList<PartTerminal *> m_terminals;
|
||||
PartTerminal *m_part{nullptr};
|
||||
QDoubleSpinBox *qle_x, *qle_y;
|
||||
QComboBox *orientation;
|
||||
QLineEdit *name;
|
||||
bool m_locked{false};
|
||||
|
||||
// methods
|
||||
public:
|
||||
bool setPart(CustomElementPart *) override;
|
||||
bool setParts(QList<CustomElementPart *> parts) override;
|
||||
CustomElementPart *currentPart() const override;
|
||||
QList<CustomElementPart*> currentParts() const override;
|
||||
|
||||
public slots:
|
||||
void updateTerminalO();
|
||||
void updateXPos();
|
||||
void updateYPos();
|
||||
void updateName();
|
||||
void updateForm() override;
|
||||
|
||||
private:
|
||||
void activeConnections(bool);
|
||||
};
|
||||
#endif
|
||||
@@ -24,7 +24,8 @@
|
||||
#include "../../qetinformation.h"
|
||||
#include "../../ui/alignmenttextdialog.h"
|
||||
#include "../../ui/compositetexteditdialog.h"
|
||||
#include "../qetelementeditor.h"
|
||||
#include "../ui/qetelementeditor.h"
|
||||
#include "../elementscene.h"
|
||||
#include "ui_dynamictextfieldeditor.h"
|
||||
|
||||
#include <QColorDialog>
|
||||
@@ -224,9 +225,9 @@ void DynamicTextFieldEditor::fillInfoComboBox()
|
||||
ui -> m_elmt_info_cb -> clear();
|
||||
|
||||
QStringList strl;
|
||||
QString type = elementEditor() -> elementScene() -> elementType();
|
||||
auto type = elementEditor()->elementScene()->elementData().m_type;
|
||||
|
||||
if(type.contains("report")) {
|
||||
if(type & ElementData::AllReport) {
|
||||
strl = QETInformation::folioReportInfoKeys();
|
||||
}
|
||||
else {
|
||||
@@ -332,8 +333,8 @@ void DynamicTextFieldEditor::on_m_elmt_info_cb_activated(const QString &arg1) {
|
||||
QPropertyUndoCommand *undo = new QPropertyUndoCommand(m_parts[i], "infoName", m_parts[i] -> infoName(), info);
|
||||
undo->setText(tr("Modifier l'information d'un texte"));
|
||||
undoStack().push(undo);
|
||||
m_parts[i] -> setPlainText(
|
||||
elementEditor() -> elementScene() -> elementInformation().value(m_parts[i] -> infoName()).toString());
|
||||
m_parts[i]->setPlainText(
|
||||
elementEditor()->elementScene()->elementData().m_informations.value(m_parts[i] -> infoName()).toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
Copyright 2006-2021 The QElectroTech Team
|
||||
This file is part of QElectroTech.
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "../../qetapp.h"
|
||||
#include "../../qetinformation.h"
|
||||
#include "ui_elementpropertieseditorwidget.h"
|
||||
#include "../../qetinformation.h"
|
||||
|
||||
#include <QItemDelegate>
|
||||
|
||||
@@ -37,7 +38,7 @@ class EditorDelegate : public QItemDelegate
|
||||
|
||||
QWidget* createEditor(QWidget *parent,
|
||||
const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const
|
||||
const QModelIndex &index) const override
|
||||
{
|
||||
if(index.column() == 1)
|
||||
{
|
||||
@@ -50,23 +51,14 @@ class EditorDelegate : public QItemDelegate
|
||||
};
|
||||
|
||||
/**
|
||||
@brief ElementPropertiesEditorWidget::ElementPropertiesEditorWidget
|
||||
Default constructor
|
||||
@param basic_type : QString of the drawed element
|
||||
@param kind_info : DiagramContext to store kindInfo of drawed element
|
||||
@param elmt_info : the information of element (label, manufacturer etc...]
|
||||
@param parent : parent widget
|
||||
*/
|
||||
ElementPropertiesEditorWidget::ElementPropertiesEditorWidget(
|
||||
QString &basic_type,
|
||||
DiagramContext &kind_info,
|
||||
DiagramContext &elmt_info,
|
||||
QWidget *parent) :
|
||||
* @brief ElementPropertiesEditorWidget::ElementPropertiesEditorWidget
|
||||
* @param data
|
||||
* @param parent
|
||||
*/
|
||||
ElementPropertiesEditorWidget::ElementPropertiesEditorWidget(ElementData data, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::ElementPropertiesEditorWidget),
|
||||
m_basic_type(basic_type),
|
||||
m_kind_info (kind_info),
|
||||
m_elmt_info (elmt_info)
|
||||
m_data(data)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
setUpInterface();
|
||||
@@ -90,22 +82,29 @@ void ElementPropertiesEditorWidget::upDateInterface()
|
||||
{
|
||||
ui->m_base_type_cb->setCurrentIndex(
|
||||
ui->m_base_type_cb->findData(
|
||||
QVariant(m_basic_type)));
|
||||
m_data.m_type));
|
||||
|
||||
if (m_basic_type == "slave")
|
||||
if (m_data.m_type == ElementData::Slave)
|
||||
{
|
||||
ui->m_state_cb->setCurrentIndex(
|
||||
ui->m_state_cb->findData(
|
||||
m_kind_info["state"].toString()));
|
||||
m_data.m_slave_state));
|
||||
ui->m_type_cb->setCurrentIndex (
|
||||
ui->m_type_cb->findData(
|
||||
m_kind_info["type"].toString()));
|
||||
ui->m_number_ctc->setValue(m_kind_info["number"].toInt());
|
||||
m_data.m_slave_type));
|
||||
ui->m_number_ctc->setValue(m_data.m_contact_count);
|
||||
}
|
||||
else if (m_basic_type == "master") {
|
||||
else if (m_data.m_type == ElementData::Master) {
|
||||
ui->m_master_type_cb->setCurrentIndex(
|
||||
ui->m_master_type_cb->findData (
|
||||
m_kind_info["type"]));
|
||||
m_data.m_master_type));
|
||||
} else if (m_data.m_type == ElementData::Terminale) {
|
||||
ui->m_terminal_type_cb->setCurrentIndex(
|
||||
ui->m_terminal_type_cb->findData(
|
||||
m_data.m_terminal_type));
|
||||
ui->m_terminal_func_cb->setCurrentIndex(
|
||||
ui->m_terminal_func_cb->findData(
|
||||
m_data.m_terminal_function));
|
||||
}
|
||||
|
||||
on_m_base_type_cb_currentIndexChanged(ui->m_base_type_cb->currentIndex());
|
||||
@@ -117,33 +116,39 @@ void ElementPropertiesEditorWidget::upDateInterface()
|
||||
void ElementPropertiesEditorWidget::setUpInterface()
|
||||
{
|
||||
// Type combo box
|
||||
ui->m_base_type_cb->addItem (tr("Simple"), QVariant("simple"));
|
||||
ui->m_base_type_cb->addItem (tr("Maître"), QVariant("master"));
|
||||
ui->m_base_type_cb->addItem (tr("Esclave"), QVariant("slave"));
|
||||
ui->m_base_type_cb->addItem (tr("Renvoi de folio suivant"),
|
||||
QVariant("next_report"));
|
||||
ui->m_base_type_cb->addItem (tr("Renvoi de folio précédent"),
|
||||
QVariant("previous_report"));
|
||||
ui->m_base_type_cb->addItem (tr("Bornier"), QVariant("terminal"));
|
||||
ui->m_base_type_cb->addItem (tr("Simple"), ElementData::Simple);
|
||||
ui->m_base_type_cb->addItem (tr("Maître"), ElementData::Master);
|
||||
ui->m_base_type_cb->addItem (tr("Esclave"), ElementData::Slave);
|
||||
ui->m_base_type_cb->addItem (tr("Renvoi de folio suivant"), ElementData::NextReport);
|
||||
ui->m_base_type_cb->addItem (tr("Renvoi de folio précédent"), ElementData::PreviousReport);
|
||||
ui->m_base_type_cb->addItem (tr("Bornier"), ElementData::Terminale);
|
||||
|
||||
// Slave option
|
||||
ui->m_state_cb->addItem(tr("Normalement ouvert"),QVariant("NO"));
|
||||
ui->m_state_cb->addItem(tr("Normalement fermé"), QVariant("NC"));
|
||||
ui->m_state_cb->addItem(tr("Inverseur"), QVariant("SW"));
|
||||
ui->m_type_cb->addItem(tr("Simple"), QVariant("simple"));
|
||||
ui->m_type_cb->addItem(tr("Puissance"), QVariant("power"));
|
||||
ui->m_type_cb->addItem(tr("Temporisé travail"), QVariant("delayOn"));
|
||||
ui->m_type_cb->addItem(tr("Temporisé repos"), QVariant("delayOff"));
|
||||
ui->m_type_cb->addItem(tr("Temporisé travail & repos"),
|
||||
QVariant("delayOnOff"));
|
||||
ui->m_state_cb->addItem(tr("Normalement ouvert"), ElementData::NO);
|
||||
ui->m_state_cb->addItem(tr("Normalement fermé"), ElementData::NC);
|
||||
ui->m_state_cb->addItem(tr("Inverseur"), ElementData::SW);
|
||||
ui->m_type_cb->addItem(tr("Simple"), ElementData::SSimple);
|
||||
ui->m_type_cb->addItem(tr("Puissance"), ElementData::Power);
|
||||
ui->m_type_cb->addItem(tr("Temporisé travail"), ElementData::DelayOn);
|
||||
ui->m_type_cb->addItem(tr("Temporisé repos"), ElementData::DelayOff);
|
||||
ui->m_type_cb->addItem(tr("Temporisé travail & repos"), ElementData::delayOnOff);
|
||||
|
||||
//Master option
|
||||
ui->m_master_type_cb->addItem(tr("Bobine"), QVariant("coil"));
|
||||
ui->m_master_type_cb->addItem(tr("Organe de protection"),
|
||||
QVariant("protection"));
|
||||
ui->m_master_type_cb->addItem(tr("Commutateur / bouton"),
|
||||
QVariant("commutator"));
|
||||
|
||||
ui->m_master_type_cb->addItem(tr("Bobine"), ElementData::Coil);
|
||||
ui->m_master_type_cb->addItem(tr("Organe de protection"), ElementData::Protection);
|
||||
ui->m_master_type_cb->addItem(tr("Commutateur / bouton"), ElementData::Commutator);
|
||||
|
||||
//Terminal option
|
||||
ui->m_terminal_type_cb->addItem(tr("Générique"), ElementData::TTGeneric);
|
||||
ui->m_terminal_type_cb->addItem(tr("Fusible"), ElementData::Fuse);
|
||||
ui->m_terminal_type_cb->addItem(tr("Séctionnable"), ElementData::Sectional);
|
||||
ui->m_terminal_type_cb->addItem(tr("Diode"), ElementData::Diode);
|
||||
|
||||
ui->m_terminal_func_cb->addItem(tr("Générique"), ElementData::TFGeneric);
|
||||
ui->m_terminal_func_cb->addItem(tr("Phase"), ElementData::Phase);
|
||||
ui->m_terminal_func_cb->addItem(tr("Neutre"), ElementData::Neutral);
|
||||
ui->m_terminal_func_cb->addItem(tr("Terre"), ElementData::PE);
|
||||
|
||||
//Disable the edition of the first column of the information tree
|
||||
//by this little workaround
|
||||
ui->m_tree->setItemDelegate(new EditorDelegate(this));
|
||||
@@ -153,21 +158,28 @@ void ElementPropertiesEditorWidget::setUpInterface()
|
||||
|
||||
void ElementPropertiesEditorWidget::updateTree()
|
||||
{
|
||||
QString type = ui->m_base_type_cb->itemData(
|
||||
ui->m_base_type_cb->currentIndex()).toString();
|
||||
|
||||
if (type == "master")
|
||||
ui->m_tree->setEnabled(true);
|
||||
else if (type == "slave")
|
||||
ui->m_tree->setDisabled(true);
|
||||
else if (type == "simple")
|
||||
ui->m_tree->setEnabled(true);
|
||||
else if (type == "next_report")
|
||||
ui->m_tree->setDisabled(true);
|
||||
else if (type == "previous_report")
|
||||
ui->m_tree->setDisabled(true);
|
||||
else if (type == "terminal")
|
||||
ui->m_tree->setEnabled(true);
|
||||
auto type_ = ui->m_base_type_cb->currentData().value<ElementData::Type>();
|
||||
|
||||
switch (type_) {
|
||||
case ElementData::Simple:
|
||||
ui->m_tree->setEnabled(true);
|
||||
break;
|
||||
case ElementData::NextReport:
|
||||
ui->m_tree->setDisabled(true);
|
||||
break;
|
||||
case ElementData::PreviousReport:
|
||||
ui->m_tree->setDisabled(true);
|
||||
break;
|
||||
case ElementData::Master:
|
||||
ui->m_tree->setEnabled(true);
|
||||
break;
|
||||
case ElementData::Slave:
|
||||
ui->m_tree->setDisabled(true);
|
||||
break;
|
||||
case ElementData::Terminale:
|
||||
ui->m_tree->setEnabled(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -175,20 +187,16 @@ void ElementPropertiesEditorWidget::updateTree()
|
||||
Create QTreeWidgetItem of the tree widget and populate it
|
||||
*/
|
||||
void ElementPropertiesEditorWidget::populateTree()
|
||||
{
|
||||
QStringList keys{"label", "plant", "comment", "description",
|
||||
"designation", "manufacturer",
|
||||
"manufacturer_reference", "supplier", "quantity",
|
||||
"unity", "machine_manufacturer_reference"};
|
||||
|
||||
{
|
||||
const auto keys = QETInformation::elementEditorElementInfoKeys();
|
||||
for(const QString& key : keys)
|
||||
{
|
||||
QTreeWidgetItem *qtwi = new QTreeWidgetItem(ui->m_tree);
|
||||
qtwi->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable);
|
||||
qtwi->setData(0, Qt::DisplayRole,
|
||||
QETInformation::translatedInfoKey(key));
|
||||
QETInformation::translatedInfoKey(key));
|
||||
qtwi->setData(0, Qt::UserRole, key);
|
||||
qtwi->setText(1, m_elmt_info.value(key).toString());
|
||||
qtwi->setText(1, m_data.m_informations.value(key).toString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,23 +206,21 @@ void ElementPropertiesEditorWidget::populateTree()
|
||||
*/
|
||||
void ElementPropertiesEditorWidget::on_m_buttonBox_accepted()
|
||||
{
|
||||
m_basic_type = ui->m_base_type_cb->itemData(
|
||||
ui->m_base_type_cb->currentIndex()).toString();
|
||||
if (m_basic_type == "slave")
|
||||
m_data.m_type = ui->m_base_type_cb->currentData().value<ElementData::Type>();
|
||||
|
||||
if (m_data.m_type == ElementData::Slave)
|
||||
{
|
||||
m_kind_info.addValue("state",
|
||||
ui->m_state_cb->itemData(
|
||||
ui->m_state_cb->currentIndex()));
|
||||
m_kind_info.addValue("type",
|
||||
ui->m_type_cb->itemData(
|
||||
ui->m_type_cb->currentIndex()));
|
||||
m_kind_info.addValue("number",
|
||||
QVariant(ui->m_number_ctc->value()));
|
||||
m_data.m_slave_state = ui->m_state_cb->currentData().value<ElementData::SlaveState>();
|
||||
m_data.m_slave_type = ui->m_type_cb->currentData().value<ElementData::SlaveType>();
|
||||
m_data.m_contact_count = ui->m_number_ctc->value();
|
||||
}
|
||||
else if(m_basic_type == "master") {
|
||||
m_kind_info.addValue("type",
|
||||
ui->m_master_type_cb->itemData(
|
||||
ui->m_master_type_cb->currentIndex()));
|
||||
else if (m_data.m_type == ElementData::Master) {
|
||||
m_data.m_master_type = ui->m_master_type_cb->currentData().value<ElementData::MasterType>();
|
||||
}
|
||||
else if (m_data.m_type == ElementData::Terminale)
|
||||
{
|
||||
m_data.m_terminal_type = ui->m_terminal_type_cb->currentData().value<ElementData::TerminalType>();
|
||||
m_data.m_terminal_function = ui->m_terminal_func_cb->currentData().value<ElementData::TerminalFunction>();
|
||||
}
|
||||
|
||||
for (QTreeWidgetItem *qtwi : ui->m_tree->invisibleRootItem()->takeChildren())
|
||||
@@ -224,8 +230,8 @@ void ElementPropertiesEditorWidget::on_m_buttonBox_accepted()
|
||||
txt.remove("\r");
|
||||
txt.remove("\n");
|
||||
|
||||
m_elmt_info.addValue(qtwi->data(0, Qt::UserRole).toString(),
|
||||
txt);
|
||||
m_data.m_informations.addValue(qtwi->data(0, Qt::UserRole).toString(),
|
||||
txt);
|
||||
}
|
||||
|
||||
this->close();
|
||||
@@ -235,18 +241,23 @@ void ElementPropertiesEditorWidget::on_m_buttonBox_accepted()
|
||||
@brief ElementPropertiesEditorWidget::on_m_base_type_cb_currentIndexChanged
|
||||
@param index : Action when combo-box base type index change
|
||||
*/
|
||||
void ElementPropertiesEditorWidget::on_m_base_type_cb_currentIndexChanged(
|
||||
int index)
|
||||
void ElementPropertiesEditorWidget::on_m_base_type_cb_currentIndexChanged(int index)
|
||||
{
|
||||
bool slave = false , master = false;
|
||||
bool slave = false , master = false, terminal = false;
|
||||
|
||||
if (ui->m_base_type_cb->itemData(index).toString() == "slave")
|
||||
auto type_ = ui->m_base_type_cb->itemData(index).value<ElementData::Type>();
|
||||
if (type_ == ElementData::Slave)
|
||||
slave = true;
|
||||
else if (ui->m_base_type_cb->itemData(index).toString() == "master")
|
||||
else if (type_ == ElementData::Master)
|
||||
master = true;
|
||||
else if (type_ == ElementData::Terminale)
|
||||
terminal = true;
|
||||
|
||||
ui->m_slave_gb->setVisible(slave);
|
||||
ui->m_master_gb->setVisible(master);
|
||||
|
||||
ui->m_terminal_gb->setVisible(terminal);
|
||||
ui->tabWidget->setTabVisible(1,
|
||||
(type_ == ElementData::Simple ||
|
||||
type_ == ElementData::Master));
|
||||
updateTree();
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#define ELEMENTPROPERTIESEDITORWIDGET_H
|
||||
|
||||
#include "../../diagramcontext.h"
|
||||
#include "../../properties/elementdata.h"
|
||||
|
||||
#include <QAbstractButton>
|
||||
#include <QDialog>
|
||||
@@ -38,12 +39,13 @@ class ElementPropertiesEditorWidget : public QDialog
|
||||
|
||||
//METHODS
|
||||
public:
|
||||
explicit ElementPropertiesEditorWidget(QString &basic_type, DiagramContext &kind_info, DiagramContext &elmt_info, QWidget *parent = nullptr);
|
||||
explicit ElementPropertiesEditorWidget(ElementData data, QWidget *parent = nullptr);
|
||||
~ElementPropertiesEditorWidget() override;
|
||||
|
||||
void upDateInterface();
|
||||
ElementData editedData() {return m_data;}
|
||||
|
||||
private:
|
||||
void upDateInterface();
|
||||
void setUpInterface();
|
||||
void updateTree();
|
||||
void populateTree();
|
||||
@@ -56,9 +58,7 @@ class ElementPropertiesEditorWidget : public QDialog
|
||||
//ATTRIBUTES
|
||||
private:
|
||||
Ui::ElementPropertiesEditorWidget *ui;
|
||||
QString &m_basic_type;
|
||||
DiagramContext &m_kind_info,
|
||||
&m_elmt_info;
|
||||
ElementData m_data;
|
||||
};
|
||||
|
||||
#endif // ELEMENTPROPERTIESEDITORWIDGET_H
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>450</width>
|
||||
<height>321</height>
|
||||
<width>527</width>
|
||||
<height>442</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -107,6 +107,35 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="m_terminal_gb">
|
||||
<property name="title">
|
||||
<string>Élément bornier</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Type</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Fonction</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="m_terminal_type_cb"/>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="m_terminal_func_cb"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
Copyright 2006-2021 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 QETELEMENTEDITOR_H
|
||||
#define QETELEMENTEDITOR_H
|
||||
|
||||
#include <QMainWindow>
|
||||
#include "../../ElementsCollection/elementslocation.h"
|
||||
|
||||
class ElementScene;
|
||||
class QActionGroup;
|
||||
class ElementItemEditor;
|
||||
class ElementView;
|
||||
class QListWidget;
|
||||
class QStackedWidget;
|
||||
class QLabel;
|
||||
|
||||
namespace Ui {
|
||||
class QETElementEditor;
|
||||
}
|
||||
|
||||
class QETElementEditor : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
signals:
|
||||
void saveToLocation(ElementsLocation loc);
|
||||
|
||||
public:
|
||||
explicit QETElementEditor(QWidget *parent = nullptr);
|
||||
~QETElementEditor() override;
|
||||
|
||||
void contextMenu(QPoint p, QList<QAction *> actions = QList<QAction *>());
|
||||
void setNames(const NamesList &name_list);
|
||||
void setLocation(const ElementsLocation &location);
|
||||
ElementsLocation location() const;
|
||||
void setFileName(const QString &file_name);
|
||||
QString fileName() const;
|
||||
void setReadOnly(bool ro);
|
||||
bool isReadOnly() const;
|
||||
void fromFile(const QString &filepath);
|
||||
bool toFile(const QString &filepath);
|
||||
void fromLocation(const ElementsLocation &location);
|
||||
bool toLocation(const ElementsLocation &location);
|
||||
bool isEditing(const ElementsLocation &location);
|
||||
bool isEditing(const QString &filepath);
|
||||
ElementScene *elementScene() const;
|
||||
ElementView *elementView() const;
|
||||
static QPointF pasteOffset();
|
||||
static QString getOpenElementFileName(QWidget *parent = nullptr, const QString &dir = QString());
|
||||
void updateTitle();
|
||||
void fillPartsList();
|
||||
void UncheckAddPrimitive();
|
||||
void updateCurrentPartEditor();
|
||||
void updateInformations();
|
||||
void updatePartsList();
|
||||
void updateSelectionFromPartsList();
|
||||
void openElement(const QString &filepath);
|
||||
bool checkElement();
|
||||
|
||||
protected:
|
||||
bool event(QEvent *event) override;
|
||||
void closeEvent(QCloseEvent *) override;
|
||||
|
||||
|
||||
private slots:
|
||||
bool on_m_save_action_triggered();
|
||||
bool on_m_save_as_action_triggered();
|
||||
void on_m_select_all_act_triggered();
|
||||
void on_m_edit_element_properties_action_triggered();
|
||||
void on_m_new_action_triggered();
|
||||
void on_m_open_action_triggered();
|
||||
void on_m_open_from_file_action_triggered();
|
||||
void on_m_open_dxf_action_triggered();
|
||||
bool on_m_save_as_file_action_triggered();
|
||||
void on_m_reload_action_triggered();
|
||||
void on_m_quit_action_triggered();
|
||||
void on_m_deselect_all_action_triggered();
|
||||
void on_m_cut_action_triggered();
|
||||
void on_m_copy_action_triggered();
|
||||
void on_m_paste_action_triggered();
|
||||
void on_m_paste_in_area_action_triggered();
|
||||
void on_m_paste_from_file_action_triggered();
|
||||
void on_m_paste_from_element_action_triggered();
|
||||
void on_m_revert_selection_action_triggered();
|
||||
void on_m_delete_action_triggered();
|
||||
void on_m_edit_names_action_triggered();
|
||||
void on_m_edit_author_action_triggered();
|
||||
void on_m_zoom_in_action_triggered();
|
||||
void on_m_zoom_out_action_triggered();
|
||||
void on_m_zoom_fit_best_action_triggered();
|
||||
void on_m_zoom_original_action_triggered();
|
||||
void on_m_about_qet_action_triggered();
|
||||
void on_m_online_manual_triggered();
|
||||
void on_m_youtube_action_triggered();
|
||||
void on_m_donate_action_triggered();
|
||||
void on_m_about_qt_action_triggered();
|
||||
|
||||
private:
|
||||
bool canClose();
|
||||
void readSettings();
|
||||
void writeSettings() const;
|
||||
void setupActions();
|
||||
void updateAction();
|
||||
void setupConnection();
|
||||
void initGui();
|
||||
QWidget *clearToolsDock();
|
||||
void copyAndPasteXml(const QDomDocument &xml_document);
|
||||
|
||||
private:
|
||||
Ui::QETElementEditor *ui;
|
||||
|
||||
bool
|
||||
m_read_only = false,
|
||||
m_opened_from_file = false,
|
||||
m_first_activation = true;
|
||||
|
||||
ElementScene *m_elmt_scene = nullptr;
|
||||
|
||||
QActionGroup
|
||||
*m_add_part_action_grp = nullptr,
|
||||
*m_depth_action_group = nullptr;
|
||||
|
||||
QList<QAction *> m_context_menu_action_list;
|
||||
|
||||
QAction
|
||||
*m_undo_action = nullptr,
|
||||
*m_redo_action = nullptr;
|
||||
|
||||
|
||||
/// Hash associating primitive names with their matching edition widget
|
||||
QHash<QString, ElementItemEditor *> m_editors;
|
||||
|
||||
ElementsLocation m_location;
|
||||
|
||||
QString
|
||||
m_file_name,
|
||||
m_min_title;
|
||||
|
||||
ElementView *m_view = nullptr;
|
||||
|
||||
QListWidget *m_parts_list = nullptr;
|
||||
|
||||
QStackedWidget *m_tools_dock_stack = nullptr;
|
||||
|
||||
QLabel *m_default_informations = nullptr;
|
||||
|
||||
};
|
||||
|
||||
#endif // QETELEMENTEDITOR_H
|
||||
@@ -0,0 +1,496 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>QETElementEditor</class>
|
||||
<widget class="QMainWindow" name="QETElementEditor">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>QElectroTech - Éditeur d'élément</string>
|
||||
</property>
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/qet.png</normaloff>:/ico/16x16/qet.png</iconset>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget"/>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="m_file_menu">
|
||||
<property name="title">
|
||||
<string>&Fichier</string>
|
||||
</property>
|
||||
<addaction name="m_new_action"/>
|
||||
<addaction name="m_open_action"/>
|
||||
<addaction name="m_open_from_file_action"/>
|
||||
<addaction name="m_open_dxf_action"/>
|
||||
<addaction name="m_save_action"/>
|
||||
<addaction name="m_save_as_action"/>
|
||||
<addaction name="m_save_as_file_action"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="m_reload_action"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="m_quit_action"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="m_edit_menu">
|
||||
<property name="title">
|
||||
<string>&Édition</string>
|
||||
</property>
|
||||
<widget class="QMenu" name="m_paste_from_menu">
|
||||
<property name="title">
|
||||
<string>Coller depuis...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/edit-paste.png</normaloff>:/ico/16x16/edit-paste.png</iconset>
|
||||
</property>
|
||||
<addaction name="m_paste_from_file_action"/>
|
||||
<addaction name="m_paste_from_element_action"/>
|
||||
</widget>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="m_select_all_act"/>
|
||||
<addaction name="m_deselect_all_action"/>
|
||||
<addaction name="m_revert_selection_action"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="m_cut_action"/>
|
||||
<addaction name="m_copy_action"/>
|
||||
<addaction name="m_paste_action"/>
|
||||
<addaction name="m_paste_in_area_action"/>
|
||||
<addaction name="m_paste_from_menu"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="m_delete_action"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="m_edit_names_action"/>
|
||||
<addaction name="m_edit_author_action"/>
|
||||
<addaction name="m_edit_element_properties_action"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="m_display_menu">
|
||||
<property name="title">
|
||||
<string>Afficha&ge</string>
|
||||
</property>
|
||||
<addaction name="m_zoom_in_action"/>
|
||||
<addaction name="m_zoom_out_action"/>
|
||||
<addaction name="m_zoom_fit_best_action"/>
|
||||
<addaction name="m_zoom_original_action"/>
|
||||
<addaction name="separator"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_Aide">
|
||||
<property name="title">
|
||||
<string>&Aide</string>
|
||||
</property>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="m_about_qet_action"/>
|
||||
<addaction name="m_online_manual"/>
|
||||
<addaction name="m_youtube_action"/>
|
||||
<addaction name="m_donate_action"/>
|
||||
<addaction name="m_about_qt_action"/>
|
||||
</widget>
|
||||
<addaction name="m_file_menu"/>
|
||||
<addaction name="m_edit_menu"/>
|
||||
<addaction name="m_display_menu"/>
|
||||
<addaction name="menu_Aide"/>
|
||||
</widget>
|
||||
<widget class="QDockWidget" name="m_undo_dock">
|
||||
<property name="allowedAreas">
|
||||
<set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Annulations</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents"/>
|
||||
</widget>
|
||||
<widget class="QDockWidget" name="m_parts_dock">
|
||||
<property name="allowedAreas">
|
||||
<set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Parties</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>2</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_2"/>
|
||||
</widget>
|
||||
<widget class="QDockWidget" name="m_tools_dock">
|
||||
<property name="allowedAreas">
|
||||
<set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Informations</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_3"/>
|
||||
</widget>
|
||||
<widget class="QToolBar" name="m_main_toolbar">
|
||||
<property name="windowTitle">
|
||||
<string>Outils</string>
|
||||
</property>
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
<attribute name="toolBarBreak">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<addaction name="m_new_action"/>
|
||||
<addaction name="m_open_action"/>
|
||||
<addaction name="m_save_action"/>
|
||||
<addaction name="m_save_as_action"/>
|
||||
<addaction name="m_reload_action"/>
|
||||
<addaction name="m_delete_action"/>
|
||||
</widget>
|
||||
<widget class="QToolBar" name="m_view_toolbar">
|
||||
<property name="windowTitle">
|
||||
<string>Affichage</string>
|
||||
</property>
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
<attribute name="toolBarBreak">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<addaction name="m_zoom_in_action"/>
|
||||
<addaction name="m_zoom_out_action"/>
|
||||
<addaction name="m_zoom_fit_best_action"/>
|
||||
<addaction name="m_zoom_original_action"/>
|
||||
</widget>
|
||||
<widget class="QToolBar" name="m_element_toolbar">
|
||||
<property name="windowTitle">
|
||||
<string>Élément</string>
|
||||
</property>
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
<attribute name="toolBarBreak">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<addaction name="m_edit_names_action"/>
|
||||
<addaction name="m_edit_element_properties_action"/>
|
||||
</widget>
|
||||
<widget class="QToolBar" name="m_undo_toolbar">
|
||||
<property name="windowTitle">
|
||||
<string>Annulation</string>
|
||||
</property>
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
<attribute name="toolBarBreak">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
<action name="m_select_all_act">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/edit-select-all.png</normaloff>:/ico/16x16/edit-select-all.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Tout sélectionner</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_new_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/document-new.png</normaloff>:/ico/22x22/document-new.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Nouveau</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_open_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/folder-open.png</normaloff>:/ico/22x22/folder-open.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Ouvrir</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_open_from_file_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/folder-open.png</normaloff>:/ico/22x22/folder-open.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Ouvrir depuis un fichier</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_open_dxf_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/run-dxf.png</normaloff>:/ico/16x16/run-dxf.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Lancer le plugin convertisseur DXF</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_save_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/document-save.png</normaloff>:/ico/22x22/document-save.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Enregistrer</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_save_as_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/document-save-as.png</normaloff>:/ico/22x22/document-save-as.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enregistrer sous</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_save_as_file_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/document-save.png</normaloff>:/ico/22x22/document-save.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enregistrer dans un fichier</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_reload_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/view-refresh.png</normaloff>:/ico/22x22/view-refresh.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Recharger</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_quit_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/application-exit.png</normaloff>:/ico/16x16/application-exit.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Quitter</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_deselect_all_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/edit-select-none.png</normaloff>:/ico/16x16/edit-select-none.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Désélectionner tout</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_cut_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/edit-cut.png</normaloff>:/ico/16x16/edit-cut.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Co&uper</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_copy_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/edit-copy.png</normaloff>:/ico/16x16/edit-copy.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Cop&ier</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_paste_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/edit-paste.png</normaloff>:/ico/16x16/edit-paste.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>C&oller</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_paste_in_area_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/edit-paste.png</normaloff>:/ico/16x16/edit-paste.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>C&oller dans la zone</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_paste_from_file_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/text-xml.png</normaloff>:/ico/16x16/text-xml.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Un fichier</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_paste_from_element_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/element.png</normaloff>:/ico/16x16/element.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Un élément</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_revert_selection_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/edit-select-invert.png</normaloff>:/ico/16x16/edit-select-invert.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Inverser la sélection</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_delete_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/edit-delete.png</normaloff>:/ico/22x22/edit-delete.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Supprimer</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_edit_names_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/names.png</normaloff>:/ico/22x22/names.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Éditer le nom et les traductions de l'élément</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_edit_author_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/preferences-desktop-user.png</normaloff>:/ico/16x16/preferences-desktop-user.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Éditer les informations sur l'auteur</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_edit_element_properties_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/element-edit.png</normaloff>:/ico/22x22/element-edit.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Éditer les propriétés de l'élément</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_zoom_in_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/zoom-in.png</normaloff>:/ico/22x22/zoom-in.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Zoom avant</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_zoom_out_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/zoom-out.png</normaloff>:/ico/22x22/zoom-out.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Zoom arrière</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_zoom_fit_best_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/zoom-fit-best.png</normaloff>:/ico/22x22/zoom-fit-best.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Zoom adapté</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_zoom_original_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/22x22/zoom-original.png</normaloff>:/ico/22x22/zoom-original.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Pas de zoom</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_about_qet_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/qet.png</normaloff>:/ico/16x16/qet.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>À &propos de QElectroTech</string>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>Affiche des informations sur QElectroTech</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_online_manual">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/help-contents.png</normaloff>:/ico/16x16/help-contents.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Manuel en ligne</string>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>Lance le navigateur par défaut vers le manuel en ligne de QElectroTech</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_youtube_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/kdenlive-show-video.png</normaloff>:/ico/16x16/kdenlive-show-video.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Chaine Youtube</string>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>Lance le navigateur par défaut vers la chaine Youtube de QElectroTech</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_donate_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/help-donate.png</normaloff>:/ico/16x16/help-donate.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Soutenir le projet par un don</string>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>Soutenir le projet QElectroTech par un don</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="m_about_qt_action">
|
||||
<property name="icon">
|
||||
<iconset resource="../../../qelectrotech.qrc">
|
||||
<normaloff>:/ico/16x16/qt.png</normaloff>:/ico/16x16/qt.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>À propos de &Qt</string>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>Affiche des informations sur la bibliothèque Qt</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../../qelectrotech.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1,254 @@
|
||||
/*
|
||||
Copyright 2006-2021 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 "terminaleditor.h"
|
||||
#include "ui_terminaleditor.h"
|
||||
#include "../../qeticons.h"
|
||||
#include "../../qet.h"
|
||||
#include "../graphicspart/partterminal.h"
|
||||
#include "../../QPropertyUndoCommand/qpropertyundocommand.h"
|
||||
|
||||
/**
|
||||
* @brief TerminalEditor::TerminalEditor
|
||||
* Default constructor
|
||||
* @param editor : element editor of which this terminal editor belong
|
||||
* @param parent : parent widget
|
||||
*/
|
||||
TerminalEditor::TerminalEditor(QETElementEditor *editor, QWidget *parent) :
|
||||
ElementItemEditor(editor, parent),
|
||||
ui(new Ui::TerminalEditor)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
init();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalEditor::~TerminalEditor
|
||||
* Destructor
|
||||
*/
|
||||
TerminalEditor::~TerminalEditor()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalEditor::updateForm
|
||||
* Reimplemented from ElementItemEditor
|
||||
* Update the content of this widget
|
||||
*/
|
||||
void TerminalEditor::updateForm()
|
||||
{
|
||||
if (!m_part) {
|
||||
return;
|
||||
}
|
||||
activeConnections(false);
|
||||
|
||||
ui->m_x_dsb->setValue(m_part->property("x").toReal());
|
||||
ui->m_y_dsb->setValue(m_part->property("y").toReal());
|
||||
ui->m_orientation_cb->setCurrentIndex(ui->m_orientation_cb->findData(m_part->property("orientation")));
|
||||
ui->m_name_le->setText(m_part->name());
|
||||
ui->m_type_cb->setCurrentIndex(ui->m_orientation_cb->findData(m_part->terminalType()));
|
||||
|
||||
activeConnections(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalEditor::setPart
|
||||
* Set the part to edit.
|
||||
* The part must be a PartTerminal, in other case return false.
|
||||
* @param new_part : the part to edit
|
||||
* @return true if the part can be edited.
|
||||
*/
|
||||
bool TerminalEditor::setPart(CustomElementPart *new_part)
|
||||
{
|
||||
if (m_part == new_part) {
|
||||
return true;
|
||||
}
|
||||
|
||||
activeChangeConnections(false);
|
||||
|
||||
if (!new_part)
|
||||
{
|
||||
m_part = nullptr;
|
||||
return(true);
|
||||
}
|
||||
|
||||
if (PartTerminal *part_terminal = dynamic_cast<PartTerminal *>(new_part))
|
||||
{
|
||||
m_part = part_terminal;
|
||||
updateForm();
|
||||
activeChangeConnections(true);
|
||||
return(true);
|
||||
}
|
||||
return(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalEditor::currentPart
|
||||
* @return the current edited part
|
||||
* or nullptr if there is no part or several part
|
||||
* @see QList<CustomElementPart *> TerminalEditor::currentParts() const
|
||||
*/
|
||||
CustomElementPart *TerminalEditor::currentPart() const
|
||||
{
|
||||
return m_part;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalEditor::init
|
||||
* Some init about this class
|
||||
*/
|
||||
void TerminalEditor::init()
|
||||
{
|
||||
ui->m_orientation_cb->addItem(QET::Icons::North, tr("Nord"), Qet::North);
|
||||
ui->m_orientation_cb->addItem(QET::Icons::East, tr("Est"), Qet::East);
|
||||
ui->m_orientation_cb->addItem(QET::Icons::South, tr("Sud"), Qet::South);
|
||||
ui->m_orientation_cb->addItem(QET::Icons::West, tr("Ouest"), Qet::West);
|
||||
|
||||
ui->m_type_cb->addItem(tr("Générique"), TerminalData::Generic);
|
||||
ui->m_type_cb->addItem(tr("Bornier intérieur"), TerminalData::Inner);
|
||||
ui->m_type_cb->addItem(tr("Bornier extérieur"), TerminalData::Outer);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalEditor::posEdited
|
||||
*/
|
||||
void TerminalEditor::posEdited()
|
||||
{
|
||||
if (m_locked) {
|
||||
return;
|
||||
}
|
||||
m_locked = true;
|
||||
|
||||
QPointF new_pos(ui->m_x_dsb->value(),
|
||||
ui->m_y_dsb->value());
|
||||
|
||||
if (m_part->pos() != new_pos)
|
||||
{
|
||||
auto undo = new QPropertyUndoCommand(m_part, "pos", m_part->property("pos"), new_pos);
|
||||
undo->setText(tr("Déplacer une borne"));
|
||||
undo->setAnimated(true, false);
|
||||
undoStack().push(undo);
|
||||
}
|
||||
|
||||
m_locked = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalEditor::orientationEdited
|
||||
*/
|
||||
void TerminalEditor::orientationEdited()
|
||||
{
|
||||
if (m_locked) {
|
||||
return;
|
||||
}
|
||||
m_locked = true;
|
||||
|
||||
auto ori_ = ui->m_orientation_cb->currentData();
|
||||
if (m_part->orientation() != ori_)
|
||||
{
|
||||
auto undo = new QPropertyUndoCommand(m_part, "orientation", m_part->property("orientation"), ori_);
|
||||
undo->setText(tr("Modifier l'orientation d'une borne"));
|
||||
undoStack().push(undo);
|
||||
}
|
||||
|
||||
m_locked = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalEditor::nameEdited
|
||||
*/
|
||||
void TerminalEditor::nameEdited()
|
||||
{
|
||||
if (m_locked) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_locked = true;
|
||||
QString name_(ui->m_name_le->text());
|
||||
|
||||
if (m_part->name() != name_)
|
||||
{
|
||||
auto undo = new QPropertyUndoCommand(m_part, "name", m_part->property("name"), name_);
|
||||
undo->setText(tr("Modifier le nom du terminal"));
|
||||
undoStack().push(undo);
|
||||
}
|
||||
m_locked=false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalEditor::typeEdited
|
||||
*/
|
||||
void TerminalEditor::typeEdited()
|
||||
{
|
||||
if (m_locked) {
|
||||
return;
|
||||
}
|
||||
m_locked = true;
|
||||
|
||||
auto type = ui->m_type_cb->currentData();
|
||||
if (type != m_part->terminalType()) {
|
||||
auto undo = new QPropertyUndoCommand(m_part, "terminal_type", m_part->terminalType(), type);
|
||||
undo->setText(tr("Modifier le type d'une borne"));
|
||||
undoStack().push(undo);
|
||||
}
|
||||
m_locked = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalEditor::activeConnections
|
||||
* Active connection between the widgets used in this editor
|
||||
* and method of this class.
|
||||
* @param active
|
||||
*/
|
||||
void TerminalEditor::activeConnections(bool active)
|
||||
{
|
||||
if (active) {
|
||||
m_editor_connections << connect(ui->m_x_dsb, QOverload<qreal>::of(&QDoubleSpinBox::valueChanged),
|
||||
this, &TerminalEditor::posEdited);
|
||||
m_editor_connections << connect(ui->m_y_dsb, QOverload<qreal>::of(&QDoubleSpinBox::valueChanged),
|
||||
this, &TerminalEditor::posEdited);
|
||||
m_editor_connections << connect(ui->m_orientation_cb, QOverload<int>::of(&QComboBox::activated),
|
||||
this, &TerminalEditor::orientationEdited);
|
||||
m_editor_connections << connect(ui->m_name_le, &QLineEdit::editingFinished,
|
||||
this, &TerminalEditor::nameEdited);
|
||||
m_editor_connections << connect(ui->m_type_cb, QOverload<int>::of(&QComboBox::activated),
|
||||
this, &TerminalEditor::typeEdited);
|
||||
} else {
|
||||
for (auto const & con : qAsConst(m_editor_connections)) {
|
||||
QObject::disconnect(con);
|
||||
}
|
||||
m_editor_connections.clear();
|
||||
}
|
||||
}
|
||||
|
||||
void TerminalEditor::activeChangeConnections(bool active)
|
||||
{
|
||||
if (active)
|
||||
{
|
||||
m_change_connections << connect(m_part, &PartTerminal::xChanged, this, &TerminalEditor::updateForm);
|
||||
m_change_connections << connect(m_part, &PartTerminal::yChanged, this, &TerminalEditor::updateForm);
|
||||
m_change_connections << connect(m_part, &PartTerminal::orientationChanged, this, &TerminalEditor::updateForm);
|
||||
m_change_connections << connect(m_part, &PartTerminal::nameChanged, this, &TerminalEditor::updateForm);
|
||||
m_change_connections << connect(m_part, &PartTerminal::terminalTypeChanged, this, &TerminalEditor::updateForm);
|
||||
} else {
|
||||
for (auto &con : m_change_connections) {
|
||||
QObject::disconnect(con);
|
||||
}
|
||||
m_change_connections.clear();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
Copyright 2006-2021 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 TERMINALEDITOR_H
|
||||
#define TERMINALEDITOR_H
|
||||
|
||||
#include <QWidget>
|
||||
#include "../elementitemeditor.h"
|
||||
|
||||
namespace Ui {
|
||||
class TerminalEditor;
|
||||
}
|
||||
|
||||
class PartTerminal;
|
||||
|
||||
/**
|
||||
* @brief The TerminalEditor class
|
||||
* Provide a widget used to edit the properties of a PartTerminal
|
||||
*/
|
||||
class TerminalEditor : public ElementItemEditor
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
TerminalEditor(QETElementEditor *editor, QWidget *parent = nullptr);
|
||||
~TerminalEditor() override;
|
||||
|
||||
void updateForm() override;
|
||||
bool setPart(CustomElementPart *new_part) override;
|
||||
CustomElementPart *currentPart() const override;
|
||||
QList<CustomElementPart *> currentParts() const override {return QList<CustomElementPart *>();}
|
||||
|
||||
private:
|
||||
void init();
|
||||
void posEdited();
|
||||
void orientationEdited();
|
||||
void nameEdited();
|
||||
void typeEdited();
|
||||
void activeConnections(bool active);
|
||||
void activeChangeConnections(bool active);
|
||||
|
||||
private:
|
||||
Ui::TerminalEditor *ui;
|
||||
QVector<QMetaObject::Connection> m_editor_connections,
|
||||
m_change_connections;
|
||||
PartTerminal *m_part = nullptr;
|
||||
bool m_locked = false;
|
||||
};
|
||||
|
||||
#endif // TERMINALEDITOR_H
|
||||
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>TerminalEditor</class>
|
||||
<widget class="QWidget" name="TerminalEditor">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>511</width>
|
||||
<height>236</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>y :</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QDoubleSpinBox" name="m_x_dsb">
|
||||
<property name="minimum">
|
||||
<double>-5000.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>5000.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QDoubleSpinBox" name="m_y_dsb">
|
||||
<property name="minimum">
|
||||
<double>-5000.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>5000.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Orientation :</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLineEdit" name="m_name_le"/>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="m_orientation_cb"/>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>x :</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Nom :</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Type :</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="m_type_cb"/>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<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>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -53,31 +53,6 @@ ElementsCollectionCache::ElementsCollectionCache(const QString &database_path, Q
|
||||
cache_db_.exec("PRAGMA synchronous = OFF");
|
||||
|
||||
#if TODO_LIST
|
||||
#pragma message("@TODO This code remove old table with mtime for create table with uuid, created at version 0,5")
|
||||
#endif
|
||||
//TODO This code remove old table with mtime for create table with uuid, created at version 0,5
|
||||
//see to remove this code at version 0,6 or 0,7 when all users will table with uuid.
|
||||
#if TODO_LIST
|
||||
#pragma message("@TODO remove this code for qet 0.6 or later")
|
||||
#endif
|
||||
QSqlQuery table_name(cache_db_);
|
||||
if (table_name.exec("PRAGMA table_info(names)"))
|
||||
{
|
||||
if (table_name.seek(2))
|
||||
{
|
||||
QString str = table_name.value(1).toString();
|
||||
table_name.finish();
|
||||
if (str == "mtime")
|
||||
{
|
||||
QSqlQuery error;
|
||||
error = cache_db_.exec("DROP TABLE names");
|
||||
error = cache_db_.exec("DROP TABLE pixmaps");
|
||||
}
|
||||
}
|
||||
else
|
||||
table_name.finish();
|
||||
}
|
||||
#if TODO_LIST
|
||||
#pragma message("@TODO the tables could already exist, handle that case.")
|
||||
#endif
|
||||
//@TODO the tables could already exist, handle that case.
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#include "elementspanelwidget.h"
|
||||
|
||||
#include "diagram.h"
|
||||
#include "editor/qetelementeditor.h"
|
||||
#include "editor/ui/qetelementeditor.h"
|
||||
#include "elementscategoryeditor.h"
|
||||
#include "qetapp.h"
|
||||
#include "qeticons.h"
|
||||
|
||||
@@ -79,9 +79,10 @@ void QetGraphicsTableFactory::create(Diagram *diagram, AddTableDialog *dialog)
|
||||
}
|
||||
|
||||
//Add new table if needed and option checked
|
||||
if (dialog->addNewTableToNewDiagram()
|
||||
&& table_->displayNRow() > 0
|
||||
&& table_->model()->rowCount() > table_->displayNRow())
|
||||
dialog->addNewTableToNewDiagram();
|
||||
table_->model()->rowCount();
|
||||
table_->displayNRow();
|
||||
if (dialog->addNewTableToNewDiagram() && table_->model()->rowCount() > table_->displayNRow())
|
||||
{
|
||||
auto already_displayed_rows = table_->displayNRow();
|
||||
auto project_ = diagram->project();
|
||||
|
||||
+24
-23
@@ -29,21 +29,20 @@
|
||||
#endif
|
||||
#include "qet.h"
|
||||
|
||||
MachineInfo *MachineInfo::m_instance = nullptr;
|
||||
/**
|
||||
@brief MachineInfo::MachineInfo
|
||||
@brief Machine_info::Machine_info
|
||||
@param parent
|
||||
*/
|
||||
MachineInfo::MachineInfo()
|
||||
Machine_info::Machine_info(QObject *parent) : QObject(parent)
|
||||
{
|
||||
init_get_Screen_info();
|
||||
init_get_cpu_info();
|
||||
}
|
||||
|
||||
/**
|
||||
@brief MachineInfo::send_info_to_debug
|
||||
@brief Machine_info::send_info_to_debug
|
||||
*/
|
||||
void MachineInfo::send_info_to_debug()
|
||||
void Machine_info::send_info_to_debug()
|
||||
{
|
||||
qInfo()<<"debugging enabled:"
|
||||
<< QLibraryInfo::isDebugBuild();
|
||||
@@ -121,7 +120,7 @@ void MachineInfo::send_info_to_debug()
|
||||
#endif
|
||||
qInfo() << "GitRevision " + QString(GIT_COMMIT_SHA);
|
||||
qInfo()<< "QElectroTech V " + QET::displayedVersion;
|
||||
qInfo()<< QObject::tr("Compilation : ") + pc.built.version;
|
||||
qInfo()<< tr("Compilation : ") + pc.built.version;
|
||||
qInfo()<< "Built with Qt " + pc.built.QT
|
||||
+ " - Date : " + pc.built.date
|
||||
+ " : " + pc.built.time;
|
||||
@@ -152,10 +151,10 @@ void MachineInfo::send_info_to_debug()
|
||||
}
|
||||
|
||||
/**
|
||||
@brief MachineInfo::init_get_Screen_info
|
||||
@brief Machine_info::init_get_Screen_info
|
||||
Finds the largest screen and saves the values
|
||||
*/
|
||||
void MachineInfo::init_get_Screen_info()
|
||||
void Machine_info::init_get_Screen_info()
|
||||
{
|
||||
const auto screens = qApp->screens();
|
||||
pc.screen.count=screens.count();
|
||||
@@ -175,9 +174,9 @@ void MachineInfo::init_get_Screen_info()
|
||||
}
|
||||
|
||||
/**
|
||||
@brief MachineInfo::init_get_cpu_info
|
||||
@brief Machine_info::init_get_cpu_info
|
||||
*/
|
||||
void MachineInfo::init_get_cpu_info()
|
||||
void Machine_info::init_get_cpu_info()
|
||||
{
|
||||
#ifdef __GNUC__
|
||||
#ifdef __APPLE_CC__
|
||||
@@ -192,9 +191,9 @@ void MachineInfo::init_get_cpu_info()
|
||||
}
|
||||
|
||||
/**
|
||||
@brief MachineInfo::init_get_cpu_info_linux
|
||||
@brief Machine_info::init_get_cpu_info_linux
|
||||
*/
|
||||
void MachineInfo::init_get_cpu_info_linux()
|
||||
void Machine_info::init_get_cpu_info_linux()
|
||||
{
|
||||
QProcess linuxcpuinfo;
|
||||
linuxcpuinfo.start("bash", QStringList()
|
||||
@@ -238,9 +237,9 @@ void MachineInfo::init_get_cpu_info_linux()
|
||||
}
|
||||
|
||||
/**
|
||||
@brief MachineInfo::init_get_cpu_info_winnt
|
||||
@brief Machine_info::init_get_cpu_info_winnt
|
||||
*/
|
||||
void MachineInfo::init_get_cpu_info_winnt()
|
||||
void Machine_info::init_get_cpu_info_winnt()
|
||||
{
|
||||
QProcess wincpuinfo;
|
||||
wincpuinfo.start("wmic",
|
||||
@@ -292,9 +291,9 @@ void MachineInfo::init_get_cpu_info_winnt()
|
||||
}
|
||||
|
||||
/**
|
||||
@brief MachineInfo::init_get_cpu_info_macos
|
||||
@brief Machine_info::init_get_cpu_info_macos
|
||||
*/
|
||||
void MachineInfo::init_get_cpu_info_macos()
|
||||
void Machine_info::init_get_cpu_info_macos()
|
||||
{
|
||||
QProcess macoscpuinfo;
|
||||
macoscpuinfo.start("bash",
|
||||
@@ -318,28 +317,30 @@ void MachineInfo::init_get_cpu_info_macos()
|
||||
}
|
||||
|
||||
/**
|
||||
@brief MachineInfo::i_max_screen_width
|
||||
@brief Machine_info::i_max_screen_width
|
||||
@return max screen width
|
||||
*/
|
||||
int32_t MachineInfo::i_max_screen_width() {
|
||||
int32_t Machine_info::i_max_screen_width()
|
||||
{
|
||||
return pc.screen.Max_width;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief MachineInfo::i_max_screen_height
|
||||
@brief Machine_info::i_max_screen_height
|
||||
@return max screen height
|
||||
*/
|
||||
int32_t MachineInfo::i_max_screen_height() {
|
||||
int32_t Machine_info::i_max_screen_height()
|
||||
{
|
||||
return pc.screen.Max_height;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief MachineInfo::compilation_info
|
||||
@brief Machine_info::compilation_info
|
||||
@return compilation_info
|
||||
*/
|
||||
QString MachineInfo::compilation_info()
|
||||
QString Machine_info::compilation_info()
|
||||
{
|
||||
QString compilation_info = "<br />" + QObject::tr("Compilation : ");
|
||||
QString compilation_info = "<br />" + tr("Compilation : ");
|
||||
compilation_info +=pc.built.version;
|
||||
compilation_info += "<br>Built with Qt " + pc.built.QT;
|
||||
compilation_info += " - Date : " + pc.built.date;
|
||||
|
||||
+17
-43
@@ -18,57 +18,31 @@
|
||||
#ifndef MACHINE_INFO_H
|
||||
#define MACHINE_INFO_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QThread>
|
||||
#include <QMutex>
|
||||
|
||||
/**
|
||||
@brief The MachineInfo class
|
||||
@brief The Machine_info class
|
||||
This class hold information from your PC.
|
||||
*/
|
||||
class MachineInfo
|
||||
class Machine_info : public QObject
|
||||
{
|
||||
static MachineInfo *m_instance;
|
||||
public:
|
||||
static MachineInfo *instance()
|
||||
{
|
||||
static QMutex mutex;
|
||||
if (!m_instance)
|
||||
{
|
||||
mutex.lock();
|
||||
if (!m_instance) {
|
||||
m_instance = new MachineInfo();
|
||||
}
|
||||
mutex.unlock();
|
||||
}
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Machine_info(QObject *parent = nullptr);
|
||||
int32_t i_max_screen_width();
|
||||
int32_t i_max_screen_height();
|
||||
QString compilation_info();
|
||||
void send_info_to_debug();
|
||||
|
||||
return m_instance;
|
||||
}
|
||||
|
||||
static void dropInstance()
|
||||
{
|
||||
static QMutex mutex;
|
||||
if (m_instance) {
|
||||
mutex.lock();
|
||||
delete m_instance;
|
||||
m_instance = nullptr;
|
||||
mutex.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
int32_t i_max_screen_width();
|
||||
int32_t i_max_screen_height();
|
||||
QString compilation_info();
|
||||
void send_info_to_debug();
|
||||
|
||||
|
||||
private:
|
||||
MachineInfo();
|
||||
void init_get_Screen_info();
|
||||
void init_get_cpu_info();
|
||||
void init_get_cpu_info_linux();
|
||||
void init_get_cpu_info_winnt();
|
||||
void init_get_cpu_info_macos();
|
||||
signals:
|
||||
|
||||
private:
|
||||
void init_get_Screen_info();
|
||||
void init_get_cpu_info();
|
||||
void init_get_cpu_info_linux();
|
||||
void init_get_cpu_info_winnt();
|
||||
void init_get_cpu_info_macos();
|
||||
struct Pc
|
||||
{
|
||||
struct Screen
|
||||
|
||||
+12
-27
@@ -18,11 +18,10 @@
|
||||
#include "machine_info.h"
|
||||
#include "qet.h"
|
||||
#include "qetapp.h"
|
||||
#include "singleapplication.h"
|
||||
#include "utils/macosxopenevent.h"
|
||||
|
||||
#include <QStyleFactory>
|
||||
#include <QtConcurrent>
|
||||
#include <QApplication>
|
||||
|
||||
/**
|
||||
@brief myMessageOutput
|
||||
@@ -175,7 +174,7 @@ int main(int argc, char **argv)
|
||||
#pragma message("@TODO remove code for QT 6 or later")
|
||||
#endif
|
||||
#endif
|
||||
SingleApplication app(argc, argv, true);
|
||||
QApplication app(argc, argv, true);
|
||||
#ifdef Q_OS_MACOS
|
||||
//Handle the opening of QET when user double click on a .qet .elmt .tbt file
|
||||
//or drop these same files to the QET icon of the dock
|
||||
@@ -183,33 +182,19 @@ int main(int argc, char **argv)
|
||||
app.installEventFilter(&open_event);
|
||||
app.setStyle(QStyleFactory::create("Fusion"));
|
||||
#endif
|
||||
|
||||
if (app.isSecondary())
|
||||
{
|
||||
QStringList arg_list = app.arguments();
|
||||
//Remove the first argument, it's the binary file
|
||||
arg_list.takeFirst();
|
||||
QETArguments qetarg(arg_list);
|
||||
QString message = "launched-with-args: " + QET::joinWithSpaces(
|
||||
QStringList(qetarg.arguments()));
|
||||
app.sendMessage(message.toUtf8());
|
||||
return 0;
|
||||
}
|
||||
|
||||
QETApp qetapp;
|
||||
QETApp::instance()->installEventFilter(&qetapp);
|
||||
QObject::connect(&app, &SingleApplication::receivedMessage,
|
||||
&qetapp, &QETApp::receiveMessage);
|
||||
|
||||
QtConcurrent::run([=]()
|
||||
{
|
||||
// for debugging
|
||||
qInstallMessageHandler(myMessageOutput);
|
||||
qInfo("Start-up");
|
||||
// delete old log files of max 7 days old.
|
||||
delete_old_log_files(7);
|
||||
MachineInfo::instance()->send_info_to_debug();
|
||||
});
|
||||
// for debugging
|
||||
qInstallMessageHandler(myMessageOutput);
|
||||
qInfo("Start-up");
|
||||
// delete old log files of max 7 days old.
|
||||
delete_old_log_files(7);
|
||||
{
|
||||
Machine_info *my_ma =new Machine_info();
|
||||
my_ma->send_info_to_debug();
|
||||
delete my_ma;
|
||||
}
|
||||
return app.exec();
|
||||
}
|
||||
|
||||
|
||||
@@ -20,10 +20,14 @@
|
||||
#include "ElementsCollection/elementcollectionitem.h"
|
||||
#include "ElementsCollection/elementscollectionmodel.h"
|
||||
#include "NameList/ui/namelistwidget.h"
|
||||
#include "editor/qetelementeditor.h"
|
||||
#include "editor/ui/qetelementeditor.h"
|
||||
#include "qetmessagebox.h"
|
||||
#include "qfilenameedit.h"
|
||||
|
||||
#include <QTreeView>
|
||||
#include <QVBoxLayout>
|
||||
#include <QLabel>
|
||||
|
||||
/**
|
||||
Constructeur
|
||||
@param parent QWidget parent de ce dialogue
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#include "autoNum/assignvariables.h"
|
||||
#include "diagram.h"
|
||||
#include "diagramview.h"
|
||||
#include "editor/qetelementeditor.h"
|
||||
#include "editor/ui/qetelementeditor.h"
|
||||
#include "exportdialog.h"
|
||||
#include "qetapp.h"
|
||||
#include "qeticons.h"
|
||||
|
||||
@@ -0,0 +1,406 @@
|
||||
/*
|
||||
Copyright 2006-2021 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 "elementdata.h"
|
||||
#include "../qetxml.h"
|
||||
#include <QDebug>
|
||||
|
||||
void ElementData::toSettings(QSettings &settings, const QString prefix) const {
|
||||
Q_UNUSED(settings)
|
||||
Q_UNUSED(prefix)
|
||||
}
|
||||
|
||||
void ElementData::fromSettings(const QSettings &settings, const QString prefix) {
|
||||
Q_UNUSED(settings)
|
||||
Q_UNUSED(prefix)
|
||||
}
|
||||
|
||||
QDomElement ElementData::toXml(QDomDocument &xml_element) const {
|
||||
Q_UNUSED(xml_element)
|
||||
return QDomElement();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ElementData::fromXml
|
||||
* load properties from xml element.
|
||||
* The tag name of xml_element must be definition
|
||||
* and have an attribute "type"
|
||||
* @param xml_element : tagName must be 'definition'
|
||||
* @return true is successfuly loaded
|
||||
*/
|
||||
bool ElementData::fromXml(const QDomElement &xml_element)
|
||||
{
|
||||
if(xml_element.tagName() != "definition" ||
|
||||
xml_element.attribute("type") != "element") {
|
||||
return false;
|
||||
}
|
||||
|
||||
m_type = typeFromString(xml_element.attribute("link_type", "simple"));
|
||||
kindInfoFromXml(xml_element);
|
||||
m_informations.fromXml(xml_element.firstChildElement("elementInformations"),
|
||||
"elementInformation");
|
||||
m_names_list.fromXml(xml_element);
|
||||
|
||||
auto xml_draw_info = xml_element.firstChildElement("informations");
|
||||
if(xml_draw_info.tagName() == "informations") {
|
||||
m_drawing_information = xml_draw_info.text();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QDomElement ElementData::kindInfoToXml(QDomDocument &document)
|
||||
{
|
||||
//kindInformations
|
||||
auto returned_elmt = document.createElement("kindInformations");
|
||||
|
||||
if (m_type == ElementData::Master)
|
||||
{
|
||||
auto xml_type = document.createElement("kindInformation");
|
||||
xml_type.setAttribute("name", "type");
|
||||
auto type_txt = document.createTextNode(masterTypeToString(m_master_type));
|
||||
xml_type.appendChild(type_txt);
|
||||
|
||||
returned_elmt.appendChild(xml_type);
|
||||
}
|
||||
else if (m_type == ElementData::Slave)
|
||||
{
|
||||
//type
|
||||
auto xml_type = document.createElement("kindInformation");
|
||||
xml_type.setAttribute("name", "type");
|
||||
auto type_txt = document.createTextNode(slaveTypeToString(m_slave_type));
|
||||
xml_type.appendChild(type_txt);
|
||||
returned_elmt.appendChild(xml_type);
|
||||
|
||||
//state
|
||||
auto xml_state = document.createElement("kindInformation");
|
||||
xml_state.setAttribute("name", "state");
|
||||
auto state_txt = document.createTextNode(slaveStateToString(m_slave_state));
|
||||
xml_state.appendChild(state_txt);
|
||||
|
||||
returned_elmt.appendChild(xml_state);
|
||||
|
||||
//contact count
|
||||
auto xml_count = document.createElement("kindInformation");
|
||||
xml_count.setAttribute("name", "number");
|
||||
auto count_txt = document.createTextNode(QString::number(m_contact_count));
|
||||
xml_count.appendChild(count_txt);
|
||||
|
||||
returned_elmt.appendChild(xml_count);
|
||||
}
|
||||
else if (m_type == ElementData::Terminale)
|
||||
{
|
||||
//type
|
||||
auto xml_type = document.createElement("kindInformation");
|
||||
xml_type.setAttribute("name", "type");
|
||||
auto type_txt = document.createTextNode(terminalTypeToString(m_terminal_type));
|
||||
xml_type.appendChild(type_txt);
|
||||
returned_elmt.appendChild(xml_type);
|
||||
|
||||
//function
|
||||
auto xml_func = document.createElement("kindInformation");
|
||||
xml_func.setAttribute("name", "function");
|
||||
auto func_txt = document.createTextNode(terminalFunctionToString(m_terminal_function));
|
||||
xml_func.appendChild(func_txt);
|
||||
returned_elmt.appendChild(xml_func);
|
||||
}
|
||||
|
||||
return returned_elmt;
|
||||
}
|
||||
|
||||
bool ElementData::operator==(const ElementData &data) const
|
||||
{
|
||||
if (data.m_type != m_type) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (data.m_type == ElementData::Master) {
|
||||
if(data.m_master_type != m_master_type) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (data.m_type == ElementData::Slave) {
|
||||
if (data.m_slave_state != m_slave_state ||
|
||||
data.m_slave_type != m_slave_type ||
|
||||
data.m_contact_count != m_contact_count) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (data.m_type == ElementData::Terminale) {
|
||||
if (data.m_terminal_type != m_terminal_type ||
|
||||
data.m_terminal_function != m_terminal_function) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(data.m_informations != m_informations) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (data.m_names_list != m_names_list) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_drawing_information != m_drawing_information) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ElementData::operator !=(const ElementData &data) const {
|
||||
return !(*this == data);
|
||||
}
|
||||
|
||||
QString ElementData::typeToString(ElementData::Type type)
|
||||
{
|
||||
switch (type) {
|
||||
case ElementData::Simple :
|
||||
return QString("simple");
|
||||
case ElementData::NextReport :
|
||||
return QString ("next_report");
|
||||
case ElementData::PreviousReport :
|
||||
return QString("previous_report");
|
||||
case ElementData::Master :
|
||||
return QString("master");
|
||||
case ElementData::Slave :
|
||||
return QString("slave");
|
||||
case ElementData::Terminale :
|
||||
return QString("terminal");
|
||||
default:
|
||||
qDebug() << "ElementData::typeToString : type don't exist"
|
||||
<< "return failsafe value 'simple'";
|
||||
return QString("simple");
|
||||
}
|
||||
}
|
||||
|
||||
ElementData::Type ElementData::typeFromString(const QString &string)
|
||||
{
|
||||
if (string == "simple") {
|
||||
return ElementData::Simple;
|
||||
} else if (string == "next_report") {
|
||||
return ElementData::NextReport;
|
||||
} else if (string == "previous_report") {
|
||||
return ElementData::PreviousReport;
|
||||
} else if (string == "master") {
|
||||
return ElementData::Master;
|
||||
} else if (string == "slave") {
|
||||
return ElementData::Slave;
|
||||
} else if (string == "terminal") {
|
||||
return ElementData::Terminale;
|
||||
}
|
||||
|
||||
//Return simple if nothing match
|
||||
qDebug() << "ElementData::typeFromString : string "
|
||||
<< string
|
||||
<< " don't exist, return failsafe value 'simple";
|
||||
return ElementData::Simple;
|
||||
}
|
||||
|
||||
QString ElementData::masterTypeToString(ElementData::MasterType type)
|
||||
{
|
||||
switch (type) {
|
||||
case ElementData::Coil:
|
||||
return QString ("coil");
|
||||
case ElementData::Protection:
|
||||
return QString ("protection");
|
||||
case ElementData::Commutator:
|
||||
return QString ("commutator");
|
||||
}
|
||||
}
|
||||
|
||||
ElementData::MasterType ElementData::masterTypeFromString(const QString &string)
|
||||
{
|
||||
if (string == "coil") {
|
||||
return ElementData::Coil;
|
||||
} else if (string == "protection") {
|
||||
return ElementData::Protection;
|
||||
} else if (string == "commutator") {
|
||||
return ElementData::Commutator;
|
||||
}
|
||||
|
||||
qDebug() << "ElementData::masterTypeFromString : string "
|
||||
<< string
|
||||
<< " don't exist, return failsafe value 'coil'";
|
||||
return ElementData::Coil;
|
||||
}
|
||||
|
||||
QString ElementData::slaveTypeToString(ElementData::SlaveType type)
|
||||
{
|
||||
switch (type) {
|
||||
case ElementData::SSimple:
|
||||
return QString ("simple");
|
||||
case ElementData::Power:
|
||||
return QString ("power");
|
||||
case ElementData::DelayOn:
|
||||
return QString("delayOn");
|
||||
case ElementData::DelayOff:
|
||||
return QString("delayOff");
|
||||
case ElementData::delayOnOff:
|
||||
return QString("delayOnOff");
|
||||
}
|
||||
}
|
||||
|
||||
ElementData::SlaveType ElementData::slaveTypeFromString(const QString &string)
|
||||
{
|
||||
if (string == "simple") {
|
||||
return ElementData::SSimple;
|
||||
} else if (string == "power") {
|
||||
return ElementData::Power;
|
||||
} else if (string == "delayOn") {
|
||||
return ElementData::DelayOn;
|
||||
} else if (string == "delayOff") {
|
||||
return ElementData::DelayOff;
|
||||
} else if (string == "delayOnOff") {
|
||||
return ElementData::delayOnOff;
|
||||
}
|
||||
|
||||
qDebug() << "ElementData::slaveTypeFromSting : string "
|
||||
<< string
|
||||
<< " don't exist, return failsafe value 'simple'";
|
||||
return ElementData::SSimple;
|
||||
}
|
||||
|
||||
QString ElementData::slaveStateToString(ElementData::SlaveState type)
|
||||
{
|
||||
switch (type) {
|
||||
case NO:
|
||||
return QString("NO");
|
||||
case NC:
|
||||
return QString("NC");
|
||||
case SW:
|
||||
return QString("SW");
|
||||
}
|
||||
}
|
||||
|
||||
ElementData::SlaveState ElementData::slaveStateFromString(const QString &string)
|
||||
{
|
||||
if (string == "NO") {
|
||||
return ElementData::NO;
|
||||
} else if (string == "NC") {
|
||||
return ElementData::NC;
|
||||
} else if (string == "SW") {
|
||||
return ElementData::SW;
|
||||
}
|
||||
|
||||
qDebug() << "ElementData::slaveStateFromString : string : "
|
||||
<< string
|
||||
<< " don't exist, return failsafe value 'NO'";
|
||||
return ElementData::NO;
|
||||
}
|
||||
|
||||
QString ElementData::terminalTypeToString(ElementData::TerminalType type)
|
||||
{
|
||||
switch (type) {
|
||||
case ElementData::TTGeneric :
|
||||
return QString("generic");
|
||||
case ElementData::Fuse :
|
||||
return QString("fuse");
|
||||
case ElementData::Sectional:
|
||||
return QString("sectional");
|
||||
case ElementData::Diode:
|
||||
return QString("diode");
|
||||
}
|
||||
}
|
||||
|
||||
ElementData::TerminalType ElementData::terminalTypeFromString(const QString &string)
|
||||
{
|
||||
if (string == "generic") {
|
||||
return ElementData::TTGeneric;
|
||||
} else if (string == "fuse") {
|
||||
return ElementData::Fuse;
|
||||
} else if (string == "sectional") {
|
||||
return ElementData::Sectional;
|
||||
} else if (string == "diode") {
|
||||
return ElementData::Diode;
|
||||
}
|
||||
|
||||
qDebug() << "ElementData::terminalTypeFromString : string : "
|
||||
<< string
|
||||
<< " don't exist, return failsafe value 'generic'";
|
||||
return ElementData::TTGeneric;
|
||||
}
|
||||
|
||||
QString ElementData::terminalFunctionToString(ElementData::TerminalFunction function)
|
||||
{
|
||||
switch (function) {
|
||||
case ElementData::TFGeneric:
|
||||
return QString("generic");
|
||||
case ElementData::Phase:
|
||||
return QString ("phase");
|
||||
case ElementData::Neutral:
|
||||
return QString("neutral");
|
||||
case ElementData::PE:
|
||||
return QString("pe");
|
||||
}
|
||||
}
|
||||
|
||||
ElementData::TerminalFunction ElementData::terminalFunctionFromString(const QString &string)
|
||||
{
|
||||
if (string == "generic") {
|
||||
return ElementData::TFGeneric;
|
||||
} else if (string == "phase") {
|
||||
return ElementData::Phase;
|
||||
} else if (string == "neutral") {
|
||||
return ElementData::Neutral;
|
||||
} else if (string == "pe") {
|
||||
return ElementData::PE;
|
||||
}
|
||||
|
||||
qDebug() << "ElementData::terminalFunctionFromString : string : "
|
||||
<< string
|
||||
<< " don't exist, return failsafe value 'generic'";
|
||||
return ElementData::TFGeneric;
|
||||
}
|
||||
|
||||
void ElementData::kindInfoFromXml(const QDomElement &xml_element)
|
||||
{
|
||||
if (m_type == ElementData::Master ||
|
||||
m_type == ElementData::Slave ||
|
||||
m_type == ElementData::Terminale)
|
||||
{
|
||||
auto xml_kind = xml_element.firstChildElement("kindInformations");
|
||||
for (const auto &dom_elmt : QETXML::findInDomElement(xml_kind, "kindInformation"))
|
||||
{
|
||||
if (!dom_elmt.hasAttribute("name")) {
|
||||
continue;
|
||||
}
|
||||
auto name = dom_elmt.attribute("name");
|
||||
|
||||
if (m_type == ElementData::Master &&
|
||||
name == "type") {
|
||||
m_master_type = masterTypeFromString(dom_elmt.text());
|
||||
}
|
||||
else if (m_type == ElementData::Slave ) {
|
||||
if (name == "type") {
|
||||
m_slave_type = slaveTypeFromString(dom_elmt.text());
|
||||
} else if (name == "state") {
|
||||
m_slave_state = slaveStateFromString(dom_elmt.text());
|
||||
} else if (name == "number") {
|
||||
m_contact_count = dom_elmt.text().toInt();
|
||||
}
|
||||
}
|
||||
else if (m_type == ElementData::Terminale) {
|
||||
if (name == "type") {
|
||||
m_terminal_type = terminalTypeFromString(dom_elmt.text());
|
||||
} else if (name == "function") {
|
||||
m_terminal_function = terminalFunctionFromString(dom_elmt.text());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
Copyright 2006-2021 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 ELEMENTDATA_H
|
||||
#define ELEMENTDATA_H
|
||||
|
||||
#include "propertiesinterface.h"
|
||||
#include "../diagramcontext.h"
|
||||
#include "../NameList/nameslist.h"
|
||||
|
||||
/**
|
||||
* @brief The ElementData class
|
||||
* WARNING
|
||||
* This class inherit from PropertiesInterface but
|
||||
* only fromXml is actually reimplemented.
|
||||
*/
|
||||
class ElementData : public PropertiesInterface
|
||||
{
|
||||
Q_GADGET
|
||||
|
||||
public:
|
||||
enum Type {
|
||||
Simple = 1,
|
||||
NextReport = 2,
|
||||
PreviousReport = 4,
|
||||
AllReport = 6,
|
||||
Master = 8,
|
||||
Slave = 16,
|
||||
Terminale = 32};
|
||||
Q_ENUM(Type)
|
||||
|
||||
enum MasterType {
|
||||
Coil,
|
||||
Protection,
|
||||
Commutator
|
||||
};
|
||||
Q_ENUM(MasterType)
|
||||
|
||||
enum SlaveType {
|
||||
SSimple,
|
||||
Power,
|
||||
DelayOn,
|
||||
DelayOff,
|
||||
delayOnOff
|
||||
};
|
||||
Q_ENUM(SlaveType)
|
||||
|
||||
enum SlaveState {
|
||||
NO,
|
||||
NC,
|
||||
SW
|
||||
};
|
||||
Q_ENUM(SlaveState)
|
||||
|
||||
enum TerminalType {
|
||||
TTGeneric,
|
||||
Fuse,
|
||||
Sectional,
|
||||
Diode
|
||||
};
|
||||
Q_ENUM(TerminalType)
|
||||
|
||||
enum TerminalFunction {
|
||||
TFGeneric,
|
||||
Phase,
|
||||
Neutral,
|
||||
PE
|
||||
};
|
||||
Q_ENUM(TerminalFunction)
|
||||
|
||||
ElementData() {}
|
||||
~ElementData() override {}
|
||||
|
||||
void toSettings(QSettings &settings, const QString prefix = QString()) const override;
|
||||
void fromSettings(const QSettings &settings, const QString prefix = QString()) override;
|
||||
QDomElement toXml(QDomDocument &xml_element) const override;
|
||||
bool fromXml(const QDomElement &xml_element) override;
|
||||
QDomElement kindInfoToXml(QDomDocument &document);
|
||||
|
||||
bool operator==(const ElementData &data) const;
|
||||
bool operator!=(const ElementData &data) const;
|
||||
|
||||
static QString typeToString(ElementData::Type type);
|
||||
static ElementData::Type typeFromString(const QString &string);
|
||||
|
||||
static QString masterTypeToString(ElementData::MasterType type);
|
||||
static ElementData::MasterType masterTypeFromString(const QString &string);
|
||||
|
||||
static QString slaveTypeToString (ElementData::SlaveType type);
|
||||
static ElementData::SlaveType slaveTypeFromString(const QString &string);
|
||||
|
||||
static QString slaveStateToString(ElementData::SlaveState type);
|
||||
static ElementData::SlaveState slaveStateFromString(const QString &string);
|
||||
|
||||
static QString terminalTypeToString(ElementData::TerminalType type);
|
||||
static ElementData::TerminalType terminalTypeFromString(const QString &string);
|
||||
|
||||
static QString terminalFunctionToString(ElementData::TerminalFunction function);
|
||||
static ElementData::TerminalFunction terminalFunctionFromString(const QString &string);
|
||||
|
||||
// must be public, because this class is a private member
|
||||
// of Element/ element editor and they must access this data
|
||||
ElementData::Type m_type = ElementData::Simple;
|
||||
|
||||
ElementData::MasterType m_master_type = ElementData::Coil;
|
||||
|
||||
ElementData::SlaveType m_slave_type = ElementData::SSimple;
|
||||
ElementData::SlaveState m_slave_state = ElementData::NO;
|
||||
|
||||
ElementData::TerminalType m_terminal_type = ElementData::TTGeneric;
|
||||
ElementData::TerminalFunction m_terminal_function = ElementData::TFGeneric;
|
||||
|
||||
int m_contact_count = 1;
|
||||
DiagramContext m_informations;
|
||||
NamesList m_names_list;
|
||||
QString m_drawing_information;
|
||||
|
||||
private:
|
||||
void kindInfoFromXml(const QDomElement &xml_element);
|
||||
};
|
||||
#endif // ELEMENTDATA_H
|
||||
@@ -1,6 +1,24 @@
|
||||
/*
|
||||
Copyright 2006-2021 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 "terminaldata.h"
|
||||
|
||||
#include <QGraphicsObject>
|
||||
#include <QDebug>
|
||||
|
||||
TerminalData::TerminalData():
|
||||
PropertiesInterface()
|
||||
@@ -44,8 +62,8 @@ void TerminalData::setParent(QGraphicsObject* parent)
|
||||
void TerminalData::toSettings(QSettings &settings, const QString prefix) const
|
||||
|
||||
{
|
||||
Q_UNUSED(settings);
|
||||
Q_UNUSED(prefix);
|
||||
Q_UNUSED(settings)
|
||||
Q_UNUSED(prefix)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -58,8 +76,8 @@ void TerminalData::toSettings(QSettings &settings, const QString prefix) const
|
||||
*/
|
||||
void TerminalData::fromSettings(const QSettings &settings, const QString prefix)
|
||||
{
|
||||
Q_UNUSED(settings);
|
||||
Q_UNUSED(prefix);
|
||||
Q_UNUSED(settings)
|
||||
Q_UNUSED(prefix)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,20 +96,17 @@ QDomElement TerminalData::toXml(QDomDocument &xml_document) const
|
||||
{
|
||||
QDomElement xml_element = xml_document.createElement("terminal");
|
||||
|
||||
// write the position of the terminal
|
||||
// ecrit la position de la borne
|
||||
xml_element.setAttribute("x", QString("%1").arg(q->scenePos().x()));
|
||||
xml_element.setAttribute("y", QString("%1").arg(q->scenePos().y()));
|
||||
|
||||
// Write name and number to XML
|
||||
xml_element.setAttribute("uuid", m_uuid.toString());
|
||||
xml_element.setAttribute("name", m_name);
|
||||
|
||||
// write the orientation of the terminal
|
||||
// ecrit l'orientation de la borne
|
||||
xml_element.setAttribute("orientation",
|
||||
Qet::orientationToString(m_orientation));
|
||||
|
||||
xml_element.setAttribute("type", typeToString(m_type));
|
||||
|
||||
return(xml_element);
|
||||
}
|
||||
|
||||
@@ -137,5 +152,45 @@ bool TerminalData::fromXml (const QDomElement &xml_element)
|
||||
m_orientation = Qet::orientationFromString(
|
||||
xml_element.attribute("orientation"));
|
||||
|
||||
m_type = typeFromString(xml_element.attribute("type"));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalData::typeToString
|
||||
* @param type
|
||||
* @return type into a QString
|
||||
*/
|
||||
QString TerminalData::typeToString(TerminalData::Type type)
|
||||
{
|
||||
switch (type) {
|
||||
case Generic:
|
||||
return QString("Generic");
|
||||
case Inner :
|
||||
return QString("Inner");
|
||||
case Outer :
|
||||
return QString("Outer");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalData::typeFromString
|
||||
* @param string
|
||||
* @return The type describe in string to TerminalData::Type.
|
||||
* if string doesn't describe a type, TerminalData::Generic is returned
|
||||
*/
|
||||
TerminalData::Type TerminalData::typeFromString(const QString &string)
|
||||
{
|
||||
if (string == "Generic") {
|
||||
return TerminalData::Generic;
|
||||
} else if (string == "Inner") {
|
||||
return TerminalData::Inner;
|
||||
} else if (string == "Outer") {
|
||||
return TerminalData::Outer;
|
||||
} else {
|
||||
qDebug() << "TerminalData::typeFromString, argument string is invalid"
|
||||
" failsafe type 'TerminalData::Generic' is returned";
|
||||
return TerminalData::Generic;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,20 @@
|
||||
/*
|
||||
Copyright 2006-2021 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 TERMINALDATA_H
|
||||
#define TERMINALDATA_H
|
||||
|
||||
@@ -18,10 +35,19 @@ class QGraphicsObject;
|
||||
*/
|
||||
class TerminalData : public PropertiesInterface
|
||||
{
|
||||
Q_GADGET
|
||||
|
||||
public:
|
||||
enum Type {
|
||||
Generic,
|
||||
Inner,
|
||||
Outer
|
||||
};
|
||||
Q_ENUM(Type)
|
||||
|
||||
TerminalData();
|
||||
TerminalData(QGraphicsObject* parent);
|
||||
~TerminalData();
|
||||
~TerminalData() override;
|
||||
|
||||
void init();
|
||||
|
||||
@@ -33,6 +59,9 @@ class TerminalData : public PropertiesInterface
|
||||
QDomElement toXml(QDomDocument &xml_element) const override;
|
||||
bool fromXml(const QDomElement &xml_element) override;
|
||||
|
||||
static QString typeToString(TerminalData::Type type);
|
||||
static TerminalData::Type typeFromString(const QString &string);
|
||||
|
||||
// must be public, because this class is a private member
|
||||
// of PartTerminal/Terminal and they must access this data
|
||||
public:
|
||||
@@ -46,7 +75,7 @@ class TerminalData : public PropertiesInterface
|
||||
Position of the second point of the terminal
|
||||
in scene coordinates
|
||||
*/
|
||||
QPointF second_point;
|
||||
QPointF m_second_point;
|
||||
/**
|
||||
@brief m_uuid
|
||||
Uuid of the terminal.
|
||||
@@ -80,6 +109,9 @@ class TerminalData : public PropertiesInterface
|
||||
PartTerminal and Terminal have access to it.
|
||||
*/
|
||||
QPointF m_pos;
|
||||
|
||||
TerminalData::Type m_type = TerminalData::Generic;
|
||||
|
||||
private:
|
||||
QGraphicsObject* q{nullptr};
|
||||
};
|
||||
|
||||
@@ -187,14 +187,13 @@ QHash<QString, XRefProperties> XRefProperties::defaultProperties()
|
||||
}
|
||||
|
||||
bool XRefProperties::operator ==(const XRefProperties &xrp) const{
|
||||
return (m_show_power_ctc == xrp.m_show_power_ctc
|
||||
&& m_display == xrp.m_display
|
||||
&& m_snap_to == xrp.m_snap_to
|
||||
&& m_prefix == xrp.m_prefix
|
||||
&& m_master_label== xrp.m_master_label
|
||||
&& m_offset == xrp.m_offset
|
||||
&& m_xref_pos == xrp.m_xref_pos
|
||||
&& m_slave_label == xrp.m_slave_label);
|
||||
return (m_show_power_ctc == xrp.m_show_power_ctc &&
|
||||
m_display == xrp.m_display &&
|
||||
m_snap_to == xrp.m_snap_to &&
|
||||
m_prefix == xrp.m_prefix &&
|
||||
m_master_label == xrp.m_master_label &&
|
||||
m_offset == xrp.m_offset &&
|
||||
m_xref_pos == xrp.m_xref_pos );
|
||||
}
|
||||
|
||||
bool XRefProperties::operator !=(const XRefProperties &xrp) const
|
||||
|
||||
+2
-2
@@ -29,9 +29,9 @@ class QActionGroup;
|
||||
*/
|
||||
namespace QET {
|
||||
/// QElectroTech version (as string, used to mark projects and elements XML documents)
|
||||
const QString version = "0.81";
|
||||
const QString version = "0.90";
|
||||
/// QElectroTech displayed version
|
||||
const QString displayedVersion = "0.81";
|
||||
const QString displayedVersion = "0.90-DEV";
|
||||
QString license();
|
||||
|
||||
//Describe the current state of a graphic item
|
||||
|
||||
+5
-15
@@ -19,7 +19,7 @@
|
||||
|
||||
#include "configdialog.h"
|
||||
#include "configpages.h"
|
||||
#include "editor/qetelementeditor.h"
|
||||
#include "editor/ui/qetelementeditor.h"
|
||||
#include "elementscollectioncache.h"
|
||||
#include "factory/elementfactory.h"
|
||||
#include "factory/elementpicturefactory.h"
|
||||
@@ -35,7 +35,6 @@
|
||||
#include "titleblocktemplate.h"
|
||||
#include "ui/aboutqetdialog.h"
|
||||
#include "ui/configpage/generalconfigurationpage.h"
|
||||
#include "machine_info.h"
|
||||
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
@@ -71,9 +70,6 @@ QString QETApp::m_user_custom_elements_dir = QString();
|
||||
QString QETApp::m_user_custom_tbt_dir = QString();
|
||||
QETApp *QETApp::m_qetapp = nullptr;
|
||||
|
||||
bool lang_is_set = false;
|
||||
QString system_language = QString();
|
||||
|
||||
|
||||
/**
|
||||
@brief QETApp::QETApp
|
||||
@@ -150,7 +146,6 @@ QETApp::~QETApp()
|
||||
|
||||
ElementFactory::dropInstance();
|
||||
ElementPictureFactory::dropInstance();
|
||||
MachineInfo::dropInstance();
|
||||
}
|
||||
|
||||
|
||||
@@ -230,16 +225,11 @@ void QETApp::setLanguage(const QString &desired_language) {
|
||||
*/
|
||||
QString QETApp::langFromSetting()
|
||||
{
|
||||
if (!lang_is_set)
|
||||
{
|
||||
QSettings settings;
|
||||
system_language = settings.value("lang", "system").toString();
|
||||
if(system_language == "system") {
|
||||
system_language = QLocale::system().name().left(2);
|
||||
}
|
||||
lang_is_set = true;
|
||||
QSettings settings;
|
||||
QString system_language = settings.value("lang", "system").toString();
|
||||
if(system_language == "system") {
|
||||
system_language = QLocale::system().name().left(2);
|
||||
}
|
||||
|
||||
return system_language;
|
||||
}
|
||||
/**
|
||||
|
||||
@@ -84,7 +84,7 @@ class QetGraphicsHeaderItem : public QGraphicsObject
|
||||
|
||||
QRect m_current_rect;
|
||||
QRectF m_bounding_rect;
|
||||
QPointer<QAbstractItemModel> m_model;
|
||||
QAbstractItemModel *m_model = nullptr;
|
||||
|
||||
QVector<int>
|
||||
m_sections_minimum_width,
|
||||
|
||||
@@ -156,17 +156,7 @@ QetGraphicsTableItem::QetGraphicsTableItem(QGraphicsItem *parent) :
|
||||
}
|
||||
|
||||
QetGraphicsTableItem::~QetGraphicsTableItem()
|
||||
{
|
||||
if (m_previous_table) {
|
||||
if (m_next_table) {
|
||||
m_previous_table->setNextTable(m_next_table);
|
||||
} else {
|
||||
m_previous_table->setNextTable(nullptr);
|
||||
}
|
||||
} else if (m_next_table) {
|
||||
m_next_table->setPreviousTable(nullptr);
|
||||
}
|
||||
}
|
||||
{}
|
||||
|
||||
/**
|
||||
@brief QetGraphicsTableItem::setModel
|
||||
@@ -185,7 +175,7 @@ void QetGraphicsTableItem::setModel(QAbstractItemModel *model)
|
||||
this, &QetGraphicsTableItem::modelReseted);
|
||||
}
|
||||
m_model = model;
|
||||
m_header_item->setModel(m_model);
|
||||
m_header_item->setModel(model);
|
||||
|
||||
setUpColumnAndRowMinimumSize();
|
||||
adjustSize();
|
||||
@@ -210,7 +200,7 @@ void QetGraphicsTableItem::setModel(QAbstractItemModel *model)
|
||||
*/
|
||||
QAbstractItemModel *QetGraphicsTableItem::model() const
|
||||
{
|
||||
return m_model.data();
|
||||
return m_model;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -280,8 +270,8 @@ void QetGraphicsTableItem::paint(
|
||||
if (m_previous_table) //Remove the number of row already displayed by previous tables
|
||||
row_count -= m_previous_table->displayNRowOffset();
|
||||
|
||||
if (m_number_of_row_to_display > 0) //User override the number of row to display
|
||||
row_count = std::min(row_count, m_number_of_row_to_display);
|
||||
if (m_number_of_displayed_row > 0) //User override the number of row to display
|
||||
row_count = std::min(row_count, m_number_of_displayed_row);
|
||||
|
||||
//Draw horizontal lines
|
||||
auto cell_height = static_cast<double>(m_current_size.height())/static_cast<double>(row_count);
|
||||
@@ -374,8 +364,8 @@ QSize QetGraphicsTableItem::minimumSize() const
|
||||
row_count -= m_previous_table->displayNRowOffset();
|
||||
}
|
||||
|
||||
if (m_number_of_row_to_display > 0)
|
||||
row_count = std::min(row_count, m_number_of_row_to_display);
|
||||
if (m_number_of_displayed_row > 0)
|
||||
row_count = std::min(row_count, m_number_of_displayed_row);
|
||||
|
||||
|
||||
//m_minimum_column_width already take in count the minimum size of header
|
||||
@@ -399,7 +389,7 @@ QSize QetGraphicsTableItem::minimumSize() const
|
||||
*/
|
||||
void QetGraphicsTableItem::setDisplayNRow(const int &number)
|
||||
{
|
||||
m_number_of_row_to_display = number;
|
||||
m_number_of_displayed_row = number;
|
||||
setToMinimumHeight();
|
||||
if (m_next_table)
|
||||
m_next_table->previousTableDisplayRowChanged();
|
||||
@@ -412,7 +402,7 @@ void QetGraphicsTableItem::setDisplayNRow(const int &number)
|
||||
*/
|
||||
int QetGraphicsTableItem::displayNRow() const
|
||||
{
|
||||
return m_number_of_row_to_display;
|
||||
return m_number_of_displayed_row;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -499,41 +489,19 @@ QString QetGraphicsTableItem::tableName() const
|
||||
*/
|
||||
int QetGraphicsTableItem::displayNRowOffset() const
|
||||
{
|
||||
auto offset_ = m_number_of_row_to_display;
|
||||
auto offset_ = m_number_of_displayed_row;
|
||||
if(m_previous_table)
|
||||
offset_ += m_previous_table->displayNRowOffset();
|
||||
|
||||
return offset_;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief QetGraphicsTableItem::displayedRowCount
|
||||
* @return the number of row displayed by this table
|
||||
*/
|
||||
int QetGraphicsTableItem::displayedRowCount() const
|
||||
{
|
||||
if (!m_model) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
//Calcule the number of rows to display.
|
||||
auto row_count = m_model->rowCount();
|
||||
|
||||
if (m_previous_table) //Remove the number of row already displayed by previous tables
|
||||
row_count -= m_previous_table->displayNRowOffset();
|
||||
|
||||
if (m_number_of_row_to_display > 0) //User override the number of row to display
|
||||
row_count = std::min(row_count, m_number_of_row_to_display);
|
||||
|
||||
return row_count;
|
||||
}
|
||||
|
||||
QPointer<QetGraphicsTableItem> QetGraphicsTableItem::previousTable() const
|
||||
QetGraphicsTableItem *QetGraphicsTableItem::previousTable() const
|
||||
{
|
||||
return m_previous_table;
|
||||
}
|
||||
|
||||
QPointer<QetGraphicsTableItem> QetGraphicsTableItem::nextTable() const
|
||||
QetGraphicsTableItem *QetGraphicsTableItem::nextTable() const
|
||||
{
|
||||
return m_next_table;
|
||||
}
|
||||
@@ -587,7 +555,7 @@ QDomElement QetGraphicsTableItem::toXml(QDomDocument &dom_document) const
|
||||
dom_table.setAttribute("height", QString::number(m_current_size.height()));
|
||||
dom_table.setAttribute("uuid", m_uuid.toString());
|
||||
dom_table.setAttribute("name", m_name);
|
||||
dom_table.setAttribute("display_n_row", QString::number(m_number_of_row_to_display));
|
||||
dom_table.setAttribute("display_n_row", QString::number(m_number_of_displayed_row));
|
||||
|
||||
//Add the header xml
|
||||
dom_table.appendChild(m_header_item->toXml(dom_document));
|
||||
@@ -603,7 +571,7 @@ QDomElement QetGraphicsTableItem::toXml(QDomDocument &dom_document) const
|
||||
{
|
||||
//Add model
|
||||
auto dom_model = dom_document.createElement("model");
|
||||
auto project_db_model = static_cast<ProjectDBModel *>(m_model.data());
|
||||
auto project_db_model = static_cast<ProjectDBModel *>(m_model);
|
||||
dom_model.appendChild(project_db_model->toXml(dom_document));
|
||||
dom_table.appendChild(dom_model);
|
||||
|
||||
@@ -645,7 +613,7 @@ void QetGraphicsTableItem::fromXml(const QDomElement &dom_element)
|
||||
"uuid",
|
||||
QUuid::createUuid().toString()));
|
||||
m_name = dom_element.attribute("name");
|
||||
m_number_of_row_to_display = dom_element.attribute(
|
||||
m_number_of_displayed_row = dom_element.attribute(
|
||||
"display_n_row",
|
||||
QString::number(0)).toInt();
|
||||
|
||||
@@ -710,8 +678,8 @@ bool QetGraphicsTableItem::toDXF(const QString &filepath)
|
||||
if (m_previous_table) //Remove the number of row already displayed by previous tables
|
||||
row_count -= m_previous_table->displayNRowOffset();
|
||||
|
||||
if (m_number_of_row_to_display > 0) //User override the number of row to display
|
||||
row_count = std::min(row_count, m_number_of_row_to_display);
|
||||
if (m_number_of_displayed_row > 0) //User override the number of row to display
|
||||
row_count = std::min(row_count, m_number_of_displayed_row);
|
||||
|
||||
//Draw horizontal lines
|
||||
auto cell_height = static_cast<double>(m_current_size.height())/static_cast<double>(row_count);
|
||||
@@ -838,18 +806,13 @@ QVariant QetGraphicsTableItem::itemChange(
|
||||
return QetGraphicsItem::itemChange(change, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief QetGraphicsTableItem::modelReseted
|
||||
*/
|
||||
void QetGraphicsTableItem::modelReseted()
|
||||
{
|
||||
dataChanged(m_model->index(0,0), m_model->index(0,0), QVector<int>());
|
||||
setToMinimumHeight();
|
||||
|
||||
if (!previousTable()) //this is the head table
|
||||
{
|
||||
if (!previousTable()) { //this is the head table
|
||||
checkInsufficientRowsCount(this);
|
||||
removeUselessNextTable();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1083,24 +1046,3 @@ void QetGraphicsTableItem::previousTableDisplayRowChanged()
|
||||
m_next_table->previousTableDisplayRowChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief QetGraphicsTableItem::removeUselessNextTable
|
||||
* Remove next table if useless, an useless table with 0 row displayed.
|
||||
* If \p recursive is true check and remove for all sub next table.
|
||||
* @param recursive
|
||||
*/
|
||||
void QetGraphicsTableItem::removeUselessNextTable(bool recursive)
|
||||
{
|
||||
if (m_next_table)
|
||||
{
|
||||
if (recursive) {
|
||||
m_next_table->removeUselessNextTable();
|
||||
}
|
||||
if (m_next_table->displayedRowCount() <= 0)
|
||||
{
|
||||
m_next_table.data()->deleteLater();
|
||||
m_next_table.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,9 +79,8 @@ class QetGraphicsTableItem : public QetGraphicsItem
|
||||
void setTableName(const QString &name);
|
||||
QString tableName() const;
|
||||
int displayNRowOffset() const;
|
||||
int displayedRowCount() const;
|
||||
QPointer<QetGraphicsTableItem> previousTable() const;
|
||||
QPointer<QetGraphicsTableItem> nextTable() const;
|
||||
QetGraphicsTableItem *previousTable() const;
|
||||
QetGraphicsTableItem *nextTable() const;
|
||||
void setToMinimumHeight();
|
||||
void initLink();
|
||||
QUuid uuid() const {return m_uuid;}
|
||||
@@ -121,14 +120,13 @@ class QetGraphicsTableItem : public QetGraphicsItem
|
||||
void headerSectionResized();
|
||||
void adjustSize();
|
||||
void previousTableDisplayRowChanged();
|
||||
void removeUselessNextTable(bool recursive = true);
|
||||
|
||||
QPointer<QAbstractItemModel> m_model;
|
||||
QAbstractItemModel *m_model= nullptr;
|
||||
|
||||
QVector<int> m_minimum_column_width;
|
||||
int
|
||||
m_minimum_row_height,
|
||||
m_number_of_row_to_display = 0,
|
||||
m_number_of_displayed_row = 0,
|
||||
m_br_margin = 10;
|
||||
|
||||
QSize
|
||||
@@ -141,8 +139,9 @@ class QetGraphicsTableItem : public QetGraphicsItem
|
||||
QetGraphicsHandlerItem m_handler_item;
|
||||
QetGraphicsHeaderItem *m_header_item = nullptr;
|
||||
|
||||
QPointer<QetGraphicsTableItem> m_previous_table,
|
||||
m_next_table;
|
||||
QetGraphicsTableItem
|
||||
*m_previous_table = nullptr,
|
||||
*m_next_table = nullptr;
|
||||
|
||||
QString m_name;
|
||||
QUuid
|
||||
|
||||
@@ -128,15 +128,6 @@ void CrossRefItem::setUpConnection()
|
||||
m_update_connection << connect(m_element,
|
||||
&Element::linkedElementChanged,
|
||||
this, &CrossRefItem::linkedChanged);
|
||||
|
||||
auto diagram_ = dynamic_cast<Diagram *>(this->scene());
|
||||
auto formula_ = m_properties.masterLabel();
|
||||
if (diagram_ &&
|
||||
formula_.contains("%F"))
|
||||
{
|
||||
m_update_connection << connect(diagram_ , &Diagram::diagramInformationChanged,
|
||||
this, &CrossRefItem::updateLabel);
|
||||
}
|
||||
linkedChanged();
|
||||
updateLabel();
|
||||
}
|
||||
@@ -170,9 +161,13 @@ QPainterPath CrossRefItem::shape() const{
|
||||
QString CrossRefItem::elementPositionText(
|
||||
const Element *elmt, const bool &add_prefix) const
|
||||
{
|
||||
XRefProperties xrp =
|
||||
m_element->diagram()->project()->defaultXRefProperties(
|
||||
m_element->kindInformations()["type"].toString());
|
||||
QString formula = xrp.masterLabel();
|
||||
autonum::sequentialNumbers seq;
|
||||
QString txt = autonum::AssignVariables::formulaToLabel(
|
||||
m_properties.masterLabel(),
|
||||
formula,
|
||||
seq, elmt->diagram(),
|
||||
elmt);
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user