Akonadi Contacts

customfieldeditorwidget.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 "customfieldeditorwidget.h"
11 #include "customfieldsmodel.h"
12 #include <KContacts/Addressee>
13 #include <KLineEdit>
14 #include <KLocalizedString>
15 #include <QCheckBox>
16 #include <QComboBox>
17 #include <QLabel>
18 #include <QPushButton>
19 #include <QUuid>
20 #include <QVBoxLayout>
21 
22 using namespace ContactEditor;
23 
24 CustomFieldEditorWidget::CustomFieldEditorWidget(QWidget *parent)
25  : QWidget(parent)
26  , mFieldName(new KLineEdit(this))
27  , mAddField(new QPushButton(i18n("Add Field"), this))
28  , mUseAllContacts(new QCheckBox(i18n("Use field for all contacts")))
29  , mFieldType(new QComboBox(this))
30 {
31  auto topLayout = new QVBoxLayout(this);
32  auto label = new QLabel(i18n("Custom Field Title"), this);
33  label->setObjectName(QStringLiteral("labeltitle"));
34 
35  topLayout->addWidget(label);
36 
37  auto fieldLayout = new QHBoxLayout;
38  topLayout->addLayout(fieldLayout);
39  mFieldName->setPlaceholderText(i18n("Add name"));
40  mFieldName->setObjectName(QStringLiteral("fieldname"));
41  mFieldName->setTrapReturnKey(true);
42  fieldLayout->addWidget(mFieldName);
43 
44  mFieldType->setObjectName(QStringLiteral("fieldtype"));
45  fieldLayout->addWidget(mFieldType);
46  fillTypes();
47 
48  mAddField->setObjectName(QStringLiteral("addfield"));
49  fieldLayout->addWidget(mAddField);
50  mAddField->setEnabled(false); // Disable at the beginning
51  connect(mAddField, &QPushButton::clicked, this, &CustomFieldEditorWidget::slotAddField);
52  connect(mFieldName, &KLineEdit::textChanged, this, &CustomFieldEditorWidget::slotFielNameChanged);
53 
54  mUseAllContacts->setObjectName(QStringLiteral("useallcontact"));
55  topLayout->addWidget(mUseAllContacts);
56 }
57 
58 CustomFieldEditorWidget::~CustomFieldEditorWidget() = default;
59 
60 void CustomFieldEditorWidget::fillTypes()
61 {
62  mFieldType->addItem(i18n("Text"), CustomField::TextType);
63  mFieldType->addItem(i18n("Numeric"), CustomField::NumericType);
64  mFieldType->addItem(i18n("Boolean"), CustomField::BooleanType);
65  mFieldType->addItem(i18n("Date"), CustomField::DateType);
66  mFieldType->addItem(i18n("Time"), CustomField::TimeType);
67  mFieldType->addItem(i18n("DateTime"), CustomField::DateTimeType);
68  mFieldType->addItem(i18n("Url"), CustomField::UrlType);
69 }
70 
71 void CustomFieldEditorWidget::setReadOnly(bool readOnly)
72 {
73  mFieldName->setReadOnly(readOnly);
74  mAddField->setEnabled(!readOnly && !mFieldName->text().trimmed().isEmpty());
75  mFieldType->setEnabled(!readOnly);
76  mUseAllContacts->setEnabled(!readOnly);
77 }
78 
79 void CustomFieldEditorWidget::slotFielNameChanged(const QString &text)
80 {
81  mAddField->setEnabled(!text.trimmed().isEmpty());
82 }
83 
84 void CustomFieldEditorWidget::slotAddField()
85 {
86  if (mFieldName->text().trimmed().isEmpty()) {
87  return;
88  }
89  CustomField field;
90  // We use a Uuid as default key, so we won't have any duplicated keys,
91  // the user can still change it to something else in the editor dialog.
92  // Since the key only allows [A-Za-z0-9\-]*, we have to remove the curly
93  // braces as well.
95  key.remove(QLatin1Char('{'));
96  key.remove(QLatin1Char('}'));
97 
98  field.setKey(key);
99  field.setTitle(mFieldName->text());
100  field.setType(static_cast<CustomField::Type>(mFieldType->itemData(mFieldType->currentIndex()).toInt()));
101 
102  // TODO verify it
103  if (field.scope() != CustomField::ExternalScope) {
104  // do not change the scope for externally defined custom fields
105  field.setScope(mUseAllContacts->isChecked() ? CustomField::GlobalScope : CustomField::LocalScope);
106  }
107  Q_EMIT addNewField(field);
108  mFieldName->clear();
109  mFieldType->setCurrentIndex(0);
110 }
QString trimmed() const const
void clicked(bool checked)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QString i18n(const char *text, const TYPE &arg...)
void textChanged(const QString &text)
bool isEmpty() const const
QUuid createUuid()
QString toString() const const
QString & remove(int position, int n)
QString label(StandardShortcut id)
void addLayout(QLayout *layout, int stretch)
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Sat Apr 1 2023 04:09:04 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.