00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
#include "cryptoconfigmodule.h"
00033
#include "directoryserviceswidget.h"
00034
#include <kleo/cryptoconfig.h>
00035
00036
#include <klineedit.h>
00037
#include <klocale.h>
00038
#include <kdialogbase.h>
00039
#include <kdebug.h>
00040
#include <knuminput.h>
00041
#include <kiconloader.h>
00042
#include <kglobal.h>
00043
00044
#include <qgrid.h>
00045
#include <qlabel.h>
00046
#include <qlayout.h>
00047
#include <qvbox.h>
00048
#include <qpushbutton.h>
00049
#include <qregexp.h>
00050
00051
using namespace Kleo;
00052
00053
inline QPixmap loadIcon(
QString s ) {
00054
return KGlobal::instance()->iconLoader()
00055 ->loadIcon( s.replace(
QRegExp(
"[^a-zA-Z0-9_]" ),
"_" ), KIcon::NoGroup, KIcon::SizeMedium );
00056 }
00057
00058 Kleo::CryptoConfigModule::CryptoConfigModule(
Kleo::CryptoConfig* config,
QWidget * parent,
const char * name )
00059 : KJanusWidget( parent, name, KJanusWidget::IconList ), mConfig( config )
00060 {
00061
00062
00063
00064
00065
QStringList components = config->
componentList();
00066
00067
for( QStringList::Iterator compit = components.begin(); compit != components.end(); ++compit ) {
00068
00069
Kleo::CryptoConfigComponent* comp = config->
component( *compit );
00070 Q_ASSERT( comp );
00071
if ( !comp->
groupList().isEmpty() ) {
00072
QVBox* vbox = addVBoxPage( comp->
description(), QString::null, loadIcon( *compit ) );
00073
CryptoConfigComponentGUI* compGUI =
00074
new CryptoConfigComponentGUI(
this, comp, vbox, (*compit).local8Bit() );
00075
00076 mComponentGUIs.append( compGUI );
00077 }
00078 }
00079 }
00080
00081
void Kleo::CryptoConfigModule::save()
00082 {
00083
bool changed =
false;
00084
QValueList<CryptoConfigComponentGUI *>::Iterator it = mComponentGUIs.begin();
00085
for( ; it != mComponentGUIs.end(); ++it ) {
00086
if ( (*it)->save() )
00087 changed =
true;
00088 }
00089
if ( changed )
00090 mConfig->
sync(
true );
00091 }
00092
00093
void Kleo::CryptoConfigModule::reset()
00094 {
00095
QValueList<CryptoConfigComponentGUI *>::Iterator it = mComponentGUIs.begin();
00096
for( ; it != mComponentGUIs.end(); ++it ) {
00097 (*it)->load();
00098 }
00099 }
00100
00101
void Kleo::CryptoConfigModule::defaults()
00102 {
00103
QValueList<CryptoConfigComponentGUI *>::Iterator it = mComponentGUIs.begin();
00104
for( ; it != mComponentGUIs.end(); ++it ) {
00105 (*it)->defaults();
00106 }
00107 }
00108
00109
void Kleo::CryptoConfigModule::cancel()
00110 {
00111 mConfig->
clear();
00112 }
00113
00115
00116 Kleo::CryptoConfigComponentGUI::CryptoConfigComponentGUI(
00117 CryptoConfigModule* module,
Kleo::CryptoConfigComponent* component,
00118
QWidget* parent,
const char* name )
00119 #ifdef USE_TABS
00120 :
QTabWidget( parent, name ),
00121
#else
00122
:
QWidget( parent, name ),
00123
#endif
00124
mComponent( component )
00125 {
00126
#ifndef USE_TABS
00127
QVBoxLayout *vlay =
new QVBoxLayout(
this, 0, KDialog::spacingHint() );
00128
#endif
00129
00130
QStringList groups = mComponent->groupList();
00131
for( QStringList::Iterator groupit = groups.begin(); groupit != groups.end(); ++groupit ) {
00132
Kleo::CryptoConfigGroup* group = mComponent->group( *groupit );
00133 Q_ASSERT( group );
00134
CryptoConfigGroupGUI* gg =
new CryptoConfigGroupGUI( module, group,
this );
00135
#ifdef USE_TABS
00136
addTab( gg, group->
description() );
00137
#else
00138
vlay->addWidget( gg );
00139
#endif
00140
mGroupGUIs.append( gg );
00141 }
00142 }
00143
00144
00145
bool Kleo::CryptoConfigComponentGUI::save()
00146 {
00147
bool changed =
false;
00148
QValueList<CryptoConfigGroupGUI *>::Iterator it = mGroupGUIs.begin();
00149
for( ; it != mGroupGUIs.end(); ++it ) {
00150
if ( (*it)->save() )
00151 changed =
true;
00152 }
00153
return changed;
00154 }
00155
00156
void Kleo::CryptoConfigComponentGUI::load()
00157 {
00158
QValueList<CryptoConfigGroupGUI *>::Iterator it = mGroupGUIs.begin();
00159
for( ; it != mGroupGUIs.end(); ++it )
00160 (*it)->load();
00161 }
00162
00163
void Kleo::CryptoConfigComponentGUI::defaults()
00164 {
00165
QValueList<CryptoConfigGroupGUI *>::Iterator it = mGroupGUIs.begin();
00166
for( ; it != mGroupGUIs.end(); ++it )
00167 (*it)->defaults();
00168 }
00169
00171
00172 Kleo::CryptoConfigGroupGUI::CryptoConfigGroupGUI(
00173 CryptoConfigModule* module,
Kleo::CryptoConfigGroup* group,
00174
QWidget* parent,
const char* name )
00175 :
QGroupBox( 1,
Qt::Horizontal,
00176 group->description(), parent, name ), mGroup( group )
00177 {
00178
QStringList entries = mGroup->entryList();
00179
for( QStringList::Iterator entryit = entries.begin(); entryit != entries.end(); ++entryit ) {
00180
Kleo::CryptoConfigEntry* entry = group->
entry( *entryit );
00181 Q_ASSERT( entry );
00182
CryptoConfigEntryGUI* entryGUI =
00183 CryptoConfigEntryGUIFactory::createEntryGUI( module, entry, *entryit,
this );
00184
if ( entryGUI ) {
00185 mEntryGUIs.append( entryGUI );
00186 entryGUI->
load();
00187 }
00188 }
00189 }
00190
00191
bool Kleo::CryptoConfigGroupGUI::save()
00192 {
00193
bool changed =
false;
00194
QValueList<CryptoConfigEntryGUI *>::Iterator it = mEntryGUIs.begin();
00195
for( ; it != mEntryGUIs.end(); ++it ) {
00196
if ( (*it)->isChanged() ) {
00197 (*it)->save();
00198 changed =
true;
00199 }
00200 }
00201
return changed;
00202 }
00203
00204
void Kleo::CryptoConfigGroupGUI::load()
00205 {
00206
QValueList<CryptoConfigEntryGUI *>::Iterator it = mEntryGUIs.begin();
00207
for( ; it != mEntryGUIs.end(); ++it )
00208 (*it)->load();
00209 }
00210
00211
void Kleo::CryptoConfigGroupGUI::defaults()
00212 {
00213
QValueList<CryptoConfigEntryGUI *>::Iterator it = mEntryGUIs.begin();
00214
for( ; it != mEntryGUIs.end(); ++it )
00215 (*it)->resetToDefault();
00216 }
00217
00219
00220
CryptoConfigEntryGUI* Kleo::CryptoConfigEntryGUIFactory::createEntryGUI( CryptoConfigModule* module,
Kleo::CryptoConfigEntry* entry,
const QString& entryName,
QWidget* parent,
const char* name )
00221 {
00222
if ( entry->
isList() ) {
00223
switch( entry->
argType() ) {
00224
case Kleo::CryptoConfigEntry::ArgType_None:
00225
00226
return new CryptoConfigEntrySpinBox( module, entry, entryName, parent, name );
00227
case Kleo::CryptoConfigEntry::ArgType_Int:
00228
case Kleo::CryptoConfigEntry::ArgType_UInt:
00229
00230
return new CryptoConfigEntryLineEdit( module, entry, entryName, parent, name );
00231
case Kleo::CryptoConfigEntry::ArgType_URL:
00232
case Kleo::CryptoConfigEntry::ArgType_Path:
00233
case Kleo::CryptoConfigEntry::ArgType_String:
00234 kdWarning(5150) <<
"No widget implemented for list of type " << entry->
argType() << endl;
00235
return 0;
00236
case Kleo::CryptoConfigEntry::ArgType_LDAPURL:
00237
return new CryptoConfigEntryLDAPURL( module, entry, entryName, parent, name );
00238 }
00239 }
00240
00241
switch( entry->
argType() ) {
00242
case Kleo::CryptoConfigEntry::ArgType_None:
00243
return new CryptoConfigEntryCheckBox( module, entry, entryName, parent, name );
00244
case Kleo::CryptoConfigEntry::ArgType_Int:
00245
00246
case Kleo::CryptoConfigEntry::ArgType_UInt:
00247
return new CryptoConfigEntrySpinBox( module, entry, entryName, parent, name );
00248
case Kleo::CryptoConfigEntry::ArgType_LDAPURL:
00249
00250
case Kleo::CryptoConfigEntry::ArgType_URL:
00251
00252
case Kleo::CryptoConfigEntry::ArgType_Path:
00253
00254
case Kleo::CryptoConfigEntry::ArgType_String:
00255
return new CryptoConfigEntryLineEdit( module, entry, entryName, parent, name );
00256 }
00257 kdWarning(5150) <<
"No widget implemented for list of (unknown) type " << entry->
argType() << endl;
00258
return 0;
00259 }
00260
00262
00263 Kleo::CryptoConfigEntryGUI::CryptoConfigEntryGUI(
00264 CryptoConfigModule* module,
00265
Kleo::CryptoConfigEntry* entry,
00266
const QString& entryName,
00267
QWidget* parent,
const char* name )
00268 :
QHBox( parent, name ), mEntry( entry ), mName( entryName ), mChanged( false )
00269 {
00270 connect(
this, SIGNAL( changed() ), module, SIGNAL( changed() ) );
00271 }
00272
00273
QString Kleo::CryptoConfigEntryGUI::description()
const
00274
{
00275
QString descr = mEntry->
description();
00276
if ( descr.isEmpty() )
00277 descr =
QString(
"<%1>" ).arg( mName );
00278
return descr;
00279 }
00280
00281
void Kleo::CryptoConfigEntryGUI::resetToDefault()
00282 {
00283 mEntry->
resetToDefault();
00284 load();
00285 }
00286
00288
00289 Kleo::CryptoConfigEntryLineEdit::CryptoConfigEntryLineEdit(
00290 CryptoConfigModule* module,
00291
Kleo::CryptoConfigEntry* entry,
const QString& entryName,
00292
QWidget* parent,
const char* name )
00293 :
CryptoConfigEntryGUI( module, entry, entryName, parent, name )
00294 {
00295 setSpacing( KDialog::spacingHint() );
00296
QLabel* label =
new QLabel( description(),
this );
00297 mLineEdit =
new KLineEdit(
this );
00298 connect( mLineEdit, SIGNAL( textChanged(
const QString& ) ), SLOT( slotChanged() ) );
00299 label->setBuddy( mLineEdit );
00300
QWidget* stretch =
new QWidget(
this );
00301 setStretchFactor( stretch, 1 );
00302 }
00303
00304
void Kleo::CryptoConfigEntryLineEdit::doSave()
00305 {
00306 mEntry->
setStringValue( mLineEdit->text() );
00307 }
00308
00309
void Kleo::CryptoConfigEntryLineEdit::doLoad()
00310 {
00311 mLineEdit->setText( mEntry->
stringValue() );
00312 }
00313
00315
00316 Kleo::CryptoConfigEntrySpinBox::CryptoConfigEntrySpinBox(
00317 CryptoConfigModule* module,
00318
Kleo::CryptoConfigEntry* entry,
const QString& entryName,
00319
QWidget* parent,
const char* name )
00320 :
CryptoConfigEntryGUI( module, entry, entryName, parent, name )
00321 {
00322 setSpacing( KDialog::spacingHint() );
00323 QLabel* label =
new QLabel( description(),
this );
00324
00325
if ( entry->
argType() == Kleo::CryptoConfigEntry::ArgType_None && entry->
isList() ) {
00326 mKind = ListOfNone;
00327 }
else if ( entry->
argType() == Kleo::CryptoConfigEntry::ArgType_UInt ) {
00328 mKind = UInt;
00329 }
else {
00330 Q_ASSERT( entry->
argType() == Kleo::CryptoConfigEntry::ArgType_Int );
00331 mKind = Int;
00332 }
00333
00334 mNumInput =
new KIntNumInput(
this );
00335
if ( mKind == UInt || mKind == ListOfNone )
00336 mNumInput->setMinValue( 0 );
00337 connect( mNumInput, SIGNAL( valueChanged(
int) ), SLOT( slotChanged() ) );
00338 label->setBuddy( mNumInput );
00339
00340
QWidget* stretch =
new QWidget(
this );
00341 setStretchFactor( stretch, 1 );
00342 }
00343
00344
void Kleo::CryptoConfigEntrySpinBox::doSave()
00345 {
00346
int value = mNumInput->value();
00347
switch ( mKind ) {
00348
case ListOfNone:
00349 mEntry->
setNumberOfTimesSet( value );
00350
break;
00351
case UInt:
00352 mEntry->
setUIntValue( value );
00353
break;
00354
case Int:
00355 mEntry->
setIntValue( value );
00356
break;
00357 }
00358 }
00359
00360
void Kleo::CryptoConfigEntrySpinBox::doLoad()
00361 {
00362
int value = 0;
00363
switch ( mKind ) {
00364
case ListOfNone:
00365 value = mEntry->
numberOfTimesSet();
00366
break;
00367
case UInt:
00368 value = mEntry->
uintValue();
00369
break;
00370
case Int:
00371 value = mEntry->
intValue();
00372
break;
00373 }
00374 mNumInput->setValue( value );
00375 }
00376
00378
00379 Kleo::CryptoConfigEntryCheckBox::CryptoConfigEntryCheckBox(
00380 CryptoConfigModule* module,
00381
Kleo::CryptoConfigEntry* entry,
const QString& entryName,
00382
QWidget* parent,
const char* name )
00383 :
CryptoConfigEntryGUI( module, entry, entryName, parent, name )
00384 {
00385 mCheckBox =
new QCheckBox(
this);
00386 mCheckBox->setText( description() );
00387 connect( mCheckBox, SIGNAL( toggled(
bool) ), SLOT( slotChanged() ) );
00388 }
00389
00390
void Kleo::CryptoConfigEntryCheckBox::doSave()
00391 {
00392 mEntry->
setBoolValue( mCheckBox->isChecked() );
00393 }
00394
00395
void Kleo::CryptoConfigEntryCheckBox::doLoad()
00396 {
00397 mCheckBox->setChecked( mEntry->
boolValue() );
00398 }
00399
00400 Kleo::CryptoConfigEntryLDAPURL::CryptoConfigEntryLDAPURL(
00401 CryptoConfigModule* module,
00402
Kleo::CryptoConfigEntry* entry,
00403
const QString& entryName,
00404
QWidget* parent,
const char* name )
00405 :
CryptoConfigEntryGUI( module, entry, entryName, parent, name )
00406 {
00407 setSpacing( KDialog::spacingHint() );
00408 QLabel* label =
new QLabel( description(),
this );
00409 mPushButton =
new QPushButton( i18n(
"Edit..." ),
this );
00410 mLabel =
new QLabel(
this );
00411 connect( mPushButton, SIGNAL( clicked() ), SLOT( slotOpenDialog() ) );
00412 label->setBuddy( mPushButton );
00413
QWidget* stretch =
new QWidget(
this );
00414 setStretchFactor( stretch, 1 );
00415 }
00416
00417
void Kleo::CryptoConfigEntryLDAPURL::doLoad()
00418 {
00419 setURLList( mEntry->
urlValueList() );
00420 }
00421
00422
void Kleo::CryptoConfigEntryLDAPURL::doSave()
00423 {
00424 mEntry->
setURLValueList( mURLList );
00425 }
00426
00427
void Kleo::CryptoConfigEntryLDAPURL::slotOpenDialog()
00428 {
00429
00430
00431 KDialogBase dialog(
this, 0,
true ,
00432 i18n(
"Configure LDAP Servers" ),
00433 KDialogBase::Default|KDialogBase::Cancel|KDialogBase::Ok,
00434 KDialogBase::Ok,
true );
00435 DirectoryServicesWidget* dirserv =
new DirectoryServicesWidget( mEntry, &dialog );
00436 dirserv->load();
00437 dialog.setMainWidget( dirserv );
00438 connect( &dialog, SIGNAL( defaultClicked() ), dirserv, SLOT( defaults() ) );
00439
if ( dialog.exec() ) {
00440
00441
00442 setURLList( dirserv->urlList() );
00443 slotChanged();
00444 }
00445 }
00446
00447
void Kleo::CryptoConfigEntryLDAPURL::setURLList(
const KURL::List& urlList )
00448 {
00449 mURLList = urlList;
00450
if ( mURLList.isEmpty() )
00451 mLabel->setText( i18n(
"No server configured yet" ) );
00452
else
00453 mLabel->setText( i18n(
"1 server configured",
"%n servers configured", mURLList.count() ) );
00454 }
00455
00456
#include "cryptoconfigmodule.moc"