22#include "imeditwidget.h"
23#include "customfieldseditwidget.h"
25#include "im/imeditordialog.h"
26#include "im/improtocols.h"
28#include <QtCore/QPointer>
32#include <kabc/addressee.h>
34#include <klocalizedstring.h>
36IMEditWidget::IMEditWidget(QWidget *parent)
39 QHBoxLayout *layout =
new QHBoxLayout(
this);
42 mIMEdit =
new KLineEdit;
43 mIMEdit->setTrapReturnKey(
true);
44 layout->addWidget(mIMEdit);
46 mEditButton =
new QToolButton;
47 mEditButton->setText(i18n(
"..."));
48 layout->addWidget(mEditButton);
49 setFocusProxy(mEditButton);
50 setFocusPolicy(Qt::StrongFocus);
52 connect(mEditButton, SIGNAL(clicked()), SLOT(edit()));
55IMEditWidget::~IMEditWidget()
59void IMEditWidget::loadContact(
const KABC::Addressee &contact)
61 mIMEdit->setText(contact.custom(QLatin1String(
"KADDRESSBOOK"), QLatin1String(
"X-IMAddress")));
63 const QStringList customs = contact.customs();
65 foreach (
const QString &custom, customs) {
66 QString app, name, value;
67 splitCustomField(custom, app, name, value);
69 if (app.startsWith(QLatin1String(
"messaging/"))) {
70 if (name == QLatin1String(
"All")) {
71 const QString protocol = app;
72 const QStringList names = value.split(QChar(0xE000), QString::SkipEmptyParts);
74 foreach (
const QString &name, names) {
75 mIMAddresses << IMAddress(protocol, name, (name == mIMEdit->text()));
82void IMEditWidget::storeContact(KABC::Addressee &contact)
const
84 if (!mIMEdit->text().isEmpty()) {
85 contact.insertCustom(QLatin1String(
"KADDRESSBOOK"), QLatin1String(
"X-IMAddress"), mIMEdit->text());
87 contact.removeCustom(QLatin1String(
"KADDRESSBOOK"), QLatin1String(
"X-IMAddress"));
91 QMap<QString, QStringList> protocolMap;
94 foreach (
const QString &protocol, IMProtocols::self()->protocols()) {
95 protocolMap.insert(protocol, QStringList());
99 foreach (
const IMAddress &address, mIMAddresses) {
100 protocolMap[address.protocol()].append(address.name());
104 QMapIterator<QString, QStringList> it(protocolMap);
105 while (it.hasNext()) {
108 if (!it.value().isEmpty()) {
109 contact.insertCustom(it.key(), QLatin1String(
"All"), it.value().join(QString(0xE000)));
111 contact.removeCustom(it.key(), QLatin1String(
"All"));
116void IMEditWidget::setReadOnly(
bool readOnly)
118 mIMEdit->setReadOnly(readOnly);
119 mEditButton->setEnabled(!readOnly);
122void IMEditWidget::edit()
124 QPointer<IMEditorDialog> dlg =
new IMEditorDialog(
this);
125 dlg->setAddresses(mIMAddresses);
127 if (dlg->exec() == QDialog::Accepted) {
128 mIMAddresses = dlg->addresses();
130 foreach (
const IMAddress &address, mIMAddresses) {
131 if (address.preferred()) {
132 mIMEdit->setText(address.name());