Files
GostGenerator/view/adddesignatordialog.cpp
T

135 lines
4.4 KiB
C++

#include "adddesignatordialog.h"
#include "../model/designatormappingmodel.h"
#include <QRegularExpression>
AddDesignatorDialog::AddDesignatorDialog(QWidget *parent)
: QDialog(parent)
{
setUp();
}
void AddDesignatorDialog::setUp()
{
setWindowTitle(tr("Добавить дезигнатор"));
setModal(true);
setFixedSize(400, 200);
setUpLayout();
setUpConnections();
validateInputs();
}
void AddDesignatorDialog::setUpLayout()
{
QVBoxLayout *mainLayout = new QVBoxLayout(this);
// Группа для ввода данных
QGroupBox *inputGroup = new QGroupBox(tr("Информация о дезигнаторе"), this);
QVBoxLayout *inputLayout = new QVBoxLayout(inputGroup);
// Дезигнатор
QHBoxLayout *designatorLayout = new QHBoxLayout;
QLabel *designatorLabel = new QLabel(tr("Дезигнатор (1-2 буквы):"), this);
m_designatorEdit = new QLineEdit(this);
m_designatorEdit->setPlaceholderText(tr("Например: R, BA"));
m_designatorEdit->setMaxLength(2);
// Валидатор для дезигнатора (только латинские буквы)
QRegularExpression regex("^[A-Z]{1,2}$");
m_designatorValidator = new QRegularExpressionValidator(regex, this);
m_designatorEdit->setValidator(m_designatorValidator);
designatorLayout->addWidget(designatorLabel);
designatorLayout->addWidget(m_designatorEdit);
// Единственное число
QHBoxLayout *singularLayout = new QHBoxLayout;
QLabel *singularLabel = new QLabel(tr("Единственное число:"), this);
m_singularNameEdit = new QLineEdit(this);
m_singularNameEdit->setPlaceholderText(tr("Например: Резистор"));
singularLayout->addWidget(singularLabel);
singularLayout->addWidget(m_singularNameEdit);
// Множественное число
QHBoxLayout *pluralLayout = new QHBoxLayout;
QLabel *pluralLabel = new QLabel(tr("Множественное число:"), this);
m_pluralNameEdit = new QLineEdit(this);
m_pluralNameEdit->setPlaceholderText(tr("Например: Резисторы"));
pluralLayout->addWidget(pluralLabel);
pluralLayout->addWidget(m_pluralNameEdit);
// Добавляем все в layout группы
inputLayout->addLayout(designatorLayout);
inputLayout->addLayout(singularLayout);
inputLayout->addLayout(pluralLayout);
// Кнопки
QHBoxLayout *buttonsLayout = new QHBoxLayout;
m_okButton = new QPushButton(tr("OK"), this);
m_cancelButton = new QPushButton(tr("Отмена"), this);
buttonsLayout->addStretch();
buttonsLayout->addWidget(m_okButton);
buttonsLayout->addWidget(m_cancelButton);
// Добавляем все в основной layout
mainLayout->addWidget(inputGroup);
mainLayout->addLayout(buttonsLayout);
setLayout(mainLayout);
}
void AddDesignatorDialog::setUpConnections()
{
connect(m_designatorEdit, &QLineEdit::textChanged,
this, &AddDesignatorDialog::onDesignatorChanged);
connect(m_singularNameEdit, &QLineEdit::textChanged,
this, &AddDesignatorDialog::validateInputs);
connect(m_pluralNameEdit, &QLineEdit::textChanged,
this, &AddDesignatorDialog::validateInputs);
connect(m_okButton, &QPushButton::clicked,
this, &QDialog::accept);
connect(m_cancelButton, &QPushButton::clicked,
this, &QDialog::reject);
}
void AddDesignatorDialog::onDesignatorChanged()
{
QString text = m_designatorEdit->text().toUpper();
if (text != m_designatorEdit->text()) {
m_designatorEdit->setText(text);
}
validateInputs();
}
void AddDesignatorDialog::validateInputs()
{
bool isValid = !m_designatorEdit->text().isEmpty() &&
!m_singularNameEdit->text().isEmpty() &&
!m_pluralNameEdit->text().isEmpty();
m_okButton->setEnabled(isValid);
}
QString AddDesignatorDialog::getDesignator() const
{
return m_designatorEdit->text().toUpper();
}
QString AddDesignatorDialog::getSingularName() const
{
return m_singularNameEdit->text();
}
QString AddDesignatorDialog::getPluralName() const
{
return m_pluralNameEdit->text();
}
DesignatorMappingItem AddDesignatorDialog::getMapping() const
{
return DesignatorMappingItem(getDesignator(), getSingularName(), getPluralName(), true);
}