/* KNode, the KDE newsreader Copyright (c) 1999-2005 the KNode authors. See file AUTHORS for details This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "knaccountmanager.h" #include "knconfig.h" #include "knconfigwidgets.h" #include "knconfigmanager.h" #include "kndisplayedheader.h" #include "kngroupmanager.h" #include "knglobals.h" #include "knnntpaccount.h" #include "utilities.h" #include "knfiltermanager.h" #include "knarticlefilter.h" #include "knscoring.h" #include KNConfig::IdentityWidget::IdentityWidget( Identity *d, TQWidget *p, const char *n ) : TDECModule( p, n ), d_ata( d ) { TQString msg; TQGridLayout *topL=new TQGridLayout(this, 11, 3, 5,5); n_ame=new KLineEdit(this); TQLabel *l=new TQLabel(n_ame, i18n("&Name:"), this); topL->addWidget(l, 0,0); topL->addMultiCellWidget(n_ame, 0,0, 1,2); msg = i18n("

Your name as it will appear to others reading your articles.

" "

Ex: John Stuart Masterson III.

"); TQWhatsThis::add( n_ame, msg ); TQWhatsThis::add( l, msg ); connect( n_ame, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(changed()) ); o_rga=new KLineEdit(this); l=new TQLabel(o_rga, i18n("Organi&zation:"), this); topL->addWidget(l, 1,0); topL->addMultiCellWidget(o_rga, 1,1, 1,2); msg = i18n( "

The name of the organization you work for.

" "

Ex: KNode, Inc.

" ); TQWhatsThis::add( o_rga, msg ); TQWhatsThis::add( l, msg ); connect( o_rga, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(changed()) ); e_mail=new KLineEdit(this); l=new TQLabel(e_mail, i18n("Email a&ddress:"), this); topL->addWidget(l, 2,0); topL->addMultiCellWidget(e_mail, 2,2, 1,2); msg = i18n( "

Your email address as it will appear to others " "reading your articles

Ex: nospam@please.com." ); TQWhatsThis::add( l, msg ); TQWhatsThis::add( e_mail, msg ); connect( e_mail, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(changed()) ); r_eplyTo=new KLineEdit(this); l=new TQLabel(r_eplyTo, i18n("&Reply-to address:"), this); topL->addWidget(l, 3,0); topL->addMultiCellWidget(r_eplyTo, 3,3, 1,2); msg = i18n( "

When someone reply to your article by email, this is the address the message " "will be sent. If you fill in this field, please do it with a real " "email address.

Ex: john@example.com.

" ); TQWhatsThis::add( l, msg ); TQWhatsThis::add( r_eplyTo, msg ); connect( r_eplyTo, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(changed()) ); m_ailCopiesTo=new KLineEdit(this); l=new TQLabel(m_ailCopiesTo, i18n("&Mail-copies-to:"), this); topL->addWidget(l, 4,0); topL->addMultiCellWidget(m_ailCopiesTo, 4,4, 1,2); connect( m_ailCopiesTo, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(changed()) ); s_igningKey = new Kpgp::SecretKeyRequester(this); s_igningKey->dialogButton()->setText(i18n("Chan&ge...")); s_igningKey->setDialogCaption(i18n("Your OpenPGP Key")); s_igningKey->setDialogMessage(i18n("Select the OpenPGP key which should be " "used for signing articles.")); l=new TQLabel(s_igningKey, i18n("Signing ke&y:"), this); topL->addWidget(l, 5,0); topL->addMultiCellWidget(s_igningKey, 5,5, 1,2); msg = i18n("

The OpenPGP key you choose here will be " "used to sign your articles.

"); TQWhatsThis::add( l, msg ); TQWhatsThis::add( s_igningKey, msg ); connect( s_igningKey, TQT_SIGNAL(changed()), TQT_SLOT(changed()) ); b_uttonGroup = new TQButtonGroup(this); connect( b_uttonGroup, TQT_SIGNAL(clicked(int)), this, TQT_SLOT(slotSignatureType(int)) ); b_uttonGroup->setExclusive(true); b_uttonGroup->hide(); s_igFile = new TQRadioButton( i18n("&Use a signature from file"), this ); b_uttonGroup->insert(s_igFile, 0); topL->addMultiCellWidget(s_igFile, 6, 6, 0, 2); TQWhatsThis::add( s_igFile, i18n( "

Mark this to let KNode read the signature from a file.

" ) ); s_ig = new KLineEdit(this); f_ileName = new TQLabel(s_ig, i18n("Signature &file:"), this); topL->addWidget(f_ileName, 7, 0 ); topL->addWidget(s_ig, 7, 1 ); c_ompletion = new KURLCompletion(); s_ig->setCompletionObject(c_ompletion); msg = i18n( "

The file from which the signature will be read.

" "

Ex: /home/robt/.sig.

" ); TQWhatsThis::add( f_ileName, msg ); TQWhatsThis::add( s_ig, msg ); c_hooseBtn = new TQPushButton( i18n("Choo&se..."), this); connect(c_hooseBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotSignatureChoose())); topL->addWidget(c_hooseBtn, 7, 2 ); e_ditBtn = new TQPushButton( i18n("&Edit File"), this); connect(e_ditBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotSignatureEdit())); topL->addWidget(e_ditBtn, 8, 2); s_igGenerator = new TQCheckBox(i18n("&The file is a program"), this); topL->addMultiCellWidget(s_igGenerator, 8, 8, 0, 1); msg = i18n( "

Mark this option if the signature will be generated by a program

" "

Ex: /home/robt/gensig.sh.

" ); TQWhatsThis::add( s_igGenerator, msg ); connect( s_igGenerator, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()) ); s_igEdit = new TQRadioButton( i18n("Specify signature &below"), this); b_uttonGroup->insert(s_igEdit, 1); topL->addMultiCellWidget(s_igEdit, 9, 9, 0, 2); s_igEditor = new TQTextEdit(this); s_igEditor->setTextFormat(TQt::PlainText); topL->addMultiCellWidget(s_igEditor, 10, 10, 0, 2); connect( s_igEditor, TQT_SIGNAL(textChanged()), TQT_SLOT(changed()) ); topL->setColStretch(1,1); topL->setRowStretch(7,1); topL->setResizeMode(TQLayout::Minimum); connect(s_ig,TQT_SIGNAL(textChanged ( const TQString & )), this,TQT_SLOT(textFileNameChanged(const TQString &))); load(); } KNConfig::IdentityWidget::~IdentityWidget() { delete c_ompletion; } void KNConfig::IdentityWidget::textFileNameChanged(const TQString &text) { e_ditBtn->setEnabled(!text.isEmpty()); emit changed( true ); } void KNConfig::IdentityWidget::load() { kdDebug() << "void KNConfig::IdentityWidget::load()" << endl; n_ame->setText(d_ata->n_ame); o_rga->setText(d_ata->o_rga); e_mail->setText(d_ata->e_mail); r_eplyTo->setText(d_ata->r_eplyTo); m_ailCopiesTo->setText(d_ata->m_ailCopiesTo); s_igningKey->setKeyIDs(Kpgp::KeyIDList() << d_ata->s_igningKey); s_ig->setText(d_ata->s_igPath); s_igGenerator->setChecked(d_ata->useSigGenerator()); s_igEditor->setText(d_ata->s_igText); slotSignatureType(d_ata->useSigFile()? 0:1); } void KNConfig::IdentityWidget::save() { d_ata->n_ame=n_ame->text(); d_ata->o_rga=o_rga->text(); d_ata->e_mail=e_mail->text(); d_ata->r_eplyTo=r_eplyTo->text(); d_ata->m_ailCopiesTo=m_ailCopiesTo->text(); d_ata->s_igningKey = s_igningKey->keyIDs().first(); d_ata->u_seSigFile=s_igFile->isChecked(); d_ata->u_seSigGenerator=s_igGenerator->isChecked(); d_ata->s_igPath=c_ompletion->replacedPath(s_ig->text()); d_ata->s_igText=s_igEditor->text(); if(d_ata->isGlobal()) d_ata->save(); } void KNConfig::IdentityWidget::slotSignatureType(int type) { bool sigFromFile = (type==0); b_uttonGroup->setButton(type); f_ileName->setEnabled(sigFromFile); s_ig->setEnabled(sigFromFile); c_hooseBtn->setEnabled(sigFromFile); e_ditBtn->setEnabled(sigFromFile && !s_ig->text().isEmpty()); s_igGenerator->setEnabled(sigFromFile); s_igEditor->setEnabled(!sigFromFile); if (sigFromFile) f_ileName->setFocus(); else s_igEditor->setFocus(); emit changed( true ); } void KNConfig::IdentityWidget::slotSignatureChoose() { TQString tmp=KFileDialog::getOpenFileName(c_ompletion->replacedPath(s_ig->text()),TQString(),this,i18n("Choose Signature")); if(!tmp.isEmpty()) s_ig->setText(tmp); emit changed( true ); } void KNConfig::IdentityWidget::slotSignatureEdit() { TQString fileName = c_ompletion->replacedPath(s_ig->text()).stripWhiteSpace(); if (fileName.isEmpty()) { KMessageBox::sorry(this, i18n("You must specify a filename.")); return; } TQFileInfo fileInfo( fileName ); if (fileInfo.isDir()) { KMessageBox::sorry(this, i18n("You have specified a folder.")); return; } KService::Ptr offer = KServiceTypeProfile::preferredService("text/plain", "Application"); KURL u(fileName); if (offer) KRun::run(*offer, u); else KRun::displayOpenWithDialog(u); emit changed( true ); } //========================================================================================== //BEGIN: NNTP account configuration widgets ---------------------------------- KNConfig::NntpAccountListWidget::NntpAccountListWidget(TQWidget *p, const char *n) : TDECModule( p, n ), a_ccManager( knGlobals.accountManager() ) { p_ixmap = SmallIcon("server"); TQGridLayout *topL=new TQGridLayout(this, 6,2, 5,5); // account listbox l_box=new KNDialogListBox(false, this); connect(l_box, TQT_SIGNAL(selected(int)), this, TQT_SLOT(slotItemSelected(int))); connect(l_box, TQT_SIGNAL(selectionChanged()), this, TQT_SLOT(slotSelectionChanged())); topL->addMultiCellWidget(l_box, 0,4, 0,0); // info box TQGroupBox *gb = new TQGroupBox(2,Qt::Vertical,TQString(),this); topL->addWidget(gb,5,0); s_erverInfo = new TQLabel(gb); p_ortInfo = new TQLabel(gb); // buttons a_ddBtn=new TQPushButton(i18n("&Add..."), this); connect(a_ddBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotAddBtnClicked())); topL->addWidget(a_ddBtn, 0,1); e_ditBtn=new TQPushButton(i18n("modify something","&Edit..."), this); connect(e_ditBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotEditBtnClicked())); topL->addWidget(e_ditBtn, 1,1); d_elBtn=new TQPushButton(i18n("&Delete"), this); connect(d_elBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotDelBtnClicked())); topL->addWidget(d_elBtn, 2,1); s_ubBtn=new TQPushButton(i18n("&Subscribe..."), this); connect(s_ubBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotSubBtnClicked())); topL->addWidget(s_ubBtn, 3,1); topL->setRowStretch(4,1); // stretch the server listbox load(); // the settings dialog is non-modal, so we have to react to changes // made outside of the dialog connect(a_ccManager, TQT_SIGNAL(accountAdded(KNNntpAccount*)), this, TQT_SLOT(slotAddItem(KNNntpAccount*))); connect(a_ccManager, TQT_SIGNAL(accountRemoved(KNNntpAccount*)), this, TQT_SLOT(slotRemoveItem(KNNntpAccount*))); connect(a_ccManager, TQT_SIGNAL(accountModified(KNNntpAccount*)), this, TQT_SLOT(slotUpdateItem(KNNntpAccount*))); slotSelectionChanged(); // disable Delete & Edit initially } KNConfig::NntpAccountListWidget::~NntpAccountListWidget() { } void KNConfig::NntpAccountListWidget::load() { l_box->clear(); TQValueList::Iterator it; for ( it = a_ccManager->begin(); it != a_ccManager->end(); ++it ) slotAddItem( *it ); } void KNConfig::NntpAccountListWidget::slotAddItem(KNNntpAccount *a) { LBoxItem *it; it=new LBoxItem(a, a->name(), &p_ixmap); l_box->insertItem(it); emit changed(true); } void KNConfig::NntpAccountListWidget::slotRemoveItem(KNNntpAccount *a) { LBoxItem *it; for(uint i=0; icount(); i++) { it=static_cast(l_box->item(i)); if(it && it->account==a) { l_box->removeItem(i); break; } } slotSelectionChanged(); emit changed(true); } void KNConfig::NntpAccountListWidget::slotUpdateItem(KNNntpAccount *a) { LBoxItem *it; for(uint i=0; icount(); i++) { it=static_cast(l_box->item(i)); if(it && it->account==a) { it=new LBoxItem(a, a->name(), &p_ixmap); l_box->changeItem(it, i); break; } } slotSelectionChanged(); emit changed(true); } void KNConfig::NntpAccountListWidget::slotSelectionChanged() { int curr=l_box->currentItem(); d_elBtn->setEnabled(curr!=-1); e_ditBtn->setEnabled(curr!=-1); s_ubBtn->setEnabled(curr!=-1); LBoxItem *it = static_cast(l_box->item(curr)); if(it) { s_erverInfo->setText(i18n("Server: %1").arg(it->account->server())); p_ortInfo->setText(i18n("Port: %1").arg(it->account->port())); } else { s_erverInfo->setText(i18n("Server: ")); p_ortInfo->setText(i18n("Port: ")); } } void KNConfig::NntpAccountListWidget::slotItemSelected(int) { slotEditBtnClicked(); } void KNConfig::NntpAccountListWidget::slotAddBtnClicked() { KNNntpAccount *acc = new KNNntpAccount(); if(acc->editProperties(this)) { if (a_ccManager->newAccount(acc)) acc->saveInfo(); } else delete acc; } void KNConfig::NntpAccountListWidget::slotDelBtnClicked() { LBoxItem *it = static_cast(l_box->item(l_box->currentItem())); if(it) a_ccManager->removeAccount(it->account); } void KNConfig::NntpAccountListWidget::slotEditBtnClicked() { LBoxItem *it = static_cast(l_box->item(l_box->currentItem())); if(it) { it->account->editProperties(this); slotUpdateItem(it->account); } } void KNConfig::NntpAccountListWidget::slotSubBtnClicked() { LBoxItem *it = static_cast(l_box->item(l_box->currentItem())); if(it) knGlobals.groupManager()->showGroupDialog(it->account, this); } //======================================================================================= KNConfig::NntpAccountConfDialog::NntpAccountConfDialog(KNNntpAccount *a, TQWidget *p, const char *n) : KDialogBase(Tabbed, (a->id()!=-1)? i18n("Properties of %1").arg(a->name()):i18n("New Account"), Ok|Cancel|Help, Ok, p, n), a_ccount(a) { TQFrame* page=addPage(i18n("Ser&ver")); TQGridLayout *topL=new TQGridLayout(page, 11, 3, 5); n_ame=new KLineEdit(page); TQLabel *l=new TQLabel(n_ame,i18n("&Name:"),page); topL->addWidget(l, 0,0); n_ame->setText(a->name()); topL->addMultiCellWidget(n_ame, 0, 0, 1, 2); s_erver=new KLineEdit(page); l=new TQLabel(s_erver,i18n("&Server:"), page); s_erver->setText(a->server()); topL->addWidget(l, 1,0); topL->addMultiCellWidget(s_erver, 1, 1, 1, 2); p_ort=new KLineEdit(page); l=new TQLabel(p_ort, i18n("&Port:"), page); p_ort->setValidator(new KIntValidator(0,65536,this)); p_ort->setText(TQString::number(a->port())); topL->addWidget(l, 2,0); topL->addWidget(p_ort, 2,1); h_old = new KIntSpinBox(5,1800,5,5,10,page); l = new TQLabel(h_old,i18n("Hol&d connection for:"), page); h_old->setSuffix(i18n(" sec")); h_old->setValue(a->hold()); topL->addWidget(l,3,0); topL->addWidget(h_old,3,1); t_imeout = new KIntSpinBox(15,600,5,15,10,page); l = new TQLabel(t_imeout, i18n("&Timeout:"), page); t_imeout->setValue(a->timeout()); t_imeout->setSuffix(i18n(" sec")); topL->addWidget(l,4,0); topL->addWidget(t_imeout,4,1); f_etchDes=new TQCheckBox(i18n("&Fetch group descriptions"), page); f_etchDes->setChecked(a->fetchDescriptions()); topL->addMultiCellWidget(f_etchDes, 5,5, 0,3); /*u_seDiskCache=new TQCheckBox(i18n("&Cache articles on disk"), page); u_seDiskCache->setChecked(a->useDiskCache()); topL->addMultiCellWidget(u_seDiskCache, 6,6, 0,3);*/ a_uth=new TQCheckBox(i18n("Server requires &authentication"), page); connect(a_uth, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotAuthChecked(bool))); topL->addMultiCellWidget(a_uth, 6,6, 0,3); u_ser=new KLineEdit(page); u_serLabel=new TQLabel(u_ser,i18n("&User:"), page); u_ser->setText(a->user()); topL->addWidget(u_serLabel, 7,0); topL->addMultiCellWidget(u_ser, 7,7, 1,2); p_ass=new KLineEdit(page); p_assLabel=new TQLabel(p_ass, i18n("Pass&word:"), page); p_ass->setEchoMode(KLineEdit::Password); if ( a->readyForLogin() ) p_ass->setText(a->pass()); else if ( a->needsLogon() ) knGlobals.accountManager()->loadPasswordsAsync(); topL->addWidget(p_assLabel, 8,0); topL->addMultiCellWidget(p_ass, 8,8, 1,2); i_nterval=new TQCheckBox(i18n("Enable &interval news checking"), page); connect(i_nterval, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotIntervalChecked(bool))); topL->addMultiCellWidget(i_nterval, 9,9, 0,3); c_heckInterval=new KIntSpinBox(1,10000,1,1,10,page); c_heckIntervalLabel=new TQLabel(c_heckInterval, i18n("Check inter&val:"), page); c_heckInterval->setSuffix(i18n(" min") ); c_heckInterval->setValue(a->checkInterval()); c_heckIntervalLabel->setBuddy(c_heckInterval); topL->addWidget(c_heckIntervalLabel, 10,0); topL->addMultiCellWidget(c_heckInterval, 10,10, 1,2); slotAuthChecked(a->needsLogon()); slotIntervalChecked(a->intervalChecking()); topL->setColStretch(1, 1); topL->setColStretch(2, 1); // Specfic Identity tab ========================================= i_dWidget=new KNConfig::IdentityWidget(a->identity(), addVBoxPage(i18n("&Identity"))); // per server cleanup configuration TQFrame* cleanupPage = addPage( i18n("&Cleanup") ); TQVBoxLayout *cleanupLayout = new TQVBoxLayout( cleanupPage, KDialog::spacingHint() ); mCleanupWidget = new GroupCleanupWidget( a->cleanupConfig(), cleanupPage ); mCleanupWidget->load(); cleanupLayout->addWidget( mCleanupWidget ); cleanupLayout->addStretch( 1 ); connect( knGlobals.accountManager(), TQT_SIGNAL(passwordsChanged()), TQT_SLOT(slotPasswordChanged()) ); KNHelper::restoreWindowSize("accNewsPropDLG", this, sizeHint()); setHelp("anc-setting-the-news-account"); } KNConfig::NntpAccountConfDialog::~NntpAccountConfDialog() { KNHelper::saveWindowSize("accNewsPropDLG", size()); } void KNConfig::NntpAccountConfDialog::slotOk() { if (n_ame->text().isEmpty() || s_erver->text().stripWhiteSpace().isEmpty()) { KMessageBox::sorry(this, i18n("Please enter an arbitrary name for the account and the\nhostname of the news server.")); return; } a_ccount->setName(n_ame->text()); a_ccount->setServer(s_erver->text().stripWhiteSpace()); a_ccount->setPort(p_ort->text().toInt()); a_ccount->setHold(h_old->value()); a_ccount->setTimeout(t_imeout->value()); a_ccount->setFetchDescriptions(f_etchDes->isChecked()); //a_ccount->setUseDiskCache(u_seDiskCache->isChecked()); a_ccount->setNeedsLogon(a_uth->isChecked()); a_ccount->setUser(u_ser->text()); a_ccount->setPass(p_ass->text()); a_ccount->setIntervalChecking(i_nterval->isChecked()); a_ccount->setCheckInterval(c_heckInterval->value()); if (a_ccount->id() != -1) // only save if account has a valid id a_ccount->saveInfo(); i_dWidget->save(); mCleanupWidget->save(); accept(); } void KNConfig::NntpAccountConfDialog::slotAuthChecked(bool b) { a_uth->setChecked(b); u_ser->setEnabled(b); u_serLabel->setEnabled(b); p_ass->setEnabled(b); p_assLabel->setEnabled(b); } void KNConfig::NntpAccountConfDialog::slotIntervalChecked(bool b) { i_nterval->setChecked(b); c_heckInterval->setEnabled(b); c_heckIntervalLabel->setEnabled(b); } void KNConfig::NntpAccountConfDialog::slotPasswordChanged() { if ( p_ass->text().isEmpty() ) p_ass->setText( a_ccount->pass() ); } //END: NNTP account configuration widgets ------------------------------------ //============================================================================================= KNConfig::SmtpAccountWidget::SmtpAccountWidget( TQWidget *p, const char *n ) : SmtpAccountWidgetBase( p, n ) { mAccount = knGlobals.accountManager()->smtp(); connect( knGlobals.accountManager(), TQT_SIGNAL(passwordsChanged()), TQT_SLOT(slotPasswordChanged()) ); load(); } void KNConfig::SmtpAccountWidget::load() { mUseExternalMailer->setChecked( knGlobals.configManager()->postNewsTechnical()->useExternalMailer() ); useExternalMailerToggled( knGlobals.configManager()->postNewsTechnical()->useExternalMailer() ); mServer->setText( mAccount->server() ); mPort->setValue( mAccount->port() ); mLogin->setChecked( mAccount->needsLogon() ); loginToggled( mAccount->needsLogon() ); mUser->setText( mAccount->user() ); if ( mAccount->readyForLogin() ) mPassword->setText( mAccount->pass() ); else if ( mAccount->needsLogon() ) knGlobals.accountManager()->loadPasswordsAsync(); switch ( mAccount->encryption() ) { case KNServerInfo::None: mEncNone->setChecked( true ); break; case KNServerInfo::SSL: mEncSSL->setChecked( true ); break; case KNServerInfo::TLS: mEncTLS->setChecked( true ); break; } } void KNConfig::SmtpAccountWidget::save() { knGlobals.configManager()->postNewsTechnical()->u_seExternalMailer = mUseExternalMailer->isChecked(); knGlobals.configManager()->postNewsTechnical()->setDirty(true); mAccount->setServer( mServer->text() ); mAccount->setPort( mPort->value() ); mAccount->setNeedsLogon( mLogin->isChecked() ); if ( mAccount->needsLogon() ) { mAccount->setUser( mUser->text() ); mAccount->setPass( mPassword->text() ); } if ( mEncNone->isChecked() ) mAccount->setEncryption( KNServerInfo::None ); if ( mEncSSL->isChecked() ) mAccount->setEncryption( KNServerInfo::SSL ); if ( mEncTLS->isChecked() ) mAccount->setEncryption( KNServerInfo::TLS ); TDEConfig *conf = knGlobals.config(); conf->setGroup("MAILSERVER"); mAccount->saveConf( conf ); } void KNConfig::SmtpAccountWidget::useExternalMailerToggled( bool b ) { mServer->setEnabled( !b ); mPort->setEnabled( !b ); mServerLabel->setEnabled( !b ); mPortLabel->setEnabled( !b ); mLogin->setEnabled( !b ); if ( !b ) loginToggled( mLogin->isChecked() ); else loginToggled( false ); mEncGroup->setEnabled( !b ); emit changed( true ); } void KNConfig::SmtpAccountWidget::loginToggled( bool b ) { bool canEnable = ( b && !mUseExternalMailer->isChecked() ); mUser->setEnabled( canEnable ); mUserLabel->setEnabled( canEnable ); mPassword->setEnabled( canEnable ); mPasswordLabel->setEnabled( canEnable ); emit changed( true ); } void KNConfig::SmtpAccountWidget::slotPasswordChanged() { if ( mPassword->text().isEmpty() ) mPassword->setText( mAccount->pass() ); } //============================================================================================= //=================================================================================== // code taken from KMail, Copyright (C) 2000 Espen Sand, espen@kde.org KNConfig::AppearanceWidget::ColorListItem::ColorListItem( const TQString &text, const TQColor &color ) : TQListBoxText(text), mColor( color ) { } KNConfig::AppearanceWidget::ColorListItem::~ColorListItem() { } void KNConfig::AppearanceWidget::ColorListItem::paint( TQPainter *p ) { TQFontMetrics fm = p->fontMetrics(); int h = fm.height(); p->drawText( 30+3*2, fm.ascent() + fm.leading()/2, text() ); p->setPen( TQt::black ); p->drawRect( 3, 1, 30, h-1 ); p->fillRect( 4, 2, 28, h-3, mColor ); } int KNConfig::AppearanceWidget::ColorListItem::height(const TQListBox *lb ) const { return( lb->fontMetrics().lineSpacing()+1 ); } int KNConfig::AppearanceWidget::ColorListItem::width(const TQListBox *lb ) const { return( 30 + lb->fontMetrics().width( text() ) + 6 ); } //=================================================================================== KNConfig::AppearanceWidget::FontListItem::FontListItem( const TQString &name, const TQFont &font ) : TQListBoxText(name), f_ont(font) { fontInfo = TQString("[%1 %2]").arg(f_ont.family()).arg(f_ont.pointSize()); } KNConfig::AppearanceWidget::FontListItem::~FontListItem() { } void KNConfig::AppearanceWidget::FontListItem::setFont(const TQFont &font) { f_ont = font; fontInfo = TQString("[%1 %2]").arg(f_ont.family()).arg(f_ont.pointSize()); } void KNConfig::AppearanceWidget::FontListItem::paint( TQPainter *p ) { TQFont fnt = p->font(); fnt.setWeight(TQFont::Bold); p->setFont(fnt); int fontInfoWidth = p->fontMetrics().width(fontInfo); int h = p->fontMetrics().ascent() + p->fontMetrics().leading()/2; p->drawText(2, h, fontInfo ); fnt.setWeight(TQFont::Normal); p->setFont(fnt); p->drawText(5 + fontInfoWidth, h, text() ); } int KNConfig::AppearanceWidget::FontListItem::width(const TQListBox *lb ) const { return( lb->fontMetrics().width(fontInfo) + lb->fontMetrics().width(text()) + 20 ); } //=================================================================================== KNConfig::AppearanceWidget::AppearanceWidget( TQWidget *p, const char *n ) : TDECModule( p, n ), d_ata( knGlobals.configManager()->appearance() ) { TQGridLayout *topL=new TQGridLayout(this, 8,2, 5,5); //color-list c_List = new KNDialogListBox(false, this); topL->addMultiCellWidget(c_List,1,3,0,0); connect(c_List, TQT_SIGNAL(selected(TQListBoxItem*)),TQT_SLOT(slotColItemSelected(TQListBoxItem*))); connect(c_List, TQT_SIGNAL(selectionChanged()), TQT_SLOT(slotColSelectionChanged())); c_olorCB = new TQCheckBox(i18n("&Use custom colors"),this); topL->addWidget(c_olorCB,0,0); connect(c_olorCB, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotColCheckBoxToggled(bool))); c_olChngBtn=new TQPushButton(i18n("Cha&nge..."), this); connect(c_olChngBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotColChangeBtnClicked())); topL->addWidget(c_olChngBtn,1,1); //font-list f_List = new KNDialogListBox(false, this); topL->addMultiCellWidget(f_List,5,7,0,0); connect(f_List, TQT_SIGNAL(selected(TQListBoxItem*)),TQT_SLOT(slotFontItemSelected(TQListBoxItem*))); connect(f_List, TQT_SIGNAL(selectionChanged()),TQT_SLOT(slotFontSelectionChanged())); f_ontCB = new TQCheckBox(i18n("Use custom &fonts"),this); topL->addWidget(f_ontCB,4,0); connect(f_ontCB, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotFontCheckBoxToggled(bool))); f_ntChngBtn=new TQPushButton(i18n("Chang&e..."), this); connect(f_ntChngBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotFontChangeBtnClicked())); topL->addWidget(f_ntChngBtn,5,1); load(); } KNConfig::AppearanceWidget::~AppearanceWidget() { } void KNConfig::AppearanceWidget::load() { c_olorCB->setChecked(d_ata->u_seColors); slotColCheckBoxToggled(d_ata->u_seColors); c_List->clear(); for(int i=0; i < d_ata->colorCount(); i++) c_List->insertItem(new ColorListItem(d_ata->colorName(i), d_ata->color(i))); f_ontCB->setChecked(d_ata->u_seFonts); slotFontCheckBoxToggled(d_ata->u_seFonts); f_List->clear(); for(int i=0; i < d_ata->fontCount(); i++) f_List->insertItem(new FontListItem(d_ata->fontName(i), d_ata->font(i))); } void KNConfig::AppearanceWidget::save() { d_ata->u_seColors=c_olorCB->isChecked(); for(int i=0; icolorCount(); i++) d_ata->c_olors[i] = (static_cast(c_List->item(i)))->color(); d_ata->u_seFonts=f_ontCB->isChecked(); for(int i=0; ifontCount(); i++) d_ata->f_onts[i] = (static_cast(f_List->item(i)))->font(); d_ata->setDirty(true); d_ata->recreateLVIcons(); } void KNConfig::AppearanceWidget::defaults() { // default colors ColorListItem *colorItem; for(int i=0; i < d_ata->colorCount(); i++) { colorItem=static_cast(c_List->item(i)); colorItem->setColor(d_ata->defaultColor(i)); } c_List->triggerUpdate(true); c_List->repaint(true); // default fonts FontListItem *fontItem; for(int i=0; i < d_ata->fontCount(); i++) { fontItem=static_cast(f_List->item(i)); fontItem->setFont(d_ata->defaultFont(i)); } f_List->triggerUpdate(false); emit changed(true); } void KNConfig::AppearanceWidget::slotColCheckBoxToggled(bool b) { c_List->setEnabled(b); c_olChngBtn->setEnabled(b && (c_List->currentItem()!=-1)); if (b) c_List->setFocus(); emit changed(true); } // show color dialog for the entry void KNConfig::AppearanceWidget::slotColItemSelected(TQListBoxItem *it) { if (it) { ColorListItem *colorItem = static_cast(it); TQColor col = colorItem->color(); int result = KColorDialog::getColor(col,this); if (result == KColorDialog::Accepted) { colorItem->setColor(col); c_List->triggerUpdate(false); } } emit changed(true); } void KNConfig::AppearanceWidget::slotColChangeBtnClicked() { if(c_List->currentItem()!=-1) slotColItemSelected(c_List->item(c_List->currentItem())); } void KNConfig::AppearanceWidget::slotColSelectionChanged() { c_olChngBtn->setEnabled(c_List->currentItem()!=-1); } void KNConfig::AppearanceWidget::slotFontCheckBoxToggled(bool b) { f_List->setEnabled(b); f_ntChngBtn->setEnabled(b && (f_List->currentItem()!=-1)); if (b) f_List->setFocus(); emit changed(true); } // show font dialog for the entry void KNConfig::AppearanceWidget::slotFontItemSelected(TQListBoxItem *it) { if (it) { FontListItem *fontItem = static_cast(it); TQFont font = fontItem->font(); int result = TDEFontDialog::getFont(font,false,this); if (result == TDEFontDialog::Accepted) { fontItem->setFont(font); f_List->triggerUpdate(false); } } emit changed(true); } void KNConfig::AppearanceWidget::slotFontChangeBtnClicked() { if(f_List->currentItem()!=-1) slotFontItemSelected(f_List->item(f_List->currentItem())); } void KNConfig::AppearanceWidget::slotFontSelectionChanged() { f_ntChngBtn->setEnabled(f_List->currentItem()!=-1); } //============================================================================================= KNConfig::ReadNewsGeneralWidget::ReadNewsGeneralWidget( ReadNewsGeneral *d, TQWidget *p, const char *n ) : TDECModule( p, n ), d_ata( d ) { TQGroupBox *hgb=new TQGroupBox(i18n("Article Handling"), this); TQGroupBox *lgb=new TQGroupBox(i18n("Article List"), this); TQGroupBox *cgb=new TQGroupBox(i18n("Memory Consumption"), this); TQLabel *l1, *l2, *l3; a_utoCB=new TQCheckBox(i18n("Check for new articles a&utomatically"), hgb); m_axFetch=new KIntSpinBox(0, 100000, 1, 0, 10, hgb); l1=new TQLabel(m_axFetch, i18n("&Maximum number of articles to fetch:"), hgb); m_arkCB=new TQCheckBox(i18n("Mar&k article as read after:"), hgb); m_arkSecs=new KIntSpinBox(0, 9999, 1, 0, 10, hgb); connect(m_arkCB, TQT_SIGNAL(toggled(bool)), m_arkSecs, TQT_SLOT(setEnabled(bool))); m_arkSecs->setSuffix(i18n(" sec")); m_arkCrossCB=new TQCheckBox(i18n("Mark c&rossposted articles as read"), hgb); s_martScrollingCB=new TQCheckBox(i18n("Smart scrolli&ng"), lgb); e_xpThrCB=new TQCheckBox(i18n("Show &whole thread on expanding"), lgb); d_efaultExpandCB=new TQCheckBox(i18n("Default to e&xpanded threads"), lgb); s_coreCB=new TQCheckBox(i18n("Show article &score"), lgb); l_inesCB=new TQCheckBox(i18n("Show &line count"), lgb); u_nreadCB=new TQCheckBox(i18n("Show unread count in &thread"), lgb); c_ollCacheSize=new KIntSpinBox(0, 99999, 1, 1, 10, cgb); c_ollCacheSize->setSuffix(" KB"); l2=new TQLabel(c_ollCacheSize, i18n("Cach&e size for headers:"), cgb); a_rtCacheSize=new KIntSpinBox(0, 99999, 1, 1, 10, cgb); a_rtCacheSize->setSuffix(" KB"); l3=new TQLabel(a_rtCacheSize, i18n("Cache si&ze for articles:"), cgb); TQVBoxLayout *topL=new TQVBoxLayout(this, 5); TQGridLayout *hgbL=new TQGridLayout(hgb, 5,2, 8,5); TQVBoxLayout *lgbL=new TQVBoxLayout(lgb, 8, 5); TQGridLayout *cgbL=new TQGridLayout(cgb, 3,2, 8,5); topL->addWidget(hgb); topL->addWidget(lgb); topL->addWidget(cgb); topL->addStretch(1); hgbL->addRowSpacing(0, fontMetrics().lineSpacing()-4); hgbL->addMultiCellWidget(a_utoCB, 1,1, 0,1); hgbL->addWidget(l1, 2, 0); hgbL->addWidget(m_axFetch, 2,1); hgbL->addWidget(m_arkCB, 3,0); hgbL->addWidget(m_arkSecs, 3,1); hgbL->addMultiCellWidget(m_arkCrossCB, 4,4, 0,1); hgbL->setColStretch(0,1); lgbL->addSpacing(fontMetrics().lineSpacing()-4); lgbL->addWidget(s_martScrollingCB); lgbL->addWidget(e_xpThrCB); lgbL->addWidget(d_efaultExpandCB); lgbL->addWidget(s_coreCB); lgbL->addWidget(l_inesCB); lgbL->addWidget(u_nreadCB); cgbL->addRowSpacing(0, fontMetrics().lineSpacing()-4); cgbL->addWidget(l2, 1,0); cgbL->addWidget(c_ollCacheSize, 1,1); cgbL->addWidget(l3, 2,0); cgbL->addWidget(a_rtCacheSize, 2,1); cgbL->setColStretch(0,1); topL->setResizeMode(TQLayout::Minimum); connect(a_utoCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(m_axFetch, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed())); connect(m_arkCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(m_arkSecs, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed())); connect(m_arkCrossCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(s_martScrollingCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(e_xpThrCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(d_efaultExpandCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(l_inesCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(s_coreCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(u_nreadCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(c_ollCacheSize, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed())); connect(a_rtCacheSize, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed())); load(); } KNConfig::ReadNewsGeneralWidget::~ReadNewsGeneralWidget() { } void KNConfig::ReadNewsGeneralWidget::load() { a_utoCB->setChecked(d_ata->a_utoCheck); m_axFetch->setValue(d_ata->m_axFetch); m_arkCB->setChecked(d_ata->a_utoMark); m_arkSecs->setValue(d_ata->m_arkSecs); m_arkSecs->setEnabled(d_ata->a_utoMark); m_arkCrossCB->setChecked(d_ata->m_arkCrossposts); s_martScrollingCB->setChecked(d_ata->s_martScrolling); e_xpThrCB->setChecked(d_ata->t_otalExpand); d_efaultExpandCB->setChecked(d_ata->d_efaultExpand); l_inesCB->setChecked(d_ata->s_howLines); s_coreCB->setChecked(d_ata->s_howScore); u_nreadCB->setChecked(d_ata->s_howUnread); c_ollCacheSize->setValue(d_ata->c_ollCacheSize); a_rtCacheSize->setValue(d_ata->a_rtCacheSize); } void KNConfig::ReadNewsGeneralWidget::save() { d_ata->a_utoCheck=a_utoCB->isChecked(); d_ata->m_axFetch=m_axFetch->value(); d_ata->a_utoMark=m_arkCB->isChecked(); d_ata->m_arkSecs=m_arkSecs->value(); d_ata->m_arkCrossposts=m_arkCrossCB->isChecked(); d_ata->s_martScrolling=s_martScrollingCB->isChecked(); d_ata->t_otalExpand=e_xpThrCB->isChecked(); d_ata->d_efaultExpand=d_efaultExpandCB->isChecked(); d_ata->s_howLines=l_inesCB->isChecked(); d_ata->s_howScore=s_coreCB->isChecked(); d_ata->s_howUnread=u_nreadCB->isChecked(); d_ata->c_ollCacheSize=c_ollCacheSize->value(); d_ata->a_rtCacheSize=a_rtCacheSize->value(); d_ata->setDirty(true); } //============================================================================================= KNConfig::ReadNewsNavigationWidget::ReadNewsNavigationWidget( ReadNewsNavigation *d, TQWidget *p, const char *n ) : TDECModule( p, n ), d_ata( d ) { TQVBoxLayout *topL=new TQVBoxLayout(this, 5); // ==== Mark All as Read ==================================================== TQGroupBox *gb=new TQGroupBox(i18n("\"Mark All as Read\" Triggers Following Actions"), this); TQVBoxLayout *gbL=new TQVBoxLayout(gb, 8, 5); topL->addWidget(gb); gbL->addSpacing(fontMetrics().lineSpacing()-4); m_arkAllReadGoNextCB=new TQCheckBox(i18n("&Switch to the next group"), gb); gbL->addWidget(m_arkAllReadGoNextCB); connect(m_arkAllReadGoNextCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); // ==== Mark Thread as Read ================================================= gb=new TQGroupBox(i18n("\"Mark Thread as Read\" Triggers Following Actions"), this); gbL=new TQVBoxLayout(gb, 8, 5); topL->addWidget(gb); gbL->addSpacing(fontMetrics().lineSpacing()-4); m_arkThreadReadCloseThreadCB=new TQCheckBox(i18n("Clos&e the current thread"), gb); gbL->addWidget(m_arkThreadReadCloseThreadCB); m_arkThreadReadGoNextCB=new TQCheckBox(i18n("Go &to the next unread thread"), gb); gbL->addWidget(m_arkThreadReadGoNextCB); connect(m_arkThreadReadCloseThreadCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(m_arkThreadReadGoNextCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); // ==== Ignore Thread ======================================================= gb=new TQGroupBox(i18n("\"Ignore Thread\" Triggers Following Actions"), this); gbL=new TQVBoxLayout(gb, 8, 5); topL->addWidget(gb); gbL->addSpacing(fontMetrics().lineSpacing()-4); i_gnoreThreadCloseThreadCB=new TQCheckBox(i18n("Close the cu&rrent thread"), gb); gbL->addWidget(i_gnoreThreadCloseThreadCB); i_gnoreThreadGoNextCB=new TQCheckBox(i18n("Go to the next &unread thread"), gb); gbL->addWidget(i_gnoreThreadGoNextCB); connect(i_gnoreThreadCloseThreadCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(i_gnoreThreadGoNextCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); topL->addStretch(1); topL->setResizeMode(TQLayout::Minimum); load(); } KNConfig::ReadNewsNavigationWidget::~ReadNewsNavigationWidget() { } void KNConfig::ReadNewsNavigationWidget::load() { m_arkAllReadGoNextCB->setChecked(d_ata->m_arkAllReadGoNext); m_arkThreadReadGoNextCB->setChecked(d_ata->m_arkThreadReadGoNext); m_arkThreadReadCloseThreadCB->setChecked(d_ata->m_arkThreadReadCloseThread); i_gnoreThreadGoNextCB->setChecked(d_ata->i_gnoreThreadGoNext); i_gnoreThreadCloseThreadCB->setChecked(d_ata->i_gnoreThreadCloseThread); } void KNConfig::ReadNewsNavigationWidget::save() { d_ata->m_arkAllReadGoNext = m_arkAllReadGoNextCB->isChecked(); d_ata->m_arkThreadReadGoNext = m_arkThreadReadGoNextCB->isChecked(); d_ata->m_arkThreadReadCloseThread = m_arkThreadReadCloseThreadCB->isChecked(); d_ata->i_gnoreThreadGoNext = i_gnoreThreadGoNextCB->isChecked(); d_ata->i_gnoreThreadCloseThread = i_gnoreThreadCloseThreadCB->isChecked(); d_ata->setDirty(true); } //============================================================================================= KNConfig::ReadNewsViewerWidget::ReadNewsViewerWidget( ReadNewsViewer *d, TQWidget *p, const char *n ) : TDECModule( p, n ), d_ata( d ) { TQGroupBox *appgb=new TQGroupBox(i18n("Appearance"), this); TQGroupBox *agb=new TQGroupBox(i18n("Attachments"), this); TQGroupBox *secbox = new TQGroupBox( i18n("Security"), this ); r_ewrapCB=new TQCheckBox(i18n("Re&wrap text when necessary"), appgb); r_emoveTrailingCB=new TQCheckBox(i18n("Re&move trailing empty lines"), appgb); s_igCB=new TQCheckBox(i18n("Show sig&nature"), appgb); mShowRefBar = new TQCheckBox( i18n("Show reference bar"), appgb ); q_uoteCharacters=new KLineEdit(appgb); TQLabel *quoteCharL = new TQLabel(q_uoteCharacters, i18n("Recognized q&uote characters:"), appgb); o_penAttCB=new TQCheckBox(i18n("Open a&ttachments on click"), agb); a_ltAttCB=new TQCheckBox(i18n("Show alternati&ve contents as attachments"), agb); mAlwaysShowHTML = new TQCheckBox( i18n("Prefer HTML to plain text"), secbox ); TQVBoxLayout *topL=new TQVBoxLayout(this, 5); TQGridLayout *appgbL=new TQGridLayout(appgb, 5,2, 8,5); TQVBoxLayout *agbL=new TQVBoxLayout(agb, 8, 5); TQVBoxLayout *secLayout = new TQVBoxLayout( secbox, 8, 5 ); topL->addWidget(appgb); topL->addWidget(agb); topL->addWidget( secbox ); topL->addStretch(1); appgbL->addRowSpacing(0, fontMetrics().lineSpacing()-4); appgbL->addMultiCellWidget(r_ewrapCB, 2,2, 0,1); appgbL->addMultiCellWidget(r_emoveTrailingCB, 3,3, 0,1); appgbL->addMultiCellWidget(s_igCB, 4,4, 0,1); appgbL->addMultiCellWidget( mShowRefBar, 5,5, 0,1 ); appgbL->addWidget(quoteCharL, 6,0); appgbL->addWidget(q_uoteCharacters, 6,1); agbL->addSpacing(fontMetrics().lineSpacing()-4); agbL->addWidget(o_penAttCB); agbL->addWidget(a_ltAttCB); secLayout->addSpacing( fontMetrics().lineSpacing() - 4 ); secLayout->addWidget( mAlwaysShowHTML ); topL->setResizeMode(TQLayout::Minimum); connect(r_ewrapCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(r_emoveTrailingCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(s_igCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(q_uoteCharacters, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(changed())); connect(o_penAttCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(a_ltAttCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect( mShowRefBar, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()) ); connect( mAlwaysShowHTML, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()) ); load(); } KNConfig::ReadNewsViewerWidget::~ReadNewsViewerWidget() { } void KNConfig::ReadNewsViewerWidget::load() { r_ewrapCB->setChecked(d_ata->r_ewrapBody); r_emoveTrailingCB->setChecked(d_ata->r_emoveTrailingNewlines); s_igCB->setChecked(d_ata->s_howSig); q_uoteCharacters->setText(d_ata->q_uoteCharacters); o_penAttCB->setChecked(d_ata->o_penAtt); a_ltAttCB->setChecked(d_ata->s_howAlts); mShowRefBar->setChecked( d_ata->showRefBar() ); mAlwaysShowHTML->setChecked( d_ata->alwaysShowHTML() ); } void KNConfig::ReadNewsViewerWidget::save() { d_ata->r_ewrapBody=r_ewrapCB->isChecked(); d_ata->r_emoveTrailingNewlines=r_emoveTrailingCB->isChecked(); d_ata->s_howSig=s_igCB->isChecked(); d_ata->q_uoteCharacters=q_uoteCharacters->text(); d_ata->o_penAtt=o_penAttCB->isChecked(); d_ata->s_howAlts=a_ltAttCB->isChecked(); d_ata->setShowRefBar( mShowRefBar->isChecked() ); d_ata->setAlwaysShowHTML( mAlwaysShowHTML->isChecked() ); d_ata->setDirty(true); } //============================================================================================= KNConfig::DisplayedHeadersWidget::DisplayedHeadersWidget( DisplayedHeaders *d, TQWidget *p, const char *n ) : TDECModule( p, n ), s_ave( false ), d_ata( d ) { TQGridLayout *topL=new TQGridLayout(this, 7,2, 5,5); //listbox l_box=new KNDialogListBox(false, this); connect(l_box, TQT_SIGNAL(selected(int)), this, TQT_SLOT(slotItemSelected(int))); connect(l_box, TQT_SIGNAL(selectionChanged()), this, TQT_SLOT(slotSelectionChanged())); topL->addMultiCellWidget(l_box, 0,6, 0,0); // buttons a_ddBtn=new TQPushButton(i18n("&Add..."), this); connect(a_ddBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotAddBtnClicked())); topL->addWidget(a_ddBtn, 0,1); d_elBtn=new TQPushButton(i18n("&Delete"), this); connect(d_elBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotDelBtnClicked())); topL->addWidget(d_elBtn, 1,1); e_ditBtn=new TQPushButton(i18n("modify something","&Edit..."), this); connect(e_ditBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotEditBtnClicked())); topL->addWidget(e_ditBtn, 2,1); u_pBtn=new TQPushButton(i18n("&Up"), this); connect(u_pBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotUpBtnClicked())); topL->addWidget(u_pBtn, 4,1); d_ownBtn=new TQPushButton(i18n("Do&wn"), this); connect(d_ownBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotDownBtnClicked())); topL->addWidget(d_ownBtn, 5,1); topL->addRowSpacing(3,20); // separate up/down buttons topL->setRowStretch(6,1); // stretch the listbox slotSelectionChanged(); // disable buttons initially load(); } KNConfig::DisplayedHeadersWidget::~DisplayedHeadersWidget() { } void KNConfig::DisplayedHeadersWidget::load() { l_box->clear(); TQValueList list = d_ata->headers(); for ( TQValueList::Iterator it = list.begin(); it != list.end(); ++it ) l_box->insertItem( generateItem( (*it) ) ); } void KNConfig::DisplayedHeadersWidget::save() { if(s_ave) { d_ata->setDirty(true); d_ata->save(); } s_ave = false; } KNConfig::DisplayedHeadersWidget::HdrItem* KNConfig::DisplayedHeadersWidget::generateItem(KNDisplayedHeader *h) { TQString text; if(h->hasName()) { text=h->translatedName(); text+=": <"; } else text="<"; text+=h->header(); text+=">"; return new HdrItem(text,h); } void KNConfig::DisplayedHeadersWidget::slotItemSelected(int) { slotEditBtnClicked(); } void KNConfig::DisplayedHeadersWidget::slotSelectionChanged() { int curr = l_box->currentItem(); d_elBtn->setEnabled(curr!=-1); e_ditBtn->setEnabled(curr!=-1); u_pBtn->setEnabled(curr>0); d_ownBtn->setEnabled((curr!=-1)&&(curr+1!=(int)(l_box->count()))); } void KNConfig::DisplayedHeadersWidget::slotAddBtnClicked() { KNDisplayedHeader *h=d_ata->createNewHeader(); DisplayedHeaderConfDialog* dlg=new DisplayedHeaderConfDialog(h, this); if(dlg->exec()) { l_box->insertItem(generateItem(h)); h->createTags(); s_ave=true; } else d_ata->remove(h); emit changed(true); } void KNConfig::DisplayedHeadersWidget::slotDelBtnClicked() { if(l_box->currentItem()==-1) return; if(KMessageBox::warningContinueCancel(this, i18n("Really delete this header?"),"",KGuiItem(i18n("&Delete"),"edit-delete"))==KMessageBox::Continue) { KNDisplayedHeader *h = (static_cast(l_box->item(l_box->currentItem())))->hdr; d_ata->remove(h); l_box->removeItem(l_box->currentItem()); s_ave=true; } emit changed(true); } void KNConfig::DisplayedHeadersWidget::slotEditBtnClicked() { if (l_box->currentItem()==-1) return; KNDisplayedHeader *h = (static_cast(l_box->item(l_box->currentItem())))->hdr; DisplayedHeaderConfDialog* dlg=new DisplayedHeaderConfDialog(h, this); if(dlg->exec()) { l_box->changeItem(generateItem(h), l_box->currentItem()); h->createTags(); s_ave=true; } emit changed(true); } void KNConfig::DisplayedHeadersWidget::slotUpBtnClicked() { int c=l_box->currentItem(); if(c==0 || c==-1) return; KNDisplayedHeader *h = (static_cast(l_box->item(c)))->hdr; d_ata->up(h); l_box->insertItem(generateItem(h), c-1); l_box->removeItem(c+1); l_box->setCurrentItem(c-1); s_ave=true; emit changed(true); } void KNConfig::DisplayedHeadersWidget::slotDownBtnClicked() { int c=l_box->currentItem(); if(c==-1 || c==(int) l_box->count()-1) return; KNDisplayedHeader *h = (static_cast(l_box->item(c)))->hdr; d_ata->down(h); l_box->insertItem(generateItem(h), c+2); l_box->removeItem(c); l_box->setCurrentItem(c+1); s_ave=true; emit changed(true); } //============================================================================================= KNConfig::DisplayedHeaderConfDialog::DisplayedHeaderConfDialog(KNDisplayedHeader *h, TQWidget *p, char *n) : KDialogBase(Plain, i18n("Header Properties"),Ok|Cancel|Help, Ok, p, n), h_dr(h) { TQFrame* page=plainPage(); TQGridLayout *topL=new TQGridLayout(page, 2, 2, 0, 5); TQWidget *nameW = new TQWidget(page); TQGridLayout *nameL=new TQGridLayout(nameW, 2, 2, 5); h_drC=new KComboBox(true, nameW); h_drC->lineEdit()->setMaxLength(64); connect(h_drC, TQT_SIGNAL(activated(int)), this, TQT_SLOT(slotActivated(int))); nameL->addWidget(new TQLabel(h_drC, i18n("H&eader:"),nameW),0,0); nameL->addWidget(h_drC,0,1); n_ameE=new KLineEdit(nameW); n_ameE->setMaxLength(64); nameL->addWidget(new TQLabel(n_ameE, i18n("Displayed na&me:"),nameW),1,0); nameL->addWidget(n_ameE,1,1); nameL->setColStretch(1,1); topL->addMultiCellWidget(nameW,0,0,0,1); TQGroupBox *ngb=new TQGroupBox(i18n("Name"), page); // ### hide style settings for now, the new viewer doesn't support this yet ngb->hide(); TQVBoxLayout *ngbL = new TQVBoxLayout(ngb, 8, 5); ngbL->setAutoAdd(true); ngbL->addSpacing(fontMetrics().lineSpacing()-4); n_ameCB[0]=new TQCheckBox(i18n("&Large"), ngb); n_ameCB[1]=new TQCheckBox(i18n("&Bold"), ngb); n_ameCB[2]=new TQCheckBox(i18n("&Italic"), ngb); n_ameCB[3]=new TQCheckBox(i18n("&Underlined"), ngb); topL->addWidget(ngb,1,0); TQGroupBox *vgb=new TQGroupBox(i18n("Value"), page); // ### hide style settings for now, the new viewer doen't support this yet vgb->hide(); TQVBoxLayout *vgbL = new TQVBoxLayout(vgb, 8, 5); vgbL->setAutoAdd(true); vgbL->addSpacing(fontMetrics().lineSpacing()-4); v_alueCB[0]=new TQCheckBox(i18n("L&arge"), vgb); v_alueCB[1]=new TQCheckBox(i18n("Bol&d"), vgb); v_alueCB[2]=new TQCheckBox(i18n("I&talic"), vgb); v_alueCB[3]=new TQCheckBox(i18n("U&nderlined"), vgb); topL->addWidget(vgb,1,1); topL->setColStretch(0,1); topL->setColStretch(1,1); // preset values... h_drC->insertStrList(KNDisplayedHeader::predefs()); h_drC->lineEdit()->setText(h->header()); n_ameE->setText(h->translatedName()); for(int i=0; i<4; i++) { n_ameCB[i]->setChecked(h->flag(i)); v_alueCB[i]->setChecked(h->flag(i+4)); } setFixedHeight(sizeHint().height()); KNHelper::restoreWindowSize("accReadHdrPropDLG", this, sizeHint()); connect(n_ameE, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotNameChanged(const TQString&))); setHelp("anc-knode-headers"); slotNameChanged( n_ameE->text() ); } KNConfig::DisplayedHeaderConfDialog::~DisplayedHeaderConfDialog() { KNHelper::saveWindowSize("accReadHdrPropDLG", size()); } void KNConfig::DisplayedHeaderConfDialog::slotOk() { h_dr->setHeader(h_drC->currentText()); h_dr->setTranslatedName(n_ameE->text()); for(int i=0; i<4; i++) { if(h_dr->hasName()) h_dr->setFlag(i, n_ameCB[i]->isChecked()); else h_dr->setFlag(i,false); h_dr->setFlag(i+4, v_alueCB[i]->isChecked()); } accept(); } // the user selected one of the presets, insert the *translated* string as display name: void KNConfig::DisplayedHeaderConfDialog::slotActivated(int pos) { n_ameE->setText(i18n(h_drC->text(pos).local8Bit())); // I think it's save here, the combobox has only english defaults } // disable the name format options when the name is empty void KNConfig::DisplayedHeaderConfDialog::slotNameChanged(const TQString& str) { for(int i=0; i<4; i++) n_ameCB[i]->setEnabled(!str.isEmpty()); } //============================================================================================= KNConfig::ScoringWidget::ScoringWidget( Scoring *d, TQWidget *p, const char *n ) : TDECModule( p, n ), d_ata( d ) { TQGridLayout *topL = new TQGridLayout(this,4,2, 5,5); ksc = new KScoringEditorWidget(knGlobals.scoringManager(), this); topL->addMultiCellWidget(ksc, 0,0, 0,1); topL->addRowSpacing(1, 10); i_gnored=new KIntSpinBox(-100000, 100000, 1, 0, 10, this); TQLabel *l=new TQLabel(i_gnored, i18n("Default score for &ignored threads:"), this); topL->addWidget(l, 2, 0); topL->addWidget(i_gnored, 2, 1); connect(i_gnored, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed())); w_atched=new KIntSpinBox(-100000, 100000, 1, 0, 10, this); l=new TQLabel(w_atched, i18n("Default score for &watched threads:"), this); topL->addWidget(l, 3, 0); topL->addWidget(w_atched, 3, 1); connect(w_atched, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed())); topL->setColStretch(0, 1); load(); } KNConfig::ScoringWidget::~ScoringWidget() { } void KNConfig::ScoringWidget::load() { i_gnored->setValue(d_ata->i_gnoredThreshold); w_atched->setValue(d_ata->w_atchedThreshold); } void KNConfig::ScoringWidget::save() { d_ata->i_gnoredThreshold = i_gnored->value(); d_ata->w_atchedThreshold = w_atched->value(); d_ata->setDirty(true); } //============================================================================================= KNConfig::FilterListWidget::FilterListWidget( TQWidget *p, const char *n ) : TDECModule( p, n ), f_ilManager( knGlobals.filterManager() ) { TQGridLayout *topL=new TQGridLayout(this, 6,2, 5,5); // == Filters ================================================= f_lb=new KNDialogListBox(false, this); topL->addWidget(new TQLabel(f_lb, i18n("&Filters:"),this),0,0); connect(f_lb, TQT_SIGNAL(selectionChanged()), TQT_SLOT(slotSelectionChangedFilter())); connect(f_lb, TQT_SIGNAL(selected(int)), TQT_SLOT(slotItemSelectedFilter(int))); topL->addMultiCellWidget(f_lb,1,5,0,0); a_ddBtn=new TQPushButton(i18n("&Add..."), this); connect(a_ddBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotAddBtnClicked())); topL->addWidget(a_ddBtn,1,1); e_ditBtn=new TQPushButton(i18n("modify something","&Edit..."), this); connect(e_ditBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotEditBtnClicked())); topL->addWidget(e_ditBtn,2,1); c_opyBtn=new TQPushButton(i18n("Co&py..."), this); connect(c_opyBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotCopyBtnClicked())); topL->addWidget(c_opyBtn,3,1); d_elBtn=new TQPushButton(i18n("&Delete"), this); connect(d_elBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotDelBtnClicked())); topL->addWidget(d_elBtn,4,1); // == Menu ==================================================== m_lb=new KNDialogListBox(false, this); topL->addWidget(new TQLabel(m_lb, i18n("&Menu:"),this),6,0); connect(m_lb, TQT_SIGNAL(selectionChanged()), TQT_SLOT(slotSelectionChangedMenu())); topL->addMultiCellWidget(m_lb,7,11,0,0); u_pBtn=new TQPushButton(i18n("&Up"), this); connect(u_pBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotUpBtnClicked())); topL->addWidget(u_pBtn,7,1); d_ownBtn=new TQPushButton(i18n("Do&wn"), this); connect(d_ownBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotDownBtnClicked())); topL->addWidget(d_ownBtn,8,1); s_epAddBtn=new TQPushButton(i18n("Add\n&Separator"), this); connect(s_epAddBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotSepAddBtnClicked())); topL->addWidget(s_epAddBtn,9,1); s_epRemBtn=new TQPushButton(i18n("&Remove\nSeparator"), this); connect(s_epRemBtn, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotSepRemBtnClicked())); topL->addWidget(s_epRemBtn,10,1); topL->setRowStretch(5,1); topL->setRowStretch(11,1); a_ctive = SmallIcon("filter",16); d_isabled = SmallIcon("filter",16,TDEIcon::DisabledState); load(); slotSelectionChangedFilter(); slotSelectionChangedMenu(); } KNConfig::FilterListWidget::~FilterListWidget() { f_ilManager->endConfig(); } void KNConfig::FilterListWidget::load() { f_lb->clear(); m_lb->clear(); f_ilManager->startConfig(this); } void KNConfig::FilterListWidget::save() { f_ilManager->commitChanges(); } void KNConfig::FilterListWidget::addItem(KNArticleFilter *f) { if(f->isEnabled()) f_lb->insertItem(new LBoxItem(f, f->translatedName(), &a_ctive)); else f_lb->insertItem(new LBoxItem(f, f->translatedName(), &d_isabled)); slotSelectionChangedFilter(); emit changed(true); } void KNConfig::FilterListWidget::removeItem(KNArticleFilter *f) { int i=findItem(f_lb, f); if (i!=-1) f_lb->removeItem(i); slotSelectionChangedFilter(); emit changed(true); } void KNConfig::FilterListWidget::updateItem(KNArticleFilter *f) { int i=findItem(f_lb, f); if(i!=-1) { if(f->isEnabled()) { f_lb->changeItem(new LBoxItem(f, f->translatedName(), &a_ctive), i); m_lb->changeItem(new LBoxItem(f, f->translatedName()), findItem(m_lb, f)); } else f_lb->changeItem(new LBoxItem(f, f->translatedName(), &d_isabled), i); } slotSelectionChangedFilter(); emit changed(true); } void KNConfig::FilterListWidget::addMenuItem(KNArticleFilter *f) { if (f) { if (findItem(m_lb, f)==-1) m_lb->insertItem(new LBoxItem(f, f->translatedName())); } else // separator m_lb->insertItem(new LBoxItem(0, "===")); slotSelectionChangedMenu(); emit changed(true); } void KNConfig::FilterListWidget::removeMenuItem(KNArticleFilter *f) { int i=findItem(m_lb, f); if(i!=-1) m_lb->removeItem(i); slotSelectionChangedMenu(); emit changed(true); } TQValueList KNConfig::FilterListWidget::menuOrder() { KNArticleFilter *f; TQValueList lst; for(uint i=0; icount(); i++) { f= (static_cast(m_lb->item(i)))->filter; if(f) lst << f->id(); else lst << -1; } return lst; } int KNConfig::FilterListWidget::findItem(TQListBox *l, KNArticleFilter *f) { int idx=0; bool found=false; while(!found && idx < (int) l->count()) { found=( (static_cast(l->item(idx)))->filter==f ); if(!found) idx++; } if(found) return idx; else return -1; } void KNConfig::FilterListWidget::slotAddBtnClicked() { f_ilManager->newFilter(); } void KNConfig::FilterListWidget::slotDelBtnClicked() { if (f_lb->currentItem()!=-1) f_ilManager->deleteFilter( (static_cast(f_lb->item(f_lb->currentItem())))->filter ); } void KNConfig::FilterListWidget::slotEditBtnClicked() { if (f_lb->currentItem()!=-1) f_ilManager->editFilter( (static_cast(f_lb->item(f_lb->currentItem())))->filter ); } void KNConfig::FilterListWidget::slotCopyBtnClicked() { if (f_lb->currentItem()!=-1) f_ilManager->copyFilter( (static_cast(f_lb->item(f_lb->currentItem())))->filter ); } void KNConfig::FilterListWidget::slotUpBtnClicked() { int c=m_lb->currentItem(); KNArticleFilter *f=0; if(c==0 || c==-1) return; f=(static_cast(m_lb->item(c)))->filter; if(f) m_lb->insertItem(new LBoxItem(f, f->translatedName()), c-1); else m_lb->insertItem(new LBoxItem(0, "==="), c-1); m_lb->removeItem(c+1); m_lb->setCurrentItem(c-1); emit changed(true); } void KNConfig::FilterListWidget::slotDownBtnClicked() { int c=m_lb->currentItem(); KNArticleFilter *f=0; if(c==-1 || c+1==(int)m_lb->count()) return; f=(static_cast(m_lb->item(c)))->filter; if(f) m_lb->insertItem(new LBoxItem(f, f->translatedName()), c+2); else m_lb->insertItem(new LBoxItem(0, "==="), c+2); m_lb->removeItem(c); m_lb->setCurrentItem(c+1); emit changed(true); } void KNConfig::FilterListWidget::slotSepAddBtnClicked() { m_lb->insertItem(new LBoxItem(0, "==="), m_lb->currentItem()); slotSelectionChangedMenu(); emit changed(true); } void KNConfig::FilterListWidget::slotSepRemBtnClicked() { int c=m_lb->currentItem(); if( (c!=-1) && ( (static_cast(m_lb->item(c)))->filter==0 ) ) m_lb->removeItem(c); slotSelectionChangedMenu(); emit changed(true); } void KNConfig::FilterListWidget::slotItemSelectedFilter(int) { slotEditBtnClicked(); } void KNConfig::FilterListWidget::slotSelectionChangedFilter() { int curr = f_lb->currentItem(); d_elBtn->setEnabled(curr!=-1); e_ditBtn->setEnabled(curr!=-1); c_opyBtn->setEnabled(curr!=-1); } void KNConfig::FilterListWidget::slotSelectionChangedMenu() { int curr = m_lb->currentItem(); u_pBtn->setEnabled(curr>0); d_ownBtn->setEnabled((curr!=-1)&&(curr+1!=(int)m_lb->count())); s_epRemBtn->setEnabled((curr!=-1) && ( (static_cast(m_lb->item(curr)))->filter==0 ) ); } //============================================================================================= KNConfig::PostNewsTechnicalWidget::PostNewsTechnicalWidget( PostNewsTechnical *d, TQWidget *p, const char *n ) : TDECModule( p, n ), d_ata( d ) { TQVBoxLayout *topL=new TQVBoxLayout(this, 5); // ==== General ============================================================= TQGroupBox *ggb=new TQGroupBox(i18n("General"), this); TQGridLayout *ggbL=new TQGridLayout(ggb, 6,2, 8,5); topL->addWidget(ggb); ggbL->addRowSpacing(0, fontMetrics().lineSpacing()-4); c_harset=new TQComboBox(ggb); c_harset->insertStringList(d->composerCharsets()); ggbL->addWidget(new TQLabel(c_harset, i18n("Cha&rset:"), ggb), 1,0); ggbL->addWidget(c_harset, 1,1); connect(c_harset, TQT_SIGNAL(activated(int)), TQT_SLOT(changed())); e_ncoding=new TQComboBox(ggb); e_ncoding->insertItem(i18n("Allow 8-bit")); e_ncoding->insertItem(i18n("7-bit (Quoted-Printable)")); ggbL->addWidget(new TQLabel(e_ncoding, i18n("Enco&ding:"), ggb), 2,0); ggbL->addWidget(e_ncoding, 2,1); connect(e_ncoding, TQT_SIGNAL(activated(int)), TQT_SLOT(changed())); u_seOwnCSCB=new TQCheckBox(i18n("Use o&wn default charset when replying"), ggb); ggbL->addMultiCellWidget(u_seOwnCSCB, 3,3, 0,1); connect(u_seOwnCSCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); g_enMIdCB=new TQCheckBox(i18n("&Generate message-id"), ggb); connect(g_enMIdCB, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotGenMIdCBToggled(bool))); ggbL->addMultiCellWidget(g_enMIdCB, 4,4, 0,1); h_ost=new KLineEdit(ggb); h_ost->setEnabled(false); h_ostL=new TQLabel(h_ost, i18n("Ho&st name:"), ggb); h_ostL->setEnabled(false); ggbL->addWidget(h_ostL, 5,0); ggbL->addWidget(h_ost, 5,1); ggbL->setColStretch(1,1); connect(h_ost, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(changed())); // ==== X-Headers ============================================================= TQGroupBox *xgb=new TQGroupBox(i18n("X-Headers"), this); topL->addWidget(xgb, 1); TQGridLayout *xgbL=new TQGridLayout(xgb, 7,2, 8,5); xgbL->addRowSpacing(0, fontMetrics().lineSpacing()-4); l_box=new KNDialogListBox(false, xgb); connect(l_box, TQT_SIGNAL(selected(int)), TQT_SLOT(slotItemSelected(int))); connect(l_box, TQT_SIGNAL(selectionChanged()), TQT_SLOT(slotSelectionChanged())); xgbL->addMultiCellWidget(l_box, 1,4, 0,0); a_ddBtn=new TQPushButton(i18n("&Add..."), xgb); connect(a_ddBtn, TQT_SIGNAL(clicked()), TQT_SLOT(slotAddBtnClicked())); xgbL->addWidget(a_ddBtn, 1,1); d_elBtn=new TQPushButton(i18n("Dele&te"), xgb); connect(d_elBtn, TQT_SIGNAL(clicked()), TQT_SLOT(slotDelBtnClicked())); xgbL->addWidget(d_elBtn, 2,1); e_ditBtn=new TQPushButton(i18n("modify something","&Edit..."), xgb); connect(e_ditBtn, TQT_SIGNAL(clicked()), TQT_SLOT(slotEditBtnClicked())); xgbL->addWidget(e_ditBtn, 3,1); TQLabel *placeHolders = new TQLabel(i18n("Placeholders for replies: %NAME=sender's name, %EMAIL=sender's address"), xgb); xgbL->addMultiCellWidget(placeHolders, 5, 5, 0, 1); i_ncUaCB=new TQCheckBox(i18n("Do not add the \"&User-Agent\" identification header"), xgb); xgbL->addMultiCellWidget(i_ncUaCB, 6,6, 0,1); connect(i_ncUaCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); xgbL->setRowStretch(4,1); xgbL->setColStretch(0,1); load(); slotSelectionChanged(); } KNConfig::PostNewsTechnicalWidget::~PostNewsTechnicalWidget() { } void KNConfig::PostNewsTechnicalWidget::load() { c_harset->setCurrentItem(d_ata->indexForCharset(d_ata->charset())); e_ncoding->setCurrentItem(d_ata->a_llow8BitBody? 0:1); u_seOwnCSCB->setChecked(d_ata->u_seOwnCharset); g_enMIdCB->setChecked(d_ata->g_enerateMID); h_ost->setText(d_ata->h_ostname); i_ncUaCB->setChecked(d_ata->d_ontIncludeUA); l_box->clear(); for(XHeaders::Iterator it=d_ata->x_headers.begin(); it!=d_ata->x_headers.end(); ++it) l_box->insertItem((*it).header()); } void KNConfig::PostNewsTechnicalWidget::save() { d_ata->c_harset=c_harset->currentText().latin1(); d_ata->a_llow8BitBody=(e_ncoding->currentItem()==0); d_ata->u_seOwnCharset=u_seOwnCSCB->isChecked(); d_ata->g_enerateMID=g_enMIdCB->isChecked(); d_ata->h_ostname=h_ost->text().latin1(); d_ata->d_ontIncludeUA=i_ncUaCB->isChecked(); d_ata->x_headers.clear(); for(unsigned int idx=0; idxcount(); idx++) d_ata->x_headers.append( XHeader(l_box->text(idx)) ); d_ata->setDirty(true); } void KNConfig::PostNewsTechnicalWidget::slotGenMIdCBToggled(bool b) { h_ost->setEnabled(b); h_ostL->setEnabled(b); emit changed(true); } void KNConfig::PostNewsTechnicalWidget::slotSelectionChanged() { d_elBtn->setEnabled(l_box->currentItem()!=-1); e_ditBtn->setEnabled(l_box->currentItem()!=-1); } void KNConfig::PostNewsTechnicalWidget::slotItemSelected(int) { slotEditBtnClicked(); } void KNConfig::PostNewsTechnicalWidget::slotAddBtnClicked() { XHeaderConfDialog *dlg=new XHeaderConfDialog(TQString(), this); if (dlg->exec()) l_box->insertItem(dlg->result()); delete dlg; slotSelectionChanged(); emit changed(true); } void KNConfig::PostNewsTechnicalWidget::slotDelBtnClicked() { int c=l_box->currentItem(); if (c == -1) return; l_box->removeItem(c); slotSelectionChanged(); emit changed(true); } void KNConfig::PostNewsTechnicalWidget::slotEditBtnClicked() { int c=l_box->currentItem(); if (c == -1) return; XHeaderConfDialog *dlg=new XHeaderConfDialog(l_box->text(c), this); if (dlg->exec()) l_box->changeItem(dlg->result(),c); delete dlg; slotSelectionChanged(); emit changed(true); } //=================================================================================================== KNConfig::XHeaderConfDialog::XHeaderConfDialog(const TQString &h, TQWidget *p, const char *n) : KDialogBase(Plain, i18n("X-Headers"),Ok|Cancel, Ok, p, n) { TQFrame* page=plainPage(); TQHBoxLayout *topL=new TQHBoxLayout(page, 5,8); topL->setAutoAdd(true); new TQLabel("X-", page); n_ame=new KLineEdit(page); new TQLabel(":", page); v_alue=new KLineEdit(page); int pos=h.find(": ", 2); if(pos!=-1) { n_ame->setText(h.mid(2, pos-2)); pos+=2; v_alue->setText(h.mid(pos, h.length()-pos)); } setFixedHeight(sizeHint().height()); KNHelper::restoreWindowSize("XHeaderDlg", this, sizeHint()); n_ame->setFocus(); } KNConfig::XHeaderConfDialog::~XHeaderConfDialog() { KNHelper::saveWindowSize("XHeaderDlg", size()); } TQString KNConfig::XHeaderConfDialog::result() { TQString value = v_alue->text(); // just in case someone pastes a newline value.replace( '\n', ' ' ); return TQString( "X-%1: %2" ).arg( n_ame->text() ).arg( value ); } //=================================================================================================== KNConfig::PostNewsComposerWidget::PostNewsComposerWidget( PostNewsComposer *d, TQWidget *p, const char *n ) : TDECModule( p, n ), d_ata( d ) { TQVBoxLayout *topL=new TQVBoxLayout(this, 5); // === general =========================================================== TQGroupBox *generalB=new TQGroupBox(i18n("General"), this); topL->addWidget(generalB); TQGridLayout *generalL=new TQGridLayout(generalB, 3,3, 8,5); generalL->addRowSpacing(0, fontMetrics().lineSpacing()-4); w_ordWrapCB=new TQCheckBox(i18n("Word &wrap at column:"), generalB); generalL->addWidget(w_ordWrapCB,1,0); m_axLen=new KIntSpinBox(20, 200, 1, 20, 10, generalB); generalL->addWidget(m_axLen,1,2); connect(w_ordWrapCB, TQT_SIGNAL(toggled(bool)), m_axLen, TQT_SLOT(setEnabled(bool))); connect(w_ordWrapCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); connect(m_axLen, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed())); o_wnSigCB=new TQCheckBox(i18n("Appe&nd signature automatically"), generalB); generalL->addMultiCellWidget(o_wnSigCB,2,2,0,1); connect(o_wnSigCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); generalL->setColStretch(1,1); // === reply ============================================================= TQGroupBox *replyB=new TQGroupBox(i18n("Reply"), this); topL->addWidget(replyB); TQGridLayout *replyL=new TQGridLayout(replyB, 7,2, 8,5); replyL->addRowSpacing(0, fontMetrics().lineSpacing()-4); i_ntro=new KLineEdit(replyB); replyL->addMultiCellWidget(new TQLabel(i_ntro,i18n("&Introduction phrase:"), replyB),1,1,0,1); replyL->addMultiCellWidget(i_ntro, 2,2,0,1); replyL->addMultiCellWidget(new TQLabel(i18n("Placeholders: %NAME=sender's name, %EMAIL=sender's address,
%DATE=date, %MSID=message-id, %GROUP=group name, %L=line break
"), replyB),3,3,0,1); connect(i_ntro, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(changed())); r_ewrapCB=new TQCheckBox(i18n("Rewrap quoted te&xt automatically"), replyB); replyL->addMultiCellWidget(r_ewrapCB, 4,4,0,1); connect(r_ewrapCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); a_uthSigCB=new TQCheckBox(i18n("Include the a&uthor's signature"), replyB); replyL->addMultiCellWidget(a_uthSigCB, 5,5,0,1); connect(a_uthSigCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); c_ursorOnTopCB=new TQCheckBox(i18n("Put the cursor &below the introduction phrase"), replyB); replyL->addMultiCellWidget(c_ursorOnTopCB, 6,6,0,1); connect(c_ursorOnTopCB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed())); replyL->setColStretch(1,1); // === external editor ======================================================== TQGroupBox *editorB=new TQGroupBox(i18n("External Editor"), this); topL->addWidget(editorB); TQGridLayout *editorL=new TQGridLayout(editorB, 6,3, 8,5); editorL->addRowSpacing(0, fontMetrics().lineSpacing()-4); e_ditor=new KLineEdit(editorB); editorL->addWidget(new TQLabel(e_ditor, i18n("Specify edi&tor:"), editorB),1,0); editorL->addWidget(e_ditor,1,1); TQPushButton *btn = new TQPushButton(i18n("Choo&se..."),editorB); connect(btn, TQT_SIGNAL(clicked()), TQT_SLOT(slotChooseEditor())); connect(e_ditor, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(changed())); editorL->addWidget(btn,1,2); editorL->addMultiCellWidget(new TQLabel(i18n("%f will be replaced with the filename to edit."), editorB),2,2,0,2); e_xternCB=new TQCheckBox(i18n("Start exte&rnal editor automatically"), editorB); editorL->addMultiCellWidget(e_xternCB, 3,3,0,2); connect(e_xternCB, TQT_SIGNAL(clicked()), TQT_SLOT(changed())); editorL->setColStretch(1,1); topL->addStretch(1); load(); } KNConfig::PostNewsComposerWidget::~PostNewsComposerWidget() { } void KNConfig::PostNewsComposerWidget::load() { w_ordWrapCB->setChecked(d_ata->w_ordWrap); m_axLen->setEnabled(d_ata->w_ordWrap); a_uthSigCB->setChecked(d_ata->i_ncSig); c_ursorOnTopCB->setChecked(d_ata->c_ursorOnTop); e_xternCB->setChecked(d_ata->u_seExtEditor); o_wnSigCB->setChecked(d_ata->a_ppSig); r_ewrapCB->setChecked(d_ata->r_ewrap); m_axLen->setValue(d_ata->m_axLen); i_ntro->setText(d_ata->i_ntro); e_ditor->setText(d_ata->e_xternalEditor); } void KNConfig::PostNewsComposerWidget::save() { d_ata->w_ordWrap=w_ordWrapCB->isChecked(); d_ata->m_axLen=m_axLen->value(); d_ata->r_ewrap=r_ewrapCB->isChecked(); d_ata->a_ppSig=o_wnSigCB->isChecked(); d_ata->i_ntro=i_ntro->text(); d_ata->i_ncSig=a_uthSigCB->isChecked(); d_ata->c_ursorOnTop=c_ursorOnTopCB->isChecked(); d_ata->e_xternalEditor=e_ditor->text(); d_ata->u_seExtEditor=e_xternCB->isChecked(); d_ata->setDirty(true); } void KNConfig::PostNewsComposerWidget::slotChooseEditor() { TQString path=e_ditor->text().simplifyWhiteSpace(); if (path.right(3) == " %f") path.truncate(path.length()-3); path=KFileDialog::getOpenFileName(path, TQString(), this, i18n("Choose Editor")); if (!path.isEmpty()) e_ditor->setText(path+" %f"); } //=================================================================================================== KNConfig::PostNewsSpellingWidget::PostNewsSpellingWidget( TQWidget *p, const char *n ) : TDECModule( p, n ) { TQVBoxLayout *topL=new TQVBoxLayout(this, 5); c_onf = new KSpellConfig( this, "spell", 0, false ); topL->addWidget(c_onf); connect(c_onf, TQT_SIGNAL(configChanged()), TQT_SLOT(changed())); topL->addStretch(1); } KNConfig::PostNewsSpellingWidget::~PostNewsSpellingWidget() { } void KNConfig::PostNewsSpellingWidget::save() { c_onf->writeGlobalSettings(); } //============================================================================================================== KNConfig::PrivacyWidget::PrivacyWidget(TQWidget *p, const char *n) : TDECModule( p, n ) { TQBoxLayout *topLayout = new TQVBoxLayout(this, 5); c_onf = new Kpgp::Config(this,"knode pgp config",false); topLayout->addWidget(c_onf); connect(c_onf, TQT_SIGNAL(changed()), TQT_SLOT(changed())); topLayout->addStretch(1); load(); } KNConfig::PrivacyWidget::~PrivacyWidget() { } void KNConfig::PrivacyWidget::save() { c_onf->applySettings(); } //============================================================================================================== //BEGIN: Cleanup configuration widgets --------------------------------------- KNConfig::GroupCleanupWidget::GroupCleanupWidget( Cleanup *data, TQWidget *parent, const char *name ) : TQWidget( parent, name ), mData( data ) { TQVBoxLayout *top = new TQVBoxLayout( this ); if (!mData->isGlobal()) { mDefault = new TQCheckBox( i18n("&Use global cleanup configuration"), this ); connect( mDefault, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotDefaultToggled(bool)) ); top->addWidget( mDefault ); } mExpGroup = new TQGroupBox( i18n("Newsgroup Cleanup Settings"), this ); mExpGroup->setColumnLayout(0, Qt::Vertical ); mExpGroup->layout()->setSpacing( KDialog::spacingHint() ); mExpGroup->layout()->setMargin( KDialog::marginHint() ); top->addWidget( mExpGroup ); TQGridLayout *grid = new TQGridLayout( mExpGroup->layout(), 7, 2 ); grid->setRowSpacing( 0, KDialog::spacingHint() ); mExpEnabled = new TQCheckBox( i18n("&Expire old articles automatically"), mExpGroup ); grid->addMultiCellWidget( mExpEnabled, 1, 1, 0, 1 ); connect( mExpEnabled, TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()) ); mExpDays = new KIntSpinBox( 0, 99999, 1, 0, 10, mExpGroup ); TQLabel *label = new TQLabel( mExpDays, i18n("&Purge groups every:"), mExpGroup ); grid->addWidget( label, 2, 0 ); grid->addWidget( mExpDays, 2, 1, TQt::AlignRight ); connect( mExpDays, TQT_SIGNAL(valueChanged(int)), TQT_SIGNAL(changed()) ); connect( mExpDays, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(expDaysChanged(int)) ); connect( mExpEnabled, TQT_SIGNAL(toggled(bool)), label, TQT_SLOT(setEnabled(bool)) ); connect( mExpEnabled, TQT_SIGNAL(toggled(bool)), mExpDays, TQT_SLOT(setEnabled(bool)) ); mExpReadDays = new KIntSpinBox( 0, 99999, 1, 0, 10, mExpGroup ); label = new TQLabel( mExpReadDays, i18n("&Keep read articles:"), mExpGroup ); grid->addWidget( label, 3, 0 ); grid->addWidget( mExpReadDays, 3, 1, TQt::AlignRight ); connect( mExpReadDays, TQT_SIGNAL(valueChanged(int)), TQT_SIGNAL(changed()) ); connect( mExpReadDays, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(expReadDaysChanged(int)) ); mExpUnreadDays = new KIntSpinBox( 0, 99999, 1, 0, 10, mExpGroup ); label = new TQLabel( mExpUnreadDays, i18n("Keep u&nread articles:"), mExpGroup ); grid->addWidget( label, 4, 0 ); grid->addWidget( mExpUnreadDays, 4, 1, TQt::AlignRight ); connect( mExpUnreadDays, TQT_SIGNAL(valueChanged(int)), TQT_SIGNAL(changed()) ); connect( mExpUnreadDays, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(expUnreadDaysChanged(int)) ); mExpUnavailable = new TQCheckBox( i18n("&Remove articles that are not available on the server"), mExpGroup ); grid->addMultiCellWidget( mExpUnavailable, 5, 5, 0, 1 ); connect( mExpUnavailable, TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()) ); mPreserveThreads = new TQCheckBox( i18n("Preser&ve threads"), mExpGroup ); grid->addMultiCellWidget( mPreserveThreads, 6, 6, 0, 1 ); connect( mPreserveThreads, TQT_SIGNAL(toggled(bool)), TQT_SIGNAL(changed()) ); grid->setColStretch(1,1); } void KNConfig::GroupCleanupWidget::expDaysChanged(int value) { mExpDays->setSuffix( i18n(" day", " days", value) ); } void KNConfig::GroupCleanupWidget::expReadDaysChanged(int value) { mExpReadDays->setSuffix( i18n(" day", " days", value) ); } void KNConfig::GroupCleanupWidget::expUnreadDaysChanged(int value) { mExpUnreadDays->setSuffix( i18n(" day", " days", value) ); } void KNConfig::GroupCleanupWidget::load() { if (!mData->isGlobal()) { mDefault->setChecked( mData->useDefault() ); slotDefaultToggled( mData->useDefault() ); } mExpEnabled->setChecked( !mData->d_oExpire ); // make sure the toggled(bool) signal is emitted at least once mExpEnabled->setChecked( mData->d_oExpire ); mExpDays->setValue( mData->e_xpireInterval ); mExpReadDays->setValue( mData->maxAgeForRead() ); mExpUnreadDays->setValue( mData->maxAgeForUnread() ); mExpUnavailable->setChecked( mData->removeUnavailable() ); mPreserveThreads->setChecked( mData->preserveThreads() ); } void KNConfig::GroupCleanupWidget::save() { if (!mData->isGlobal()) mData->setUseDefault( mDefault->isChecked() ); mData->d_oExpire = mExpEnabled->isChecked(); mData->e_xpireInterval = mExpDays->value(); mData->r_eadMaxAge = mExpReadDays->value(); mData->u_nreadMaxAge = mExpUnreadDays->value(); mData->r_emoveUnavailable = mExpUnavailable->isChecked(); mData->p_reserveThr = mPreserveThreads->isChecked(); } void KNConfig::GroupCleanupWidget::slotDefaultToggled( bool state ) { mExpGroup->setEnabled( !state ); } KNConfig::CleanupWidget::CleanupWidget( TQWidget *p, const char *n ) : TDECModule( p, n ), d_ata( knGlobals.configManager()->cleanup() ) { TQVBoxLayout *topL=new TQVBoxLayout(this, 5); mGroupCleanup = new GroupCleanupWidget( d_ata, this ); topL->addWidget( mGroupCleanup ); connect( mGroupCleanup, TQT_SIGNAL(changed()), TQT_SLOT(changed()) ); // === folders ========================================================= TQGroupBox *foldersB=new TQGroupBox(i18n("Folders"), this); foldersB->setColumnLayout(0, Qt::Vertical ); foldersB->layout()->setSpacing( KDialog::spacingHint() ); foldersB->layout()->setMargin( KDialog::marginHint() ); topL->addWidget(foldersB); TQGridLayout *foldersL=new TQGridLayout(foldersB->layout(), 3,2); foldersL->setRowSpacing( 0, KDialog::spacingHint() ); f_olderCB=new TQCheckBox(i18n("Co&mpact folders automatically"), foldersB); connect(f_olderCB, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotFolderCBtoggled(bool))); foldersL->addMultiCellWidget(f_olderCB,1,1,0,1); f_olderDays=new KIntSpinBox(0, 99999, 1, 0, 10, foldersB); f_olderDaysL=new TQLabel(f_olderDays,i18n("P&urge folders every:"), foldersB); foldersL->addWidget(f_olderDaysL,2,0); foldersL->addWidget(f_olderDays,2,1,TQt::AlignRight); connect(f_olderDays, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed())); connect(f_olderDays, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotFolderDaysChanged(int))); foldersL->setColStretch(1,1); topL->addStretch(1); load(); } KNConfig::CleanupWidget::~CleanupWidget() { } void KNConfig::CleanupWidget::load() { f_olderCB->setChecked(d_ata->d_oCompact); slotFolderCBtoggled(d_ata->d_oCompact); f_olderDays->setValue(d_ata->c_ompactInterval); mGroupCleanup->load(); } void KNConfig::CleanupWidget::save() { d_ata->d_oCompact=f_olderCB->isChecked(); d_ata->c_ompactInterval=f_olderDays->value(); mGroupCleanup->save(); d_ata->setDirty(true); } void KNConfig::CleanupWidget::slotFolderCBtoggled(bool b) { f_olderDaysL->setEnabled(b); f_olderDays->setEnabled(b); emit changed(true); } void KNConfig::CleanupWidget::slotFolderDaysChanged(int value) { f_olderDays->setSuffix(i18n(" day", " days", value)); } //END: Cleanup configuration widgets ----------------------------------------- //============================================================================================================== /* KNConfig::CacheWidget::CacheWidget(Cache *d, TQWidget *p, const char *n) : TDECModule p, n), d_ata(d) { TQVBoxLayout *topL=new TQVBoxLayout(this, 5); // memory TQGroupBox *memGB=new TQGroupBox(i18n("Memory Cache"), this); topL->addWidget(memGB); TQGridLayout *memL=new TQGridLayout(memGB, 3,2, 8,5); memL->addRowSpacing(0, fontMetrics().lineSpacing()-4); memL->addWidget(new TQLabel(i18n("Max articles to keep:"), memGB), 1,0); m_emMaxArt=new KIntSpinBox(0, 99999, 1, 1, 10, memGB); memL->addWidget(m_emMaxArt, 1,1); memL->addWidget(new TQLabel(i18n("Max memory usage:"), memGB), 2,0); m_emMaxKB=new KIntSpinBox(0, 99999, 1, 1, 10, memGB); m_emMaxKB->setSuffix(" KB"); memL->addWidget(m_emMaxKB, 2,1); memL->setColStretch(0,1); // disk TQGroupBox *diskGB=new TQGroupBox(i18n("Disk Cache"), this); topL->addWidget(diskGB); TQGridLayout *diskL=new TQGridLayout(diskGB, 3,2, 8,5); diskL->addRowSpacing(0, fontMetrics().lineSpacing()-4); d_iskMaxArtL=new TQLabel(i18n("Max articles to keep:"), diskGB); diskL->addWidget(d_iskMaxArtL, 2,0); d_iskMaxArt=new KIntSpinBox(0, 99999, 1, 1, 10, diskGB); diskL->addWidget(d_iskMaxArt, 2,1); d_iskMaxKBL=new TQLabel(i18n("Max disk usage:"), diskGB); diskL->addWidget(d_iskMaxKBL, 3,0); d_iskMaxKB=new KIntSpinBox(0, 99999, 1, 1, 10, diskGB); d_iskMaxKB->setSuffix(" KB"); diskL->addWidget(d_iskMaxKB, 3,1); diskL->setColStretch(0,1); 7 topL->addStretch(1); // init m_emMaxArt->setValue(d->memoryMaxArticles()); m_emMaxKB->setValue(d->memoryMaxKBytes()); d_iskMaxArt->setValue(d->diskMaxArticles()); d_iskMaxKB->setValue(d->diskMaxKBytes()); } KNConfig::CacheWidget::~CacheWidget() { } void KNConfig::CacheWidget::apply() { d_ata->m_emMaxArt=m_emMaxArt->value(); d_ata->m_emMaxKB=m_emMaxKB->value(); d_ata->d_iskMaxArt=d_iskMaxArt->value(); d_ata->d_iskMaxKB=d_iskMaxKB->value(); d_ata->setDirty(true); } */ //------------------------ #include "knconfigwidgets.moc"