24 #include <QTextDocument>
37 #include "ui_kpassworddialog.h"
50 void actuallyAccept();
51 void activated(
const QString& userName );
57 KPasswordDialogFlags m_flags;
58 Ui_KPasswordDialog ui;
62 unsigned int commentRow;
66 const KPasswordDialogFlags& flags,
67 const KDialog::ButtonCodes otherButtons )
68 :
KDialog( parent ), d(new KPasswordDialogPrivate(this))
71 setWindowIcon(
KIcon(
"dialog-password"));
83 void KPasswordDialog::KPasswordDialogPrivate::updateFields()
85 if (q->anonymousMode())
87 ui.userEdit->setEnabled(
false );
88 ui.domainEdit->setEnabled(
false );
89 ui.passEdit->setEnabled(
false );
90 ui.keepCheckBox->setEnabled(
false );
96 ui.passEdit->setEnabled(
true );
97 ui.keepCheckBox->setEnabled(
true );
101 void KPasswordDialog::KPasswordDialogPrivate::init()
103 ui.setupUi( q->mainWidget() );
104 ui.errorMessage->setHidden(
true);
108 ui.userEdit->setFocus();
109 QObject::connect( ui.userEdit, SIGNAL(returnPressed()), ui.passEdit, SLOT(setFocus()) );
111 ui.userNameLabel->hide();
113 ui.domainLabel->hide();
114 ui.domainEdit->hide();
115 ui.passEdit->setFocus();
120 ui.anonymousCheckBox->hide();
124 QObject::connect( ui.anonymousCheckBox, SIGNAL(stateChanged(
int)), q, SLOT(updateFields()) );
129 ui.domainLabel->hide();
130 ui.domainEdit->hide();
135 ui.keepCheckBox->hide();
141 q->setMinimumWidth(qMin(1000, qMax(q->sizeHint().width(), desktop.width() / 4)));
147 if ( !d->pixmapLabel )
150 d->pixmapLabel->setAlignment( Qt::AlignLeft | Qt::AlignTop );
151 d->ui.hboxLayout->insertWidget( 0, d->pixmapLabel );
154 d->pixmapLabel->setPixmap( pixmap );
159 if ( !d->pixmapLabel ) {
163 return *d->pixmapLabel->pixmap();
169 d->ui.userEdit->setText(user);
170 if ( user.isEmpty() )
174 if ( d->ui.userEdit->isVisibleTo(
this ) )
176 d->ui.passEdit->setFocus();
183 return d->ui.userEdit->text();
188 return d->ui.passEdit->text();
193 d->ui.domainEdit->setText(domain);
198 return d->ui.domainEdit->text();
203 d->ui.anonymousCheckBox->setChecked( anonymous );
208 return d->ui.anonymousCheckBox->isChecked();
214 d->ui.keepCheckBox->setChecked( b );
219 return d->ui.keepCheckBox->isChecked();
225 int gridMarginLeft, gridMarginTop, gridMarginRight, gridMarginBottom;
226 d->ui.formLayout->getContentsMargins(&gridMarginLeft, &gridMarginTop, &gridMarginRight, &gridMarginBottom);
228 int spacing = d->ui.formLayout->horizontalSpacing();
231 spacing = style()->combinedLayoutSpacing(QSizePolicy::Label, QSizePolicy::LineEdit, Qt::Horizontal, 0,
this);
235 c->setWordWrap(
true);
237 d->ui.formLayout->insertRow(d->commentRow, label, c);
242 int firstColumnWidth = 0;
243 for (
int i = 0; i < d->ui.formLayout->rowCount(); ++i) {
244 QLayoutItem *li = d->ui.formLayout->itemAt(i, QFormLayout::LabelRole);
247 if (w && !w->isHidden()) {
248 firstColumnWidth = qMax(firstColumnWidth, w->sizeHint().width());
252 for (
int i = 0; i < d->ui.formLayout->rowCount(); ++i) {
253 QLayoutItem *li = d->ui.formLayout->itemAt(i, QFormLayout::FieldRole);
256 if (l && l->wordWrap()) {
257 int w =
sizeHint().width() - firstColumnWidth - ( 2 *
marginHint() ) - gridMarginLeft - gridMarginRight - spacing;
258 l->setMinimumSize( w, l->heightForWidth(w) );
269 bold.setBold(
true );
272 d->ui.passwordLabel->setFont( bold );
273 d->ui.passEdit->clear();
274 d->ui.passEdit->setFocus();
277 if ( d->ui.userEdit->isVisibleTo(
this ) )
279 d->ui.userNameLabel->setFont( bold );
280 d->ui.userEdit->setFocus();
284 if ( d->ui.domainEdit->isVisibleTo(
this ) )
286 d->ui.domainLabel->setFont( bold );
287 d->ui.domainEdit->setFocus();
291 d->ui.userNameLabel->setEnabled(
false );
292 d->ui.userEdit->setEnabled(
false );
293 d->ui.passwordLabel->setEnabled(
false );
294 d->ui.passEdit->setEnabled(
false );
295 d->ui.keepCheckBox->setEnabled(
false );
306 d->ui.prompt->setText( prompt );
307 d->ui.prompt->setWordWrap(
true );
308 d->ui.prompt->setMinimumHeight( d->ui.prompt->heightForWidth( width() - ( 2 *
marginHint() ) ) );
313 return d->ui.prompt->text();
318 d->ui.passEdit->setText(p);
323 d->ui.userEdit->setReadOnly( readOnly );
325 if ( readOnly && d->ui.userEdit->hasFocus() ) {
326 d->ui.passEdit->setFocus();
332 const int nr = knownLogins.count();
338 d->ui.userEdit->setText( knownLogins.begin().key() );
343 Q_ASSERT( !d->ui.userEdit->isReadOnly() );
344 if ( !d->userEditCombo ) {
345 d->ui.formLayout->removeWidget(d->ui.userEdit);
346 delete d->ui.userEdit;
348 d->ui.userEdit = d->userEditCombo->lineEdit();
352 d->ui.userNameLabel->setBuddy( d->userEditCombo );
353 d->ui.formLayout->setWidget( d->commentRow, QFormLayout::FieldRole, d->userEditCombo );
354 setTabOrder( d->ui.userEdit, d->ui.anonymousCheckBox );
355 setTabOrder( d->ui.anonymousCheckBox, d->ui.domainEdit );
356 setTabOrder( d->ui.domainEdit, d->ui.passEdit );
357 setTabOrder( d->ui.passEdit, d->ui.keepCheckBox );
358 connect( d->ui.userEdit, SIGNAL(returnPressed()), d->ui.passEdit, SLOT(setFocus()) );
361 d->knownLogins = knownLogins;
362 d->userEditCombo->addItems( knownLogins.keys() );
363 d->userEditCombo->setFocus();
365 connect( d->userEditCombo, SIGNAL(activated(
QString)),
366 this, SLOT(activated(
QString)) );
369 void KPasswordDialog::KPasswordDialogPrivate::activated(
const QString& userName )
372 if ( it != knownLogins.constEnd() ) {
373 q->setPassword( it.value() );
379 if (!d->ui.errorMessage->isHidden()) d->ui.errorMessage->setText(
QString() );
382 if (!d->ui.passwordLabel->isHidden()) {
383 d->ui.passwordLabel->setFont( font() );
384 d->ui.userNameLabel->setFont( font() );
389 QTimer::singleShot( 0,
this, SLOT(actuallyAccept()) );
392 void KPasswordDialog::KPasswordDialogPrivate::actuallyAccept()
394 if ( !q->checkPassword() )
399 bool keep = ui.keepCheckBox->isVisibleTo( q ) && ui.keepCheckBox->isChecked();
400 emit q->gotPassword( q->password(), keep);
402 if ( ui.userEdit->isVisibleTo( q ) ) {
403 emit q->gotUsernameAndPassword( q->username(), q->password() , keep);
406 q->KDialog::accept();
414 #include "kpassworddialog.moc"