From 85d10fc0e6bb77d90a7817f3714e0faaee940279 Mon Sep 17 00:00:00 2001 From: plc-user <74435298+plc-user@users.noreply.github.com> Date: Mon, 19 Aug 2024 09:19:28 +0200 Subject: [PATCH 1/2] integrate "QET_ElementScaler" as external software --- cmake/qet_compilation_vars.cmake | 3 + lang/qet_de.qm | Bin 303752 -> 305062 bytes lang/qet_de.ts | 267 ++++++++++-------- qelectrotech.pro | 6 +- sources/editor/ui/qetelementeditor.cpp | 44 ++- sources/editor/ui/qetelementeditor.h | 2 + sources/editor/ui/qetelementeditor.ui | 10 + .../qet_elementscaler/qet_elementscaler.cpp | 132 +++++++++ sources/qet_elementscaler/qet_elementscaler.h | 30 ++ 9 files changed, 376 insertions(+), 118 deletions(-) create mode 100644 sources/qet_elementscaler/qet_elementscaler.cpp create mode 100644 sources/qet_elementscaler/qet_elementscaler.h diff --git a/cmake/qet_compilation_vars.cmake b/cmake/qet_compilation_vars.cmake index 8230965b1..e38da35e1 100644 --- a/cmake/qet_compilation_vars.cmake +++ b/cmake/qet_compilation_vars.cmake @@ -258,6 +258,9 @@ set(QET_SRC_FILES ${QET_DIR}/sources/dxf/dxftoelmt.cpp ${QET_DIR}/sources/dxf/dxftoelmt.h + ${QET_DIR}/sources/dxf/qet_elementscaler.cpp + ${QET_DIR}/sources/dxf/qet_elementscaler.h + ${QET_DIR}/sources/editor/arceditor.cpp ${QET_DIR}/sources/editor/arceditor.h ${QET_DIR}/sources/editor/editorcommands.cpp diff --git a/lang/qet_de.qm b/lang/qet_de.qm index 9361741ee0a3c2e66b997f015bf309b2b95c86aa..a6e6e3199ad3b0ff1d1f566be1ec91c5ea54e9ef 100644 GIT binary patch delta 13765 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 CR8idk delta 12818 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

-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 QETElementEditor - + &Nouveau &Neu - + &Ouvrir &Öffnen - + &Ouvrir depuis un fichier Aus &Datei öffnen - + &Lancer le plugin convertisseur DXF DXF Konverter-&Plugin ausführen - + &Enregistrer &Speichern - + Enregistrer sous Speichern &unter - + Enregistrer dans un fichier In einer Datei speichern - + Recharger Neu laden - + Tout sélectionner Alles auswählen @@ -6858,187 +6858,192 @@ Verfügbare Optionen: QElectroTech - Bauteileditor - + &Aide &Hilfe - + Annulations Arbeitsschritte - + Parties Bestandteile - + Informations Informationen - + Outils Werkzeuge - + Affichage Anzeige - + Élément Bauteil - + Annulation Rückgängig: - + &Fermer cet éditeur &Editor schließen - + Fermer cet éditeur Editor schließen - + Désélectionner tout Auswahl aufheben - + Co&uper &Ausschneiden - + Cop&ier Kop&ieren - + C&oller E&infügen - + C&oller dans la zone In einen Bereich einfügen... - + Un fichier einer Datei - + Un élément einem Bauteil - + À &propos de QElectroTech Ü&ber QElectroTech - + Affiche des informations sur QElectroTech Informationen zu QElectroTech anzeigen - + Manuel en ligne Online-Dokumentation (englisch) - + Lance le navigateur par défaut vers le manuel en ligne de QElectroTech Online-Dokumentation von QElectroTech im Standard Webbrowser öffnen - + Chaine Youtube Youtube-Kanal - + Lance le navigateur par défaut vers la chaine Youtube de QElectroTech Den Youtube-Kanal von QElectroTech im Standard Webbrowser öffnen - + Soutenir le projet par un don QElectroTech durch eine Spende unterstützen - + Soutenir le projet QElectroTech par un don Das QElectroTech-Projekt durch eine Spende unterstützen - + À propos de &Qt Über &Qt - + Affiche des informations sur la bibliothèque Qt Informationen zur Qt-Bibliothek anzeigen - + Rotation Drehen - + Space - + Importer un dxf DXF &importieren - + + importer un élément à redimensionner + Importiere skaliertes Element + + + Inverser la sélection Auswahl umkehren - + &Supprimer &Löschen - + Zoom avant Vergrößern - + Zoom arrière Verkleinern - + Zoom adapté Folie einpassen - + Pas de zoom Kein Zoom - + Éditer les informations sur l'auteur Informationen über Autoren bearbeiten @@ -7078,23 +7083,23 @@ Verfügbare Optionen: Anschluss einfügen - + Annuler Rückgängig - + Afficher menu entry Werkzeugsleisten anzeigen - + Trop de primitives, liste non générée: %1 Zu viele Einzelteile, Liste nicht generiert: %1 - + To install the plugin DXFtoQET Visit https://download.qelectrotech.org/qet/builds/dxf_to_elmt/ @@ -7104,7 +7109,7 @@ Put DXFtoQET.exe binary on C:\Users\user_name\AppData\Roaming\qet\ directory - + To install the plugin DXFtoQET Visit https://download.qelectrotech.org/qet/builds/dxf_to_elmt/ @@ -7114,7 +7119,7 @@ Put DXFtoQET.app binary on /Users/user_name/.qet/ directory - + To install the plugin DXFtoQET Visit https://download.qelectrotech.org/qet/builds/dxf_to_elmt/ @@ -7125,7 +7130,7 @@ make it executable : chmod +x ./DXFtoQET - + To install the plugin DXFtoQET Visit https://download.qelectrotech.org/qet/builds/dxf_to_elmt/ @@ -7141,22 +7146,21 @@ Put DXFtoQET.app binary on /Users/user_name/.qet/ directory - + Refaire Wiederholen - + Ctrl+Shift+O Strg+Umschalt+O - + Ctrl+Shift+S Strg+Umschalt+S - Ctrl+Q Strg+Q @@ -7197,12 +7201,12 @@ Put DXFtoQET.app binary on /Users/user_name/.qet/ directory Strg+0 - + Avertissement Warnung - + L'import d'un dxf volumineux peut prendre du temps veuillez patienter durant l'import... Das Importieren einer großen DXF-Datei kann einige Zeit in Anspruch nehmen. @@ -7230,12 +7234,12 @@ veuillez patienter durant l'import... Tiefe - + Éditer le nom et les traductions de l'élément Bauteilname und Übersetzungen bearbeiten - + Éditer les propriétés de l'élément Bauteileigenschaften bearbeiten @@ -7250,28 +7254,28 @@ veuillez patienter durant l'import... &Datei - + &Édition &Bearbeiten - + Afficha&ge &Anzeige - + Coller depuis... Einfügen aus... - + [Modifié] window title tag [geändert] - + [lecture seule] window title tag [schreibgeschützt] @@ -7288,8 +7292,8 @@ veuillez patienter durant l'import... Bauteileditor - - + + %n partie(s) sélectionnée(s). %n ausgewähltes Teil. @@ -7297,18 +7301,18 @@ veuillez patienter durant l'import... - + Absence de borne warning title Anschluss nicht vorhanden - + Absence de borne Anschluss nicht vorhanden - + <br>En l'absence de borne, l'élément ne pourra être relié à d'autres éléments par l'intermédiaire de conducteurs. warning description <br>Ohne Anschlüsse kann das Bauteil nicht mit anderen Bauteilen mittels Leiter verbunden werden. @@ -7329,18 +7333,18 @@ veuillez patienter durant l'import... Fügt einen Bauteiltext ein, der im Schaltplaneditor bearbeitet werden kann - + <br><b>Erreur</b> :<br>Les reports de folio doivent posséder une seul borne.<br><b>Solution</b> :<br>Verifier que l'élément ne possède qu'une seul borne <br><b>Fehler</b>: <br>Folienverweise dürfen nur einen Anschluss haben.<br><b>Lösung</b>: <br>Prüfen, dass das Bauteil nur einen Anschluss hat - + La vérification de cet élément a généré message box content Die Überprüfung dieses Bauteils generierte - + %n erreur(s) errors @@ -7349,88 +7353,88 @@ veuillez patienter durant l'import... - + et und - + <b>%1</b> : %2 warning title: warning description <b>%1</b>: %2 - + Erreurs Fehler - + Avertissements Warnungen - + Le fichier %1 n'existe pas. message box content Die Datei %1 existiert nicht. - - + + Impossible d'ouvrir le fichier %1. message box content Öffnen der Datei %1 nicht möglich. - - + + Ce fichier n'est pas un document XML valide message box content Diese Datei ist kein gültiges XML-Dokument - - + + Erreur toolbar title Fehler - - + + Édition en lecture seule message box title Schreibgeschützte Bearbeitung - - + + Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule. message box content Sie haben nicht die Schreibrechte, um dieses Bauteil zu verändern: es wird schreibgeschützt geöffnet. - - + + Erreur message box title Fehler - + Impossible d'écrire dans ce fichier message box content Schreiben in diese Datei nicht möglich - + Impossible d'enregistrer l'élément message box content Dieses Bauteil kann nicht gespeichert werden - + %n avertissement(s) warnings @@ -7439,98 +7443,108 @@ veuillez patienter durant l'import... - + Impossible d'ouvrir le fichier message box title Öffnen der Datei nicht möglich - + Il semblerait que le fichier %1 que vous essayez d'ouvrir n'existe pas ou plus. Die zu öffnende Datei %1 existiert nicht. - + Recharger l'élément dialog title Bauteil neu laden - + Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ? dialog content Das Bauteil wurde verändert. Beim neu Laden gehen die Änderungen verloren. Möchten Sie wirklich das Bauteil neu laden? + + + Importer un élément à redimensionner + Importiere Element zum Skalieren + + + + Éléments QElectroTech (*.elmt) + QElectroTech-Bauteil (*.elmt) + - + Echec de l'enregistrement Speichervorgang gescheitert - + L'enregistrement à échoué, les conditions requises ne sont pas valides Speichervorgang gescheitert\nDie erforderlichen Bedingungen wurden nicht erfüllt - + Enregistrer sous dialog title Speichern unter - + Éléments QElectroTech (*.elmt) filetypes allowed when saving an element file QElectroTech-Bauteil (*.elmt) - + Enregistrer l'élément en cours ? dialog title Aktuelles Bauteil speichern? - + Voulez-vous enregistrer l'élément %1 ? dialog content - %1 is an element name Bauteil %1 speichern? - + Ouvrir un fichier dialog title Datei öffnen - + Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*) filetypes allowed when opening an element file QElectroTech-Bauteile (*.elmt);;XML-Dateien (*.xml);;Alle Dateien (*) - - - - + + + + Élément inexistant. message box title Bauteil nicht vorhanden. - - + + L'élément n'existe pas. message box content Bauteil existiert nicht. - - + + Le chemin virtuel choisi ne correspond pas à un élément. message box content Der gewählte virtuelle Pfad passt nicht zu einem Bauteil. @@ -9430,7 +9444,7 @@ Möchten Sie sie ersetzen? Element öffnen - + Importer un fichier dxf DXF-Datei importieren @@ -9439,6 +9453,29 @@ Möchten Sie sie ersetzen? Disposition par défaut Standard-Layout + + + + Entrer le facteur d'échelle + Skalierungsfaktor eingeben + + + + Facteur X: + Faktor X: + + + + Facteur Y: + Faktor Y: + + + + Le logiciel QET_ElementScaler est nécessaire pour mettre les éléments à l'échelle. +Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper dans le dossier d'installation + Die Software QET_ElementScaler wird benötigt, um Elemente zu skalieren. +Bitte laden Sie diese über den unten stehenden Link herunter und entpacken Sie sie in den Installationsordner. + QTextOrientationWidget diff --git a/qelectrotech.pro b/qelectrotech.pro index d3cbfcf6d..092f3c6cb 100644 --- a/qelectrotech.pro +++ b/qelectrotech.pro @@ -166,7 +166,8 @@ HEADERS += $$files(sources/*.h) \ $$files(sources/TerminalStrip/GraphicsItem/*.h) \ $$files(sources/TerminalStrip/GraphicsItem/properties/*.h) \ $$files(sources/xml/*.h) \ - $$files(sources/dxf/*.h) + $$files(sources/dxf/*.h) \ + $$files(sources/qet_elementscaler/*.h) SOURCES += $$files(sources/*.cpp) \ $$files(sources/editor/*.cpp) \ @@ -208,7 +209,8 @@ SOURCES += $$files(sources/*.cpp) \ $$files(sources/TerminalStrip/GraphicsItem/*.cpp) \ $$files(sources/TerminalStrip/GraphicsItem/properties/*.cpp) \ $$files(sources/xml/*.cpp) \ - $$files(sources/dxf/*.cpp) + $$files(sources/dxf/*.cpp) \ + $$files(sources/qet_elementscaler/*.cpp) # Needed for use promote QTreeWidget in terminalstripeditor.ui INCLUDEPATH += sources/TerminalStrip/ui diff --git a/sources/editor/ui/qetelementeditor.cpp b/sources/editor/ui/qetelementeditor.cpp index 2ea93df0f..6fbfd5708 100644 --- a/sources/editor/ui/qetelementeditor.cpp +++ b/sources/editor/ui/qetelementeditor.cpp @@ -47,6 +47,7 @@ #include "../../newelementwizard.h" #include "../editorcommands.h" #include "../../dxf/dxftoelmt.h" +#include "../../qet_elementscaler/qet_elementscaler.h" #include "../UndoCommand/openelmtcommand.h" #include @@ -1332,6 +1333,24 @@ void QETElementEditor::on_m_open_dxf_action_triggered() DXF -> start(program,arguments); } +void QETElementEditor::on_m_open_scaled_element_action_triggered() +{ +#ifdef TODO_LIST +# pragma message("@TODO Merge 'Element-Scaling' code into QET") +# pragma message("https://github.com/plc-user/QET_ElementScaler") +#endif +#if defined(Q_OS_WIN32) || defined(Q_OS_WIN64) + QString program = (QDir::homePath() + "/Application Data/qet/QET_ElementScaler.exe"); +#elif defined(Q_OS_MAC) + QString program = (QDir::homePath() + "/.qet/QET_ElementScaler.app"); +#else + QString program = (QDir::homePath() + "/.qet/QET_ElementScaler"); +#endif + QStringList arguments; + QProcess *ES = new QProcess(qApp); + ES -> start(program,arguments); +} + bool QETElementEditor::on_m_save_as_file_action_triggered() { // Check element before writing @@ -1504,7 +1523,7 @@ void QETElementEditor::on_m_import_dxf_triggered() { QString file_path{QFileDialog::getOpenFileName(this, QObject::tr("Importer un fichier dxf"), - "/home", + QDir::homePath(), "DXF (*.dxf)")}; if (file_path.isEmpty()) { return; @@ -1524,3 +1543,26 @@ void QETElementEditor::on_m_import_dxf_triggered() } } +void QETElementEditor::on_m_import_scaled_element_triggered() +{ + if (ElementScalerIsPresent(true, this)) + { + QString file_path{QFileDialog::getOpenFileName(this, + tr("Importer un élément à redimensionner"), + QDir::homePath(), + tr("Éléments QElectroTech (*.elmt)"))}; + if (file_path.isEmpty()) { + return; + } + + const QByteArray array_{ElementScaler(file_path, this)}; + if (array_.isEmpty()) { + return; + } + QDomDocument xml_; + xml_.setContent(array_); + + m_elmt_scene->undoStack().push(new OpenElmtCommand(xml_, m_elmt_scene)); + } +} + diff --git a/sources/editor/ui/qetelementeditor.h b/sources/editor/ui/qetelementeditor.h index b16b204f4..67e657d9b 100644 --- a/sources/editor/ui/qetelementeditor.h +++ b/sources/editor/ui/qetelementeditor.h @@ -87,6 +87,7 @@ class QETElementEditor : public QMainWindow void on_m_open_action_triggered(); void on_m_open_from_file_action_triggered(); void on_m_open_dxf_action_triggered(); + void on_m_open_scaled_element_action_triggered(); bool on_m_save_as_file_action_triggered(); void on_m_reload_action_triggered(); void on_m_quit_action_triggered(); @@ -111,6 +112,7 @@ class QETElementEditor : public QMainWindow void on_m_donate_action_triggered(); void on_m_about_qt_action_triggered(); void on_m_import_dxf_triggered(); + void on_m_import_scaled_element_triggered(); private: bool canClose(); diff --git a/sources/editor/ui/qetelementeditor.ui b/sources/editor/ui/qetelementeditor.ui index ef99d1683..15609cda0 100644 --- a/sources/editor/ui/qetelementeditor.ui +++ b/sources/editor/ui/qetelementeditor.ui @@ -35,6 +35,7 @@ + @@ -514,6 +515,15 @@ Importer un dxf + + + + :/ico/22x22/folder-open.png:/ico/22x22/folder-open.png + + + importer un élément à redimensionner + + diff --git a/sources/qet_elementscaler/qet_elementscaler.cpp b/sources/qet_elementscaler/qet_elementscaler.cpp new file mode 100644 index 000000000..5cba108ef --- /dev/null +++ b/sources/qet_elementscaler/qet_elementscaler.cpp @@ -0,0 +1,132 @@ +/* + Copyright 2024 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 . +*/ +#include "qet_elementscaler.h" +#include "../ui/thirdpartybinaryinstalldialog.h" + +#include +#include +#include +#include + +/** + * @brief QET_ElementScaler + * Return the scaled element from @a file_path. + * The returned value is a QByteArray, instead of a + * QDomDocument or QString, to let user do what he/she wants. + * If something goes wrong the QByteArray returned is empty. + * @param file_path + * @return + */ +QByteArray ElementScaler(const QString &file_path, QWidget *parent) +{ + if (!ElementScalerIsPresent(false)) { + return QByteArray(); + } + + bool ok; + double fx = QInputDialog::getDouble(parent, QObject::tr("Entrer le facteur d'échelle"), + QObject::tr("Facteur X:"), 1.0, 0.1, 100, 5, &ok, + Qt::WindowFlags(), 1); + QString sFactorX = "1.0"; + if (ok) + sFactorX = (QString::number(fx, 'f', 5)); + else + return QByteArray(); + + double fy = QInputDialog::getDouble(parent, QObject::tr("Entrer le facteur d'échelle"), + QObject::tr("Facteur Y:"), fx, 0.1, 100, 5, &ok, + Qt::WindowFlags(), 1); + QString sFactorY = "1.0"; + if (ok) + sFactorY = (QString::number(fy, 'f', 5)); + else + return QByteArray(); + + QProcess process_; + const QString program{ElementScalerBinaryPath()}; + const QStringList arguments{QStringLiteral("-x"), sFactorX, + QStringLiteral("-y"), sFactorY, + QStringLiteral("-o"), QStringLiteral("-f"), file_path}; + + process_.start(program, arguments); + + if (process_.waitForFinished()) + { + const auto byte_array{process_.readAll()}; + process_.close(); + return byte_array; + } + else + { + //If something went wrong we return an empty QByteArray + return QByteArray(); + } +} + +QString ElementScalerDirPath() +{ +#if defined(Q_OS_WIN32) || defined(Q_OS_WIN64) + return (QDir::homePath() + QStringLiteral("/Application Data/qet/binary")); +#elif defined(Q_OS_MACOS) + return (QDir::homePath() + QStringLiteral("/.qet/binary")); +#else + return (QDir::homePath() + QStringLiteral("/.qet/binary")); +#endif +} + +/** + * @brief ElementScalerBinaryPath + * @return the path to the QET_ElementScaler program + */ +QString ElementScalerBinaryPath() +{ +#if defined(Q_OS_WIN32) || defined(Q_OS_WIN64) + return ElementScalerDirPath() + QStringLiteral("/QET_ElementScaler.exe"); +#elif defined(Q_OS_MACOS) + return ElementScalerDirPath() + QStringLiteral("/./QET_ElementScaler"); +#else + return ElementScalerDirPath() + QStringLiteral("/QET_ElementScaler"); +#endif +} + +/** + * @brief ElementScalerIsPresent + * Return true if QET_ElementScaler is present in the system + * @param install_dialog + * True to display a dialog with the explanations + * of how to install the QET_ElementScaler program + * if not present in the system. + * @return + */ +bool ElementScalerIsPresent(bool install_dialog, QWidget *parent) +{ + const bool exist{QFile::exists(ElementScalerBinaryPath())}; + + if (!exist && install_dialog) + { + auto string_{QObject::tr("Le logiciel QET_ElementScaler est nécessaire pour mettre les éléments à l'échelle.\n" + "Veuillez télécharger celui-ci en suivant le lien ci dessous et le dézipper dans le dossier d'installation")}; + + ThirdPartyBinaryInstallDialog dialog_(string_, + QStringLiteral("https://github.com/plc-user/QET_ElementScaler/releases"), + ElementScalerDirPath(), + parent); + dialog_.exec(); + } + return exist; +} diff --git a/sources/qet_elementscaler/qet_elementscaler.h b/sources/qet_elementscaler/qet_elementscaler.h new file mode 100644 index 000000000..31bf34374 --- /dev/null +++ b/sources/qet_elementscaler/qet_elementscaler.h @@ -0,0 +1,30 @@ +/* + Copyright 2024 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 . +*/ +#ifndef QET_ELEMENTSCALER_H +#define QET_ELEMENTSCALER_H + +#include + +class QWidget; + +QByteArray ElementScaler(const QString &file_path, QWidget *parent); +QString ElementScalerDirPath(); +QString ElementScalerBinaryPath(); +bool ElementScalerIsPresent(bool install_dialog = true, QWidget *parent = nullptr); + +#endif // QET_ELEMENTSCALER_H From 5d725f6d55712228b54a781756db310bf7aa0fd6 Mon Sep 17 00:00:00 2001 From: plc-user <74435298+plc-user@users.noreply.github.com> Date: Mon, 19 Aug 2024 09:48:11 +0200 Subject: [PATCH 2/2] fix typo --- cmake/qet_compilation_vars.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/qet_compilation_vars.cmake b/cmake/qet_compilation_vars.cmake index e38da35e1..d7f9cbe06 100644 --- a/cmake/qet_compilation_vars.cmake +++ b/cmake/qet_compilation_vars.cmake @@ -258,8 +258,8 @@ set(QET_SRC_FILES ${QET_DIR}/sources/dxf/dxftoelmt.cpp ${QET_DIR}/sources/dxf/dxftoelmt.h - ${QET_DIR}/sources/dxf/qet_elementscaler.cpp - ${QET_DIR}/sources/dxf/qet_elementscaler.h + ${QET_DIR}/sources/qet_elementscaler/qet_elementscaler.cpp + ${QET_DIR}/sources/qet_elementscaler/qet_elementscaler.h ${QET_DIR}/sources/editor/arceditor.cpp ${QET_DIR}/sources/editor/arceditor.h