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 at the bottm" ) ), 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 slotOtherActionChanged( cmbActionOthers->currentIndex() );
00163 slotFilterActiveToggled( DEFAULT_FILTER_ACTIVE );
00164
00165
00166 config = KGlobal::config();
00167
00168
00169
00170 lastFilterNumber = 0;
00171
00172 }
00173
00174
00175 ConfigFilter::~ConfigFilter()
00176 {
00177 }
00178
00179 void ConfigFilter::load( )
00180 {
00181 KConfigGroup* configFilter = new KConfigGroup( config, CONFIG_GROUP_FILTER );
00182
00183
00184 chkActivateFilter->setChecked( configFilter->readEntry( CONFIG_ENTRY_FILTER_ACTIVE, DEFAULT_FILTER_ACTIVE ) );
00185 slotFilterActiveToggled( chkActivateFilter->isChecked() );
00186
00187
00188 switch( configFilter->readEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ) )
00189 {
00190 case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break;
00191 case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break;
00192 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break;
00193 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break;
00194 case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break;
00195 case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break;
00196 }
00197
00198
00199 if( configFilter->readEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ) == CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE )
00200 txtMailbox->setText( configFilter->readEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX, DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) );
00201 else
00202 txtMailbox->clear();
00203
00204
00205 slotOtherActionChanged( cmbActionOthers->currentIndex() );
00206
00207
00208 listFilters->clear();
00209
00210
00211 uint numFilters = configFilter->readEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, 0 );
00212
00213
00214 for( uint ctr = 1; ctr <= numFilters; ctr++ )
00215 {
00216
00217 FilterSetupItem* item = new FilterSetupItem( listFilters, ctr );
00218
00219
00220 item->load();
00221 }
00222
00223
00224 lastFilterNumber = numFilters;
00225
00226 delete configFilter;
00227 }
00228
00229 void ConfigFilter::defaults( )
00230 {
00231 chkActivateFilter->setChecked( DEFAULT_FILTER_ACTIVE );
00232 slotFilterActiveToggled( chkActivateFilter->isChecked() );
00233
00234 switch( DEFAULT_FILTER_OTHERS_ACTION )
00235 {
00236 case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break;
00237 case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break;
00238 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break;
00239 case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break;
00240 case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break;
00241 case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentIndex( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break;
00242 }
00243
00244 if( DEFAULT_FILTER_OTHERS_ACTION == CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE )
00245 txtMailbox->setText( QString( DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) );
00246 else
00247 txtMailbox->clear();
00248
00249
00250 slotOtherActionChanged( cmbActionOthers->currentIndex() );
00251
00252 slotChanged();
00253 }
00254
00255 void ConfigFilter::save( )
00256 {
00257 KConfigGroup* configFilter = new KConfigGroup( config, CONFIG_GROUP_FILTER );
00258
00259
00260 configFilter->writeEntry( CONFIG_ENTRY_FILTER_ACTIVE, chkActivateFilter->isChecked() );
00261
00262
00263 switch( cmbActionOthers->currentIndex() )
00264 {
00265 case ID_COMBO_FILTER_OTHERS_ACTION_PASS : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS ); break;
00266 case ID_COMBO_FILTER_OTHERS_ACTION_DELETE : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE ); break;
00267 case ID_COMBO_FILTER_OTHERS_ACTION_MARK : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK ); break;
00268 case ID_COMBO_FILTER_OTHERS_ACTION_MOVE : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE ); break;
00269 case ID_COMBO_FILTER_OTHERS_ACTION_IGNORE : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE ); break;
00270 case ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK ); break;
00271 default : configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ); break;
00272 }
00273
00274
00275 if( cmbActionOthers->currentIndex() == ID_COMBO_FILTER_OTHERS_ACTION_MOVE )
00276 {
00277 configFilter->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX, txtMailbox->text() );
00278 }
00279 else
00280 {
00281 configFilter->deleteEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX );
00282 }
00283
00284
00285 uint oldNumFilter = configFilter->readEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, 0 );
00286
00287
00288 configFilter->writeEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, lastFilterNumber );
00289
00290
00291 if( oldNumFilter > lastFilterNumber )
00292 {
00293 for( uint ctr = lastFilterNumber + 1; ctr <= oldNumFilter; ctr++ )
00294 {
00295 config->deleteGroup( QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( ctr ) );
00296 }
00297 }
00298
00299
00300 QTreeWidgetItemIterator it( listFilters );
00301
00302
00303 while( *it )
00304 {
00305 ( (FilterSetupItem*)*it)->save();
00306
00307
00308 ++it;
00309 }
00310
00311 config->sync();
00312 }
00313
00314 void ConfigFilter::slotChanged( )
00315 {
00316 KCModule::changed();
00317 }
00318
00319 void ConfigFilter::slotOpenWhitelist( )
00320 {
00321
00322 QPointer<SenderListDialog> dlg = new SenderListDialog( this, SenderListDialog::White );
00323 dlg->exec();
00324
00325
00326 delete dlg;
00327 }
00328
00329 void ConfigFilter::slotOpenBlacklist( )
00330 {
00331
00332 QPointer<SenderListDialog> dlg = new SenderListDialog( this, SenderListDialog::Black );
00333 dlg->exec();
00334
00335
00336 delete dlg;
00337 }
00338
00339 void ConfigFilter::slotAdd( )
00340 {
00341
00342 FilterSetupItem* item = new FilterSetupItem( listFilters , lastFilterNumber + 1 );
00343
00344
00345 FilterSetupDialog* dlg = new FilterSetupDialog( this, item );
00346 int res = dlg->exec();
00347
00348 if( res == KDialog::Accepted )
00349 {
00350
00351 slotChanged();
00352
00353
00354 lastFilterNumber++;
00355 }
00356 else
00357
00358 delete item;
00359
00360
00361 delete dlg;
00362
00363
00364 listFilters->sortItems( 0, Qt::AscendingOrder );
00365
00366 }
00367
00368 void ConfigFilter::slotEdit( )
00369 {
00370
00371 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00372 if( items.isEmpty() ) return;
00373
00374 FilterSetupItem* item = (FilterSetupItem*)items.first();
00375
00376
00377 if( item == NULL ) return;
00378
00379
00380 QPointer<FilterSetupDialog> dlg = new FilterSetupDialog( this, item );
00381 int res = dlg->exec();
00382
00383
00384 if( res == KDialog::Accepted )
00385 slotChanged();
00386
00387
00388 delete dlg;
00389
00390 }
00391
00392 void ConfigFilter::slotRemove( )
00393 {
00394
00395 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00396 if( items.isEmpty() ) return;
00397
00398 FilterSetupItem* item = (FilterSetupItem*)items.first();
00399
00400 if( item != NULL )
00401 {
00402
00403 uint num = item->getNumber();
00404
00405
00406 delete item;
00407
00408
00409 decreaseNumbers( num + 1 );
00410
00411
00412 lastFilterNumber--;
00413
00414
00415 slotChanged();
00416
00417
00418 listFilters->sortItems( 0, Qt::AscendingOrder );
00419
00420 }
00421 }
00422
00423 void ConfigFilter::slotOtherActionChanged( int index )
00424 {
00425 switch( index )
00426 {
00427 case ID_COMBO_FILTER_OTHERS_ACTION_MOVE : txtMailbox->setEnabled( true );
00428 if( txtMailbox->text() == "" ) txtMailbox->setText( DEFAULT_FILTER_ACTION_MOVE_MAILBOX );
00429 btnMailboxWizard->setHidden( false );
00430 break;
00431 default : txtMailbox->setEnabled( false );
00432 btnMailboxWizard->setHidden( true );
00433 break;
00434 }
00435 }
00436
00437 void ConfigFilter::decreaseNumbers( uint number )
00438 {
00439
00440 QTreeWidgetItemIterator it( listFilters );
00441
00442
00443 while( *it )
00444 {
00445
00446 uint curNumber = ( (FilterSetupItem*)*it)->getNumber();
00447
00448
00449 if( curNumber >= number && curNumber > 0 )
00450 ( (FilterSetupItem*)*it)->setNumber( curNumber - 1 );
00451
00452
00453 ++it;
00454 }
00455 }
00456
00457 void ConfigFilter::slotMoveTop( )
00458 {
00459
00460 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00461 if( items.isEmpty() ) return;
00462
00463 FilterSetupItem* item = (FilterSetupItem*)items.first();
00464
00465 if( item != NULL )
00466 {
00467
00468 uint num = item->getNumber();
00469
00470 if( num > 1 )
00471 {
00472
00473 item->setNumber( 0 );
00474
00475
00476 decreaseNumbers( num + 1 );
00477
00478
00479 QTreeWidgetItemIterator it( listFilters );
00480
00481 while( *it )
00482 {
00483 uint curNumber = ( (FilterSetupItem*)*it )->getNumber();
00484 ( (FilterSetupItem*)*it )->setNumber( curNumber + 1 );
00485
00486 ++it;
00487 }
00488
00489
00490
00491 slotChanged();
00492
00493
00494 listFilters->sortItems( 0, Qt::AscendingOrder );
00495
00496
00497 }
00498 }
00499
00500
00501 }
00502
00503 void ConfigFilter::slotMoveBottom( )
00504 {
00505
00506 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00507 if( items.isEmpty() ) return;
00508
00509 FilterSetupItem* item = (FilterSetupItem*)items.first();
00510
00511 if( item != NULL )
00512 {
00513
00514 uint num = item->getNumber();
00515
00516 if( num < lastFilterNumber )
00517 {
00518
00519 item->setNumber( lastFilterNumber + 1 );
00520
00521
00522 decreaseNumbers( num + 1 );
00523
00524
00525
00526
00527 slotChanged();
00528
00529
00530 listFilters->sortItems( 0, Qt::AscendingOrder );
00531 }
00532
00533 }
00534 }
00535
00536 void ConfigFilter::slotMoveUp( )
00537 {
00538
00539 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00540 if( items.isEmpty() ) return;
00541
00542 FilterSetupItem* item = (FilterSetupItem*)items.first();
00543
00544 if( item != NULL )
00545 {
00546
00547 uint num = item->getNumber();
00548
00549 if( num > 1 )
00550 {
00551
00552 FilterSetupItem* itemBefore = getFilterItem( num - 1 );
00553
00554 if( itemBefore != NULL )
00555 {
00556
00557 item->setNumber( num - 1 );
00558 itemBefore->setNumber( num );
00559
00560
00561 slotChanged();
00562
00563
00564 listFilters->sortItems( 0, Qt::AscendingOrder );
00565
00566 }
00567 }
00568
00569 }
00570 }
00571
00572 void ConfigFilter::slotMoveDown( )
00573 {
00574
00575 QList<QTreeWidgetItem*> items = listFilters->selectedItems();
00576 if( items.isEmpty() ) return;
00577
00578 FilterSetupItem* item = (FilterSetupItem*)items.first();
00579
00580 if( item != NULL )
00581 {
00582
00583 uint num = item->getNumber();
00584
00585 if( num < lastFilterNumber )
00586 {
00587
00588 FilterSetupItem* itemBehind = getFilterItem( num + 1 );
00589
00590 if( itemBehind != NULL )
00591 {
00592
00593 item->setNumber( num + 1 );
00594 itemBehind->setNumber( num );
00595
00596
00597 slotChanged();
00598
00599
00600 listFilters->sortItems( 0, Qt::AscendingOrder );
00601
00602 }
00603 }
00604 }
00605 }
00606
00607 FilterSetupItem* ConfigFilter::getFilterItem( uint num )
00608 {
00609 FilterSetupItem* foundItem = NULL;
00610 bool found = false;
00611
00612
00613 QTreeWidgetItemIterator it( listFilters );
00614
00615
00616 while( *it && !found )
00617 {
00618
00619 uint curNumber = ( (FilterSetupItem*)*it )->getNumber();
00620
00621
00622 if( curNumber == num )
00623 {
00624 foundItem = (FilterSetupItem*)*it;
00625
00626 found = true;
00627 }
00628
00629 ++it;
00630 }
00631
00632 return foundItem;
00633 }
00634
00635 void ConfigFilter::slotFilterActiveToggled( bool filterOn )
00636 {
00637 gboxSenderLists->setEnabled( filterOn );
00638 gboxFilters->setEnabled( filterOn );
00639 gboxOthers->setEnabled( filterOn );
00640 }
00641
00642 void ConfigFilter::slotOpenMailBoxWizard( )
00643 {
00644 QPointer<MailBoxWizard> wizard = new MailBoxWizard( this );
00645 wizard->setWindowTitle( i18nc( "@title:window", "Mailbox Select" ) );
00646 int res = wizard->exec();
00647
00648 if( res == QDialog::Accepted )
00649 txtMailbox->setText( wizard->getPath() );
00650
00651 delete wizard;
00652
00653 }
00654
00655
00656
00657 #include "configfilter.moc"