diff --git a/gui/fielddelegate.cpp b/gui/fielddelegate.cpp index 7a99c12..b1ec7fc 100644 --- a/gui/fielddelegate.cpp +++ b/gui/fielddelegate.cpp @@ -18,22 +18,28 @@ FieldDelegate::FieldDelegate(QObject *parent) void FieldDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { - if (auto *lineEdit = qobject_cast(editor)) { - const auto *model = index.model(); - lineEdit->setText(model->data(index, Qt::EditRole).toString()); - if (const auto *fieldModel = qobject_cast(model)) { - if (fieldModel->passwordVisibility() == PasswordVisibility::Never) { - lineEdit->setEchoMode( - fieldModel->field(static_cast(index.row()))->type() != FieldType::Password ? QLineEdit::Normal : QLineEdit::Password); - } else { - lineEdit->setEchoMode(QLineEdit::Normal); - } - } else { - lineEdit->setEchoMode(QLineEdit::Normal); - } - } else { + // fall back to default implementation if editor is not QLineEdit + auto *const lineEdit = qobject_cast(editor); + if (!lineEdit) { QStyledItemDelegate::setEditorData(editor, index); + return; } + + // set the text + const QAbstractItemModel *const model = index.model(); + lineEdit->setText(model->data(index, Qt::EditRole).toString()); + + // set the echo mode + if (index.column() > 0) { + const auto *const fieldModel = qobject_cast(model); + if (fieldModel && fieldModel->passwordVisibility() == PasswordVisibility::Never) { + if (const Field *const field = fieldModel->field(static_cast(index.row()))) { + lineEdit->setEchoMode(field->type() != FieldType::Password ? QLineEdit::Normal : QLineEdit::Password); + return; + } + } + } + lineEdit->setEchoMode(QLineEdit::Normal); } } // namespace QtGui