author | zautrix <zautrix> | 2005-01-16 14:10:42 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-01-16 14:10:42 (UTC) |
commit | de5f08d69c716f85cc92f20700cd24fb1ad41295 (patch) (side-by-side diff) | |
tree | 0a4f5dbbdb4fc24215ab85fa4b5e073d0e8104ef /kaddressbook | |
parent | 3f61f5a339e9c0c67c17b16214abded0d123f246 (diff) | |
download | kdepimpi-de5f08d69c716f85cc92f20700cd24fb1ad41295.zip kdepimpi-de5f08d69c716f85cc92f20700cd24fb1ad41295.tar.gz kdepimpi-de5f08d69c716f85cc92f20700cd24fb1ad41295.tar.bz2 |
added AB filter settings
-rw-r--r-- | kaddressbook/filter.cpp | 22 | ||||
-rw-r--r-- | kaddressbook/filter.h | 6 | ||||
-rw-r--r-- | kaddressbook/filtereditdialog.cpp | 40 | ||||
-rw-r--r-- | kaddressbook/filtereditdialog.h | 7 |
4 files changed, 60 insertions, 15 deletions
diff --git a/kaddressbook/filter.cpp b/kaddressbook/filter.cpp index 39d2ae4..9cb4c2d 100644 --- a/kaddressbook/filter.cpp +++ b/kaddressbook/filter.cpp @@ -15,43 +15,46 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 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 { return mName; } @@ -66,32 +69,49 @@ void Filter::apply( KABC::Addressee::List &addresseeList ) for ( iter = addresseeList.begin(); iter != addresseeList.end(); ) { if ( filterAddressee( *iter ) ) ++iter; else { #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 ); } return !( mMatchRule == Matching ); } void Filter::setEnabled( bool on ) @@ -107,40 +127,42 @@ bool Filter::isEnabled() const void Filter::setCategories( const QStringList &list ) { mCategoryList = 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 ) ); */ } int index = 0; diff --git a/kaddressbook/filter.h b/kaddressbook/filter.h index cf2c0a1..26870d7 100644 --- a/kaddressbook/filter.h +++ b/kaddressbook/filter.h @@ -25,33 +25,36 @@ #define FILTER_H #include <qstring.h> #include <qstringlist.h> #include <qvaluelist.h> #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: + 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 ); /** @return The name of the filter. */ @@ -130,24 +133,25 @@ class Filter */ static Filter::List restore( KConfig *config, QString baseGroup ); /** 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 @@ -21,32 +21,33 @@ without including the source code for Qt in the source distribution. */ /* 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> #include <klistview.h> #include <klocale.h> #include <kglobal.h> @@ -77,102 +78,115 @@ void FilterEditDialog::setFilter( const Filter &filter ) QStringList categories = filter.categories(); QListViewItem *item = mCategoriesView->firstChild(); while ( item != 0 ) { 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 QWidget *page = plainPage(); QLabel *label; QGridLayout *topLayout = new QGridLayout( page, 3, 2, 0, spacingHint() ); 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 } FilterDialog::FilterDialog( QWidget *parent, const char *name ) : KDialogBase( Plain, i18n( "Edit Address Book Filters" ), diff --git a/kaddressbook/filtereditdialog.h b/kaddressbook/filtereditdialog.h index 4dd75e4..5a8bad1 100644 --- a/kaddressbook/filtereditdialog.h +++ b/kaddressbook/filtereditdialog.h @@ -23,38 +23,40 @@ /* Enhanced Version of the file for platform independent KDE tools. 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 ); Filter::List filters() const; protected slots: void add(); @@ -83,22 +85,25 @@ class FilterEditDialog : public KDialogBase ~FilterEditDialog(); void setFilter( const Filter &filter ); Filter filter(); 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 |