00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "configfilter.h"
00019
00020 K_PLUGIN_FACTORY( ConfigFilterFactory, registerPlugin<ConfigFilter>(); )
00021 K_EXPORT_PLUGIN( ConfigFilterFactory( "kcm_kshowmailconfigfilter" ) )
00022
00023 ConfigFilter::ConfigFilter( QWidget * parent, const QVariantList & args )
00024 : KCModule( ConfigFilterFactory::componentData(), parent, args )
00025 {
00026
00027
00028
00029
00030 QVBoxLayout* layMain = new QVBoxLayout( this );
00031
00032
00033 chkActivateFilter = new QCheckBox( i18nc( "@option:check", "Activate Filter" ), this );
00034 layMain->addWidget( chkActivateFilter );
00035 chkActivateFilter->setToolTip( i18nc( "@info:tooltip", "Check to activate the header filter." ) );
00036 connect( chkActivateFilter, SIGNAL( toggled( bool ) ), this, SLOT( slotFilterActiveToggled( bool ) ) );
00037 connect( chkActivateFilter, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) );
00038
00039
00040
00041 gboxSenderLists = new QGroupBox( i18nc( "@title:group", "First Check: Sender Lists" ), this );
00042 QHBoxLayout* laySender = new QHBoxLayout();
00043 gboxSenderLists->setLayout( laySender );
00044 layMain->addWidget( gboxSenderLists );
00045
00046 KIcon picWhiteList = KIcon( KStandardDirs::locate( "data", "kshowmail/pics/button_whitelist.png" ) );
00047 btnOpenWhitelist = new KPushButton( picWhiteList, i18nc( "@action:button opens the dialog to edit the whitelist", "Whitelist"), gboxSenderLists );
00048 btnOpenWhitelist->setToolTip( i18nc( "@info:tooltip", "Click here to edit the list of senders whose mails shall pass the filter." ) );
00049 laySender->addWidget( btnOpenWhitelist );
00050 laySender->setStretchFactor( btnOpenWhitelist, 3 );
00051 btnOpenWhitelist->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) );
00052 connect( btnOpenWhitelist, SIGNAL( clicked() ), this, SLOT( slotOpenWhitelist() ) );
00053
00054 KIcon picBlackList = KIcon( KStandardDirs::locate( "data", "kshowmail/pics/button_blacklist.png" ) );
00055 btnOpenBlacklist = new KPushButton( picBlackList, i18nc( "@action:button opens the dialog to edit the blacklist", "Blacklist" ), gboxSenderLists );
00056 btnOpenBlacklist->setToolTip( i18nc( "@info:tooltip", "Click here to edit the list of senders whose mails shall be deleted or marked." ) );
00057 laySender->addWidget( btnOpenBlacklist );
00058 laySender->setStretchFactor( btnOpenBlacklist, 3 );
00059 btnOpenBlacklist->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) );
00060 connect( btnOpenBlacklist, SIGNAL( clicked() ), this, SLOT( slotOpenBlacklist() ) );
00061
00062 laySender->insertStretch( 0, 2 );
00063 laySender->insertStretch( 2, 2 );
00064 laySender->insertStretch( 4, 2 );
00065
00066
00067
00068 gboxFilters = new QGroupBox( i18nc( "@title:group", "Second Check: Filters" ), this );
00069 QHBoxLayout* layFilters = new QHBoxLayout();
00070 gboxFilters->setLayout( layFilters );
00071 layMain->addWidget( gboxFilters );
00072
00073 listFilters = new QTreeWidget( gboxFilters );
00074 listFilters->setColumnCount( 3 );
00075 QStringList labels;
00076 labels << i18nc( "@title:column number of the filter", "No.") << i18nc( "@title:column filter name", "Name" ) << i18nc( "@title:column filter action", "Action" );
00077 listFilters->setHeaderLabels( labels ),
00078 layFilters->addWidget( listFilters );
00079 listFilters->setIndentation( 0 );
00080 listFilters->sortItems( 1, Qt::AscendingOrder );
00081 listFilters->setAllColumnsShowFocus( true );
00082
00083 QVBoxLayout* layFiltersButtons = new QVBoxLayout();
00084 layFilters->addLayout( layFiltersButtons );
00085 btnAdd = new KPushButton( KStandardGuiItem::add(), gboxFilters );
00086 btnEdit = new KPushButton( KStandardGuiItem::configure(), gboxFilters );
00087 btnRemove = new KPushButton( KStandardGuiItem::remove(), gboxFilters );
00088 btnMoveTop = new KPushButton( KGuiItem( "", "go-top", i18nc( "@info:tooltip", "Moves the selected filter at the top" ) ), gboxFilters );
00089 btnMoveUp = new KPushButton( KGuiItem( "", "go-up", i18nc( "@info:tooltip", "Moves the selected filter up" ) ), gboxFilters );
00090 btnMoveDown = new KPushButton( KGuiItem( "", "go-down", i18nc( "@info:tooltip", "Moves the selected filter down" ) ), gboxFilters );
00091 btnMoveBottom = new KPushButton( KGuiItem( "", "go-bottom", i18nc( "@info:tooltip", "Moves the selected filter to the bottom" ) ), gboxFilters );
00092 btnAdd->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum );
00093 btnEdit->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum );
00094 btnRemove->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum );
00095 btnMoveTop->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum );
00096 btnMoveUp->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum );
00097 btnMoveDown->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum );
00098 btnMoveBottom->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum );
00099 layFiltersButtons->addWidget( btnAdd );
00100 layFiltersButtons->addWidget( btnEdit );
00101 layFiltersButtons->addWidget( btnRemove );
00102 layFiltersButtons->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ) );
00103 layFiltersButtons->addWidget( btnMoveTop );
00104 layFiltersButtons->addWidget( btnMoveUp );
00105 layFiltersButtons->addWidget( btnMoveDown );
00106 layFiltersButtons->addWidget( btnMoveBottom );
00107 connect( btnAdd, SIGNAL( clicked() ), this, SLOT( slotAdd() ) );
00108 connect( btnEdit, SIGNAL( clicked() ), this, SLOT( slotEdit() ) );
00109 connect( btnRemove, SIGNAL( clicked() ), this, SLOT( slotRemove() ) );
00110 connect( btnMoveTop, SIGNAL( clicked() ), this, SLOT( slotMoveTop() ) );
00111 connect( btnMoveBottom, SIGNAL( clicked() ), this, SLOT( slotMoveBottom() ) );
00112 connect( btnMoveUp, SIGNAL( clicked() ), this, SLOT( slotMoveUp() ) );
00113 connect( btnMoveDown, SIGNAL( clicked() ), this, SLOT( slotMoveDown() ) );
00114
00115
00116
00117
00118 gboxOthers = new QGroupBox( i18nc( "@title:group", "Third Check: Action for all others" ), this );
00119 QHBoxLayout* layOthers = new QHBoxLayout( );
00120 gboxOthers->setLayout( layOthers );
00121 layMain->addWidget( gboxOthers );
00122
00123
00124 cmbActionOthers = new KComboBox( gboxOthers );
00125 cmbActionOthers->setToolTip( i18nc( "@info:tooltip", "Choose the action for all mails which are not filtered by the steps before." ) );
00126 layOthers->addWidget( cmbActionOthers );
00127 connect( cmbActionOthers, SIGNAL( activated( int ) ), this, SLOT( slotOtherActionChanged( int ) ) );
00128 connect( cmbActionOthers, SIGNAL( activated( int ) ), this, SLOT( slotChanged() ) );
00129
00130
00131 cmbActionOthers->insertItem( ID_COMBO_FILTER_OTHERS_ACTION_PASS, i18nc( "@item:inlistbox show the filtered mail", "Show" ) );
00132 cmbActionOthers->insertItem( ID_COMBO_FILTER_OTHERS_ACTION_DELETE, i18nc( "@item:inlistbox delete the filtered mail", "Delete" ) );
00133 cmbActionOthers->insertItem( ID_COMBO_FILTER_OTHERS_ACTION_MARK, i18nc( "@item:inlistbox mark the filtered mail", "Mark" ) );
00134 cmbActionOthers->insertItem( ID_COMBO_FILTER_OTHERS_ACTION_MOVE, i18nc( "@item:inlistbox write the filtered mail into a mailbox", "Move" ) );
00135 cmbActionOthers->insertItem( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK, i18nc( "@item:inlistbox check the filtered mail for spam", "Spamcheck" ) );
00136 cmbActionOthers->insertItem( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE, i18nc( "@item:inlistbox ignore the filtered mail", "Ignore" ) );
00137
00138
00139 txtMailbox = new KLineEdit( gboxOthers );
00140 layOthers->addWidget( txtMailbox );
00141 connect( txtMailbox, SIGNAL( textChanged( const QString & ) ), this, SLOT( slotChanged() ) );
00142
00143
00144 btnMailboxWizard= new KPushButton( KGuiItem( QString(), "tools-wizard" ), gboxOthers );
00145 btnMailboxWizard->setToolTip( i18nc( "@info:tooltip", "Choose the mailbox" ) );
00146 layOthers->addWidget( btnMailboxWizard );
00147 connect( btnMailboxWizard, SIGNAL( clicked() ), this, SLOT( slotOpenMailBoxWizard() ) );
00148
00149
00150 switch( DEFAULT_FILTER_OTHERS_ACTION )
00151 {
00152 case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break;
00153 case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break;
00154 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break;
00155 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break;
00156 case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break;
00157 case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break;
00158 }
00159 chkActivateFilter->setChecked( DEFAULT_FILTER_ACTIVE );
00160
00161
00162
00163 gBoxExImport = new QGroupBox( i18nc( "@title:group the title of the group box for export and import the filter settings", "Export/Import filter settings" ), this );
00164 QHBoxLayout* layExImport = new QHBoxLayout( );
00165 gBoxExImport->setLayout( layExImport );
00166 layMain->addWidget( gBoxExImport );
00167
00168 KIcon picExport = KIcon( KStandardDirs::locate( "data", "kshowmail/pics/export.png" ) );
00169 btnExport = new KPushButton( picExport, i18nc( "@action:button exports the filter settings ", "Export"), gBoxExImport );
00170 btnExport->setToolTip( i18nc( "@info:tooltip", "Click here to export the filter settings." ) );
00171 layExImport->addWidget( btnExport );
00172 layExImport->setStretchFactor( btnExport, 3 );
00173 btnExport->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) );
00174 connect( btnExport, SIGNAL( clicked() ), this, SLOT( slotExport() ) );
00175
00176 KIcon picImport = KIcon( KStandardDirs::locate( "data", "kshowmail/pics/import.png" ) );
00177 btnImport = new KPushButton( picImport, i18nc( "@action:button imports the filter settings ", "Import"), gBoxExImport );
00178 btnImport->setToolTip( i18nc( "@info:tooltip", "Click here to import the filter settings." ) );
00179 layExImport->addWidget( btnImport );
00180 layExImport->setStretchFactor( btnImport, 3 );
00181 btnImport->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) );
00182 connect( btnImport, SIGNAL( clicked() ), this, SLOT( slotImport() ) );
00183
00184 layExImport->insertStretch( 0, 2 );
00185 layExImport->insertStretch( 2, 2 );
00186 layExImport->insertStretch( 4, 2 );
00187
00188
00189
00190
00191 slotOtherActionChanged( cmbActionOthers->currentIndex() );
00192 slotFilterActiveToggled( DEFAULT_FILTER_ACTIVE );
00193
00194
00195 config = KGlobal::config();
00196
00197
00198
00199 lastFilterNumber = 0;
00200
00201 setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
00202
00203 }
00204
00205
00206 ConfigFilter::~ConfigFilter()
00207 {
00208 }
00209
00210 void ConfigFilter::load( )
00211 {
00212 KConfigGroup* configFilter = new KConfigGroup( config, CONFIG_GROUP_FILTER );
00213
00214
00215 chkActivateFilter->setChecked( configFilter->readEntry( CONFIG_ENTRY_FILTER_ACTIVE, DEFAULT_FILTER_ACTIVE ) );
00216 slotFilterActiveToggled( chkActivateFilter->isChecked() );
00217
00218
00219 blacklist = configFilter->readEntry( CONFIG_ENTRY_FILTER_BLACKLIST, QStringList() );
00220 whitelist = configFilter->readEntry( CONFIG_ENTRY_FILTER_WHITELIST, QStringList() );
00221 blacklistAction = configFilter->readEntry( CONFIG_ENTRY_FILTER_BLACKLIST_ACTION, DEFAULT_FILTER_BLACKLIST_ACTION );
00222
00223
00224 switch( configFilter->readEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ) )
00225 {
00226 case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break;
00227 case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break;
00228 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break;
00229 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break;
00230 case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break;
00231 case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break;
00232 }
00233
00234
00235 if( configFilter->readEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ) == CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE )
00236 txtMailbox->setText( configFilter->readEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX, DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) );
00237 else
00238 txtMailbox->clear();
00239
00240
00241 slotOtherActionChanged( cmbActionOthers->currentIndex() );
00242
00243
00244 listFilters->clear();
00245
00246
00247 uint numFilters = configFilter->readEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, 0 );
00248
00249
00250 for( uint ctr = 1; ctr <= numFilters; ctr++ )
00251 {
00252
00253 FilterSetupItem* item = new FilterSetupItem( listFilters, ctr );
00254
00255
00256 item->load();
00257 }
00258
00259
00260 lastFilterNumber = numFilters;
00261
00262 delete configFilter;
00263 }
00264
00265 void ConfigFilter::defaults( )
00266 {
00267 chkActivateFilter->setChecked( DEFAULT_FILTER_ACTIVE );
00268 slotFilterActiveToggled( chkActivateFilter->isChecked() );
00269
00270
00271 blacklist = QStringList();
00272 whitelist = QStringList();
00273 blacklistAction = DEFAULT_FILTER_BLACKLIST_ACTION;
00274
00275 switch( DEFAULT_FILTER_OTHERS_ACTION )
00276 {
00277 case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break;
00278 case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break;
00279 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break;
00280 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break;
00281 case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break;
00282 case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break;
00283 }
00284
00285 if( DEFAULT_FILTER_OTHERS_ACTION == CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE )
00286 txtMailbox->setText( QString( DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) );
00287 else
00288 txtMailbox->clear();
00289
00290
00291 slotOtherActionChanged( cmbActionOthers->currentIndex() );
00292
00293 slotChanged();
00294 }
00295
00296 void ConfigFilter::save( )
00297 {
00298 KConfigGroup* configFilter = new KConfigGroup( config, CONFIG_GROUP_FILTER );
00299
00300
00301 configFilter->writeEntry( CONFIG_ENTRY_FILTER_ACTIVE, chkActivateFilter->isChecked() );
00302
00303
00304 configFilter->writeEntry( CONFIG_ENTRY_FILTER_BLACKLIST, blacklist );
00305 configFilter->writeEntry( CONFIG_ENTRY_FILTER_WHITELIST, whitelist );
00306 configFilter->writeEntry( CONFIG_ENTRY_FILTER_BLACKLIST_ACTION, blacklistAction );
00307
00308
00309 switch( cmbActionOthers->currentIndex() )
00310 {
00311 case ID_COMBO_FILTER_OTHERS_ACTION_PASS : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS ); break;
00312 case ID_COMBO_FILTER_OTHERS_ACTION_DELETE : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE ); break;
00313 case ID_COMBO_FILTER_OTHERS_ACTION_MARK : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK ); break;
00314 case ID_COMBO_FILTER_OTHERS_ACTION_MOVE : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE ); break;
00315 case ID_COMBO_FILTER_OTHERS_ACTION_IGNORE : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE ); break;
00316 case ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK ); break;
00317 default : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ); break;
00318 }
00319
00320
00321 if( cmbActionOthers->currentIndex() == ID_COMBO_FILTER_OTHERS_ACTION_MOVE )
00322 {
00323 configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX, txtMailbox->text() );
00324 }
00325 else
00326 {
00327 configFilter->deleteEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX );
00328 }
00329
00330
00331 uint oldNumFilter = configFilter->readEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, 0 );
00332
00333
00334 configFilter->writeEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, lastFilterNumber );
00335
00336
00337 if( oldNumFilter > lastFilterNumber )
00338 {
00339 for( uint ctr = lastFilterNumber + 1; ctr <= oldNumFilter; ctr++ )
00340 {
00341 config->deleteGroup( QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( ctr ) );
00342 }
00343 }
00344
00345
00346 QTreeWidgetItemIterator it( listFilters );
00347
00348
00349 while( *it )
00350 {
00351 ( (FilterSetupItem*)*it)->save();
00352
00353
00354 ++it;
00355 }
00356
00357 config->sync();
00358 }
00359
00360 void ConfigFilter::slotChanged( )
00361 {
00362 KCModule::changed();
00363 }
00364
00365 void ConfigFilter::slotOpenWhitelist( )
00366 {
00367
00368 QPointer<SenderListDialog> dlg = new SenderListDialog( this, SenderListDialog::White, whitelist );
00369 int ret = dlg->exec();
00370 if( ret == QDialog::Accepted ) {
00371 whitelist = dlg->getList();
00372 slotChanged();
00373 }
00374
00375
00376 delete dlg;
00377 }
00378
00379 void ConfigFilter::slotOpenBlacklist( )
00380 {
00381
00382 QPointer<SenderListDialog> dlg = new SenderListDialog( this, SenderListDialog::Black, blacklist, blacklistAction );
00383 int ret = dlg->exec();
00384 if( ret == QDialog::Accepted ) {
00385 blacklist = dlg->getList();
00386 blacklistAction = dlg->getBlacklistAction();
00387 slotChanged();
00388 }
00389
00390
00391 delete dlg;
00392 }
00393
00394 void ConfigFilter::slotAdd( )
00395 {
00396
00397 FilterSetupItem* item = new FilterSetupItem( listFilters , lastFilterNumber + 1 );
00398
00399
00400 FilterSetupDialog* dlg = new FilterSetupDialog( this, item );
00401 int res = dlg->exec();
00402
00403 if( res == KDialog::Accepted )
00404 {
00405
00406 slotChanged();
00407
00408
00409 lastFilterNumber++;
00410 }
00411 else
00412
00413 delete item;
00414
00415
00416 delete dlg;
00417
00418
00419 listFilters->sortItems( 0, Qt::AscendingOrder );
00420
00421 }
00422
00423 void ConfigFilter::slotEdit( )
00424 {
00425
00426 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00427 if( items.isEmpty() ) return;
00428
00429 FilterSetupItem* item = (FilterSetupItem*)items.first();
00430
00431
00432 if( item == NULL ) return;
00433
00434
00435 QPointer<FilterSetupDialog> dlg = new FilterSetupDialog( this, item );
00436 int res = dlg->exec();
00437
00438
00439 if( res == KDialog::Accepted )
00440 slotChanged();
00441
00442
00443 delete dlg;
00444
00445 }
00446
00447 void ConfigFilter::slotRemove( )
00448 {
00449
00450 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00451 if( items.isEmpty() ) return;
00452
00453 FilterSetupItem* item = (FilterSetupItem*)items.first();
00454
00455 if( item != NULL )
00456 {
00457
00458 uint num = item->getNumber();
00459
00460
00461 delete item;
00462
00463
00464 decreaseNumbers( num + 1 );
00465
00466
00467 lastFilterNumber--;
00468
00469
00470 slotChanged();
00471
00472
00473 listFilters->sortItems( 0, Qt::AscendingOrder );
00474
00475 }
00476 }
00477
00478 void ConfigFilter::slotOtherActionChanged( int index )
00479 {
00480 switch( index )
00481 {
00482 case ID_COMBO_FILTER_OTHERS_ACTION_MOVE : txtMailbox->setEnabled( true );
00483 if( txtMailbox->text() == "" ) txtMailbox->setText( DEFAULT_FILTER_ACTION_MOVE_MAILBOX );
00484 btnMailboxWizard->setHidden( false );
00485 break;
00486 default : txtMailbox->setEnabled( false );
00487 btnMailboxWizard->setHidden( true );
00488 break;
00489 }
00490 }
00491
00492 void ConfigFilter::decreaseNumbers( uint number )
00493 {
00494
00495 QTreeWidgetItemIterator it( listFilters );
00496
00497
00498 while( *it )
00499 {
00500
00501 uint curNumber = ( (FilterSetupItem*)*it)->getNumber();
00502
00503
00504 if( curNumber >= number && curNumber > 0 )
00505 ( (FilterSetupItem*)*it)->setNumber( curNumber - 1 );
00506
00507
00508 ++it;
00509 }
00510 }
00511
00512 void ConfigFilter::slotMoveTop( )
00513 {
00514
00515 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00516 if( items.isEmpty() ) return;
00517
00518 FilterSetupItem* item = (FilterSetupItem*)items.first();
00519
00520 if( item != NULL )
00521 {
00522
00523 uint num = item->getNumber();
00524
00525 if( num > 1 )
00526 {
00527
00528 item->setNumber( 0 );
00529
00530
00531 decreaseNumbers( num + 1 );
00532
00533
00534 QTreeWidgetItemIterator it( listFilters );
00535
00536 while( *it )
00537 {
00538 uint curNumber = ( (FilterSetupItem*)*it )->getNumber();
00539 ( (FilterSetupItem*)*it )->setNumber( curNumber + 1 );
00540
00541 ++it;
00542 }
00543
00544
00545
00546 slotChanged();
00547
00548
00549 listFilters->sortItems( 0, Qt::AscendingOrder );
00550
00551
00552 }
00553 }
00554
00555
00556 }
00557
00558 void ConfigFilter::slotMoveBottom( )
00559 {
00560
00561 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00562 if( items.isEmpty() ) return;
00563
00564 FilterSetupItem* item = (FilterSetupItem*)items.first();
00565
00566 if( item != NULL )
00567 {
00568
00569 uint num = item->getNumber();
00570
00571 if( num < lastFilterNumber )
00572 {
00573
00574 item->setNumber( lastFilterNumber + 1 );
00575
00576
00577 decreaseNumbers( num + 1 );
00578
00579
00580
00581
00582 slotChanged();
00583
00584
00585 listFilters->sortItems( 0, Qt::AscendingOrder );
00586 }
00587
00588 }
00589 }
00590
00591 void ConfigFilter::slotMoveUp( )
00592 {
00593
00594 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00595 if( items.isEmpty() ) return;
00596
00597 FilterSetupItem* item = (FilterSetupItem*)items.first();
00598
00599 if( item != NULL )
00600 {
00601
00602 uint num = item->getNumber();
00603
00604 if( num > 1 )
00605 {
00606
00607 FilterSetupItem* itemBefore = getFilterItem( num - 1 );
00608
00609 if( itemBefore != NULL )
00610 {
00611
00612 item->setNumber( num - 1 );
00613 itemBefore->setNumber( num );
00614
00615
00616 slotChanged();
00617
00618
00619 listFilters->sortItems( 0, Qt::AscendingOrder );
00620
00621 }
00622 }
00623
00624 }
00625 }
00626
00627 void ConfigFilter::slotMoveDown( )
00628 {
00629
00630 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00631 if( items.isEmpty() ) return;
00632
00633 FilterSetupItem* item = (FilterSetupItem*)items.first();
00634
00635 if( item != NULL )
00636 {
00637
00638 uint num = item->getNumber();
00639
00640 if( num < lastFilterNumber )
00641 {
00642
00643 FilterSetupItem* itemBehind = getFilterItem( num + 1 );
00644
00645 if( itemBehind != NULL )
00646 {
00647
00648 item->setNumber( num + 1 );
00649 itemBehind->setNumber( num );
00650
00651
00652 slotChanged();
00653
00654
00655 listFilters->sortItems( 0, Qt::AscendingOrder );
00656
00657 }
00658 }
00659 }
00660 }
00661
00662 FilterSetupItem* ConfigFilter::getFilterItem( uint num )
00663 {
00664 FilterSetupItem* foundItem = NULL;
00665 bool found = false;
00666
00667
00668 QTreeWidgetItemIterator it( listFilters );
00669
00670
00671 while( *it && !found )
00672 {
00673
00674 uint curNumber = ( (FilterSetupItem*)*it )->getNumber();
00675
00676
00677 if( curNumber == num )
00678 {
00679 foundItem = (FilterSetupItem*)*it;
00680
00681 found = true;
00682 }
00683
00684 ++it;
00685 }
00686
00687 return foundItem;
00688 }
00689
00690 void ConfigFilter::slotFilterActiveToggled( bool filterOn )
00691 {
00692 gboxSenderLists->setEnabled( filterOn );
00693 gboxFilters->setEnabled( filterOn );
00694 gboxOthers->setEnabled( filterOn );
00695 }
00696
00697 void ConfigFilter::slotOpenMailBoxWizard( )
00698 {
00699 QPointer<MailBoxWizard> wizard = new MailBoxWizard( this );
00700 wizard->setWindowTitle( i18nc( "@title:window", "Mailbox Select" ) );
00701 int res = wizard->exec();
00702
00703 if( res == QDialog::Accepted )
00704 txtMailbox->setText( wizard->getPath() );
00705
00706 delete wizard;
00707
00708 }
00709
00710 void ConfigFilter::slotExport()
00711 {
00712
00713 QString filename = KFileDialog::getSaveFileName( KUrl( "~"), QString(), this, i18nc( "@title:window The title of the dialog to choose the file for filter settings export", "Choose the export file" ) );
00714
00715
00716 KConfig configExport( filename, KConfig::SimpleConfig );
00717
00718
00719 KConfigGroup* configGroupGeneral = new KConfigGroup( &configExport, CONFIG_GROUP_FILTER );
00720
00721
00722 configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_ACTIVE, chkActivateFilter->isChecked() );
00723
00724
00725 configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_BLACKLIST, blacklist );
00726 configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_WHITELIST, whitelist );
00727 configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_BLACKLIST_ACTION, blacklistAction );
00728
00729
00730
00731
00732 switch( cmbActionOthers->currentIndex() )
00733 {
00734 case ID_COMBO_FILTER_OTHERS_ACTION_PASS : configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS ); break;
00735 case ID_COMBO_FILTER_OTHERS_ACTION_DELETE : configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE ); break;
00736 case ID_COMBO_FILTER_OTHERS_ACTION_MARK : configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK ); break;
00737 case ID_COMBO_FILTER_OTHERS_ACTION_MOVE : configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE ); break;
00738 case ID_COMBO_FILTER_OTHERS_ACTION_IGNORE : configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE ); break;
00739 case ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK : configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK ); break;
00740 default : configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ); break;
00741 }
00742
00743
00744 if( cmbActionOthers->currentIndex() == ID_COMBO_FILTER_OTHERS_ACTION_MOVE )
00745 {
00746 configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX, txtMailbox->text() );
00747 }
00748 else
00749 {
00750 configGroupGeneral->deleteEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX );
00751 }
00752
00753
00754 uint oldNumFilter = configGroupGeneral->readEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, 0 );
00755
00756
00757 configGroupGeneral->writeEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, lastFilterNumber );
00758
00759
00760 if( oldNumFilter > lastFilterNumber )
00761 {
00762 for( uint ctr = lastFilterNumber + 1; ctr <= oldNumFilter; ctr++ )
00763 {
00764 configExport.deleteGroup( QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( ctr ) );
00765 }
00766 }
00767
00768
00769
00770
00771 QTreeWidgetItemIterator it( listFilters );
00772
00773
00774 while( *it )
00775 {
00776
00777 FilterSetupItem* item = ( FilterSetupItem*)*it;
00778
00779
00780 QString group;
00781 group = QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( item->getNumber() );
00782
00783
00784 configExport.deleteGroup( group );
00785
00786
00787 KConfigGroup* configGroupFilter = new KConfigGroup( &configExport, group );
00788
00789
00790 configGroupFilter->writeEntry( CONFIG_ENTRY_FILTER_NAME, item->getName() );
00791
00792 if( item->getCriteriaLinkage() == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ALL ||
00793 item->getCriteriaLinkage() == CONFIG_VALUE_FILTER_CRITERIA_LINKAGE_MATCH_ANY )
00794 {
00795 configGroupFilter->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, item->getCriteriaLinkage() );
00796 }
00797 else
00798 {
00799 configGroupFilter->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_LINKAGE, DEFAULT_FILTER_CRITERIA_LINKAGE );
00800 }
00801
00802 if( item->getAction() == CONFIG_VALUE_FILTER_ACTION_PASS ||
00803 item->getAction() == CONFIG_VALUE_FILTER_ACTION_DELETE ||
00804 item->getAction() == CONFIG_VALUE_FILTER_ACTION_MARK ||
00805 item->getAction() == CONFIG_VALUE_FILTER_ACTION_MOVE ||
00806 item->getAction() == CONFIG_VALUE_FILTER_ACTION_IGNORE ||
00807 item->getAction() == CONFIG_VALUE_FILTER_ACTION_SPAMCHECK )
00808 {
00809 configGroupFilter->writeEntry( CONFIG_ENTRY_FILTER_ACTION, item->getAction() );
00810 }
00811 else
00812 {
00813 configGroupFilter->writeEntry( CONFIG_ENTRY_FILTER_ACTION, DEFAULT_FILTER_ACTION );
00814 }
00815
00816
00817 switch( item->getAction() )
00818 {
00819 case CONFIG_VALUE_FILTER_ACTION_MOVE :
00820 configGroupFilter->writeEntry( CONFIG_ENTRY_FILTER_MOVE_MAILBOX, item->getMailBox() );
00821 break;
00822
00823 default: break;
00824 }
00825
00826
00827 FilterCriteriaList_Type criteriaList = item->getCriteriaList();
00828 if( !criteriaList.empty() )
00829 {
00830 configGroupFilter->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, (int)criteriaList.size() );
00831
00832 int ctr = 0;
00833 FilterCriteriaList_Type::iterator it;
00834 for( it = criteriaList.begin(); it != criteriaList.end(); ++it )
00835 {
00836 ctr++;
00837
00838 configGroupFilter->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_SOURCE ).arg( ctr ), (*it).source );
00839 configGroupFilter->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CONDITION ).arg( ctr ), (*it).condition );
00840
00841 switch( (*it).source )
00842 {
00843 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM :
00844 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO :
00845 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT :
00846 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER :
00847 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT : configGroupFilter->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), (*it).txtValue );
00848 configGroupFilter->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_CASESENSITIVE ).arg( ctr ), (*it).cs );
00849 break;
00850
00851 case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : configGroupFilter->writeEntry( QString( "%1%2" ).arg( CONFIG_ENTRY_FILTER_CRITERIA_VALUE ).arg( ctr ), (*it).numValue );
00852 break;
00853 }
00854 }
00855 }
00856 else
00857 {
00858 configGroupFilter->writeEntry( CONFIG_ENTRY_FILTER_CRITERIA_NUMBER, 0 );
00859 }
00860
00861 delete configGroupFilter;
00862
00863
00864 ++it;
00865 }
00866
00867 configExport.sync();
00868
00869 delete configGroupGeneral;
00870 }
00871
00872 void ConfigFilter::slotImport()
00873 {
00874
00875 int result = KMessageBox::questionYesNo( this, i18nc( "@info Message in the dialog whether the user really want to import the filter settings.", "Do you really want to import new filter settings? Your old settings will be removed."),
00876 i18nc( "@title:window the title of the dialog whether the user really want to import the filter settings", "Import filter settings" ) );
00877 if( result == KMessageBox::No ) return;
00878
00879
00880 QString filename = KFileDialog::getOpenFileName( KUrl( "~"), QString(), this, i18nc( "@title:window The title of the dialog to choose the file for filter settings import", "Choose the import file" ) );
00881
00882
00883 KConfig configImport( filename, KConfig::SimpleConfig );
00884
00885
00886 KConfigGroup* configGroupGeneral = new KConfigGroup( &configImport, CONFIG_GROUP_FILTER );
00887
00888
00889 chkActivateFilter->setChecked( configGroupGeneral->readEntry( CONFIG_ENTRY_FILTER_ACTIVE, DEFAULT_FILTER_ACTIVE ) );
00890 slotFilterActiveToggled( chkActivateFilter->isChecked() );
00891
00892
00893 blacklist = configGroupGeneral->readEntry( CONFIG_ENTRY_FILTER_BLACKLIST, QStringList() );
00894 whitelist = configGroupGeneral->readEntry( CONFIG_ENTRY_FILTER_WHITELIST, QStringList() );
00895 blacklistAction = configGroupGeneral->readEntry( CONFIG_ENTRY_FILTER_BLACKLIST_ACTION, DEFAULT_FILTER_BLACKLIST_ACTION );
00896
00897
00898 switch( configGroupGeneral->readEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ) )
00899 {
00900 case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break;
00901 case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break;
00902 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break;
00903 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break;
00904 case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break;
00905 case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break;
00906 }
00907
00908
00909 if( configGroupGeneral->readEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ) == CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE )
00910 txtMailbox->setText( configGroupGeneral->readEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX, DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) );
00911 else
00912 txtMailbox->clear();
00913
00914
00915 slotOtherActionChanged( cmbActionOthers->currentIndex() );
00916
00917
00918 listFilters->clear();
00919
00920
00921 uint numFilters = configGroupGeneral->readEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, 0 );
00922
00923
00924 for( uint ctr = 1; ctr <= numFilters; ctr++ )
00925 {
00926
00927 FilterSetupItem* item = new FilterSetupItem( listFilters, ctr );
00928
00929
00930 QString group = QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( ctr );
00931 KConfigGroup* configGroupFilter = new KConfigGroup( &configImport, group );
00932
00933
00934 item->load( configGroupFilter );
00935
00936 delete configGroupFilter;
00937 }
00938
00939
00940 lastFilterNumber = numFilters;
00941
00942
00943 delete configGroupGeneral;
00944
00945 slotChanged();
00946 }
00947
00948
00949 #include "configfilter.moc"