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.
168 lines
4.0 KiB
C++
168 lines
4.0 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 "elementinfopartwidget.h"
|
|
|
|
#include "../SearchAndReplace/searchandreplaceworker.h"
|
|
#include "../qetinformation.h"
|
|
#include "ui_elementinfopartwidget.h"
|
|
#include <QRegularExpressionValidator>
|
|
|
|
#include <utility>
|
|
|
|
typedef SearchAndReplaceWorker sarw;
|
|
|
|
/**
|
|
@brief ElementInfoPartWidget::ElementInfoPartWidget
|
|
Constructor
|
|
@param key the string key what represent this info part
|
|
@param translated_key the string key translated
|
|
@param parent parent widget
|
|
*/
|
|
ElementInfoPartWidget::ElementInfoPartWidget(
|
|
QString key,
|
|
const QString& translated_key,
|
|
QWidget *parent):
|
|
QWidget(parent),
|
|
ui(new Ui::ElementInfoPartWidget),
|
|
key_(std::move(key))
|
|
{
|
|
ui->setupUi(this);
|
|
ui->label_->setText(translated_key);
|
|
ui->m_erase_text->setVisible(false);
|
|
|
|
if (key_ == QETInformation::ELMT_WIDTH || key_ == QETInformation::ELMT_HEIGHT || key_ == QETInformation::ELMT_DEPTH)
|
|
{
|
|
auto *validator = new QRegularExpressionValidator(
|
|
QETInformation::numericInfoPattern(), ui->line_edit);
|
|
ui->line_edit->setValidator(validator);
|
|
ui->line_edit->setPlaceholderText(tr("ex. 80.5"));
|
|
ui->line_edit->setToolTip(tr("Nombre décimal avec un point comme séparateur (ex. 80.5)"));
|
|
}
|
|
|
|
connect(ui->line_edit, &QLineEdit::textEdited,
|
|
this, &ElementInfoPartWidget::textEdited);
|
|
connect(ui->line_edit, &QLineEdit::textChanged,
|
|
this, &ElementInfoPartWidget::textChanged);
|
|
}
|
|
|
|
/**
|
|
@brief ElementInfoPartWidget::~ElementInfoPartWidget
|
|
destructor
|
|
*/
|
|
ElementInfoPartWidget::~ElementInfoPartWidget()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
/**
|
|
@brief ElementInfoPartWidget::text
|
|
@return the text in the line edit
|
|
*/
|
|
QString ElementInfoPartWidget::text() const
|
|
{
|
|
return (ui->line_edit->text());
|
|
}
|
|
|
|
/**
|
|
@brief ElementInfoPartWidget::setText
|
|
Set text to line edit
|
|
@param txt
|
|
*/
|
|
void ElementInfoPartWidget::setText(const QString &txt)
|
|
{
|
|
if (m_show_erase) {
|
|
sarw::setupLineEdit(ui->line_edit, ui->m_erase_text, txt);
|
|
} else {
|
|
ui->line_edit->setText(txt);
|
|
}
|
|
}
|
|
|
|
/**
|
|
@brief ElementInfoPartWidget::setPlaceHolderText
|
|
@param text
|
|
*/
|
|
void ElementInfoPartWidget::setPlaceHolderText(const QString &text)
|
|
{
|
|
ui->line_edit->setPlaceholderText(text);
|
|
}
|
|
|
|
/**
|
|
@brief ElementInfoPartWidget::setFocusTolineEdit
|
|
Set the focus to the line edit
|
|
*/
|
|
void ElementInfoPartWidget::setFocusTolineEdit()
|
|
{
|
|
ui->line_edit->setFocus();
|
|
}
|
|
|
|
/**
|
|
@brief ElementInfoPartWidget::setEnabled
|
|
enable the line edit
|
|
@param e
|
|
*/
|
|
void ElementInfoPartWidget::setEnabled(bool e)
|
|
{
|
|
ui->line_edit->setEnabled(e);
|
|
}
|
|
|
|
/**
|
|
@brief ElementInfoPartWidget::setDisabled
|
|
disable the line edit
|
|
@param d
|
|
*/
|
|
void ElementInfoPartWidget::setDisabled(bool d)
|
|
{
|
|
ui->line_edit->setDisabled(d);
|
|
}
|
|
|
|
/**
|
|
@brief ElementInfoPartWidget::setEraseTextVisible
|
|
@param visible
|
|
*/
|
|
void ElementInfoPartWidget::setEraseTextVisible(bool visible)
|
|
{
|
|
ui->m_erase_text->setVisible(visible);
|
|
m_show_erase = visible;
|
|
}
|
|
|
|
/**
|
|
@brief ElementInfoPartWidget::setEraseTextChecked
|
|
@param check
|
|
*/
|
|
void ElementInfoPartWidget::setEraseTextChecked(bool check)
|
|
{
|
|
ui->m_erase_text->setChecked(check);
|
|
}
|
|
|
|
/**
|
|
@brief ElementInfoPartWidget::EraseTextCheckState
|
|
@return
|
|
*/
|
|
Qt::CheckState ElementInfoPartWidget::EraseTextCheckState() const
|
|
{
|
|
return ui->m_erase_text->checkState();
|
|
}
|
|
|
|
void ElementInfoPartWidget::on_m_erase_text_clicked()
|
|
{
|
|
ui->line_edit->setText(ui->m_erase_text->isChecked()
|
|
? SearchAndReplaceWorker::eraseText()
|
|
: QString());
|
|
ui->line_edit->setDisabled(ui->m_erase_text->isChecked());
|
|
}
|