Libkleo

nameandemailwidget.cpp
1/* -*- mode: c++; c-basic-offset:4 -*-
2 dialogs/nameandemailwidget.cpp
3
4 This file is part of Kleopatra, the KDE keymanager
5 SPDX-FileCopyrightText: 2008 Klarälvdalens Datakonsult AB
6 SPDX-FileCopyrightText: 2022 g10 Code GmbH
7 SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
8
9 SPDX-License-Identifier: GPL-2.0-or-later
10*/
11
12#include "nameandemailwidget.h"
13
14#include "formtextinput_p.h"
15
16#include "ui/errorlabel.h"
17#include "utils/validation.h"
18
19#include <KLocalizedString>
20
21#include <QLabel>
22#include <QLineEdit>
23#include <QVBoxLayout>
24
25using namespace Kleo;
26
27namespace
28{
29QString buildUserId(const QString &name, const QString &email)
30{
31 if (name.isEmpty()) {
32 return email;
33 } else if (email.isEmpty()) {
34 return name;
35 } else {
36 return QStringLiteral("%1 <%2>").arg(name, email);
37 }
38}
39}
40
41class NameAndEmailWidget::Private
42{
43 NameAndEmailWidget *const q;
44
45public:
46 struct {
47 std::unique_ptr<FormTextInput<QLineEdit>> nameInput;
48 std::unique_ptr<FormTextInput<QLineEdit>> emailInput;
49 } ui;
50
51 explicit Private(NameAndEmailWidget *qq)
52 : q{qq}
53 {
54 auto mainLayout = new QVBoxLayout{q};
55
56 {
57 ui.nameInput = FormTextInput<QLineEdit>::create(q);
58 ui.nameInput->setLabelText(i18nc("@label", "Name"));
59 ui.nameInput->setValueRequiredErrorMessage(i18n("Enter a name."));
60 setNamePattern({});
61
62 mainLayout->addWidget(ui.nameInput->label());
63 mainLayout->addWidget(ui.nameInput->hintLabel());
64 mainLayout->addWidget(ui.nameInput->errorLabel());
65 mainLayout->addWidget(ui.nameInput->widget());
66 }
67 connect(ui.nameInput->widget(), &QLineEdit::textChanged, q, [this]() {
68 Q_EMIT q->userIDChanged();
69 });
70
71 {
72 ui.emailInput = FormTextInput<QLineEdit>::create(q);
73 ui.emailInput->setLabelText(i18nc("@label", "Email address"));
74 ui.emailInput->setValueRequiredErrorMessage(i18n("Enter an email address."));
75 setEmailPattern({});
76
77 mainLayout->addWidget(ui.emailInput->label());
78 mainLayout->addWidget(ui.emailInput->hintLabel());
79 mainLayout->addWidget(ui.emailInput->errorLabel());
80 mainLayout->addWidget(ui.emailInput->widget());
81 }
82 connect(ui.emailInput->widget(), &QLineEdit::textChanged, q, [this]() {
83 Q_EMIT q->userIDChanged();
84 });
85 }
86
87 void setNamePattern(const QString &regexp)
88 {
89 if (regexp.isEmpty()) {
90 ui.nameInput->setValidator(Validation::simpleName(Validation::Optional));
91 ui.nameInput->setInvalidEntryErrorMessage(
92 i18n("The name must not include <, >, and @."),
93 i18nc("text for screen readers", "The name must not include less-than sign, greater-than sign, and at sign."));
94 } else {
95 ui.nameInput->setValidator(Validation::simpleName(regexp, Validation::Optional));
96 ui.nameInput->setInvalidEntryErrorMessage(i18n("The name must be in the format required by your organization and "
97 "it must not include <, >, and @."),
98 i18nc("text for screen readers",
99 "The name must be in the format required by your organization and "
100 "it must not include less-than sign, greater-than sign, and at sign."));
101 }
102 }
103
104 void setEmailPattern(const QString &regexp)
105 {
106 if (regexp.isEmpty()) {
107 ui.emailInput->setValidator(Validation::email(Validation::Optional));
108 ui.emailInput->setInvalidEntryErrorMessage(i18n("Enter an email address in the correct format, like name@example.com."));
109 } else {
110 ui.emailInput->setValidator(Validation::email(regexp, Validation::Optional));
111 ui.emailInput->setInvalidEntryErrorMessage(i18n("Enter an email address in the correct format required by your organization."));
112 }
113 }
114
115 QString name() const
116 {
117 return ui.nameInput->widget()->text().trimmed();
118 }
119
120 QString email() const
121 {
122 return ui.emailInput->widget()->text().trimmed();
123 }
124};
125
126NameAndEmailWidget::NameAndEmailWidget(QWidget *parent, Qt::WindowFlags f)
127 : QWidget{parent, f}
128 , d(new Private{this})
129{
130}
131
132NameAndEmailWidget::~NameAndEmailWidget() = default;
133
134void NameAndEmailWidget::setName(const QString &name)
135{
136 d->ui.nameInput->widget()->setText(name);
137}
138
139QString NameAndEmailWidget::name() const
140{
141 return d->name();
142}
143
144void NameAndEmailWidget::setNameIsRequired(bool required)
145{
146 d->ui.nameInput->setIsRequired(required);
147}
148
149bool NameAndEmailWidget::nameIsRequired() const
150{
151 return d->ui.nameInput->isRequired();
152}
153
154void NameAndEmailWidget::setNameLabel(const QString &label)
155{
156 if (label.isEmpty()) {
157 d->ui.nameInput->setLabelText(i18nc("@label", "Name"));
158 } else {
159 d->ui.nameInput->setLabelText(label);
160 }
161}
162
163QString NameAndEmailWidget::nameLabel() const
164{
165 return d->ui.nameInput->label()->text();
166}
167
168void NameAndEmailWidget::setNameHint(const QString &hint)
169{
170 d->ui.nameInput->setHint(hint);
171}
172
173QString NameAndEmailWidget::nameHint() const
174{
175 return d->ui.nameInput->hintLabel()->text();
176}
177
178void NameAndEmailWidget::setNamePattern(const QString &pattern)
179{
180 d->setNamePattern(pattern);
181}
182
183QString NameAndEmailWidget::nameError() const
184{
185 return d->ui.nameInput->currentError();
186}
187
188void NameAndEmailWidget::setEmail(const QString &email)
189{
190 d->ui.emailInput->widget()->setText(email);
191}
192
193QString NameAndEmailWidget::email() const
194{
195 return d->email();
196}
197
198void NameAndEmailWidget::setEmailIsRequired(bool required)
199{
200 d->ui.emailInput->setIsRequired(required);
201}
202
203bool NameAndEmailWidget::emailIsRequired() const
204{
205 return d->ui.emailInput->isRequired();
206}
207
208void NameAndEmailWidget::setEmailLabel(const QString &label)
209{
210 if (label.isEmpty()) {
211 d->ui.emailInput->setLabelText(i18nc("@label", "Email address"));
212 } else {
213 d->ui.emailInput->setLabelText(label);
214 }
215}
216
217QString NameAndEmailWidget::emailLabel() const
218{
219 return d->ui.emailInput->label()->text();
220}
221
222void NameAndEmailWidget::setEmailHint(const QString &hint)
223{
224 d->ui.emailInput->setHint(hint);
225}
226
227QString NameAndEmailWidget::emailHint() const
228{
229 return d->ui.emailInput->hintLabel()->text();
230}
231
232void NameAndEmailWidget::setEmailPattern(const QString &pattern)
233{
234 d->setEmailPattern(pattern);
235}
236
237QString NameAndEmailWidget::emailError() const
238{
239 return d->ui.emailInput->currentError();
240}
241
243{
244 return buildUserId(name(), email());
245}
246
247#include "moc_nameandemailwidget.cpp"
constexpr bool isEmpty() const
A widget containing a name and an email field.
QString userID() const
Returns the user ID built from the entered name and/or email address.
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
void textChanged(const QString &text)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
bool isEmpty() const const
typedef WindowFlags
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Fri Jul 26 2024 11:50:31 by doxygen 1.11.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.