kmail Library API Documentation

signatureconfigurator.cpp

00001 /* -*- c++ -*- 00002 signatureconfigurator.cpp 00003 00004 KMail, the KDE mail client. 00005 Copyright (c) 2002 the KMail authors. 00006 See file AUTHORS for details 00007 00008 This program is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU General Public License, 00010 version 2.0, as published by the Free Software Foundation. 00011 You should have received a copy of the GNU General Public License 00012 along with this program; if not, write to the Free Software Foundation, 00013 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, US 00014 */ 00015 00016 #ifdef HAVE_CONFIG_H 00017 #include <config.h> 00018 #endif 00019 00020 #include "signatureconfigurator.h" 00021 00022 #include <klocale.h> 00023 #include <kdialog.h> 00024 #include <klineedit.h> 00025 #include <kurlrequester.h> 00026 #include <kshellcompletion.h> 00027 #include <krun.h> 00028 00029 #include <qlabel.h> 00030 #include <qlayout.h> 00031 #include <qcheckbox.h> 00032 #include <qcombobox.h> 00033 #include <qwidgetstack.h> 00034 #include <qtextedit.h> 00035 00036 #include <assert.h> 00037 00038 using namespace KMail; 00039 00040 namespace KMail { 00041 00042 SignatureConfigurator::SignatureConfigurator( QWidget * parent, const char * name ) 00043 : QWidget( parent, name ) 00044 { 00045 // tmp. vars: 00046 QLabel * label; 00047 QWidget * page; 00048 QHBoxLayout * hlay; 00049 QVBoxLayout * vlay; 00050 QVBoxLayout * page_vlay; 00051 00052 vlay = new QVBoxLayout( this, 0, KDialog::spacingHint(), "main layout" ); 00053 00054 // "enable signatue" checkbox: 00055 mEnableCheck = new QCheckBox( i18n("&Enable signature"), this ); 00056 vlay->addWidget( mEnableCheck ); 00057 00058 // "obtain signature text from" combo and label: 00059 hlay = new QHBoxLayout( vlay ); // inherits spacing 00060 mSourceCombo = new QComboBox( false, this ); 00061 mSourceCombo->setEnabled( false ); // since !mEnableCheck->isChecked() 00062 mSourceCombo->insertStringList( QStringList() 00063 << i18n("continuation of \"obtain signature text from\"", 00064 "File") 00065 << i18n("continuation of \"obtain signature text from\"", 00066 "Output of Command") 00067 << i18n("continuation of \"obtain signature text from\"", 00068 "Input Field Below") ); 00069 label = new QLabel( mSourceCombo, 00070 i18n("Obtain signature &text from:"), this ); 00071 label->setEnabled( false ); // since !mEnableCheck->isChecked() 00072 hlay->addWidget( label ); 00073 hlay->addWidget( mSourceCombo, 1 ); 00074 00075 // widget stack that is controlled by the source combo: 00076 QWidgetStack * widgetStack = new QWidgetStack( this ); 00077 widgetStack->setEnabled( false ); // since !mEnableCheck->isChecked() 00078 vlay->addWidget( widgetStack, 1 ); 00079 connect( mSourceCombo, SIGNAL(highlighted(int)), 00080 widgetStack, SLOT(raiseWidget(int)) ); 00081 // connects for the enabling of the widgets depending on 00082 // signatureEnabled: 00083 connect( mEnableCheck, SIGNAL(toggled(bool)), 00084 mSourceCombo, SLOT(setEnabled(bool)) ); 00085 connect( mEnableCheck, SIGNAL(toggled(bool)), 00086 widgetStack, SLOT(setEnabled(bool)) ); 00087 connect( mEnableCheck, SIGNAL(toggled(bool)), 00088 label, SLOT(setEnabled(bool)) ); 00089 // The focus might be still in the widget that is disabled 00090 connect( mEnableCheck, SIGNAL(clicked()), 00091 mEnableCheck, SLOT(setFocus()) ); 00092 00093 // page 0: "signature file" requester, label, "edit file" button: 00094 int pageno = 0; 00095 page = new QWidget( widgetStack ); 00096 widgetStack->addWidget( page, pageno ); // force sequential numbers (play safe) 00097 page_vlay = new QVBoxLayout( page, 0, KDialog::spacingHint() ); 00098 hlay = new QHBoxLayout( page_vlay ); // inherits spacing 00099 mFileRequester = new KURLRequester( page ); 00100 hlay->addWidget( new QLabel( mFileRequester, 00101 i18n("S&pecify file:"), page ) ); 00102 hlay->addWidget( mFileRequester, 1 ); 00103 mFileRequester->button()->setAutoDefault( false ); 00104 connect( mFileRequester, SIGNAL(textChanged(const QString &)), 00105 this, SLOT(slotEnableEditButton(const QString &)) ); 00106 mEditButton = new QPushButton( i18n("Edit &File"), page ); 00107 connect( mEditButton, SIGNAL(clicked()), SLOT(slotEdit()) ); 00108 mEditButton->setAutoDefault( false ); 00109 mEditButton->setEnabled( false ); // initially nothing to edit 00110 hlay->addWidget( mEditButton ); 00111 page_vlay->addStretch( 1 ); // spacer 00112 00113 // page 1: "signature command" requester and label: 00114 ++pageno; 00115 page = new QWidget( widgetStack ); 00116 widgetStack->addWidget( page, pageno ); 00117 page_vlay = new QVBoxLayout( page, 0, KDialog::spacingHint() ); 00118 hlay = new QHBoxLayout( page_vlay ); // inherits spacing 00119 mCommandEdit = new KLineEdit( page ); 00120 mCommandEdit->setCompletionObject( new KShellCompletion() ); 00121 mCommandEdit->setAutoDeleteCompletionObject( true ); 00122 hlay->addWidget( new QLabel( mCommandEdit, 00123 i18n("S&pecify command:"), page ) ); 00124 hlay->addWidget( mCommandEdit, 1 ); 00125 page_vlay->addStretch( 1 ); // spacer 00126 00127 // page 2: input field for direct entering: 00128 ++pageno; 00129 mTextEdit = new QTextEdit( widgetStack ); 00130 widgetStack->addWidget( mTextEdit, pageno ); 00131 mTextEdit->setFont( KGlobalSettings::fixedFont() ); 00132 mTextEdit->setWordWrap( QTextEdit::NoWrap ); 00133 mTextEdit->setTextFormat( Qt::PlainText ); 00134 00135 widgetStack->raiseWidget( 0 ); // since mSourceCombo->currentItem() == 0 00136 00137 } 00138 00139 SignatureConfigurator::~SignatureConfigurator() { 00140 00141 } 00142 00143 bool SignatureConfigurator::isSignatureEnabled() const { 00144 return mEnableCheck->isChecked(); 00145 } 00146 00147 void SignatureConfigurator::setSignatureEnabled( bool enable ) { 00148 mEnableCheck->setChecked( enable ); 00149 } 00150 00151 Signature::Type SignatureConfigurator::signatureType() const { 00152 if ( !isSignatureEnabled() ) return Signature::Disabled; 00153 00154 switch ( mSourceCombo->currentItem() ) { 00155 case 0: return Signature::FromFile; 00156 case 1: return Signature::FromCommand; 00157 case 2: return Signature::Inlined; 00158 default: return Signature::Disabled; 00159 } 00160 } 00161 00162 void SignatureConfigurator::setSignatureType( Signature::Type type ) { 00163 setSignatureEnabled( type != Signature::Disabled ); 00164 00165 int idx = 0; 00166 switch( type ) { 00167 case Signature::Inlined: idx = 2; break; 00168 case Signature::FromCommand: idx = 1; break; 00169 case Signature::FromFile: 00170 default: idx = 0; break; 00171 }; 00172 00173 mSourceCombo->setCurrentItem( idx ); 00174 } 00175 00176 QString SignatureConfigurator::inlineText() const { 00177 return mTextEdit->text(); 00178 } 00179 00180 void SignatureConfigurator::setInlineText( const QString & text ) { 00181 mTextEdit->setText( text ); 00182 } 00183 00184 QString SignatureConfigurator::fileURL() const { 00185 return mFileRequester->url(); 00186 } 00187 00188 void SignatureConfigurator::setFileURL( const QString & url ) { 00189 mFileRequester->setURL( url ); 00190 } 00191 00192 QString SignatureConfigurator::commandURL() const { 00193 return mCommandEdit->text(); 00194 } 00195 00196 void SignatureConfigurator::setCommandURL( const QString & url ) { 00197 mCommandEdit->setText( url ); 00198 } 00199 00200 00201 Signature SignatureConfigurator::signature() const { 00202 switch ( signatureType() ) { 00203 case Signature::Inlined: 00204 return Signature( inlineText() ); 00205 case Signature::FromCommand: 00206 return Signature( commandURL(), true ); 00207 case Signature::FromFile: 00208 return Signature( fileURL(), false ); 00209 case Signature::Disabled: 00210 default: 00211 return Signature(); 00212 }; 00213 } 00214 00215 void SignatureConfigurator::setSignature( const Signature & sig ) { 00216 setSignatureType( sig.type() ); 00217 if ( sig.type() == Signature::Inlined ) 00218 setInlineText( sig.text() ); 00219 else 00220 setInlineText( QString::null ); 00221 if ( sig.type() == Signature::FromFile ) 00222 setFileURL( sig.url() ); 00223 else 00224 setFileURL( QString::null ); 00225 if ( sig.type() == Signature::FromCommand ) 00226 setCommandURL( sig.url() ); 00227 else 00228 setCommandURL( QString::null ); 00229 } 00230 00231 void SignatureConfigurator::slotEnableEditButton( const QString & url ) { 00232 mEditButton->setDisabled( url.stripWhiteSpace().isEmpty() ); 00233 } 00234 00235 void SignatureConfigurator::slotEdit() { 00236 QString url = mFileRequester->url().stripWhiteSpace(); 00237 // slotEnableEditButton should prevent this assert from being hit: 00238 assert( !url.isEmpty() ); 00239 00240 (void)KRun::runURL( KURL( url ), QString::fromLatin1("text/plain") ); 00241 } 00242 00243 } // namespace KMail 00244 00245 #include "signatureconfigurator.moc"
KDE Logo
This file is part of the documentation for kmail Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Jul 28 23:58:04 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003