Akonadi Contacts

namewidget.cpp
1 /*
2  This file is part of Contact Editor.
3 
4  SPDX-FileCopyrightText: 2016 eyeOS S.L.U., a Telefonica company, [email protected]
5  SPDX-FileCopyrightText: 2016-2020 Laurent Montel <montel.org>
6 
7  SPDX-License-Identifier: LGPL-2.0-or-later
8 */
9 
10 #include "namewidget.h"
11 #include "nameeditdialog.h"
12 #include <KLineEdit>
13 #include <KLocalizedString>
14 #include <QLabel>
15 #include <QLineEdit>
16 #include <QToolButton>
17 #include <QVBoxLayout>
18 
19 using namespace ContactEditor;
20 
21 NameWidget::NameWidget(QWidget *parent)
22  : QWidget(parent)
23  , mNameEdit(new KLineEdit(this))
24  , mButtonEdit(new QToolButton(this))
25 {
26  auto topLayout = new QVBoxLayout(this);
27  topLayout->setContentsMargins({});
28  auto label = new QLabel(i18n("Name"));
29  label->setObjectName(QStringLiteral("namelabel"));
30  topLayout->addWidget(label);
31 
32  auto lineLayout = new QHBoxLayout;
33  lineLayout->setContentsMargins({});
34  topLayout->addLayout(lineLayout);
35 
36  mNameEdit->setTrapReturnKey(true);
37  lineLayout->addWidget(mNameEdit);
38  setFocusProxy(mNameEdit);
39  setFocusPolicy(Qt::StrongFocus);
40 
41  mButtonEdit->setText(i18n("..."));
42  mButtonEdit->setToolTip(i18n("Edit Contact Name"));
43  lineLayout->addWidget(mButtonEdit);
44 
45  connect(mNameEdit, &QLineEdit::textChanged, this, &NameWidget::slotTextChanged);
46  connect(mButtonEdit, &QToolButton::clicked, this, &NameWidget::slotOpenNameEditDialog);
47 }
48 
49 NameWidget::~NameWidget() = default;
50 
51 void NameWidget::setReadOnly(bool readOnly)
52 {
53  mNameEdit->setReadOnly(readOnly);
54  mButtonEdit->setEnabled(!readOnly);
55 }
56 
57 void NameWidget::setDisplayType(DisplayNameEditWidget::DisplayType type)
58 {
59  mDisplayType = type;
60 }
61 
62 DisplayNameEditWidget::DisplayType NameWidget::displayType() const
63 {
64  return mDisplayType;
65 }
66 
67 void NameWidget::loadContact(const KContacts::Addressee &contact)
68 {
69  mContact = contact;
70 
71  disconnect(mNameEdit, &QLineEdit::textChanged, this, &NameWidget::slotTextChanged);
72  mNameEdit->setText(contact.assembledName());
73  connect(mNameEdit, &QLineEdit::textChanged, this, &NameWidget::slotTextChanged);
74 }
75 
76 void NameWidget::storeContact(KContacts::Addressee &contact) const
77 {
78  contact.setPrefix(mContact.prefix());
79  contact.setGivenName(mContact.givenName());
80  contact.setAdditionalName(mContact.additionalName());
81  contact.setFamilyName(mContact.familyName());
82  contact.setSuffix(mContact.suffix());
83  contact.setFormattedName(mContact.formattedName());
84 }
85 
86 void NameWidget::slotTextChanged(const QString &text)
87 {
88  mContact.setNameFromString(text);
89 
90  Q_EMIT nameChanged(mContact);
91 }
92 
93 void NameWidget::slotOpenNameEditDialog()
94 {
95  QPointer<NameEditDialog> dlg = new NameEditDialog(this);
96  dlg->loadContact(mContact);
97  dlg->setDisplayType(mDisplayType);
98 
99  if (dlg->exec() == QDialog::Accepted) {
100  dlg->storeContact(mContact);
101  mDisplayType = dlg->displayType();
102  disconnect(mNameEdit, &QLineEdit::textChanged, this, &NameWidget::slotTextChanged);
103  mNameEdit->setText(mContact.assembledName());
104  connect(mNameEdit, &QLineEdit::textChanged, this, &NameWidget::slotTextChanged);
105 
106  Q_EMIT nameChanged(mContact);
107  }
108 
109  delete dlg;
110 }
QString assembledName() const
void setSuffix(const QString &suffix)
Type type(const QSqlDatabase &db)
void clicked(bool checked)
void setFormattedName(const QString &formattedName)
void setGivenName(const QString &givenName)
void setAdditionalName(const QString &additionalName)
QString i18n(const char *text, const TYPE &arg...)
void textChanged(const QString &text)
void setFamilyName(const QString &familyName)
DisplayType
Describes what the display name should look like.
void setPrefix(const QString &prefix)
QString label(StandardShortcut id)
void setContentsMargins(int left, int top, int right, int bottom)
StrongFocus
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Sat Apr 1 2023 04:09:05 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.