-rw-r--r-- | kaddressbook/filter.cpp | 22 | ||||
-rw-r--r-- | kaddressbook/filter.h | 4 | ||||
-rw-r--r-- | kaddressbook/filtereditdialog.cpp | 40 | ||||
-rw-r--r-- | kaddressbook/filtereditdialog.h | 7 |
4 files changed, 59 insertions, 14 deletions
diff --git a/kaddressbook/filter.cpp b/kaddressbook/filter.cpp index 39d2ae4..9cb4c2d 100644 --- a/kaddressbook/filter.cpp +++ b/kaddressbook/filter.cpp @@ -19,35 +19,38 @@ As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <kconfig.h> #include <kconfigbase.h> #include <kdebug.h> #include "kabprefs.h" #include "filter.h" +#include <secrecy.h> Filter::Filter() : mName( QString::null ), mMatchRule( Matching ), mEnabled( true ), mInternal( false ) { + mCriteria = ShowPublic | ShowPrivate| ShowConfidential ; } Filter::Filter( const QString &name ) : mName( name ), mMatchRule( Matching ), mEnabled( true ), mInternal( false ) { + mCriteria = ShowPublic | ShowPrivate| ShowConfidential ; } Filter::~Filter() { } void Filter::setName( const QString &name ) { mName = name; } const QString &Filter::name() const @@ -70,24 +73,41 @@ void Filter::apply( KABC::Addressee::List &addresseeList ) { #ifndef KAB_EMBEDDED iter = addresseeList.erase( iter ); #else //KAB_EMBEDDED iter = addresseeList.remove( iter ); #endif //KAB_EMBEDDED } } } bool Filter::filterAddressee( const KABC::Addressee &a ) { + switch ( a.secrecy().type()) { + case KABC::Secrecy::Public: + if (! (mCriteria & ShowPublic )) + return false; + break; + case KABC::Secrecy::Private: + if (! (mCriteria & ShowPrivate )) + return false; + break; + case KABC::Secrecy::Confidential: + if (! (mCriteria & ShowConfidential )) + return false; + break; + default: + return false; + break; + } QStringList::Iterator iter; iter = mCategoryList.begin(); // empty filter always matches if ( iter == mCategoryList.end() ) return true; for ( ; iter != mCategoryList.end(); ++iter ) { if ( a.hasCategory( *iter ) ) return ( mMatchRule == Matching ); } @@ -111,32 +131,34 @@ void Filter::setCategories( const QStringList &list ) const QStringList &Filter::categories() const { return mCategoryList; } void Filter::save( KConfig *config ) { config->writeEntry( "Name", mName ); config->writeEntry( "Enabled", mEnabled ); config->writeEntry( "Categories", mCategoryList ); config->writeEntry( "MatchRule", (int)mMatchRule ); + config->writeEntry( "Criteria", (int)mCriteria ); } void Filter::restore( KConfig *config ) { mName = config->readEntry( "Name", "<internal error>" ); mEnabled = config->readBoolEntry( "Enabled", true ); mCategoryList = config->readListEntry( "Categories" ); mMatchRule = (MatchRule)config->readNumEntry( "MatchRule", Matching ); + mCriteria = config->readNumEntry( "Criteria", (ShowPublic | ShowPrivate| ShowConfidential) ); } void Filter::save( KConfig *config, QString baseGroup, Filter::List &list ) { { KConfigGroupSaver s( config, baseGroup ); // remove the old filters uint count = config->readNumEntry( "Count" ); /* // memory access violation here for ( uint i = 0; i < count; ++i ) config->deleteGroup( QString( "%1_%2" ).arg( baseGroup ).arg( i ) ); diff --git a/kaddressbook/filter.h b/kaddressbook/filter.h index cf2c0a1..26870d7 100644 --- a/kaddressbook/filter.h +++ b/kaddressbook/filter.h @@ -30,24 +30,27 @@ #include <kabc/addressee.h> #include <kconfig.h> /** Filter for AddressBook related objects (Addressees) @todo This class should be switched to use shared data. */ class Filter { public: + enum { ShowPublic = 1, ShowPrivate = 2, ShowConfidential = 4}; + void setCriteria(int c) { mCriteria = c ;} + int criteria() const { return mCriteria;} typedef QValueList<Filter> List; enum MatchRule { Matching = 0, NotMatching = 1 }; Filter(); Filter( const QString& name ); ~Filter(); /** Set the name of the filter. */ void setName( const QString &name ); @@ -134,20 +137,21 @@ class Filter Sets the filter rule. If the rule is Filter::Matching (default), then the filter will return true on items that match the filter. If the rule is Filter::NotMatching, then the filter will return true on items that do not match the filter. */ void setMatchRule( MatchRule rule ); /** @return The current match rule. */ MatchRule matchRule() const; private: + int mCriteria; QString mName; QStringList mCategoryList; MatchRule mMatchRule; bool mEnabled; bool mInternal; }; #endif diff --git a/kaddressbook/filtereditdialog.cpp b/kaddressbook/filtereditdialog.cpp index 063585a..987f234 100644 --- a/kaddressbook/filtereditdialog.cpp +++ b/kaddressbook/filtereditdialog.cpp @@ -25,24 +25,25 @@ Enhanced Version of the file for platform independent KDE tools. Copyright (c) 2004 Ulf Schenk $Id$ */ #include <qbuttongroup.h> #include <qhbox.h> #include <qlabel.h> #include <qlayout.h> #include <qpushbutton.h> #include <qradiobutton.h> +#include <qcheckbox.h> #include <qregexp.h> #include <qstring.h> #include <qtoolbutton.h> #include <qtooltip.h> #include <qwidget.h> #include <kapplication.h> #include <kbuttonbox.h> #include <kdebug.h> #include <kiconloader.h> #include <klineedit.h> #include <klistbox.h> @@ -81,48 +82,60 @@ void FilterEditDialog::setFilter( const Filter &filter ) if ( categories.contains( item->text( 0 ) ) ) { QCheckListItem *checkItem = static_cast<QCheckListItem*>( item ); checkItem->setOn( true ); } item = item->nextSibling(); } if ( filter.matchRule() == Filter::Matching ) mMatchRuleGroup->setButton( 0 ); else mMatchRuleGroup->setButton( 1 ); + + int c = filter.criteria() ; + mPublic->setChecked(c &Filter::ShowPublic); + mPrivate->setChecked(c & Filter::ShowPrivate); + mConfidential->setChecked(c & Filter::ShowConfidential); + } Filter FilterEditDialog::filter() { Filter filter; filter.setName( mNameEdit->text() ); QStringList categories; QListViewItem *item = mCategoriesView->firstChild(); while ( item != 0 ) { QCheckListItem *checkItem = static_cast<QCheckListItem*>( item ); if ( checkItem->isOn() ) categories.append( item->text( 0 ) ); item = item->nextSibling(); } filter.setCategories( categories ); if ( mMatchRuleGroup->find( 0 )->isOn() ) filter.setMatchRule( Filter::Matching ); else filter.setMatchRule( Filter::NotMatching ); + int c = 0; + if (mPublic->isChecked()) c |= Filter::ShowPublic; + if (mPrivate->isChecked()) c |= Filter::ShowPrivate; + if (mConfidential->isChecked()) c |= Filter::ShowConfidential; + filter.setCriteria( c ) ; + return filter; } void FilterEditDialog::initGUI() { #ifndef KAB_EMBEDDED resize( 490, 300 ); #else //KAB_EMBEDDED resize( KMIN(KGlobal::getDesktopWidth()-10, 490), KMIN(KGlobal::getDesktopHeight()-50, 300)); #endif //KAB_EMBEDDED @@ -134,41 +147,42 @@ void FilterEditDialog::initGUI() label = new QLabel( i18n( "Name" ), page ); mNameEdit = new KLineEdit( page ); mNameEdit->setFocus(); topLayout->addWidget( label, 0, 0 ); topLayout->addWidget( mNameEdit, 0, 1 ); connect( mNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( filterNameTextChanged( const QString&) ) ); mCategoriesView = new KListView( page ); mCategoriesView->addColumn( i18n( "Categories" ) ); topLayout->addMultiCellWidget( mCategoriesView, 1, 1, 0, 1 ); - mMatchRuleGroup = new QButtonGroup( page ); + mMatchRuleGroup = new QHButtonGroup( i18n( "Category rule" ), page ); mMatchRuleGroup->setExclusive( true ); - - QBoxLayout *gbLayout = new QVBoxLayout( mMatchRuleGroup ); - gbLayout->setSpacing( KDialog::spacingHint() ); - gbLayout->setMargin( KDialog::marginHint() ); - - QRadioButton *radio = new QRadioButton( i18n( "Show only contacts matching\n the selected categories" ), mMatchRuleGroup ); + QRadioButton *radio = new QRadioButton( i18n( "Include categories" ), mMatchRuleGroup ); radio->setChecked( true ); - mMatchRuleGroup->insert( radio ); - gbLayout->addWidget( radio ); + //mMatchRuleGroup->insert( radio ); + radio = new QRadioButton( i18n( "Exclude categories" ), mMatchRuleGroup ); + //mMatchRuleGroup->insert( radio ); + topLayout->addMultiCellWidget( mMatchRuleGroup, 2, 2, 0, 1 ); - radio = new QRadioButton( i18n( "Show all contacts except those\n matching the selected categories" ), mMatchRuleGroup ); - mMatchRuleGroup->insert( radio ); - gbLayout->addWidget( radio ); + QHButtonGroup * mMatchPPCGroup = new QHButtonGroup(i18n( "Include contacts, that are:" ), page ); + mPublic = new QCheckBox( i18n( "public" ), mMatchPPCGroup ); + mPrivate = new QCheckBox( i18n( "private" ), mMatchPPCGroup ); + mConfidential = new QCheckBox( i18n( "confidential" ), mMatchPPCGroup ); + mPublic->setChecked( true ); + mPrivate->setChecked( true ); + mConfidential->setChecked( true ); + topLayout->addMultiCellWidget( mMatchPPCGroup, 3, 3, 0, 1 ); - topLayout->addMultiCellWidget( mMatchRuleGroup, 2, 2, 0, 1 ); } void FilterEditDialog::filterNameTextChanged( const QString &text ) { enableButtonOK( !text.isEmpty() ); } void FilterEditDialog::slotHelp() { #ifndef KAB_EMBEDDED kapp->invokeHelp( "using-filters" ); #endif //KAB_EMBEDDED diff --git a/kaddressbook/filtereditdialog.h b/kaddressbook/filtereditdialog.h index 4dd75e4..5a8bad1 100644 --- a/kaddressbook/filtereditdialog.h +++ b/kaddressbook/filtereditdialog.h @@ -27,30 +27,32 @@ Copyright (c) 2004 Ulf Schenk $Id$ */ #ifndef FILTEREDITDIALOG_H #define FILTEREDITDIALOG_H class QButtonGroup; class QString; class QToolButton; class QWidget; class QListBoxItem; +class QCheckBox; class KLineEdit; class KListBox; class KListView; #include <kdialogbase.h> +#include <qhbuttongroup.h> #include "filter.h" class FilterDialog : public KDialogBase { Q_OBJECT public: FilterDialog( QWidget *parent, const char *name = 0 ); ~FilterDialog(); void setFilters( const Filter::List &list ); @@ -87,18 +89,21 @@ class FilterEditDialog : public KDialogBase protected slots: void filterNameTextChanged( const QString& ); void slotHelp(); private: void initGUI(); Filter mFilter; KLineEdit *mNameEdit; KListView *mCategoriesView; - QButtonGroup *mMatchRuleGroup; + QHButtonGroup *mMatchRuleGroup; + QCheckBox *mPrivate; + QCheckBox *mPublic; + QCheckBox *mConfidential; QPushButton *mEditButton; QPushButton *mRemoveButton; }; #endif |