mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-09-28 04:54:13 +02:00
5dbb9f28de
Address feedback on the width/height/depth elementInformation fields: - The regex accepted "." alone as a complete value ([0-9]* permits zero digits on both sides), meaning a field could be committed with a literal "." saved to the XML. Require at least one digit either before or after the separator. - The same pattern was duplicated verbatim in elementinfopartwidget.cpp and elementpropertieseditorwidget.cpp's EditorDelegate. Factored into QETInformation::numericInfoPattern(), a single shared definition both call sites now use. - Tightened the pattern to at most 2 decimal places (down from 4) to match the precision actually meaningful for these fields. Not changed, by design: - Storage stays a plain string, consistent with every other numeric elementInformation field (quantity etc.) in this codebase -- values round-trip through XML text regardless, so a long/micron representation wouldn't avoid the string<->number conversion, only relocate it. - No decimal-comma normalization needed: with the fixed pattern, only digits and "." are ever accepted at the keystroke level, so an alternate separator can't enter the field in the first place.
409 lines
17 KiB
C++
409 lines
17 KiB
C++
/*
|
|
Copyright 2006-2026 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 <QObject>
|
|
#include <QHash>
|
|
#include "qetinformation.h"
|
|
|
|
/**
|
|
@brief QETInformation::titleblockInfoKeys
|
|
@return all available key for use with a titleblock
|
|
*/
|
|
QStringList QETInformation::titleblockInfoKeys()
|
|
{
|
|
QStringList info_list = { DIA_AUTHOR,
|
|
DIA_DATE,
|
|
DIA_TITLE,
|
|
DIA_FILENAME,
|
|
DIA_PLANT,
|
|
DIA_LOCMACH,
|
|
DIA_INDEX_REV,
|
|
QET_VERSION,
|
|
DIA_FOLIO,
|
|
DIA_FOLIO_ID,
|
|
PROJECT_FOLIO_TOTAL,
|
|
DIA_PREVIOUS_FOLIO_NUM,
|
|
DIA_NEXT_FOLIO_NUM,
|
|
PROJECT_TITLE,
|
|
PROJECT_PATH,
|
|
PROJECT_FILE_NAME,
|
|
PROJECT_SAVE_DATE,
|
|
PROJECT_SAVE_DATE_EU,
|
|
PROJECT_SAVE_DATE_US,
|
|
PROJECT_SAVE_TIME,
|
|
PROJECT_SAVED_FILE_NAME,
|
|
PROJECT_SAVED_FILE_PATH };
|
|
return info_list;
|
|
}
|
|
|
|
/**
|
|
@brief QETInformation::titleblockInfoKeysToVar
|
|
@param info
|
|
@return var in form %{my-var} corresponding to the info.
|
|
if there is not available var for the given info, the returned var is %{void}
|
|
*/
|
|
QString QETInformation::titleblockInfoKeysToVar(const QString &info)
|
|
{
|
|
if (titleblockInfoKeys().contains(info))
|
|
return infoToVar(info);
|
|
else
|
|
return QString("%{void}");
|
|
}
|
|
|
|
/**
|
|
@brief QETInformation::titleblockTranslatedKeyHashVar
|
|
@return a QHash with for key, the translated information key of title block,
|
|
and for value the corresponding var.
|
|
*/
|
|
QHash<QString, QString> QETInformation::titleblockTranslatedKeyHashVar()
|
|
{
|
|
QHash <QString, QString> hash_;
|
|
for (QString str : titleblockInfoKeys()) {
|
|
hash_.insert(translatedInfoKey(str), titleblockInfoKeysToVar(str));
|
|
}
|
|
return hash_;
|
|
}
|
|
|
|
/**
|
|
* @brief QETInformation::folioReportInfoKey
|
|
* @return The info key available for dynamic element text item of a folio report
|
|
*/
|
|
QStringList QETInformation::folioReportInfoKeys()
|
|
{
|
|
QStringList list = { ELMT_LABEL,
|
|
COND_FUNCTION,
|
|
COND_TENSION_PROTOCOL,
|
|
COND_COLOR,
|
|
COND_SECTION };
|
|
|
|
return list;
|
|
}
|
|
QHash<QString, QString> QETInformation::folioReportInfoKeyToVar()
|
|
{
|
|
QHash <QString, QString> H_;
|
|
H_.insert(ELMT_LABEL, infoToVar(ELMT_LABEL));
|
|
H_.insert(COND_FUNCTION, infoToVar(COND_FUNCTION));
|
|
H_.insert(COND_TENSION_PROTOCOL, infoToVar(COND_TENSION_PROTOCOL));
|
|
H_.insert(COND_COLOR, infoToVar(COND_COLOR));
|
|
H_.insert(COND_SECTION, infoToVar(COND_SECTION));
|
|
|
|
return H_;
|
|
}
|
|
|
|
QString QETInformation::folioReportInfoToVar(const QString &info)
|
|
{
|
|
if (QETInformation::folioReportInfoKeys().contains(info))
|
|
return infoToVar(info);
|
|
else
|
|
return (QString ("%{void}"));
|
|
}
|
|
|
|
QStringList QETInformation::conductorInfoKeys()
|
|
{
|
|
QStringList list = { COND_FORMULA,
|
|
COND_TEXT,
|
|
COND_FUNCTION,
|
|
COND_TENSION_PROTOCOL,
|
|
COND_COLOR,
|
|
COND_SECTION };
|
|
return list;
|
|
}
|
|
|
|
QStringList QETInformation::diagramInfoKeys()
|
|
{
|
|
QStringList list = { DIA_TITLE,
|
|
DIA_AUTHOR,
|
|
DIA_FILENAME,
|
|
DIA_FOLIO,
|
|
DIA_PLANT,
|
|
DIA_LOCMACH,
|
|
DIA_INDEX_REV,
|
|
DIA_DATE,
|
|
DIA_DISPLAY_FOLIO };
|
|
return list;
|
|
}
|
|
|
|
QStringList QETInformation::elementInfoKeys()
|
|
{
|
|
QStringList list = { ELMT_FORMULA,
|
|
ELMT_LABEL,
|
|
ELMT_PLANT,
|
|
ELMT_LOCATION,
|
|
ELMT_COMMENT,
|
|
ELMT_FUNCTION,
|
|
ELMT_DESCRIPTION,
|
|
ELMT_DESIGNATION,
|
|
ELMT_MANUFACTURER,
|
|
ELMT_MANUFACTURER_REF,
|
|
ELMT_MACHINE_MANUFACTURER_REF,
|
|
ELMT_SUPPLIER,
|
|
ELMT_QUANTITY,
|
|
ELMT_UNITY,
|
|
ELMT_WIDTH,
|
|
ELMT_HEIGHT,
|
|
ELMT_DEPTH,
|
|
ELMT_AUX1,
|
|
ELMT_DESCRIPTION_AUX1,
|
|
ELMT_DESIGNATION_AUX1,
|
|
ELMT_MANUFACTURER_AUX1,
|
|
ELMT_MANUFACTURER_REF_AUX1,
|
|
ELMT_MACHINE_MANUFACTURER_REF_AUX1,
|
|
ELMT_SUPPLIER_AUX1,
|
|
ELMT_QUANTITY_AUX1,
|
|
ELMT_UNITY_AUX1,
|
|
ELMT_AUX2,
|
|
ELMT_DESCRIPTION_AUX2,
|
|
ELMT_DESIGNATION_AUX2,
|
|
ELMT_MANUFACTURER_AUX2,
|
|
ELMT_MANUFACTURER_REF_AUX2,
|
|
ELMT_MACHINE_MANUFACTURER_REF_AUX2,
|
|
ELMT_SUPPLIER_AUX2,
|
|
ELMT_QUANTITY_AUX2,
|
|
ELMT_UNITY_AUX2,
|
|
ELMT_AUX3,
|
|
ELMT_DESCRIPTION_AUX3,
|
|
ELMT_DESIGNATION_AUX3,
|
|
ELMT_MANUFACTURER_AUX3,
|
|
ELMT_MANUFACTURER_REF_AUX3,
|
|
ELMT_MACHINE_MANUFACTURER_REF_AUX3,
|
|
ELMT_SUPPLIER_AUX3,
|
|
ELMT_QUANTITY_AUX3,
|
|
ELMT_UNITY_AUX3,
|
|
ELMT_AUX4,
|
|
ELMT_DESCRIPTION_AUX4,
|
|
ELMT_DESIGNATION_AUX4,
|
|
ELMT_MANUFACTURER_AUX4,
|
|
ELMT_MANUFACTURER_REF_AUX4,
|
|
ELMT_MACHINE_MANUFACTURER_REF_AUX4,
|
|
ELMT_SUPPLIER_AUX4,
|
|
ELMT_QUANTITY_AUX4,
|
|
ELMT_UNITY_AUX4,
|
|
ELMT_PLC_TYPE,
|
|
ELMT_PLC_ADDRESS,
|
|
ELMT_PLC_FUNCTION,
|
|
ELMT_PLC_COMMENT,
|
|
ELMT_PLC_CROSSREF,
|
|
"exclude_from_bom" };
|
|
return list;
|
|
}
|
|
|
|
/**
|
|
* @brief QETInformation::elementInfoToVar
|
|
* @param info
|
|
* @return The info to a variable or %{void} if @info
|
|
* is not an element information
|
|
*/
|
|
QString QETInformation::elementInfoToVar(const QString &info)
|
|
{
|
|
if (QETInformation::elementInfoKeys().contains(info))
|
|
return infoToVar(info);
|
|
else
|
|
return (QString ("%{void}"));
|
|
}
|
|
|
|
/**
|
|
* @brief QETInformation::numericInfoPattern
|
|
* @return the pattern used to validate numeric elementInformation
|
|
* fields (currently width/height/depth): digits with an optional "."
|
|
* as decimal separator, requiring at least one digit overall so a
|
|
* lone "." can never be a complete, acceptable value on its own.
|
|
*/
|
|
QRegularExpression QETInformation::numericInfoPattern()
|
|
{
|
|
return QRegularExpression(QStringLiteral(R"(^[0-9]+\.?[0-9]{0,2}$|^[0-9]*\.[0-9]{1,2}$)"));
|
|
}
|
|
|
|
/**
|
|
* @brief QETInformation::infoToVar
|
|
* @param info
|
|
* @return return the string @info prepended by %{ ans appended by }
|
|
* example : if info is label, the returned string is %{label}
|
|
*/
|
|
QString QETInformation::infoToVar(const QString &info)
|
|
{
|
|
return QString("%{")+info+QString("}");
|
|
}
|
|
|
|
/**
|
|
* @brief QETInformation::translatedInfoKey
|
|
* @param info
|
|
* @return the information translated to the current local.
|
|
* This function translate all information : element, conductor, diagram
|
|
* Return an empty QString if don't match
|
|
*/
|
|
QString QETInformation::translatedInfoKey(const QString &info)
|
|
{
|
|
if (info == DIA_AUTHOR) return QObject::tr("Auteur");
|
|
else if (info == DIA_DATE) return QObject::tr("Date");
|
|
else if (info == DIA_TITLE) return QObject::tr("Titre");
|
|
else if (info == DIA_FILENAME) return QObject::tr("Fichier");
|
|
else if (info == DIA_PLANT) return QObject::tr("Installation (=)");
|
|
else if (info == DIA_LOCMACH) return QObject::tr("Localisation (+)");
|
|
else if (info == DIA_INDEX_REV) return QObject::tr("Indice de révision");
|
|
else if (info == DIA_POS) return QObject::tr("Position");
|
|
else if (info == QET_VERSION) return QObject::tr("Version de QElectroTech");
|
|
else if (info == DIA_FOLIO) return QObject::tr("Numéro de folio");
|
|
else if (info == DIA_FOLIO_ID) return QObject::tr("Position du folio");
|
|
else if (info == PROJECT_FOLIO_TOTAL) return QObject::tr("Nombre de folio");
|
|
else if (info == DIA_PREVIOUS_FOLIO_NUM) return QObject::tr("Numéro du folio précédent");
|
|
else if (info == DIA_NEXT_FOLIO_NUM) return QObject::tr("Numéro du folio suivant");
|
|
else if (info == PROJECT_TITLE) return QObject::tr("Titre du projet");
|
|
else if (info == PROJECT_PATH) return QObject::tr("Chemin du fichier du projet");
|
|
else if (info == PROJECT_FILE_NAME) return QObject::tr("Nom du fichier");
|
|
else if (info == PROJECT_SAVE_DATE) return QObject::tr("Date d'enregistrement du fichier format local");
|
|
else if (info == PROJECT_SAVE_DATE_EU) return QObject::tr("Date d'enregistrement du fichier format dd-MM-yyyy");
|
|
else if (info == PROJECT_SAVE_DATE_US) return QObject::tr("Date d'enregistrement du fichier format yyyy-MM-dd");
|
|
else if (info == PROJECT_SAVE_TIME) return QObject::tr("Heure d'enregistrement du fichier");
|
|
else if (info == PROJECT_SAVED_FILE_NAME) return QObject::tr("Nom du fichier enregistré");
|
|
else if (info == PROJECT_SAVED_FILE_PATH) return QObject::tr("Chemin du fichier enregistré");
|
|
else if (info == ELMT_FORMULA) return QObject::tr("Formule du label");
|
|
else if (info == ELMT_LABEL) return QObject::tr("Label");
|
|
else if (info == ELMT_COMMENT) return QObject::tr("Commentaire");
|
|
else if (info == ELMT_FUNCTION) return QObject::tr("Fonction");
|
|
else if (info == ELMT_DESCRIPTION) return QObject::tr("Description textuelle");
|
|
else if (info == ELMT_DESIGNATION) return QObject::tr("Numéro d'article");
|
|
else if (info == ELMT_MANUFACTURER) return QObject::tr("Fabricant");
|
|
else if (info == ELMT_MANUFACTURER_REF) return QObject::tr("Numéro de commande");
|
|
else if (info == ELMT_MACHINE_MANUFACTURER_REF) return QObject::tr("Numéro interne");
|
|
else if (info == ELMT_SUPPLIER) return QObject::tr("Fournisseur");
|
|
else if (info == ELMT_QUANTITY) return QObject::tr("Quantité");
|
|
else if (info == ELMT_UNITY) return QObject::tr("Unité");
|
|
else if (info == ELMT_WIDTH) return QObject::tr("Largeur [mm]");
|
|
else if (info == ELMT_HEIGHT) return QObject::tr("Hauteur [mm]");
|
|
else if (info == ELMT_DEPTH) return QObject::tr("Profondeur [mm]");
|
|
else if (info == ELMT_LOCATION) return QObject::tr("Localisation (+)");
|
|
else if (info == COND_FUNCTION) return QObject::tr("Fonction");
|
|
else if (info == COND_TENSION_PROTOCOL) return QObject::tr("Tension / Protocole");
|
|
else if (info == COND_COLOR) return QObject::tr("Couleur du fil");
|
|
else if (info == COND_SECTION) return QObject::tr("Section du fil");
|
|
else if (info == COND_TEXT) return QObject::tr("Texte");
|
|
else if (info == COND_FORMULA) return QObject::tr("Formule du texte");
|
|
else if (info == ELMT_AUX1) return QObject::tr("Bloc auxiliaire 1");
|
|
else if (info == ELMT_DESCRIPTION_AUX1) return QObject::tr("Description textuelle auxiliaire 1");
|
|
else if (info == ELMT_DESIGNATION_AUX1) return QObject::tr("Numéro d'article auxiliaire 1");
|
|
else if (info == ELMT_MANUFACTURER_AUX1) return QObject::tr("Fabricant auxiliaire 1");
|
|
else if (info == ELMT_MANUFACTURER_REF_AUX1) return QObject::tr("Numéro de commande auxiliaire 1");
|
|
else if (info == ELMT_MACHINE_MANUFACTURER_REF_AUX1) return QObject::tr("Numéro interne auxiliaire 1");
|
|
else if (info == ELMT_SUPPLIER_AUX1) return QObject::tr("Fournisseur auxiliaire 1");
|
|
else if (info == ELMT_QUANTITY_AUX1) return QObject::tr("Quantité auxiliaire 1");
|
|
else if (info == ELMT_UNITY_AUX1) return QObject::tr("Unité auxiliaire 1");
|
|
else if (info == ELMT_AUX2) return QObject::tr("Bloc auxiliaire 2");
|
|
else if (info == ELMT_DESCRIPTION_AUX2) return QObject::tr("Description textuelle auxiliaire 2");
|
|
else if (info == ELMT_DESIGNATION_AUX2) return QObject::tr("Numéro d'article auxiliaire 2");
|
|
else if (info == ELMT_MANUFACTURER_AUX2) return QObject::tr("Fabricant auxiliaire 2");
|
|
else if (info == ELMT_MANUFACTURER_REF_AUX2) return QObject::tr("Numéro de commande auxiliaire 2");
|
|
else if (info == ELMT_MACHINE_MANUFACTURER_REF_AUX2) return QObject::tr("Numéro interne auxiliaire 2");
|
|
else if (info == ELMT_SUPPLIER_AUX2) return QObject::tr("Fournisseur auxiliaire 2");
|
|
else if (info == ELMT_QUANTITY_AUX2) return QObject::tr("Quantité auxiliaire 2");
|
|
else if (info == ELMT_UNITY_AUX2) return QObject::tr("Unité auxiliaire 2");
|
|
else if (info == ELMT_AUX3) return QObject::tr("Bloc auxiliaire 3");
|
|
else if (info == ELMT_DESCRIPTION_AUX3) return QObject::tr("Description textuelle auxiliaire 3");
|
|
else if (info == ELMT_DESIGNATION_AUX3) return QObject::tr("Numéro d'article auxiliaire 3");
|
|
else if (info == ELMT_MANUFACTURER_AUX3) return QObject::tr("Fabricant auxiliaire 3");
|
|
else if (info == ELMT_MANUFACTURER_REF_AUX3) return QObject::tr("Numéro de commande auxiliaire 3");
|
|
else if (info == ELMT_MACHINE_MANUFACTURER_REF_AUX3) return QObject::tr("Numéro interne auxiliaire 3");
|
|
else if (info == ELMT_SUPPLIER_AUX3) return QObject::tr("Fournisseur auxiliaire 3");
|
|
else if (info == ELMT_QUANTITY_AUX3) return QObject::tr("Quantité auxiliaire 3");
|
|
else if (info == ELMT_UNITY_AUX3) return QObject::tr("Unité auxiliaire 3");
|
|
else if (info == ELMT_AUX4) return QObject::tr("Bloc auxiliaire 4");
|
|
else if (info == ELMT_DESCRIPTION_AUX4) return QObject::tr("Description textuelle auxiliaire 4");
|
|
else if (info == ELMT_DESIGNATION_AUX4) return QObject::tr("Numéro d'article auxiliaire 4");
|
|
else if (info == ELMT_MANUFACTURER_AUX4) return QObject::tr("Fabricant auxiliaire 4");
|
|
else if (info == ELMT_MANUFACTURER_REF_AUX4) return QObject::tr("Numéro de commande auxiliaire 4");
|
|
else if (info == ELMT_MACHINE_MANUFACTURER_REF_AUX4) return QObject::tr("Numéro interne auxiliaire 4");
|
|
else if (info == ELMT_SUPPLIER_AUX4) return QObject::tr("Fournisseur auxiliaire 4");
|
|
else if (info == ELMT_QUANTITY_AUX4) return QObject::tr("Quantité auxiliaire 4");
|
|
else if (info == ELMT_UNITY_AUX4) return QObject::tr("Unité auxiliaire 4");
|
|
else if (info == ELMT_PLC_TYPE) return QObject::tr("Type PLC");
|
|
else if (info == ELMT_PLC_ADDRESS) return QObject::tr("Adresse PLC");
|
|
else if (info == ELMT_PLC_FUNCTION) return QObject::tr("Fonction PLC");
|
|
else if (info == ELMT_PLC_COMMENT) return QObject::tr("Commentaire PLC");
|
|
else if (info == ELMT_PLC_CROSSREF) return QObject::tr("Réf. croisée PLC");
|
|
else return QString();
|
|
}
|
|
|
|
QStringList QETInformation::elementEditorElementInfoKeys()
|
|
{
|
|
QStringList list = { ELMT_LABEL,
|
|
ELMT_PLANT,
|
|
ELMT_LOCATION,
|
|
ELMT_COMMENT,
|
|
ELMT_FUNCTION,
|
|
ELMT_DESCRIPTION,
|
|
ELMT_DESIGNATION,
|
|
ELMT_MANUFACTURER,
|
|
ELMT_MANUFACTURER_REF,
|
|
ELMT_MACHINE_MANUFACTURER_REF,
|
|
ELMT_SUPPLIER,
|
|
ELMT_QUANTITY,
|
|
ELMT_UNITY,
|
|
ELMT_WIDTH,
|
|
ELMT_HEIGHT,
|
|
ELMT_DEPTH,
|
|
ELMT_AUX1,
|
|
ELMT_DESCRIPTION_AUX1,
|
|
ELMT_DESIGNATION_AUX1,
|
|
ELMT_MANUFACTURER_AUX1,
|
|
ELMT_MANUFACTURER_REF_AUX1,
|
|
ELMT_MACHINE_MANUFACTURER_REF_AUX1,
|
|
ELMT_SUPPLIER_AUX1,
|
|
ELMT_QUANTITY_AUX1,
|
|
ELMT_UNITY_AUX1,
|
|
ELMT_AUX2,
|
|
ELMT_DESCRIPTION_AUX2,
|
|
ELMT_DESIGNATION_AUX2,
|
|
ELMT_MANUFACTURER_AUX2,
|
|
ELMT_MANUFACTURER_REF_AUX2,
|
|
ELMT_MACHINE_MANUFACTURER_REF_AUX2,
|
|
ELMT_SUPPLIER_AUX2,
|
|
ELMT_QUANTITY_AUX2,
|
|
ELMT_UNITY_AUX2,
|
|
ELMT_AUX3,
|
|
ELMT_DESCRIPTION_AUX3,
|
|
ELMT_DESIGNATION_AUX3,
|
|
ELMT_MANUFACTURER_AUX3,
|
|
ELMT_MANUFACTURER_REF_AUX3,
|
|
ELMT_MACHINE_MANUFACTURER_REF_AUX3,
|
|
ELMT_SUPPLIER_AUX3,
|
|
ELMT_QUANTITY_AUX3,
|
|
ELMT_UNITY_AUX3,
|
|
ELMT_AUX4,
|
|
ELMT_DESCRIPTION_AUX4,
|
|
ELMT_DESIGNATION_AUX4,
|
|
ELMT_MANUFACTURER_AUX4,
|
|
ELMT_MANUFACTURER_REF_AUX4,
|
|
ELMT_MACHINE_MANUFACTURER_REF_AUX4,
|
|
ELMT_SUPPLIER_AUX4,
|
|
ELMT_QUANTITY_AUX4,
|
|
ELMT_UNITY_AUX4 };
|
|
return list;
|
|
}
|
|
|
|
QStringList QETInformation::terminalElementInfoKeys()
|
|
{
|
|
QStringList list = { ELMT_FORMULA,
|
|
ELMT_LABEL,
|
|
ELMT_COMMENT,
|
|
ELMT_DESIGNATION,
|
|
ELMT_MANUFACTURER,
|
|
ELMT_MANUFACTURER_REF,
|
|
ELMT_MACHINE_MANUFACTURER_REF,
|
|
ELMT_SUPPLIER };
|
|
return list;
|
|
}
|