diff options
Diffstat (limited to 'kshowmail/kcmconfigs/configfilter.cpp')
-rw-r--r-- | kshowmail/kcmconfigs/configfilter.cpp | 613 |
1 files changed, 613 insertions, 0 deletions
diff --git a/kshowmail/kcmconfigs/configfilter.cpp b/kshowmail/kcmconfigs/configfilter.cpp new file mode 100644 index 0000000..c999361 --- /dev/null +++ b/kshowmail/kcmconfigs/configfilter.cpp @@ -0,0 +1,613 @@ +// +// C++ Implementation: configfilter +// +// Description: +// +// +// Author: Ulrich Weigelt <ulrich.weigelt@gmx.de>, (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "configfilter.h" + +typedef KGenericFactory<ConfigFilter, QWidget> ConfigFilterFactory; + +K_EXPORT_COMPONENT_FACTORY( kcm_kshowmailconfigfilter, ConfigFilterFactory( + "kcm_kshowmailconfigfilter" ) ); + +ConfigFilter::ConfigFilter( QWidget * parent, const char * name, const QStringList & args ) + : KCModule( ConfigFilterFactory::instance(), parent, args ) +{ + //set the module name + if ( !name ) + setName( "configfilter" ); + + //build GUI + //--------- + + //main layout + QVBoxLayout* layMain = new QVBoxLayout( this, 0, 10 ); + + //check box to activate the filter + chkActivateFilter = new QCheckBox( i18n( "Activate Filter" ), this, "chkActivateFilter" ); + layMain->addWidget( chkActivateFilter ); + QToolTip::add( chkActivateFilter, i18n( "Check to activate the header filter." ) ); + connect( chkActivateFilter, SIGNAL( toggled( bool ) ), this, SLOT( slotFilterActiveToggled( bool ) ) ); + connect( chkActivateFilter, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); + + //GUI of sender lists + //------------------- + gboxSenderLists = new QGroupBox( 0, Qt::Horizontal, i18n( "First Check: Sender Lists" ), this, "gboxSenderLists" ); + QHBoxLayout* laySender = new QHBoxLayout( gboxSenderLists->layout(), 10 ); + layMain->addWidget( gboxSenderLists ); + + btnOpenWhitelist = new KPushButton( KGuiItem( QString( i18n( "Whitelist") ), QString( "mail_forward" ) ), gboxSenderLists, "btnOpenWhitelist" ); + QToolTip::add( btnOpenWhitelist, i18n( "Click here to edit the list of senders whose mails shall pass the filter." ) ); + laySender->addWidget( btnOpenWhitelist ); + laySender->setStretchFactor( btnOpenWhitelist, 3 ); + btnOpenWhitelist->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) ); + connect( btnOpenWhitelist, SIGNAL( clicked() ), this, SLOT( slotOpenWhitelist() ) ); + + btnOpenBlacklist = new KPushButton( KGuiItem( QString( i18n( "Blacklist" ) ), QString( "mail_delete" ) ), gboxSenderLists, "btnOpenBlacklist" ); + QToolTip::add( btnOpenBlacklist, i18n( "Click here to edit the list of senders whose mails shall be deleted or marked." ) ); + laySender->addWidget( btnOpenBlacklist ); + laySender->setStretchFactor( btnOpenBlacklist, 3 ); + btnOpenBlacklist->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) ); + connect( btnOpenBlacklist, SIGNAL( clicked() ), this, SLOT( slotOpenBlacklist() ) ); + + laySender->insertStretch( 0, 2 ); + laySender->insertStretch( 2, 2 ); + laySender->insertStretch( 4, 2 ); + + //GUI of filters + //-------------- + gboxFilters = new QGroupBox( 0, Qt::Horizontal, i18n( "Second Check: Filters" ), this, "gboxFilters" ); + QHBoxLayout* layFilters = new QHBoxLayout( gboxFilters->layout(), 10 ); + layMain->addWidget( gboxFilters ); + + listFilters = new KListView( gboxFilters, "listFilters" ); + listFilters->addColumn( i18n( "No." ) ); + listFilters->addColumn( i18n( "Name" ) ); + listFilters->addColumn( i18n( "Action" ) ); + layFilters->addWidget( listFilters ); + listFilters->setColumnWidthMode( 0, QListView::Maximum ); + listFilters->setColumnWidthMode( 1, QListView::Maximum ); + listFilters->setColumnWidthMode( 2, QListView::Maximum ); + listFilters->setResizeMode( QListView::LastColumn ); + listFilters->setColumnAlignment( 0, Qt::AlignHCenter ); + listFilters->setSorting( 0 ); //the list is sorted by filter number + listFilters->setAllColumnsShowFocus( true ); + + QVBoxLayout* layFiltersButtons = new QVBoxLayout( layFilters, 10 ); + btnAdd = new KPushButton( KStdGuiItem::add(), gboxFilters, "btnAdd" ); + btnEdit = new KPushButton( KStdGuiItem::configure(), gboxFilters, "btnEdit" ); + btnRemove = new KPushButton( KStdGuiItem::remove(), gboxFilters, "btnRemove" ); + btnMoveTop = new KPushButton( KGuiItem( "", "top", i18n( "Moves the selected filter at the top" ) ), gboxFilters, "btnMoveTop" ); + btnMoveUp = new KPushButton( KGuiItem( "", "up", i18n( "Moves the selected filter up" ) ), gboxFilters, "btnMoveUp" ); + btnMoveDown = new KPushButton( KGuiItem( "", "down", i18n( "Moves the selected filter down" ) ), gboxFilters, "btnMoveDown" ); + btnMoveBottom = new KPushButton( KGuiItem( "", "bottom", i18n( "Moves the selected filter at the bottm" ) ), gboxFilters, "btnMoveBottom" ); + btnAdd->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnEdit->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnRemove->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnMoveTop->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnMoveUp->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnMoveDown->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + btnMoveBottom->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); + layFiltersButtons->addWidget( btnAdd ); + layFiltersButtons->addWidget( btnEdit ); + layFiltersButtons->addWidget( btnRemove ); + layFiltersButtons->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ) ); + layFiltersButtons->addWidget( btnMoveTop ); + layFiltersButtons->addWidget( btnMoveUp ); + layFiltersButtons->addWidget( btnMoveDown ); + layFiltersButtons->addWidget( btnMoveBottom ); + connect( btnAdd, SIGNAL( clicked() ), this, SLOT( slotAdd() ) ); + connect( btnEdit, SIGNAL( clicked() ), this, SLOT( slotEdit() ) ); + connect( btnRemove, SIGNAL( clicked() ), this, SLOT( slotRemove() ) ); + connect( btnMoveTop, SIGNAL( clicked() ), this, SLOT( slotMoveTop() ) ); + connect( btnMoveBottom, SIGNAL( clicked() ), this, SLOT( slotMoveBottom() ) ); + connect( btnMoveUp, SIGNAL( clicked() ), this, SLOT( slotMoveUp() ) ); + connect( btnMoveDown, SIGNAL( clicked() ), this, SLOT( slotMoveDown() ) ); + + + //GUI of Others + //------------- + gboxOthers = new QGroupBox( 0, Qt::Horizontal, i18n( "Third Check: Action for all others" ), this, "gboxOthers" ); + QHBoxLayout* layOthers = new QHBoxLayout( gboxOthers->layout(), 10 ); + layMain->addWidget( gboxOthers ); + + //create combobox to select action + cmbActionOthers = new KComboBox( gboxOthers, "cmbActionOthers" ); + layOthers->addWidget( cmbActionOthers ); + QToolTip::add( cmbActionOthers, i18n( "Choose the action for all mails which are not filtered by the steps before." ) ); + connect( cmbActionOthers, SIGNAL( activated( int ) ), this, SLOT( slotOtherActionChanged( int ) ) ); + connect( cmbActionOthers, SIGNAL( activated( int ) ), this, SLOT( slotChanged() ) ); + + //insert items + cmbActionOthers->insertItem( i18n( "Show" ), ID_COMBO_FILTER_OTHERS_ACTION_PASS ); + cmbActionOthers->insertItem( i18n( "Delete" ), ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); + cmbActionOthers->insertItem( i18n( "Mark" ), ID_COMBO_FILTER_OTHERS_ACTION_MARK ); + cmbActionOthers->insertItem( i18n( "Move" ), ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); + cmbActionOthers->insertItem( i18n( "Spamcheck" ), ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); + cmbActionOthers->insertItem( i18n( "Ignore" ), ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); + + //create edit line to defined the mailbox for move + txtMailbox = new KLineEdit( gboxOthers ); + layOthers->addWidget( txtMailbox ); + connect( txtMailbox, SIGNAL( textChanged( const QString & ) ), this, SLOT( slotChanged() ) ); + + //create wizard button to configure mailbox + btnMailboxWizard= new KPushButton( KGuiItem( QString::null, "wizard" ), gboxOthers ); + layOthers->addWidget( btnMailboxWizard ); + QToolTip::add( btnMailboxWizard, i18n( "Choose the mailbox" ) ); + connect( btnMailboxWizard, SIGNAL( clicked() ), this, SLOT( slotOpenMailBoxWizard() ) ); + + //set defaults + switch( DEFAULT_FILTER_OTHERS_ACTION ) + { + case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break; + } + chkActivateFilter->setChecked( DEFAULT_FILTER_ACTIVE ); + + //enable or disable widgets + slotOtherActionChanged( cmbActionOthers->currentItem() ); + slotFilterActiveToggled( DEFAULT_FILTER_ACTIVE ); + + //get application config object (kshowmailrc) + config = KApplication::kApplication()->config(); + + //init counter for filter item numbering. This variable contains the last assigned number of a filter setup item. + //Because it is initialized with zero, the first filter number is 1. + lastFilterNumber = 0; + + //load configured values + load(); +} + + +ConfigFilter::~ConfigFilter() +{ +} + +void ConfigFilter::load( ) +{ + config->setGroup( CONFIG_GROUP_FILTER ); + + //load filter active state + chkActivateFilter->setChecked( config->readBoolEntry( CONFIG_ENTRY_FILTER_ACTIVE, DEFAULT_FILTER_ACTIVE ) ); + slotFilterActiveToggled( chkActivateFilter->isOn() ); + + //load other action + switch( config->readNumEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ) ) + { + case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break; + } + + //get mailbox name + if( config->readNumEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ) == CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE ) + txtMailbox->setText( config->readEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX, DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) ); + else + txtMailbox->clear(); + + //enable or disable widgets for other action + slotOtherActionChanged( cmbActionOthers->currentItem() ); + + //get number of filters + uint numFilters = config->readNumEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, 0 ); + + //create filter setup items and load theirs settings + for( uint ctr = 1; ctr <= numFilters; ctr++ ) + { + //create filter item + FilterSetupItem* item = new FilterSetupItem( listFilters, ctr ); + + //load settings + item->load(); + } + + //set filter index counter + lastFilterNumber = numFilters; +} + +void ConfigFilter::defaults( ) +{ + switch( DEFAULT_FILTER_OTHERS_ACTION ) + { + case CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_PASS ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_DELETE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MARK ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_MOVE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_IGNORE ); break; + case CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK : cmbActionOthers->setCurrentItem( ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK ); break; + } + + if( DEFAULT_FILTER_OTHERS_ACTION == CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE ) + txtMailbox->setText( QString( DEFAULT_FILTER_ACTION_MOVE_MAILBOX ) ); + else + txtMailbox->clear(); + + //enable or disable widgets for other action + slotOtherActionChanged( cmbActionOthers->currentItem() ); + + slotChanged(); +} + +void ConfigFilter::save( ) +{ + config->setGroup( CONFIG_GROUP_FILTER ); + + //save filter active state + config->writeEntry( CONFIG_ENTRY_FILTER_ACTIVE, chkActivateFilter->isOn() ); + + //save other action + switch( cmbActionOthers->currentItem() ) + { + case ID_COMBO_FILTER_OTHERS_ACTION_PASS : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_PASS ); break; + case ID_COMBO_FILTER_OTHERS_ACTION_DELETE : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_DELETE ); break; + case ID_COMBO_FILTER_OTHERS_ACTION_MARK : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_MARK ); break; + case ID_COMBO_FILTER_OTHERS_ACTION_MOVE : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_MOVE ); break; + case ID_COMBO_FILTER_OTHERS_ACTION_IGNORE : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_IGNORE ); break; + case ID_COMBO_FILTER_OTHERS_ACTION_SPAMCHECK : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, CONFIG_VALUE_FILTER_OTHERS_ACTION_SPAMCHECK ); break; + default : config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_ACTION, DEFAULT_FILTER_OTHERS_ACTION ); break; + } + + //save mailbox name + if( cmbActionOthers->currentItem() == ID_COMBO_FILTER_OTHERS_ACTION_MOVE ) + { + config->writeEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX, txtMailbox->text() ); + } + else + { + config->deleteEntry( CONFIG_ENTRY_FILTER_OTHERS_MAILBOX ); + } + + //get old number of filters + uint oldNumFilter = config->readNumEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, 0 ); + + //save current number of filters + config->writeEntry( CONFIG_ENTRY_FILTER_NUMBER_OF_FILTERS, lastFilterNumber ); + + //delete surplus filter configurations + if( oldNumFilter > lastFilterNumber ) + { + for( uint ctr = lastFilterNumber + 1; ctr <= oldNumFilter; ctr++ ) + { + config->deleteGroup( QString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( ctr ) ); + } + } + + //save the filters + QListViewItemIterator it( listFilters ); + + while( it.current() ) + { + ( (FilterSetupItem*)it.current() )->save(); + + //get next item + ++it; + } + + + config->sync(); +} + +void ConfigFilter::slotChanged( ) +{ + KCModule::changed(); +} + +void ConfigFilter::slotOpenWhitelist( ) +{ + //open list dialog + SenderListDialog* dlg = new SenderListDialog( this, SenderListDialog::White, "dlgWhiteList" ); + dlg->exec(); + + //delete dialog + delete dlg; +} + +void ConfigFilter::slotOpenBlacklist( ) +{ + //open list dialog + SenderListDialog* dlg = new SenderListDialog( this, SenderListDialog::Black, "dlgBlackList" ); + dlg->exec(); + + //delete dialog + delete dlg; +} + +void ConfigFilter::slotAdd( ) +{ + //create a new filter setup item + FilterSetupItem* item = new FilterSetupItem( listFilters , lastFilterNumber + 1 ); + + //open setup dialog + FilterSetupDialog* dlg = new FilterSetupDialog( this, item ); + int res = dlg->exec(); + + if( res == KDialogBase::Accepted ) + { + //inform application setup dialog about changes + slotChanged(); + + //increase variable for the last assigned filter number + lastFilterNumber++; + } + else + //delete new item because the user don't want it + delete item; + + //delete dialog + delete dlg; +} + +void ConfigFilter::slotEdit( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + //return if no item selected + if( item == NULL ) return; + + //open setup dialog + FilterSetupDialog* dlg = new FilterSetupDialog( this, item ); + int res = dlg->exec(); + + //inform application setup dialog about changes + if( res == KDialogBase::Accepted ) + slotChanged(); + + //delete dialog + delete dlg; + +} + +void ConfigFilter::slotRemove( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + if( item != NULL ) + { + //get number of the item + uint num = item->getNumber(); + + //delete item + delete item; + + //decrease the number of all filter items after the removed one + decreaseNumbers( num + 1 ); + + //decrease last assigned number + lastFilterNumber--; + + //inform application setup dialog about changes + slotChanged(); + } +} + +void ConfigFilter::slotOtherActionChanged( int index ) +{ + switch( index ) + { + case ID_COMBO_FILTER_OTHERS_ACTION_MOVE : txtMailbox->setEnabled( true ); + if( txtMailbox->text() == "" ) txtMailbox->setText( DEFAULT_FILTER_ACTION_MOVE_MAILBOX ); + btnMailboxWizard->setHidden( false ); + break; + default : txtMailbox->setEnabled( false ); + btnMailboxWizard->setHidden( true ); + break; + } +} + +void ConfigFilter::decreaseNumbers( uint number ) +{ + //get an iterator of the list view + QListViewItemIterator it( listFilters ); + + //iterate over the filter list + while( it.current() ) + { + //get number of current filter item + uint curNumber = ( (FilterSetupItem*)it.current() )->getNumber(); + + //decrease current number, if the given number is lesser or equals + if( curNumber >= number && curNumber > 0 ) + ( (FilterSetupItem*)it.current() )->setNumber( curNumber - 1 ); + + //get next item + ++it; + } +} + +void ConfigFilter::slotMoveTop( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + if( item != NULL ) + { + //get number of the item + uint num = item->getNumber(); + + if( num > 1 ) + { + //set number of the selected to zero, this will move it at the top + item->setNumber( 0 ); + + //now we move all items after the old position one step up + decreaseNumbers( num + 1 ); + + //at last we add one to all numbers + QListViewItemIterator it( listFilters ); + + while( it.current() ) + { + uint curNumber = ( (FilterSetupItem*)it.current() )->getNumber(); + ( (FilterSetupItem*)it.current() )->setNumber( curNumber + 1 ); + + ++it; + } + + //refresh list view + listFilters->sort(); + + //inform application setup dialog about changes + slotChanged(); + + } + } + + +} + +void ConfigFilter::slotMoveBottom( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + if( item != NULL ) + { + //get number of the item + uint num = item->getNumber(); + + if( num < lastFilterNumber ) + { + //move the selected item at the bottom + item->setNumber( lastFilterNumber + 1 ); + + //move all items after the old position one step up (decrease number) + decreaseNumbers( num + 1 ); + + //refresh list view + listFilters->sort(); + + //inform application setup dialog about changes + slotChanged(); + } + + } +} + +void ConfigFilter::slotMoveUp( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + if( item != NULL ) + { + //get number of the item + uint num = item->getNumber(); + + if( num > 1 ) + { + //get item before the selected one + FilterSetupItem* itemBefore = getFilterItem( num - 1 ); + + if( itemBefore != NULL ) + { + //swap numbers + item->setNumber( num - 1 ); + itemBefore->setNumber( num ); + + //inform application setup dialog about changes + slotChanged(); + + } + } + //refresh list view + listFilters->sort(); + } +} + +void ConfigFilter::slotMoveDown( ) +{ + //get selected item + FilterSetupItem* item = (FilterSetupItem*)listFilters->selectedItem(); + + if( item != NULL ) + { + //get number of the item + uint num = item->getNumber(); + + if( num < lastFilterNumber ) + { + //get item behind the selected one + FilterSetupItem* itemBehind = getFilterItem( num + 1 ); + + if( itemBehind != NULL ) + { + //swap numbers + item->setNumber( num + 1 ); + itemBehind->setNumber( num ); + + //inform application setup dialog about changes + slotChanged(); + + } + } + //refresh list view + listFilters->sort(); + } +} + +FilterSetupItem* ConfigFilter::getFilterItem( uint num ) +{ + FilterSetupItem* foundItem = NULL; + bool found = false; + + //get Iterator + QListViewItemIterator it( listFilters ); + + //iterate over th elist to look for the item + while( it.current() && !found ) + { + //get current number + uint curNumber = ( (FilterSetupItem*)it.current() )->getNumber(); + + //have we found it? + if( curNumber == num ) + { + foundItem = (FilterSetupItem*)it.current(); + + found = true; + } + + ++it; + } + + return foundItem; +} + +void ConfigFilter::slotFilterActiveToggled( bool filterOn ) +{ + gboxSenderLists->setEnabled( filterOn ); + gboxFilters->setEnabled( filterOn ); + gboxOthers->setEnabled( filterOn ); +} + +void ConfigFilter::slotOpenMailBoxWizard( ) +{ + MailBoxWizard wizard( this, "malboxwizard" ); + wizard.setCaption( i18n( "Mailbox Select" ) ); + int res = wizard.exec(); + + if( res == QDialog::Accepted ) + txtMailbox->setText( wizard.getPath() ); + +} + + + +#include "configfilter.moc" |