00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <qcheckbox.h>
00022 #include <qlabel.h>
00023 #include <qlayout.h>
00024 #include <qpushbutton.h>
00025 #include <qspinbox.h>
00026 #include <qvbox.h>
00027
00028 #include <kaccelmanager.h>
00029 #include <kcombobox.h>
00030 #include <kdebug.h>
00031 #include <kdialogbase.h>
00032 #include <klocale.h>
00033 #include <klineedit.h>
00034
00035 #include "resourceldap.h"
00036
00037 #include "resourceldapconfig.h"
00038
00039 using namespace KABC;
00040
00041 ResourceLDAPConfig::ResourceLDAPConfig( QWidget* parent, const char* name )
00042 : KRES::ConfigWidget( parent, name )
00043 {
00044 QGridLayout *mainLayout = new QGridLayout( this, 8, 2, 0,
00045 KDialog::spacingHint() );
00046
00047 QLabel *label = new QLabel( i18n( "User:" ), this );
00048 mUser = new KLineEdit( this );
00049
00050 mainLayout->addWidget( label, 0, 0 );
00051 mainLayout->addWidget( mUser, 0, 1 );
00052
00053 label = new QLabel( i18n( "Password:" ), this );
00054 mPassword = new KLineEdit( this );
00055 mPassword->setEchoMode( KLineEdit::Password );
00056
00057 mainLayout->addWidget( label, 1, 0 );
00058 mainLayout->addWidget( mPassword, 1, 1 );
00059
00060 label = new QLabel( i18n( "Host:" ), this );
00061 mHost = new KLineEdit( this );
00062
00063 mainLayout->addWidget( label, 2, 0 );
00064 mainLayout->addWidget( mHost, 2, 1 );
00065
00066 label = new QLabel( i18n( "Port:" ), this );
00067 QVBox *box = new QVBox( this );
00068 mPort = new QSpinBox( 0, 65535, 1, box );
00069 mPort->setSizePolicy( QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ) );
00070 mPort->setValue( 389 );
00071 new QWidget( box, "dummy" );
00072
00073 mainLayout->addWidget( label, 3, 0 );
00074 mainLayout->addWidget( box, 3, 1 );
00075
00076 label = new QLabel( i18n( "Dn:" ), this );
00077 mDn = new KLineEdit( this );
00078
00079 mainLayout->addWidget( label, 4, 0 );
00080 mainLayout->addWidget( mDn, 4, 1 );
00081
00082 label = new QLabel( i18n( "Filter:" ), this );
00083 mFilter = new KLineEdit( this );
00084
00085 mainLayout->addWidget( label, 5, 0 );
00086 mainLayout->addWidget( mFilter, 5, 1 );
00087
00088 mAnonymous = new QCheckBox( i18n( "Anonymous login" ), this );
00089 mainLayout->addMultiCellWidget( mAnonymous, 6, 6, 0, 1 );
00090
00091 mEditButton = new QPushButton( i18n( "Edit Attributes..." ), this );
00092 mainLayout->addMultiCellWidget( mEditButton, 7, 7, 0, 1 );
00093
00094 connect( mAnonymous, SIGNAL( toggled(bool) ), mUser, SLOT( setDisabled(bool) ) );
00095 connect( mAnonymous, SIGNAL( toggled(bool) ), mPassword, SLOT( setDisabled(bool) ) );
00096 connect( mEditButton, SIGNAL( clicked() ), SLOT( editAttributes() ) );
00097 }
00098
00099 void ResourceLDAPConfig::loadSettings( KRES::Resource *res )
00100 {
00101 ResourceLDAP *resource = dynamic_cast<ResourceLDAP*>( res );
00102
00103 if ( !resource ) {
00104 kdDebug(5700) << "ResourceLDAPConfig::loadSettings(): cast failed" << endl;
00105 return;
00106 }
00107
00108 mUser->setText( resource->user() );
00109 mPassword->setText( resource->password() );
00110 mHost->setText( resource->host() );
00111 mPort->setValue( resource->port() );
00112 mDn->setText( resource->dn() );
00113 mFilter->setText( resource->filter() );
00114 mAnonymous->setChecked( resource->isAnonymous() );
00115 mAttributes = resource->attributes();
00116 }
00117
00118 void ResourceLDAPConfig::saveSettings( KRES::Resource *res )
00119 {
00120 ResourceLDAP *resource = dynamic_cast<ResourceLDAP*>( res );
00121
00122 if ( !resource ) {
00123 kdDebug(5700) << "ResourceLDAPConfig::saveSettings(): cast failed" << endl;
00124 return;
00125 }
00126
00127 resource->setUser( mUser->text() );
00128 resource->setPassword( mPassword->text() );
00129 resource->setHost( mHost->text() );
00130 resource->setPort( mPort->value() );
00131 resource->setDn( mDn->text() );
00132 resource->setFilter( mFilter->text() );
00133 resource->setIsAnonymous( mAnonymous->isChecked() );
00134 resource->setAttributes( mAttributes );
00135 }
00136
00137 void ResourceLDAPConfig::editAttributes()
00138 {
00139 AttributesDialog dlg( mAttributes, this );
00140 if ( dlg.exec() )
00141 mAttributes = dlg.attributes();
00142 }
00143
00144 AttributesDialog::AttributesDialog( const QMap<QString, QString> &attributes,
00145 QWidget *parent, const char *name )
00146 : KDialogBase( Plain, i18n( "Attributes Configuration" ), Ok | Cancel,
00147 Ok, parent, name, true, true )
00148 {
00149 mNameDict.setAutoDelete( true );
00150 mNameDict.insert( "commonName", new QString( i18n( "Common name" ) ) );
00151 mNameDict.insert( "formattedName", new QString( i18n( "Formatted name" ) ) );
00152 mNameDict.insert( "familyName", new QString( i18n( "Family name" ) ) );
00153 mNameDict.insert( "givenName", new QString( i18n( "Given name" ) ) );
00154 mNameDict.insert( "mail", new QString( i18n( "Email" ) ) );
00155 mNameDict.insert( "mailAlias", new QString( i18n( "Email alias" ) ) );
00156 mNameDict.insert( "phoneNumber", new QString( i18n( "Telephone number" ) ) );
00157 mNameDict.insert( "uid", new QString( i18n( "UID" ) ) );
00158
00159
00160 QMap<QString, QString> kolabMap, netscapeMap, evolutionMap, outlookMap;
00161
00162
00163 kolabMap.insert( "formattedName", "display-name" );
00164 kolabMap.insert( "mailAlias", "mailalias" );
00165
00166
00167 evolutionMap.insert( "formattedName", "fileAs" );
00168
00169 mMapList.append( attributes );
00170 mMapList.append( kolabMap );
00171 mMapList.append( netscapeMap );
00172 mMapList.append( evolutionMap );
00173 mMapList.append( outlookMap );
00174
00175 QFrame *page = plainPage();
00176 QGridLayout *layout = new QGridLayout( page, 2, attributes.count() + 1,
00177 0, spacingHint() );
00178
00179 QLabel *label = new QLabel( i18n( "Template:" ), page );
00180 layout->addWidget( label, 0, 0 );
00181 mMapCombo = new KComboBox( page );
00182 layout->addWidget( mMapCombo, 0, 1 );
00183
00184 mMapCombo->insertItem( i18n( "User Defined" ) );
00185 mMapCombo->insertItem( i18n( "Kolab" ) );
00186 mMapCombo->insertItem( i18n( "Netscape" ) );
00187 mMapCombo->insertItem( i18n( "Evolution" ) );
00188 mMapCombo->insertItem( i18n( "Outlook" ) );
00189 connect( mMapCombo, SIGNAL( activated( int ) ), SLOT( mapChanged( int ) ) );
00190
00191 QMap<QString, QString>::ConstIterator it;
00192 int i;
00193 for ( i = 1, it = attributes.begin(); it != attributes.end(); ++it, ++i ) {
00194 label = new QLabel( *mNameDict[ it.key() ] + ":", page );
00195 KLineEdit *lineedit = new KLineEdit( page );
00196 mLineEditDict.insert( it.key(), lineedit );
00197 lineedit->setText( it.data() );
00198 label->setBuddy( lineedit );
00199 layout->addWidget( label, i, 0 );
00200 layout->addWidget( lineedit, i, 1 );
00201 }
00202
00203 KAcceleratorManager::manage( this );
00204 }
00205
00206 AttributesDialog::~AttributesDialog()
00207 {
00208 }
00209
00210 QMap<QString, QString> AttributesDialog::attributes() const
00211 {
00212 QMap<QString, QString> map;
00213
00214 QDictIterator<KLineEdit> it( mLineEditDict );
00215 for ( ; it.current(); ++it )
00216 map.insert( it.currentKey(), it.current()->text() );
00217
00218 return map;
00219 }
00220
00221 void AttributesDialog::mapChanged( int pos )
00222 {
00223
00224 QMap<QString, QString> defaultMap;
00225 defaultMap.insert( "commonName", "cn" );
00226 defaultMap.insert( "formattedName", "displayName" );
00227 defaultMap.insert( "familyName", "sn" );
00228 defaultMap.insert( "givenName", "givenName" );
00229 defaultMap.insert( "mail", "mail" );
00230 defaultMap.insert( "mailAlias", "" );
00231 defaultMap.insert( "phoneNumber", "telephoneNumber" );
00232 defaultMap.insert( "uid", "uid" );
00233
00234
00235 QMap<QString, QString>::Iterator it;
00236 for ( it = defaultMap.begin(); it != defaultMap.end(); ++it )
00237 mLineEditDict[ it.key() ]->setText( it.data() );
00238
00239 for ( it = mMapList[ pos ].begin(); it != mMapList[ pos ].end(); ++it ) {
00240 if ( !it.data().isEmpty() )
00241 mLineEditDict[ it.key() ]->setText( it.data() );
00242 }
00243 }
00244
00245 #include "resourceldapconfig.moc"