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 "resourceldapkio.h"
00036
00037 #include "resourceldapkioconfig.h"
00038
00039 using namespace KABC;
00040
00041 ResourceLDAPKIOConfig::ResourceLDAPKIOConfig( 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( "Distinguished Name", "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 ResourceLDAPKIOConfig::loadSettings( KRES::Resource *res )
00100 {
00101 ResourceLDAPKIO *resource = dynamic_cast<ResourceLDAPKIO*>( res );
00102
00103 if ( !resource ) {
00104 kdDebug(5700) << "ResourceLDAPKIOConfig::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 ResourceLDAPKIOConfig::saveSettings( KRES::Resource *res )
00119 {
00120 ResourceLDAPKIO *resource = dynamic_cast<ResourceLDAPKIO*>( res );
00121
00122 if ( !resource ) {
00123 kdDebug(5700) << "ResourceLDAPKIOConfig::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 resource->init();
00136 }
00137
00138 void ResourceLDAPKIOConfig::editAttributes()
00139 {
00140 AttributesDialog dlg( mAttributes, this );
00141 if ( dlg.exec() )
00142 mAttributes = dlg.attributes();
00143 }
00144
00145 AttributesDialog::AttributesDialog( const QMap<QString, QString> &attributes,
00146 QWidget *parent, const char *name )
00147 : KDialogBase( Plain, i18n( "Attributes Configuration" ), Ok | Cancel,
00148 Ok, parent, name, true, true )
00149 {
00150 mNameDict.setAutoDelete( true );
00151 mNameDict.insert( "commonName", new QString( i18n( "Common name" ) ) );
00152 mNameDict.insert( "formattedName", new QString( i18n( "Formatted name" ) ) );
00153 mNameDict.insert( "familyName", new QString( i18n( "Family name" ) ) );
00154 mNameDict.insert( "givenName", new QString( i18n( "Given name" ) ) );
00155 mNameDict.insert( "mail", new QString( i18n( "Email" ) ) );
00156 mNameDict.insert( "mailAlias", new QString( i18n( "Email alias" ) ) );
00157 mNameDict.insert( "phoneNumber", new QString( i18n( "Telephone number" ) ) );
00158 mNameDict.insert( "uid", new QString( i18n( "UID" ) ) );
00159
00160
00161 QMap<QString, QString> kolabMap, netscapeMap, evolutionMap, outlookMap;
00162
00163
00164 kolabMap.insert( "formattedName", "display-name" );
00165 kolabMap.insert( "mailAlias", "mailalias" );
00166
00167
00168 evolutionMap.insert( "formattedName", "fileAs" );
00169
00170 mMapList.append( attributes );
00171 mMapList.append( kolabMap );
00172 mMapList.append( netscapeMap );
00173 mMapList.append( evolutionMap );
00174 mMapList.append( outlookMap );
00175
00176 QFrame *page = plainPage();
00177 QGridLayout *layout = new QGridLayout( page, 2, attributes.count() + 1,
00178 0, spacingHint() );
00179
00180 QLabel *label = new QLabel( i18n( "Template:" ), page );
00181 layout->addWidget( label, 0, 0 );
00182 mMapCombo = new KComboBox( page );
00183 layout->addWidget( mMapCombo, 0, 1 );
00184
00185 mMapCombo->insertItem( i18n( "User Defined" ) );
00186 mMapCombo->insertItem( i18n( "Kolab" ) );
00187 mMapCombo->insertItem( i18n( "Netscape" ) );
00188 mMapCombo->insertItem( i18n( "Evolution" ) );
00189 mMapCombo->insertItem( i18n( "Outlook" ) );
00190 connect( mMapCombo, SIGNAL( activated( int ) ), SLOT( mapChanged( int ) ) );
00191
00192 QMap<QString, QString>::ConstIterator it;
00193 int i;
00194 for ( i = 1, it = attributes.begin(); it != attributes.end(); ++it, ++i ) {
00195 if ( mNameDict[ it.key() ] == 0 )
00196 continue;
00197 label = new QLabel( *mNameDict[ it.key() ] + ":", page );
00198 KLineEdit *lineedit = new KLineEdit( page );
00199 mLineEditDict.insert( it.key(), lineedit );
00200 lineedit->setText( it.data() );
00201 label->setBuddy( lineedit );
00202 layout->addWidget( label, i, 0 );
00203 layout->addWidget( lineedit, i, 1 );
00204 }
00205
00206 KAcceleratorManager::manage( this );
00207 }
00208
00209 AttributesDialog::~AttributesDialog()
00210 {
00211 }
00212
00213 QMap<QString, QString> AttributesDialog::attributes() const
00214 {
00215 QMap<QString, QString> map;
00216
00217 QDictIterator<KLineEdit> it( mLineEditDict );
00218 for ( ; it.current(); ++it )
00219 map.insert( it.currentKey(), it.current()->text() );
00220
00221 return map;
00222 }
00223
00224 void AttributesDialog::mapChanged( int pos )
00225 {
00226
00227 QMap<QString, QString> defaultMap;
00228 defaultMap.insert( "commonName", "cn" );
00229 defaultMap.insert( "formattedName", "displayName" );
00230 defaultMap.insert( "familyName", "sn" );
00231 defaultMap.insert( "givenName", "givenName" );
00232 defaultMap.insert( "mail", "mail" );
00233 defaultMap.insert( "mailAlias", "" );
00234 defaultMap.insert( "phoneNumber", "telephoneNumber" );
00235 defaultMap.insert( "uid", "uid" );
00236
00237
00238 QMap<QString, QString>::Iterator it;
00239 for ( it = defaultMap.begin(); it != defaultMap.end(); ++it )
00240 mLineEditDict[ it.key() ]->setText( it.data() );
00241
00242 for ( it = mMapList[ pos ].begin(); it != mMapList[ pos ].end(); ++it ) {
00243 if ( !it.data().isEmpty() )
00244 mLineEditDict[ it.key() ]->setText( it.data() );
00245 }
00246 }
00247
00248 #include "resourceldapkioconfig.moc"