// // C++ Implementation: accountsetupdialog // // Description: // // // Author: Ulrich Weigelt , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #include "accountsetupdialog.h" AccountSetupDialog::AccountSetupDialog( TQWidget* parent, TDEListView* view, AccountSetupItem* item ) : KDialogBase( parent, "AccountSetupDialog", true, TQString::null, Ok|Cancel, Ok, true ) { //save pointer to account and view account = item; ListView = view; //tab widget KTabWidget* tabs = new KTabWidget( this, "tabs" ); tabs->setMargin( 10 ); //pages TQWidget* pgGeneral = new TQWidget( this ); TQWidget* pgSecurity = new TQWidget( this ); setMainWidget( tabs ); //layouts of general page TQVBoxLayout* layGeneral = new TQVBoxLayout( pgGeneral, 0, spacingHint() ); TQGridLayout* layTop = new TQGridLayout( layGeneral, 5, 2 ); //layouts of security page TQVBoxLayout* laySecurity = new TQVBoxLayout( pgSecurity, 0, spacingHint() ); laySecurity->setAlignment( TQt::AlignTop ); //upper items TQLabel* lblAccount = new TQLabel( i18n( "Account:" ), pgGeneral, "lblAccount" ); txtAccount = new KLineEdit( pgGeneral, "txtAccount" ); txtAccount->setFocus(); TQToolTip::add( lblAccount, i18n( "Unique Account Name" ) ); TQToolTip::add( txtAccount, i18n( "Unique Account Name" ) ); layTop->addWidget( lblAccount, 0, 0 ); layTop->addWidget( txtAccount, 0, 1 ); TQLabel* lblServer = new TQLabel( i18n( "Server:" ), pgGeneral, "lblServer" ); txtServer = new KLineEdit( pgGeneral, "txtServer" ); TQToolTip::add( lblServer, i18n( "Server Name" ) ); TQToolTip::add( txtServer, i18n( "Server Name" ) ); layTop->addWidget( lblServer, 1, 0 ); layTop->addWidget( txtServer, 1, 1 ); TQLabel* lblProtocol = new TQLabel( i18n( "Protocol:" ), pgGeneral, "lblProtocol" ); cboProtocol = new KComboBox( pgGeneral, "cboProtocol" ); cboProtocol->insertItem( "POP3" ); //currently KShowmail just supports POP3 TQToolTip::add( lblProtocol, i18n( "Protocol, which shall be used to get the mails from the server. Currently KShowmail just supports POP3.") ); TQToolTip::add( cboProtocol, i18n( "Protocol, which shall be used to get the mails from the server. Currently KShowmail just supports POP3.") ); layTop->addWidget( lblProtocol, 2, 0 ); layTop->addWidget( cboProtocol, 2, 1 ); TQLabel* lblPort = new TQLabel( i18n( "Port:" ), pgGeneral, "lblPort" ); spbPort = new TQSpinBox( 0, 65535, 1, pgGeneral, "spbPort" ); spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3 ); TQToolTip::add( lblPort, i18n( "Port Number. Normally POP3 uses port 110." ) ); TQToolTip::add( spbPort, i18n( "Port Number. Normally POP3 uses port 110." ) ); layTop->addWidget( lblPort, 3, 0 ); layTop->addWidget( spbPort, 3, 1 ); TQLabel* lblUser = new TQLabel( i18n( "User:" ), pgGeneral, "lblUser" ); txtUser = new KLineEdit( pgGeneral, "txtUser" ); TQToolTip::add( lblUser, i18n( "To authenticate to the mail server you need an user name." ) ); TQToolTip::add( txtUser, i18n( "To authenticate to the mail server you need an user name." ) ); layTop->addWidget( lblUser, 4, 0 ); layTop->addWidget( txtUser, 4, 1 ); //password groupbox and layouts TQGroupBox* gboxPassword = new TQGroupBox( 0, TQt::Horizontal, i18n( "Password" ), pgGeneral, "gboxPassword" ); layGeneral->addWidget( gboxPassword ); TQVBoxLayout* layPassword = new TQVBoxLayout( gboxPassword->layout(), spacingHint() ); TQGridLayout* layPasswordStorage = new TQGridLayout( layPassword, 2, 2, spacingHint() ); //radio buttons to set storage of the password grpPasswordStorage = new TQButtonGroup( NULL, "grpPasswordStorage" ); connect( grpPasswordStorage, SIGNAL( clicked( int ) ), this, SLOT( slotPasswordStorageChanged( int ) ) ); TQRadioButton* btnPasswordDontSave = new TQRadioButton( i18n( "Don't save" ), gboxPassword, "btnPasswordDontSave" ); TQRadioButton* btnPasswordSaveFile = new TQRadioButton( i18n( "Save password"), gboxPassword, "btnPasswordSaveFile" ); TQRadioButton* btnPasswordSaveTDEWallet = new TQRadioButton( i18n( "Use TDEWallet" ), gboxPassword, "btnPasswordSaveTDEWallet" ); grpPasswordStorage->insert( btnPasswordDontSave, ID_BUTTON_PASSWORD_DONT_SAVE ); grpPasswordStorage->insert( btnPasswordSaveFile, ID_BUTTON_PASSWORD_SAVE_FILE ); grpPasswordStorage->insert( btnPasswordSaveTDEWallet, ID_BUTTON_PASSWORD_SAVE_TDEWALLET ); TQToolTip::add( btnPasswordDontSave, i18n( "Don't save password. KShowmail will ask you for it at first server connect." ) ); TQToolTip::add( btnPasswordSaveFile, i18n( "Save password in the configuration file. Not recommended, because the password is just lightly encrypted" ) ); TQToolTip::add( btnPasswordSaveTDEWallet, i18n( "Use TDEWallet to save the password. Maybe you have to type in the TDEWallet master password at first server connect." ) ); layPasswordStorage->addWidget( btnPasswordDontSave, 0, 0 ); layPasswordStorage->addWidget( btnPasswordSaveFile, 0, 1 ); layPasswordStorage->addWidget( btnPasswordSaveTDEWallet, 1, 0 ); //password edit line txtPassword = new KPasswordEdit( gboxPassword, "txtUser" ); layPassword->addWidget( txtPassword ); //set password defaults grpPasswordStorage->setButton( DEFAULT_ACCOUNT_PASSWORD_STORAGE ); slotPasswordStorageChanged( DEFAULT_ACCOUNT_PASSWORD_STORAGE ); //active check box TQGridLayout* layActive = new TQGridLayout( layGeneral, 1, 1 ); layActive->setAlignment( TQt::AlignCenter ); chkActive = new TQCheckBox( i18n( "Active"), pgGeneral, "chkActive" ); TQToolTip::add( chkActive, i18n( "Select it to activate this account." ) ); layActive->addWidget( chkActive, 0, 0 ); chkActive->setChecked( DEFAULT_ACCOUNT_ACTIVE ); //secure transfer groupbox and layouts TQGroupBox* gboxSecureTransfer = new TQGroupBox( 0, TQt::Horizontal, i18n( "Encryption" ), pgSecurity, "gboxSecureTransfer" ); gboxSecureTransfer->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Maximum ) ); laySecurity->addWidget( gboxSecureTransfer ); TQHBoxLayout* laySecureTransfer = new TQHBoxLayout( gboxSecureTransfer->layout(), spacingHint() ); //radio buttons to set secure transfer grpSecureTransfer = new TQButtonGroup( NULL, "grpSecureTransfer" ); connect( grpSecureTransfer, SIGNAL( clicked( int ) ), this, SLOT( slotSecureTransferChanged ( int ) ) ); TQRadioButton* btnSecureTransferNone = new TQRadioButton( i18n( "None" ), gboxSecureTransfer, "btnSecureTransferNone" ); TQRadioButton* btnSecureTransferSSL = new TQRadioButton( i18n( "SSL"), gboxSecureTransfer, "btnSecureTransferSSL" ); TQRadioButton* btnSecureTransferTLS = new TQRadioButton( i18n( "TLS" ), gboxSecureTransfer, "btnSecureTransferTLS" ); grpSecureTransfer->insert( btnSecureTransferNone, ID_BUTTON_SECTRANSFER_NONE ); grpSecureTransfer->insert( btnSecureTransferSSL, ID_BUTTON_SECTRANSFER_SSL ); grpSecureTransfer->insert( btnSecureTransferTLS, ID_BUTTON_SECTRANSFER_TLS ); TQToolTip::add( btnSecureTransferNone, i18n( "The download of the mail header and body will not be encrypted. Use this, if your provider doesn't make a secure transfer available." ) ); TQToolTip::add( btnSecureTransferSSL, i18n( "Secure Sockets Layer (SSL), is a cryptographic protocol that provides secure communications on the Internet." ) ); TQToolTip::add( btnSecureTransferTLS, i18n( "Transport Layer Security (TLS) is a cryptographic protocol that provides secure communications on the Internet. It is the successor of SSL." ) ); laySecureTransfer->addWidget( btnSecureTransferNone ); laySecureTransfer->addWidget( btnSecureTransferSSL ); laySecureTransfer->addWidget( btnSecureTransferTLS ); grpSecureTransfer->setButton( DEFAULT_ACCOUNT_SECTRANSFER ); //set pages to tab widget tabs->addTab( pgGeneral, i18n( "General" ) ); tabs->addTab( pgSecurity, i18n( "Security" ) ); //set caption if( item == NULL ) setCaption( i18n( "New account" ) ); else setCaption( i18n( "Edit account" ) ); //write values of the given account into the dialog items if( account != NULL ) fillDialog(); } AccountSetupDialog::~AccountSetupDialog() { } void AccountSetupDialog::slotPasswordStorageChanged( int id ) { if( id == ID_BUTTON_PASSWORD_DONT_SAVE ) { txtPassword->setEnabled( false ); txtPassword->clear(); } else txtPassword->setEnabled( true ); } void AccountSetupDialog::slotOk( ) { //check for necessary values if( txtAccount->text() == "" ) { KMessageBox::error( this, i18n( "Please enter an account name." ) ); return; } if( txtServer->text() == "" ) { KMessageBox::error( this, i18n( "Please enter an server." ) ); return; } if( txtUser->text() == "" ) { KMessageBox::error( this, i18n( "Please enter an user name." ) ); return; } //test for unique account name //we will only test if the account is new or if the //name in the dialog is different from the name of the account object bool test = false; if( account == NULL ) test = true; else if( account != NULL && account->getAccountName() != txtAccount->text() ) test = true; else test = false; if( test ) { //OK, we want to test AccountSetupItem* item = NULL; int index = 0; bool equality = false; do { item = (AccountSetupItem*)( ListView->itemAtIndex( index ) ); if( item != NULL ) { index++; equality = item->getAccountName() == txtAccount->text(); } } while( item != NULL && !equality ); //exit method if we have found an account with the same name if( equality ) { KMessageBox::error( this, i18n( "There is already an account named %1. Please choose another name." ).arg( txtAccount->text() ) ); return; } } //create a new account item if necessary if( account == NULL ) account = new AccountSetupItem( ListView ); //show a warning if the account name was changend if( account->getAccountName() != DEFAULT_ACCOUNT_NAME && account->getAccountName() != txtAccount->text() ) KMessageBox::information( this, i18n( "You have changed the account name. The account will lose all downloaded mail headers. Please perform a refresh." ) ); //set column text account->setText( 0, txtAccount->text() ); //write values into account item account->setAccountName( txtAccount->text() ); account->setServer( txtServer->text() ); account->setProtocol( cboProtocol->currentText() ); account->setPort( spbPort->value() ); account->setUser( txtUser->text() ); //get the password //the class KPasswordEdit doesn't have a method to set the password //therefore we use setText(). But if we use this method, KPasswordEdit::password() //will return an empty string. If the user has typed in a new password, KPasswordEdit::password() //will return the correct password TQString pass; if( txtPassword->password() == TQString("") || txtPassword->password() == TQString::null ) pass = txtPassword->text(); else pass = txtPassword->password(); switch( grpPasswordStorage->selectedId() ) { case ID_BUTTON_PASSWORD_DONT_SAVE : account->setPasswordStorageType( CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE ); account->setPassword( TQString::null ); break; case ID_BUTTON_PASSWORD_SAVE_FILE : account->setPasswordStorageType( CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE ); account->setPassword( pass ); break; case ID_BUTTON_PASSWORD_SAVE_TDEWALLET : account->setPasswordStorageType( CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_TDEWALLET ); account->setPassword( pass ); break; default : account->setPasswordStorageType( -1 ); account->setPassword( TQString::null ); } account->setActive( chkActive->isChecked() ); switch( grpSecureTransfer->selectedId() ) { case ID_BUTTON_SECTRANSFER_NONE : account->setTransferSecurity( CONFIG_VALUE_ACCOUNT_SECTRANSFER_NONE ); break; case ID_BUTTON_SECTRANSFER_SSL : account->setTransferSecurity( CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL ); break; case ID_BUTTON_SECTRANSFER_TLS : account->setTransferSecurity( CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS ); break; default : account->setTransferSecurity( DEFAULT_ACCOUNT_SECTRANSFER ); break; } //call slot of super class to close the dialog KDialogBase::slotOk(); } void AccountSetupDialog::fillDialog( ) { //check for valid account pointer if( account == NULL ) { kdError() << "AccountSetupDialog::fillDialog: invalid pointer to account item." << endl; return; } txtAccount->setText( account->getAccountName() ); txtServer->setText( account->getServer() ); cboProtocol->setCurrentText( account->getProtocol().upper() ); if( account->getPort() >= 0 && account->getPort() <= 65535 ) spbPort->setValue( account->getPort() ); else spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3 ); txtUser->setText( account->getUser() ); int type = account->getPasswordStorageType(); if( type != CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE && type != CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE && type != CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_TDEWALLET ) type = DEFAULT_ACCOUNT_PASSWORD_STORAGE; switch( type ) { case CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_DONT_SAVE ); txtPassword->setEnabled( false ); txtPassword->clear(); break; case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_SAVE_FILE ); txtPassword->setEnabled( true ); txtPassword->setText( account->getPassword() ); break; case CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_TDEWALLET : grpPasswordStorage->setButton( ID_BUTTON_PASSWORD_SAVE_TDEWALLET ); txtPassword->setEnabled( true ); txtPassword->setText( account->getPassword() ); break; default : grpPasswordStorage->setButton( 1 ); txtPassword->clear(); } chkActive->setChecked( account->getActive() ); int transferSecurity = account->getTransferSecurity(); if( transferSecurity != CONFIG_VALUE_ACCOUNT_SECTRANSFER_NONE && transferSecurity != CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL && transferSecurity != CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS ) transferSecurity = DEFAULT_ACCOUNT_SECTRANSFER; switch( transferSecurity ) { case CONFIG_VALUE_ACCOUNT_SECTRANSFER_NONE : grpSecureTransfer->setButton( ID_BUTTON_SECTRANSFER_NONE ); break; case CONFIG_VALUE_ACCOUNT_SECTRANSFER_SSL : grpSecureTransfer->setButton( ID_BUTTON_SECTRANSFER_SSL ); break; case CONFIG_VALUE_ACCOUNT_SECTRANSFER_TLS : grpSecureTransfer->setButton( ID_BUTTON_SECTRANSFER_TLS ); break; default : grpSecureTransfer->setButton( ID_BUTTON_SECTRANSFER_NONE ); break; } } void AccountSetupDialog::slotSecureTransferChanged( int id ) { switch( id ) { case ID_BUTTON_SECTRANSFER_NONE : spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3 ); break; case ID_BUTTON_SECTRANSFER_SSL : spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3SSL ); break; case ID_BUTTON_SECTRANSFER_TLS : spbPort->setValue( DEFAULT_ACCOUNT_PORT_POP3 ); break; } } #include "accountsetupdialog.moc"