You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
614 lines
21 KiB
614 lines
21 KiB
//
|
|
// 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, TQWidget> ConfigFilterFactory;
|
|
|
|
K_EXPORT_COMPONENT_FACTORY( kcm_kshowmailconfigfilter, ConfigFilterFactory(
|
|
"kcm_kshowmailconfigfilter" ) );
|
|
|
|
ConfigFilter::ConfigFilter( TQWidget * parent, const char * name, const TQStringList & args )
|
|
: TDECModule( ConfigFilterFactory::instance(), parent, args )
|
|
{
|
|
//set the module name
|
|
if ( !name )
|
|
setName( "configfilter" );
|
|
|
|
//build GUI
|
|
//---------
|
|
|
|
//main layout
|
|
TQVBoxLayout* layMain = new TQVBoxLayout( this, 0, 10 );
|
|
|
|
//check box to activate the filter
|
|
chkActivateFilter = new TQCheckBox( i18n( "Activate Filter" ), this, "chkActivateFilter" );
|
|
layMain->addWidget( chkActivateFilter );
|
|
TQToolTip::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 TQGroupBox( 0, TQt::Horizontal, i18n( "First Check: Sender Lists" ), this, "gboxSenderLists" );
|
|
TQHBoxLayout* laySender = new TQHBoxLayout( gboxSenderLists->layout(), 10 );
|
|
layMain->addWidget( gboxSenderLists );
|
|
|
|
btnOpenWhitelist = new KPushButton( KGuiItem( TQString( i18n( "Whitelist") ), TQString( "mail-forward" ) ), gboxSenderLists, "btnOpenWhitelist" );
|
|
TQToolTip::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( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Minimum ) );
|
|
connect( btnOpenWhitelist, SIGNAL( clicked() ), this, SLOT( slotOpenWhitelist() ) );
|
|
|
|
btnOpenBlacklist = new KPushButton( KGuiItem( TQString( i18n( "Blacklist" ) ), TQString( "mail_delete" ) ), gboxSenderLists, "btnOpenBlacklist" );
|
|
TQToolTip::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( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::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 TQGroupBox( 0, TQt::Horizontal, i18n( "Second Check: Filters" ), this, "gboxFilters" );
|
|
TQHBoxLayout* layFilters = new TQHBoxLayout( gboxFilters->layout(), 10 );
|
|
layMain->addWidget( gboxFilters );
|
|
|
|
listFilters = new TDEListView( gboxFilters, "listFilters" );
|
|
listFilters->addColumn( i18n( "No." ) );
|
|
listFilters->addColumn( i18n( "Name" ) );
|
|
listFilters->addColumn( i18n( "Action" ) );
|
|
layFilters->addWidget( listFilters );
|
|
listFilters->setColumnWidthMode( 0, TQListView::Maximum );
|
|
listFilters->setColumnWidthMode( 1, TQListView::Maximum );
|
|
listFilters->setColumnWidthMode( 2, TQListView::Maximum );
|
|
listFilters->setResizeMode( TQListView::LastColumn );
|
|
listFilters->setColumnAlignment( 0, TQt::AlignHCenter );
|
|
listFilters->setSorting( 0 ); //the list is sorted by filter number
|
|
listFilters->setAllColumnsShowFocus( true );
|
|
|
|
TQVBoxLayout* layFiltersButtons = new TQVBoxLayout( 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( "", "go-top", i18n( "Moves the selected filter at the top" ) ), gboxFilters, "btnMoveTop" );
|
|
btnMoveUp = new KPushButton( KGuiItem( "", "go-up", i18n( "Moves the selected filter up" ) ), gboxFilters, "btnMoveUp" );
|
|
btnMoveDown = new KPushButton( KGuiItem( "", "go-down", i18n( "Moves the selected filter down" ) ), gboxFilters, "btnMoveDown" );
|
|
btnMoveBottom = new KPushButton( KGuiItem( "", "go-bottom", i18n( "Moves the selected filter at the bottm" ) ), gboxFilters, "btnMoveBottom" );
|
|
btnAdd->setSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Maximum );
|
|
btnEdit->setSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Maximum );
|
|
btnRemove->setSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Maximum );
|
|
btnMoveTop->setSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Maximum );
|
|
btnMoveUp->setSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Maximum );
|
|
btnMoveDown->setSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Maximum );
|
|
btnMoveBottom->setSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Maximum );
|
|
layFiltersButtons->addWidget( btnAdd );
|
|
layFiltersButtons->addWidget( btnEdit );
|
|
layFiltersButtons->addWidget( btnRemove );
|
|
layFiltersButtons->addItem( new TQSpacerItem( 1, 1, TQSizePolicy::Minimum, TQSizePolicy::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 TQGroupBox( 0, TQt::Horizontal, i18n( "Third Check: Action for all others" ), this, "gboxOthers" );
|
|
TQHBoxLayout* layOthers = new TQHBoxLayout( gboxOthers->layout(), 10 );
|
|
layMain->addWidget( gboxOthers );
|
|
|
|
//create combobox to select action
|
|
cmbActionOthers = new KComboBox( gboxOthers, "cmbActionOthers" );
|
|
layOthers->addWidget( cmbActionOthers );
|
|
TQToolTip::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 TQString & ) ), this, SLOT( slotChanged() ) );
|
|
|
|
//create wizard button to configure mailbox
|
|
btnMailboxWizard= new KPushButton( KGuiItem( TQString::null, "wizard" ), gboxOthers );
|
|
layOthers->addWidget( btnMailboxWizard );
|
|
TQToolTip::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 = TDEApplication::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( TQString( 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( TQString( "%1%2" ).arg( CONFIG_GROUP_FILTER ).arg( ctr ) );
|
|
}
|
|
}
|
|
|
|
//save the filters
|
|
TQListViewItemIterator it( listFilters );
|
|
|
|
while( it.current() )
|
|
{
|
|
( (FilterSetupItem*)it.current() )->save();
|
|
|
|
//get next item
|
|
++it;
|
|
}
|
|
|
|
|
|
config->sync();
|
|
}
|
|
|
|
void ConfigFilter::slotChanged( )
|
|
{
|
|
TDECModule::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
|
|
TQListViewItemIterator 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
|
|
TQListViewItemIterator 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
|
|
TQListViewItemIterator 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 == TQDialog::Accepted )
|
|
txtMailbox->setText( wizard.getPath() );
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "configfilter.moc"
|