22 #include "imeditwidget.h"
23 #include "customfieldseditwidget.h"
25 #include "im/imeditordialog.h"
26 #include "im/improtocols.h"
28 #include <QtCore/QPointer>
29 #include <QtGui/QHBoxLayout>
30 #include <QtGui/QToolButton>
32 #include <kabc/addressee.h>
33 #include <klineedit.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()) );
79 void IMEditWidget::storeContact( KABC::Addressee &contact )
const
81 if ( !mIMEdit->text().isEmpty() )
82 contact.insertCustom( QLatin1String(
"KADDRESSBOOK" ), QLatin1String(
"X-IMAddress" ), mIMEdit->text() );
84 contact.removeCustom( QLatin1String(
"KADDRESSBOOK" ), QLatin1String(
"X-IMAddress" ) );
87 QMap<QString, QStringList> protocolMap;
90 foreach (
const QString &protocol, IMProtocols::self()->protocols() )
91 protocolMap.insert( protocol, QStringList() );
94 foreach (
const IMAddress &address, mIMAddresses )
95 protocolMap[ address.protocol() ].append( address.name() );
98 QMapIterator<QString, QStringList> it( protocolMap );
99 while ( it.hasNext() ) {
102 if ( !it.value().isEmpty() ) {
103 contact.insertCustom( it.key(), QLatin1String(
"All" ), it.value().join( QString( 0xE000 ) ) );
105 contact.removeCustom( it.key(), QLatin1String(
"All" ) );
110 void IMEditWidget::setReadOnly(
bool readOnly )
112 mIMEdit->setReadOnly( readOnly );
113 mEditButton->setEnabled( !readOnly );
116 void IMEditWidget::edit()
118 QPointer<IMEditorDialog> dlg =
new IMEditorDialog(
this );
119 dlg->setAddresses( mIMAddresses );
121 if ( dlg->exec() == QDialog::Accepted ) {
122 mIMAddresses = dlg->addresses();
124 foreach (
const IMAddress &address, mIMAddresses ) {
125 if ( address.preferred() ) {
126 mIMEdit->setText( address.name() );
135 #include "imeditwidget.moc"