From 1d73547d28b5a14cfefe0ca456b24be92e8dd90a Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 3 Oct 2015 01:00:18 +0300 Subject: [PATCH] Block signals for QLineEdit in readonly mode because it still emits QLineEdit::editingFinished signal. --HG-- branch : develop --- src/app/tape/tmainwindow.cpp | 52 +++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp index 530bf4005..63b78f97c 100644 --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -1391,15 +1391,38 @@ void TMainWindow::SaveMFullName() } QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), ColumnName); - m->SetMFullName(nameField->data(Qt::UserRole).toString(), ui->lineEditFullName->text()); - MeasurementsWasSaved(false); + QSharedPointer meash; - RefreshData(); + try + { + // Translate to internal look. + meash = data->GetVariable(nameField->data(Qt::UserRole).toString()); + } + catch(const VExceptionBadId &e) + { + qCWarning(tMainWindow, "%s\n\n%s\n\n%s", + qUtf8Printable(tr("Can't find measurement '%1'.").arg(nameField->text())), + qUtf8Printable(e.ErrorMessage()), qUtf8Printable(e.DetailedInformation())); + return; + } - ui->tableWidget->blockSignals(true); - ui->tableWidget->selectRow(row); - ui->tableWidget->blockSignals(false); + if (meash->IsCustom()) + { + m->SetMFullName(nameField->data(Qt::UserRole).toString(), ui->lineEditFullName->text()); + + MeasurementsWasSaved(false); + + RefreshData(); + + ui->tableWidget->blockSignals(true); + ui->tableWidget->selectRow(row); + ui->tableWidget->blockSignals(false); + } + else + { + qCWarning(tMainWindow, "%s", qUtf8Printable(tr("The full name of known measurement forbidden to change."))); + } } //--------------------------------------------------------------------------------------------------------------------- @@ -2096,19 +2119,29 @@ void TMainWindow::MeasurementReadOnly(bool ro) { if (ro == false) { - if (QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), 0)) + if (QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), ColumnName)) { if (nameField->text().indexOf(CustomMSign) == 0) // Check if custom { ui->lineEditName->setReadOnly(ro); ui->plainTextEditDescription->setReadOnly(ro); ui->lineEditFullName->setReadOnly(ro); + + // Need to block signals for QLineEdit in readonly mode because it still emits + // QLineEdit::editingFinished signal. + ui->lineEditName->blockSignals(ro); + ui->lineEditFullName->blockSignals(ro); } else { // known measurement ui->lineEditName->setReadOnly(not ro); ui->plainTextEditDescription->setReadOnly(not ro); ui->lineEditFullName->setReadOnly(not ro); + + // Need to block signals for QLineEdit in readonly mode because it still emits + // QLineEdit::editingFinished signal. + ui->lineEditName->blockSignals(not ro); + ui->lineEditFullName->blockSignals(not ro); } } else @@ -2134,6 +2167,11 @@ void TMainWindow::MeasurementReadOnly(bool ro) ui->doubleSpinBoxInHeights->setReadOnly(ro); } + // Need to block signals for QLineEdit in readonly mode because it still emits QLineEdit::editingFinished signal. + ui->lineEditGivenName->blockSignals(ro); + ui->lineEditFamilyName->blockSignals(ro); + ui->lineEditEmail->blockSignals(ro); + Controls(); // Buttons remove, up, down }