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.
kshowmail/kshowmail/kcmconfigs/filtercriteriawidget.cpp

339 lines
18 KiB

//
// C++ Implementation: filtercriteriawidget
//
// Description:
//
//
// Author: Ulrich Weigelt <ulrich.weigelt@gmx.de>, (C) 2007
//
// Copyright: See COPYING file that comes with this distribution
//
//
#include "filtercriteriawidget.h"
FilterCriteriaWidget::FilterCriteriaWidget( TQWidget *parent, const char *name )
: TQWidget( parent, name )
{
//this is the main layout
TQVBoxLayout* layMain = new TQVBoxLayout( this, 0, KDialog::spacingHint(), "layMain" );
//and now the layouts of the first and second line
TQHBoxLayout* layLine1 = new TQHBoxLayout( layMain, KDialog::spacingHint(), "layLine1" );
TQHBoxLayout* layLine2 = new TQHBoxLayout( layMain, KDialog::spacingHint(), "layLine2" );
//Source Select
cmbSource = new KComboBox( this, "cmbSource" );
cmbSource->insertItem( i18n( "From" ), ID_COMBO_SOURCE_FROM );
cmbSource->insertItem( i18n( "To" ), ID_COMBO_SOURCE_TO );
cmbSource->insertItem( i18n( "Size (Bytes)" ), ID_COMBO_SOURCE_SIZE );
cmbSource->insertItem( i18n( "Subject" ), ID_COMBO_SOURCE_SUBJECT );
cmbSource->insertItem( i18n( "Header" ), ID_COMBO_SOURCE_HEADER );
cmbSource->insertItem( i18n( "Account" ), ID_COMBO_SOURCE_ACCOUNT );
layLine1->addWidget( cmbSource );
connect( cmbSource, SIGNAL( activated( int ) ), this, SLOT( slotSetWidgets() ) );
switch( DEFAULT_FILTER_CRITERIA_SOURCE )
{
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM : cmbSource->setCurrentItem( ID_COMBO_SOURCE_FROM ); break;
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO : cmbSource->setCurrentItem( ID_COMBO_SOURCE_TO ); break;
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : cmbSource->setCurrentItem( ID_COMBO_SOURCE_SIZE ); break;
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT : cmbSource->setCurrentItem( ID_COMBO_SOURCE_SUBJECT ); break;
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER : cmbSource->setCurrentItem( ID_COMBO_SOURCE_HEADER ); break;
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT : cmbSource->setCurrentItem( ID_COMBO_SOURCE_ACCOUNT ); break;
default : cmbSource->setCurrentItem( ID_COMBO_SOURCE_FROM ); break;
}
//Comboboxes to select the condition between source and value
cmbConditionText = new KComboBox( this, "cmbConditionText" );
cmbConditionText->insertItem( i18n( "contains" ), ID_COMBO_COND_TEXT_CONTAINS );
cmbConditionText->insertItem( i18n( "does not contain" ), ID_COMBO_COND_TEXT_NOT_CONTAINS );
cmbConditionText->insertItem( i18n( "equals" ), ID_COMBO_COND_TEXT_EQUALS );
cmbConditionText->insertItem( i18n( "does not equal" ), ID_COMBO_COND_TEXT_NOT_EQUALS );
cmbConditionText->insertItem( i18n( "matches regular expression" ), ID_COMBO_COND_TEXT_REGEXPR );
cmbConditionText->insertItem( i18n( "does not match reg. expr." ), ID_COMBO_COND_TEXT_NOT_REGEXPR );
layLine1->addWidget( cmbConditionText );
connect( cmbConditionText, SIGNAL( activated( int ) ), this, SLOT( slotSetWidgets() ) );
switch( DEFAULT_FILTER_CRITERIA_COND_TEXT )
{
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_CONTAINS );break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_CONTAINS );break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_EQUALS );break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_EQUALS );break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_REGEXPR );break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_REGEXPR );break;
default : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_CONTAINS ); break;
}
cmbConditionNum = new KComboBox( this, "cmbConditionNum" );
cmbConditionNum->insertItem( i18n( "is equal to" ), ID_COMBO_COND_NUM_EQUAL );
cmbConditionNum->insertItem( i18n( "is not equal to" ), ID_COMBO_COND_NUM_NOT_EQUAL );
cmbConditionNum->insertItem( i18n( "is greater than" ), ID_COMBO_COND_NUM_GREATER );
cmbConditionNum->insertItem( i18n( "is greater than or equal to" ), ID_COMBO_COND_NUM_GREATER_EQUAL );
cmbConditionNum->insertItem( i18n( "is less than" ), ID_COMBO_COND_NUM_LESS );
cmbConditionNum->insertItem( i18n( "is less than or equal to" ), ID_COMBO_COND_NUM_LESS_EQUAL );
layLine1->addWidget( cmbConditionNum );
switch( DEFAULT_FILTER_CRITERIA_COND_NUM )
{
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_EQUAL ); break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_NOT_EQUAL ); break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_GREATER ); break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_GREATER_EQUAL ); break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_LESS ); break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_LESS_EQUAL ); break;
default : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_EQUAL ); break;
}
//edit line and spin box which hold the comparation values
txtCompValueText = new KLineEdit( this, "txtCompValueText" );
txtCompValueText->setMinimumWidth( WIDTH_FILTER_TEXT_VALUE_LINE );
layLine1->addWidget( txtCompValueText );
spbCompValueNum = new KIntNumInput( DEFAULT_FILTER_CRITERIA_SIZE, this, 10, "spbCompValueNum" );
spbCompValueNum->setMinValue( 0 );
spbCompValueNum->setSuffix( " Bytes" );
layLine1->addWidget( spbCompValueNum );
//Button to open the regular expression editor
btnOpenRegExpEditor = new KPushButton( KGuiItem( "", "edit", "Edit Regualar Expression" ), this, "btnOpenRegExpEditor" );
layLine1->addWidget( btnOpenRegExpEditor );
connect( btnOpenRegExpEditor, SIGNAL( clicked() ), this, SLOT( slotOpenRegExpEditor() ) );
//check whether the KRegExpEditor is available
kRegExpEditorAvailable = !TDETrader::self()->query( "KRegExpEditor/KRegExpEditor" ).isEmpty();
//checkbox to select case sensitve
chkCaseSensitive = new TQCheckBox( i18n( "Case sensitive" ), this, "chkCaseSensitive" );
chkCaseSensitive->setChecked( DEFAULT_FILTER_CRITERIA_CASE_SENSITIVE ); //set default
layLine2->addWidget( chkCaseSensitive );
//separator to the next criteria widget
layMain->addWidget( new KSeparator( this ) );
//set widgets dependent on criteria source
slotSetWidgets();
}
FilterCriteriaWidget::~FilterCriteriaWidget()
{
}
void FilterCriteriaWidget::slotSetWidgets( )
{
switch( cmbSource->currentItem() )
{
case ID_COMBO_SOURCE_FROM : cmbConditionNum->setHidden( true );
spbCompValueNum->setHidden( true );
cmbConditionText->setHidden( false );
txtCompValueText->setHidden( false );
chkCaseSensitive->setHidden( false );
break;
case ID_COMBO_SOURCE_TO : cmbConditionNum->setHidden( true );
spbCompValueNum->setHidden( true );
cmbConditionText->setHidden( false );
txtCompValueText->setHidden( false );
chkCaseSensitive->setHidden( false );
break;
case ID_COMBO_SOURCE_SIZE : cmbConditionNum->setHidden( false );
spbCompValueNum->setHidden( false );
cmbConditionText->setHidden( true );
txtCompValueText->setHidden( true );
chkCaseSensitive->setHidden( true );
break;
case ID_COMBO_SOURCE_SUBJECT : cmbConditionNum->setHidden( true );
spbCompValueNum->setHidden( true );
cmbConditionText->setHidden( false );
txtCompValueText->setHidden( false );
chkCaseSensitive->setHidden( false );
break;
case ID_COMBO_SOURCE_HEADER : cmbConditionNum->setHidden( true );
spbCompValueNum->setHidden( true );
cmbConditionText->setHidden( false );
txtCompValueText->setHidden( false );
chkCaseSensitive->setHidden( false );
break;
case ID_COMBO_SOURCE_ACCOUNT : cmbConditionNum->setHidden( true );
spbCompValueNum->setHidden( true );
cmbConditionText->setHidden( false );
txtCompValueText->setHidden( false );
chkCaseSensitive->setHidden( false );
break;
default: cmbConditionNum->setHidden( true );
spbCompValueNum->setHidden( true );
cmbConditionText->setHidden( false );
txtCompValueText->setHidden( false );
chkCaseSensitive->setHidden( false );
break;
}
//show or hide widgets of regular expressions
if( !cmbConditionText->isHidden() && ( cmbConditionText->currentItem() == ID_COMBO_COND_TEXT_REGEXPR || cmbConditionText->currentItem() == ID_COMBO_COND_TEXT_NOT_REGEXPR ) )
{
if( kRegExpEditorAvailable )
btnOpenRegExpEditor->setHidden( false );
//we don't need case sensitve for regular expressions
chkCaseSensitive->setHidden( true );
}
else
{
btnOpenRegExpEditor->setHidden( true );
}
}
void FilterCriteriaWidget::slotOpenRegExpEditor( )
{
TQDialog* editorDialog = KParts::ComponentFactory::createInstanceFromQuery<TQDialog>( "KRegExpEditor/KRegExpEditor" );
if( editorDialog != NULL )
{
//tdeutils was installed, so the dialog was found fetch the editor interface
KRegExpEditorInterface* editor = static_cast<KRegExpEditorInterface*>( editorDialog->tqt_cast( "KRegExpEditorInterface" ) );
if( editor == NULL )
{
KMessageBox::error( this, i18n( "The Regular Expression Editor could not be initilized." ) );
return;
}
//use the editor.
editor->setRegExp( txtCompValueText->text() );
//exec the dialog
if( editorDialog->exec() == TQDialog::Accepted )
txtCompValueText->setText( editor->regExp() );
//delete dialog
delete editorDialog;
}
else
KMessageBox::error( this, i18n( "The Regular Expression Editor is not available." ) );
}
void FilterCriteriaWidget::setNumCriteria( int source, int condition, uint value )
{
//set source
switch( source )
{
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE : cmbSource->setCurrentItem( ID_COMBO_SOURCE_SIZE ); break;
default : kdError() << "FilterCriteriaWidget::setNumCriteria: invalid source parameter." << endl;
return;
}
//show or hide widgets
slotSetWidgets();
//set condition
switch( condition )
{
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_EQUAL ); break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_NOT_EQUAL ); break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_GREATER ); break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_GREATER_EQUAL ); break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_LESS ); break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_LESS_EQUAL ); break;
default : cmbConditionNum->setCurrentItem( ID_COMBO_COND_NUM_EQUAL ); break;
}
//set comparison value
spbCompValueNum->setValue( value );
//show or hide widgets
slotSetWidgets();
}
void FilterCriteriaWidget::setTextCriteria( int source, int condition, TQString value, bool cs )
{
//set source
switch( source )
{
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM : cmbSource->setCurrentItem( ID_COMBO_SOURCE_FROM ); break;
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO : cmbSource->setCurrentItem( ID_COMBO_SOURCE_TO ); break;
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT : cmbSource->setCurrentItem( ID_COMBO_SOURCE_SUBJECT ); break;
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER : cmbSource->setCurrentItem( ID_COMBO_SOURCE_HEADER ); break;
case CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT : cmbSource->setCurrentItem( ID_COMBO_SOURCE_ACCOUNT ); break;
default : kdError() << "FilterCriteriaWidget::setTextCriteria: invalid source parameter." << endl;
return;
}
//set condition
switch( condition )
{
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_CONTAINS );break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_CONTAINS );break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_EQUALS );break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_EQUALS );break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_REGEXPR );break;
case CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_NOT_REGEXPR );break;
default : cmbConditionText->setCurrentItem( ID_COMBO_COND_TEXT_CONTAINS ); break;
}
//set value
txtCompValueText->setText( value );
//set case sensitve
chkCaseSensitive->setChecked( cs );
//show or hide widgets
slotSetWidgets();
}
FilterCriteria_Type FilterCriteriaWidget::getValues()
{
FilterCriteria_Type crit; //return value
switch( cmbSource->currentItem() )
{
case ID_COMBO_SOURCE_FROM : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM; break;
case ID_COMBO_SOURCE_TO : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO; break;
case ID_COMBO_SOURCE_SIZE : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE; break;
case ID_COMBO_SOURCE_SUBJECT : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT; break;
case ID_COMBO_SOURCE_HEADER : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER; break;
case ID_COMBO_SOURCE_ACCOUNT : crit.source = CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT; break;
default : crit.source = 99; break;
}
if( crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_FROM ||
crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_TO ||
crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SUBJECT ||
crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_HEADER ||
crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_ACCOUNT )
{
switch( cmbConditionText->currentItem() )
{
case ID_COMBO_COND_TEXT_CONTAINS : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_CONTAINS; break;
case ID_COMBO_COND_TEXT_NOT_CONTAINS : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_CONTAINS; break;
case ID_COMBO_COND_TEXT_EQUALS : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_EQUALS; break;
case ID_COMBO_COND_TEXT_NOT_EQUALS : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_EQUALS; break;
case ID_COMBO_COND_TEXT_REGEXPR : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_REGEXPR; break;
case ID_COMBO_COND_TEXT_NOT_REGEXPR : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_TEXT_NOT_REGEXPR; break;
default : crit.condition = 99; break;
}
} else if ( crit.source == CONFIG_VALUE_FILTER_CRITERIA_SOURCE_SIZE )
{
switch( cmbConditionNum->currentItem() )
{
case ID_COMBO_COND_NUM_EQUAL : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_EQUAL; break;
case ID_COMBO_COND_NUM_NOT_EQUAL : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_NOT_EQUAL; break;
case ID_COMBO_COND_NUM_GREATER : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER; break;
case ID_COMBO_COND_NUM_GREATER_EQUAL : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_GREATER_EQUAL; break;
case ID_COMBO_COND_NUM_LESS : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS; break;
case ID_COMBO_COND_NUM_LESS_EQUAL : crit.condition = CONFIG_VALUE_FILTER_CRITERIA_COND_NUM_LESS_EQUAL; break;
default : crit.condition = 99;
}
} else
crit.condition = 99;
crit.txtValue = txtCompValueText->text();
crit.numValue = spbCompValueNum->value();
crit.cs = chkCaseSensitive->isChecked();
return crit;
}
#include "filtercriteriawidget.moc"