00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
#include "filterlogdlg.h"
00031
#include "filterlog.h"
00032
00033
#include <kdebug.h>
00034
#include <kdeversion.h>
00035
#include <kfiledialog.h>
00036
#include <klocale.h>
00037
#include <kmessagebox.h>
00038
00039
#include <qcheckbox.h>
00040
#include <qlabel.h>
00041
#include <qspinbox.h>
00042
#include <qstringlist.h>
00043
#include <qtextedit.h>
00044
#include <qvbox.h>
00045
#include <qwhatsthis.h>
00046
#include <qvgroupbox.h>
00047
00048
#include <errno.h>
00049
#include <X11/Xlib.h>
00050
#include <X11/Xatom.h>
00051
00052
using namespace KMail;
00053
00054
00055 FilterLogDialog::FilterLogDialog(
QWidget * parent )
00056 : KDialogBase( parent, "FilterLogDlg", false, i18n( "Filter Log Viewer" ),
00057 User1|User2|Close, Close, true, KStdGuiItem::clear(), KStdGuiItem::saveAs() )
00058 {
00059 setWFlags( WDestructiveClose );
00060
QVBox *page = makeVBoxMainWidget();
00061
00062 mTextEdit =
new QTextEdit( page );
00063 mTextEdit->setReadOnly(
true );
00064 mTextEdit->setWordWrap( QTextEdit::NoWrap );
00065 mTextEdit->setTextFormat( QTextEdit::LogText );
00066
00067
QStringList logEntries =
FilterLog::instance()->
getLogEntries();
00068
for ( QStringList::Iterator it = logEntries.begin();
00069 it != logEntries.end(); ++it )
00070 {
00071 mTextEdit->append( *it );
00072 }
00073
00074 mLogActiveBox =
new QCheckBox( i18n(
"&Log filter activities"), page );
00075 mLogActiveBox->setChecked( FilterLog::instance()->isLogging() );
00076 connect( mLogActiveBox, SIGNAL(clicked()),
00077
this, SLOT(slotSwitchLogState(
void)) );
00078 QWhatsThis::add( mLogActiveBox,
00079 i18n(
"You can turn logging of filter activities on and off here. "
00080
"Of course, log data is collected and shown only when logging "
00081
"is turned on. " ) );
00082
00083 mLogDetailsBox =
new QVGroupBox( i18n(
"Logging Details" ), page );
00084 mLogDetailsBox->setEnabled( mLogActiveBox->isChecked() );
00085 connect( mLogActiveBox, SIGNAL( toggled(
bool ) ),
00086 mLogDetailsBox, SLOT( setEnabled(
bool ) ) );
00087
00088 mLogPatternDescBox =
new QCheckBox( i18n(
"Log pattern description"),
00089 mLogDetailsBox );
00090 mLogPatternDescBox->setChecked(
00091 FilterLog::instance()->isContentTypeEnabled( FilterLog::patternDesc ) );
00092 connect( mLogPatternDescBox, SIGNAL(clicked()),
00093
this, SLOT(slotChangeLogDetail(
void)) );
00094
00095
00096
00097
00098 mLogRuleEvaluationBox =
new QCheckBox( i18n(
"Log filter &rule evaluation"),
00099 mLogDetailsBox );
00100 mLogRuleEvaluationBox->setChecked(
00101 FilterLog::instance()->isContentTypeEnabled( FilterLog::ruleResult ) );
00102 connect( mLogRuleEvaluationBox, SIGNAL(clicked()),
00103
this, SLOT(slotChangeLogDetail(
void)) );
00104 QWhatsThis::add( mLogRuleEvaluationBox,
00105 i18n(
"You can control the feedback in the log concerning the "
00106
"evaluation of the filter rules of applied filters: "
00107
"having this option checked will give detailed feedback "
00108
"for each single filter rule; alternatively, only "
00109
"feedback about the result of the evaluation of all rules "
00110
"of a single filter will be given." ) );
00111
00112 mLogPatternResultBox =
new QCheckBox( i18n(
"Log filter pattern evaluation"),
00113 mLogDetailsBox );
00114 mLogPatternResultBox->setChecked(
00115 FilterLog::instance()->isContentTypeEnabled( FilterLog::patternResult ) );
00116 connect( mLogPatternResultBox, SIGNAL(clicked()),
00117
this, SLOT(slotChangeLogDetail(
void)) );
00118
00119
00120
00121
00122 mLogFilterActionBox =
new QCheckBox( i18n(
"Log filter actions"),
00123 mLogDetailsBox );
00124 mLogFilterActionBox->setChecked(
00125 FilterLog::instance()->isContentTypeEnabled( FilterLog::appliedAction ) );
00126 connect( mLogFilterActionBox, SIGNAL(clicked()),
00127
this, SLOT(slotChangeLogDetail(
void)) );
00128
00129
00130
00131
00132
QHBox * hbox =
new QHBox( page );
00133
new QLabel( i18n(
"Log size limit:"), hbox );
00134 mLogMemLimitSpin =
new QSpinBox( hbox );
00135 mLogMemLimitSpin->setMinValue( 1 );
00136 mLogMemLimitSpin->setMaxValue( 1024 * 256 );
00137
00138 mLogMemLimitSpin->setValue( FilterLog::instance()->getMaxLogSize() / 1024 );
00139 mLogMemLimitSpin->setSuffix(
" KB" );
00140 mLogMemLimitSpin->setSpecialValueText( i18n(
"unlimited") );
00141 connect( mLogMemLimitSpin, SIGNAL(valueChanged(
int)),
00142
this, SLOT(slotChangeLogMemLimit(
int)) );
00143 QWhatsThis::add( mLogMemLimitSpin,
00144 i18n(
"Collecting log data uses memory to temporarily store the "
00145
"log data; here you can limit the maximum amount of memory "
00146
"to be used: if the size of the collected log data exceeds "
00147
"this limit then the oldest data will be discarded until "
00148
"the limit is no longer exceeded. " ) );
00149
00150 connect(FilterLog::instance(), SIGNAL(logEntryAdded(
QString)),
00151
this, SLOT(slotLogEntryAdded(
QString)));
00152 connect(FilterLog::instance(), SIGNAL(logShrinked(
void)),
00153
this, SLOT(slotLogShrinked(
void)));
00154 connect(FilterLog::instance(), SIGNAL(logStateChanged(
void)),
00155
this, SLOT(slotLogStateChanged(
void)));
00156
00157 setInitialSize(
QSize( 500, 500 ) );
00158
#if !KDE_IS_VERSION( 3, 2, 91 )
00159
00160
00161
00162 XDeleteProperty( qt_xdisplay(), winId(), XA_WM_TRANSIENT_FOR );
00163
#endif
00164
}
00165
00166
00167
void FilterLogDialog::slotLogEntryAdded(
QString logEntry )
00168 {
00169 mTextEdit->append( logEntry );
00170 }
00171
00172
00173
void FilterLogDialog::slotLogShrinked()
00174 {
00175
00176
00177
if ( mTextEdit->maxLogLines() == -1 )
00178 mTextEdit->setMaxLogLines( mTextEdit->lines() );
00179 }
00180
00181
00182
void FilterLogDialog::slotLogStateChanged()
00183 {
00184 mLogActiveBox->setChecked( FilterLog::instance()->isLogging() );
00185 mLogPatternDescBox->setChecked(
00186 FilterLog::instance()->isContentTypeEnabled( FilterLog::patternDesc ) );
00187 mLogRuleEvaluationBox->setChecked(
00188 FilterLog::instance()->isContentTypeEnabled( FilterLog::ruleResult ) );
00189 mLogPatternResultBox->setChecked(
00190 FilterLog::instance()->isContentTypeEnabled( FilterLog::patternResult ) );
00191 mLogFilterActionBox->setChecked(
00192 FilterLog::instance()->isContentTypeEnabled( FilterLog::appliedAction ) );
00193
00194
00195
int newLogSize =
FilterLog::instance()->
getMaxLogSize() / 1024;
00196
if ( mLogMemLimitSpin->value() != newLogSize )
00197 mLogMemLimitSpin->setValue( newLogSize );
00198 }
00199
00200
00201
void FilterLogDialog::slotChangeLogDetail()
00202 {
00203
if ( mLogPatternDescBox->isChecked() !=
00204
FilterLog::instance()->
isContentTypeEnabled( FilterLog::patternDesc ) )
00205
FilterLog::instance()->
setContentTypeEnabled( FilterLog::patternDesc,
00206 mLogPatternDescBox->isChecked() );
00207
00208
if ( mLogRuleEvaluationBox->isChecked() !=
00209
FilterLog::instance()->
isContentTypeEnabled( FilterLog::ruleResult ) )
00210
FilterLog::instance()->
setContentTypeEnabled( FilterLog::ruleResult,
00211 mLogRuleEvaluationBox->isChecked() );
00212
00213
if ( mLogPatternResultBox->isChecked() !=
00214
FilterLog::instance()->
isContentTypeEnabled( FilterLog::patternResult ) )
00215
FilterLog::instance()->
setContentTypeEnabled( FilterLog::patternResult,
00216 mLogPatternResultBox->isChecked() );
00217
00218
if ( mLogFilterActionBox->isChecked() !=
00219
FilterLog::instance()->
isContentTypeEnabled( FilterLog::appliedAction ) )
00220
FilterLog::instance()->
setContentTypeEnabled( FilterLog::appliedAction,
00221 mLogFilterActionBox->isChecked() );
00222 }
00223
00224
00225
void FilterLogDialog::slotSwitchLogState()
00226 {
00227
FilterLog::instance()->
setLogging( mLogActiveBox->isChecked() );
00228 }
00229
00230
00231
void FilterLogDialog::slotChangeLogMemLimit(
int value )
00232 {
00233
FilterLog::instance()->
setMaxLogSize( value * 1024 );
00234 }
00235
00236
00237
void FilterLogDialog::slotUser1()
00238 {
00239
FilterLog::instance()->
clear();
00240 mTextEdit->clear();
00241 }
00242
00243
00244
void FilterLogDialog::slotUser2()
00245 {
00246
QString fileName;
00247 KFileDialog fdlg( QString::null, QString::null,
this, 0,
true );
00248
00249 fdlg.setMode( KFile::File );
00250 fdlg.setSelection(
"kmail-filter.log" );
00251 fdlg.setOperationMode( KFileDialog::Saving );
00252
if ( fdlg.exec() )
00253 {
00254 fileName = fdlg.selectedFile();
00255
if ( !
FilterLog::instance()->
saveToFile( fileName ) )
00256 {
00257 KMessageBox::error(
this,
00258 i18n(
"Could not write the file %1:\n"
00259
"\"%2\" is the detailed error description." )
00260 .arg( fileName,
00261 QString::fromLocal8Bit( strerror( errno ) ) ),
00262 i18n(
"KMail Error" ) );
00263 }
00264 }
00265 }
00266
00267
00268
#include "filterlogdlg.moc"