Akonadi Contacts

messagingwidget.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 "messagingwidget.h"
11 #include "../../widgets/contacteditorcombobox.h"
12 #include <editor/widgets/preferredlineeditwidget.h>
13 
14 #include <KContacts/Impp>
15 
16 #include <KLocalizedString>
17 #include <QHBoxLayout>
18 #include <QToolButton>
19 #include <QUrl>
20 
21 using namespace ContactEditor;
22 MessagingWidget::MessagingWidget(QWidget *parent)
23  : QWidget(parent)
24  , mMessagingEdit(new PreferredLineEditWidget(this))
25  , mAddButton(new QToolButton(this))
26  , mRemoveButton(new QToolButton(this))
27  , mProtocolCombo(new ContactEditor::ContactEditorComboBox(this))
28 {
29  auto layout = new QHBoxLayout(this);
30  layout->setSpacing(0);
31  layout->setContentsMargins({});
32 
33  mMessagingEdit->setTrapReturnKey(true);
34  mMessagingEdit->setPlaceholderText(i18n("Add an identifier"));
35  mMessagingEdit->setObjectName(QStringLiteral("messaginglineedit"));
36  connect(mMessagingEdit, &PreferredLineEditWidget::preferredChanged, this, &MessagingWidget::slotPreferredChanged);
37  layout->addWidget(mMessagingEdit);
38 
39  mProtocolCombo->setObjectName(QStringLiteral("protocol"));
40  mProtocolCombo->addItem(i18nc("@item:inlistbox select from a list of IM protocols", "Select..."));
41  layout->addWidget(mProtocolCombo);
42 
43  const auto protocols = KContacts::Impp::serviceTypes();
44  for (const QString &protocol : protocols) {
45  mProtocolCombo->addItem(QIcon::fromTheme(KContacts::Impp::serviceIcon(protocol)), KContacts::Impp::serviceLabel(protocol), protocol);
46  }
47 
48  mAddButton->setIcon(QIcon::fromTheme(QStringLiteral("list-add")));
49  mAddButton->setObjectName(QStringLiteral("addbutton"));
50  mAddButton->setToolTip(i18n("Add an IM"));
51  connect(mAddButton, &QToolButton::clicked, this, &MessagingWidget::slotAddMessaging);
52  layout->addWidget(mAddButton);
53 
54  mRemoveButton->setIcon(QIcon::fromTheme(QStringLiteral("list-remove")));
55  mRemoveButton->setObjectName(QStringLiteral("removebutton"));
56  mRemoveButton->setToolTip(i18n("Remove IM"));
57  connect(mRemoveButton, &QToolButton::clicked, this, &MessagingWidget::slotRemoveMessaging);
58  layout->addWidget(mRemoveButton);
59 }
60 
61 MessagingWidget::~MessagingWidget() = default;
62 
63 void MessagingWidget::slotPreferredChanged()
64 {
65  Q_EMIT preferredChanged(this);
66 }
67 
68 void MessagingWidget::setIMAddress(const KContacts::Impp &address)
69 {
70  const int idx = mProtocolCombo->findData(address.serviceType());
71  if (idx >= 0) {
72  mProtocolCombo->setCurrentIndex(idx);
73  }
74  mMessagingEdit->setText(address.address().path());
75  mMessagingEdit->setPreferred(address.isPreferred());
76 }
77 
78 void MessagingWidget::setPreferred(bool b)
79 {
80  mMessagingEdit->setPreferred(b);
81 }
82 
83 KContacts::Impp MessagingWidget::imAddress() const
84 {
85  QUrl uri;
86  uri.setScheme(mProtocolCombo->currentData().toString());
87  uri.setPath(mMessagingEdit->text().trimmed());
88  KContacts::Impp addr;
89  addr.setAddress(uri);
90  addr.setPreferred(mMessagingEdit->preferred());
91  return addr;
92 }
93 
94 void MessagingWidget::updateAddRemoveButton(bool addButtonEnabled)
95 {
96  mAddButton->setEnabled(addButtonEnabled);
97 }
98 
99 void MessagingWidget::slotAddMessaging()
100 {
101  Q_EMIT addWidget(this);
102 }
103 
104 void MessagingWidget::slotRemoveMessaging()
105 {
106  Q_EMIT removeWidget(this);
107 }
108 
109 void MessagingWidget::clearWidget()
110 {
111  mProtocolCombo->setCurrentIndex(0);
112  mMessagingEdit->clear();
113 }
114 
115 void MessagingWidget::setReadOnly(bool readOnly)
116 {
117  mMessagingEdit->setReadOnly(readOnly);
118  mAddButton->setEnabled(!readOnly);
119  mRemoveButton->setEnabled(!readOnly);
120  mProtocolCombo->setEnabled(!readOnly);
121 }
void clicked(bool checked)
QIcon fromTheme(const QString &name)
QString serviceIcon() const
QString serviceLabel() const
void setScheme(const QString &scheme)
QString i18n(const char *text, const TYPE &arg...)
void setPreferred(bool preferred)
PostalAddress address(const QVariant &location)
static QVector< QString > serviceTypes()
void setPath(const QString &path, QUrl::ParsingMode mode)
QString i18nc(const char *context, const char *text, const TYPE &arg...)
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.