22 #include "imeditwidget.h"
23 #include "customfieldseditwidget.h"
25 #include "im/imeditordialog.h"
26 #include "im/improtocols.h"
28 #include <QtCore/QPointer>
29 #include <QHBoxLayout>
30 #include <QToolButton>
32 #include <kabc/addressee.h>
33 #include <klineedit.h>
34 #include <klocalizedstring.h>
37 IMEditWidget::IMEditWidget( QWidget *parent )
40 QHBoxLayout *layout =
new QHBoxLayout(
this );
41 layout->setMargin( 0 );
43 mIMEdit =
new KLineEdit;
44 layout->addWidget( mIMEdit );
46 mEditButton =
new QToolButton;
47 mEditButton->setText( i18n(
"..." ) );
48 layout->addWidget( mEditButton );
50 connect( mEditButton, SIGNAL(clicked()), SLOT(edit()) );
53 IMEditWidget::~IMEditWidget()
57 void IMEditWidget::loadContact(
const KABC::Addressee &contact )
59 mIMEdit->setText( contact.custom( QLatin1String(
"KADDRESSBOOK" ), QLatin1String(
"X-IMAddress" ) ) );
61 const QStringList customs = contact.customs();
63 foreach (
const QString &custom, customs ) {
64 QString app, name, value;
65 splitCustomField( custom, app, name, value );
67 if ( app.startsWith( QLatin1String(
"messaging/" ) ) ) {
68 if ( name == QLatin1String(
"All" ) ) {
69 const QString protocol = app;
70 const QStringList names = value.split( QChar( 0xE000 ), QString::SkipEmptyParts );
72 foreach (
const QString &name, names ) {
73 mIMAddresses << IMAddress( protocol, name, ( name == mIMEdit->text() ) );
80 void IMEditWidget::storeContact( KABC::Addressee &contact )
const
82 if ( !mIMEdit->text().isEmpty() ) {
83 contact.insertCustom( QLatin1String(
"KADDRESSBOOK" ), QLatin1String(
"X-IMAddress" ), mIMEdit->text() );
85 contact.removeCustom( QLatin1String(
"KADDRESSBOOK" ), QLatin1String(
"X-IMAddress" ) );
89 QMap<QString, QStringList> protocolMap;
92 foreach (
const QString &protocol, IMProtocols::self()->protocols() ) {
93 protocolMap.insert( protocol, QStringList() );
97 foreach (
const IMAddress &address, mIMAddresses ) {
98 protocolMap[ address.protocol() ].append( address.name() );
102 QMapIterator<QString, QStringList> it( protocolMap );
103 while ( it.hasNext() ) {
106 if ( !it.value().isEmpty() ) {
107 contact.insertCustom( it.key(), QLatin1String(
"All" ), it.value().join( QString( 0xE000 ) ) );
109 contact.removeCustom( it.key(), QLatin1String(
"All" ) );
114 void IMEditWidget::setReadOnly(
bool readOnly )
116 mIMEdit->setReadOnly( readOnly );
117 mEditButton->setEnabled( !readOnly );
120 void IMEditWidget::edit()
122 QPointer<IMEditorDialog> dlg =
new IMEditorDialog(
this );
123 dlg->setAddresses( mIMAddresses );
125 if ( dlg->exec() == QDialog::Accepted ) {
126 mIMAddresses = dlg->addresses();
128 foreach (
const IMAddress &address, mIMAddresses ) {
129 if ( address.preferred() ) {
130 mIMEdit->setText( address.name() );