diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2013-01-27 01:04:16 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2013-01-27 01:04:16 -0600 |
commit | 5159cd2beb2e87806a5b54e9991b7895285c9d3e (patch) | |
tree | 9b70e8be47a390f8f4d56ead812ab0c9dad88709 /tdeio/tdeio/passdlg.cpp | |
parent | c17cb900dcf52b8bd6dc300d4f103392900ec2b4 (diff) | |
download | tdelibs-5159cd2beb2e87806a5b54e9991b7895285c9d3e.tar.gz tdelibs-5159cd2beb2e87806a5b54e9991b7895285c9d3e.zip |
Rename a number of libraries and executables to avoid conflicts with KDE4
Diffstat (limited to 'tdeio/tdeio/passdlg.cpp')
-rw-r--r-- | tdeio/tdeio/passdlg.cpp | 367 |
1 files changed, 367 insertions, 0 deletions
diff --git a/tdeio/tdeio/passdlg.cpp b/tdeio/tdeio/passdlg.cpp new file mode 100644 index 000000000..54bcec3b2 --- /dev/null +++ b/tdeio/tdeio/passdlg.cpp @@ -0,0 +1,367 @@ +/* This file is part of the KDE libraries + Copyright (C) 2000 David Faure <faure@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "passdlg.h" + +#include <tqapplication.h> +#include <tqcheckbox.h> +#include <tqhbox.h> +#include <tqlabel.h> +#include <tqlayout.h> +#include <tqsimplerichtext.h> +#include <tqstylesheet.h> + +#include <kcombobox.h> +#include <tdeconfig.h> +#include <kiconloader.h> +#include <klineedit.h> +#include <klocale.h> +#include <kstandarddirs.h> + +using namespace TDEIO; + +struct PasswordDialog::PasswordDialogPrivate +{ + TQGridLayout *layout; + TQLineEdit* userEdit; + KLineEdit* passEdit; + TQLabel* userNameLabel; + TQLabel* prompt; + TQCheckBox* keepCheckBox; + TQMap<TQString,TQString> knownLogins; + KComboBox* userEditCombo; + TQHBox* userNameHBox; + + bool keep; + short unsigned int nRow; +}; + +PasswordDialog::PasswordDialog( const TQString& prompt, const TQString& user, + bool enableKeep, bool modal, TQWidget* parent, + const char* name ) + :KDialogBase( parent, name, modal, i18n("Password"), Ok|Cancel, Ok, true) +{ + init ( prompt, user, enableKeep ); +} + +PasswordDialog::~PasswordDialog() +{ + delete d; +} + +void PasswordDialog::init( const TQString& prompt, const TQString& user, + bool enableKeep ) +{ + TQWidget *main = makeMainWidget(); + + d = new PasswordDialogPrivate; + d->keep = false; + d->nRow = 0; + d->keepCheckBox = 0; + + TDEConfig* cfg = TDEGlobal::config(); + TDEConfigGroupSaver saver( cfg, "Passwords" ); + + d->layout = new TQGridLayout( main, 9, 3, spacingHint(), marginHint()); + d->layout->addColSpacing(1, 5); + + // Row 0: pixmap prompt + TQLabel* lbl; + TQPixmap pix( TDEGlobal::iconLoader()->loadIcon( "password", KIcon::NoGroup, KIcon::SizeHuge, 0, 0, true)); + if ( !pix.isNull() ) + { + lbl = new TQLabel( main ); + lbl->setPixmap( pix ); + lbl->setAlignment( Qt::AlignLeft|Qt::AlignVCenter ); + lbl->setFixedSize( lbl->sizeHint() ); + d->layout->addWidget( lbl, 0, 0, Qt::AlignLeft ); + } + d->prompt = new TQLabel( main ); + d->prompt->setAlignment( Qt::AlignLeft|Qt::AlignVCenter|TQt::WordBreak ); + d->layout->addWidget( d->prompt, 0, 2, Qt::AlignLeft ); + if ( prompt.isEmpty() ) + setPrompt( i18n( "You need to supply a username and a password" ) ); + else + setPrompt( prompt ); + + // Row 1: Row Spacer + d->layout->addRowSpacing( 1, 7 ); + + // Row 2-3: Reserved for an additional comment + + // Row 4: Username field + d->userNameLabel = new TQLabel( i18n("&Username:"), main ); + d->userNameLabel->setAlignment( Qt::AlignVCenter | Qt::AlignLeft ); + d->userNameLabel->setFixedSize( d->userNameLabel->sizeHint() ); + d->userNameHBox = new TQHBox( main ); + + d->userEdit = new KLineEdit( d->userNameHBox ); + TQSize s = d->userEdit->sizeHint(); + d->userEdit->setFixedHeight( s.height() ); + d->userEdit->setMinimumWidth( s.width() ); + d->userNameLabel->setBuddy( d->userEdit ); + d->layout->addWidget( d->userNameLabel, 4, 0 ); + d->layout->addWidget( d->userNameHBox, 4, 2 ); + + // Row 5: Row spacer + d->layout->addRowSpacing( 5, 4 ); + + // Row 6: Password field + lbl = new TQLabel( i18n("&Password:"), main ); + lbl->setAlignment( Qt::AlignVCenter | Qt::AlignLeft ); + lbl->setFixedSize( lbl->sizeHint() ); + TQHBox* hbox = new TQHBox( main ); + d->passEdit = new KLineEdit( hbox ); + if ( cfg->readEntry("EchoMode", "OneStar") == "NoEcho" ) + d->passEdit->setEchoMode( TQLineEdit::NoEcho ); + else + d->passEdit->setEchoMode( TQLineEdit::Password ); + s = d->passEdit->sizeHint(); + d->passEdit->setFixedHeight( s.height() ); + d->passEdit->setMinimumWidth( s.width() ); + lbl->setBuddy( d->passEdit ); + d->layout->addWidget( lbl, 6, 0 ); + d->layout->addWidget( hbox, 6, 2 ); + + if ( enableKeep ) + { + // Row 7: Add spacer + d->layout->addRowSpacing( 7, 4 ); + // Row 8: Keep Password + hbox = new TQHBox( main ); + d->keepCheckBox = new TQCheckBox( i18n("&Keep password"), hbox ); + d->keepCheckBox->setFixedSize( d->keepCheckBox->sizeHint() ); + d->keep = cfg->readBoolEntry("Keep", false ); + d->keepCheckBox->setChecked( d->keep ); + connect(d->keepCheckBox, TQT_SIGNAL(toggled( bool )), TQT_SLOT(slotKeep( bool ))); + d->layout->addWidget( hbox, 8, 2 ); + } + + // Configure necessary key-bindings and connect necessar slots and signals + connect( d->userEdit, TQT_SIGNAL(returnPressed()), d->passEdit, TQT_SLOT(setFocus()) ); + connect( d->passEdit, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotOk()) ); + + if ( !user.isEmpty() ) + { + d->userEdit->setText( user ); + d->passEdit->setFocus(); + } + else + d->userEdit->setFocus(); + + d->userEditCombo = 0; +// setFixedSize( sizeHint() ); +} + +TQString PasswordDialog::username() const +{ + return d->userEdit->text(); +} + +TQString PasswordDialog::password() const +{ + return d->passEdit->text(); +} + +void PasswordDialog::setKeepPassword( bool b ) +{ + if ( d->keepCheckBox ) + d->keepCheckBox->setChecked( b ); +} + +bool PasswordDialog::keepPassword() const +{ + return d->keep; +} + +static void calculateLabelSize(TQLabel *label) +{ + TQString qt_text = label->text(); + + int pref_width = 0; + int pref_height = 0; + // Calculate a proper size for the text. + { + TQSimpleRichText rt(qt_text, label->font()); + TQRect d = TDEGlobalSettings::desktopGeometry(label->topLevelWidget()); + + pref_width = d.width() / 4; + rt.setWidth(pref_width-10); + int used_width = rt.widthUsed(); + pref_height = rt.height(); + if (used_width <= pref_width) + { + while(true) + { + int new_width = (used_width * 9) / 10; + rt.setWidth(new_width-10); + int new_height = rt.height(); + if (new_height > pref_height) + break; + used_width = rt.widthUsed(); + if (used_width > new_width) + break; + } + pref_width = used_width; + } + else + { + if (used_width > (pref_width *2)) + pref_width = pref_width *2; + else + pref_width = used_width; + } + } + label->setFixedSize(TQSize(pref_width+10, pref_height)); +} + +void PasswordDialog::addCommentLine( const TQString& label, + const TQString comment ) +{ + if (d->nRow > 0) + return; + + TQWidget *main = mainWidget(); + + TQLabel* lbl = new TQLabel( label, main); + lbl->setAlignment( Qt::AlignVCenter|Qt::AlignRight ); + lbl->setFixedSize( lbl->sizeHint() ); + d->layout->addWidget( lbl, d->nRow+2, 0, Qt::AlignLeft ); + lbl = new TQLabel( comment, main); + lbl->setAlignment( Qt::AlignVCenter|Qt::AlignLeft|TQt::WordBreak ); + calculateLabelSize(lbl); + d->layout->addWidget( lbl, d->nRow+2, 2, Qt::AlignLeft ); + d->layout->addRowSpacing( 3, 10 ); // Add a spacer + d->nRow++; +} + +void PasswordDialog::slotKeep( bool keep ) +{ + d->keep = keep; +} + +static TQString qrichtextify( const TQString& text ) +{ + if ( text.isEmpty() || text[0] == '<' ) + return text; + + TQStringList lines = TQStringList::split('\n', text); + for(TQStringList::Iterator it = lines.begin(); it != lines.end(); ++it) + { + *it = TQStyleSheet::convertFromPlainText( *it, TQStyleSheetItem::WhiteSpaceNormal ); + } + + return lines.join(TQString::null); +} + +void PasswordDialog::setPrompt(const TQString& prompt) +{ + TQString text = qrichtextify(prompt); + d->prompt->setText(text); + calculateLabelSize(d->prompt); +} + +void PasswordDialog::setPassword(const TQString &p) +{ + d->passEdit->setText(p); +} + +void PasswordDialog::setUserReadOnly( bool readOnly ) +{ + d->userEdit->setReadOnly( readOnly ); + if ( readOnly && d->userEdit->hasFocus() ) + d->passEdit->setFocus(); +} + +void PasswordDialog::setKnownLogins( const TQMap<TQString, TQString>& knownLogins ) +{ + const int nr = knownLogins.count(); + if ( nr == 0 ) + return; + if ( nr == 1 ) { + d->userEdit->setText( knownLogins.begin().key() ); + setPassword( knownLogins.begin().data() ); + return; + } + + Q_ASSERT( !d->userEdit->isReadOnly() ); + if ( !d->userEditCombo ) { + delete d->userEdit; + d->userEditCombo = new KComboBox( true, d->userNameHBox ); + d->userEdit = d->userEditCombo->lineEdit(); + TQSize s = d->userEditCombo->sizeHint(); + d->userEditCombo->setFixedHeight( s.height() ); + d->userEditCombo->setMinimumWidth( s.width() ); + d->userNameLabel->setBuddy( d->userEditCombo ); + d->layout->addWidget( d->userNameHBox, 4, 2 ); + } + + d->knownLogins = knownLogins; + d->userEditCombo->insertStringList( knownLogins.keys() ); + d->userEditCombo->setFocus(); + + connect( d->userEditCombo, TQT_SIGNAL( activated( const TQString& ) ), + this, TQT_SLOT( slotActivated( const TQString& ) ) ); +} + +void PasswordDialog::slotActivated( const TQString& userName ) +{ + TQMap<TQString, TQString>::ConstIterator it = d->knownLogins.find( userName ); + if ( it != d->knownLogins.end() ) + setPassword( it.data() ); +} + + +int PasswordDialog::getNameAndPassword( TQString& user, TQString& pass, bool* keep, + const TQString& prompt, bool readOnly, + const TQString& caption, + const TQString& comment, + const TQString& label ) +{ + PasswordDialog* dlg; + if( keep ) + dlg = new PasswordDialog( prompt, user, (*keep) ); + else + dlg = new PasswordDialog( prompt, user ); + + if ( !caption.isEmpty() ) + dlg->setPlainCaption( caption ); + else + dlg->setPlainCaption( i18n("Authorization Dialog") ); + + if ( !comment.isEmpty() ) + dlg->addCommentLine( label, comment ); + + if ( readOnly ) + dlg->setUserReadOnly( readOnly ); + + int ret = dlg->exec(); + if ( ret == Accepted ) + { + user = dlg->username(); + pass = dlg->password(); + if ( keep ) { (*keep) = dlg->keepPassword(); } + } + delete dlg; + return ret; + } + +void PasswordDialog::virtual_hook( int id, void* data ) +{ KDialogBase::virtual_hook( id, data ); } + +#include "passdlg.moc" |