[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-pim
Subject: [Kde-pim] KABC::Filter
From: Mike Pilone <mpilone () slac ! com>
Date: 2002-05-07 20:33:26
[Download RAW message or body]
Here is a first attempt at a filter class for libkabc. The API is modeled
after libkcal. Take a read and then post comments/suggestions.
Thanks,
-mike
--
Mike Pilone <mpilone@slac.com> http://www.slac.com/mpilone/personal/
GPG Fingerprint = 856C 8B36 ECF7 9156 4611 7C6B C265 05C4 162F C3B5
See http://www.slac.com/mpilone/personal/mpilone_pub_key.gpg for full key.
See http://www.gnupg.org for GPG information.
["filter.cpp" (text/x-c++src)]
/*
This file is part of KAddressBook.
Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
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., 675 Mass Ave, Cambridge, MA 02139, 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 "filter.h"
namespace KABC {
Filter::Filter()
{
mName = QString::null;
mEnabled = true;
mMatchRule = Matching;
}
Filter::Filter(const QString &name)
{
mName = name;
mEnabled = true;
mMatchRule = Matching;
}
Filter::~Filter()
{
}
void Filter::apply(Addressee::List &addresseeList)
{
Addressee::List::Iterator iter;
for (iter = addresseeList.begin(); iter != addresseeList.end(); )
{
if (filterAddressee(*iter))
++iter;
else
iter = addresseeList.erase(iter);
}
}
bool Filter::filterAddressee(const Addressee &a)
{
bool matches = true;
QStringList::Iterator iter;
for (iter = mCategoryList.begin(); (iter != mCategoryList.end()) && matches;
++iter)
{
matches = a.hasCategory(*iter);
}
if (mMatchRule == Matching)
return matches;
return !matches;
}
void Filter::save(KConfig *config)
{
config->writeEntry("Name", mName);
config->writeEntry("Enabled", mEnabled);
config->writeEntry("Categories", mCategoryList);
config->writeEntry("MatchRule", (int)mMatchRule);
}
void Filter::restore(KConfig *config)
{
mName = config->readEntry("Name", QString::null);
mEnabled = config->readBoolEntry("Enabled", true);
mCategoryList = config->readListEntry("Categories");
mMatchRule = (MatchRule)config->readNumEntry("MatchRule", Matching);
}
}
["filter.h" (text/x-chdr)]
#ifndef KABC_FILTER_H
#define KABC_FILTER_H
/*
This file is part of KAddressBook.
Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
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., 675 Mass Ave, Cambridge, MA 02139, 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 <qvaluelist.h>
#include <qstring.h>
#include <qstringlist.h>
#include <kconfig.h>
#include "addressee.h"
namespace KABC {
/** Filter for AddressBook related objects (Addressees)
*/
class Filter
{
public:
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) { mName = name; }
/** @return The name of the filter.
*/
const QString &name() const { return mName; }
/** Apply the filter to the addressee list. All addressees not passing
* the filter criterias will be removed from the list.
*
* If the MatchRule is NotMatch, then all the addressees matching the
* filter will be removed from the list.
*/
void apply(Addressee::List &addresseeList);
/** Apply the filter to the addressee.
*
* @return True if the addressee passes the criteria, false otherwise.
* The return values are opposite if the MatchRule is NotMatch.
*/
bool filterAddressee(const Addressee &a);
/** Enable or disable the filter
*/
void setEnabled(bool on) { mEnabled = on; }
/** @return True if this filter is enabled, false otherwise.
*/
bool isEnabled() const { return mEnabled; }
/** Set the list of categories. This list is used to filter addressees.
*/
void setCategoryList(const QStringList &list) { mCategoryList = list; }
/** @return The list of categories.
*/
const QStringList &categoryList() const { return mCategoryList; }
/** Saves the filter to the config file. The group should already be set.
*/
void save(KConfig *config);
/** Loads the filter from the config file. The group should already be
* set
*/
void restore(KConfig *config);
/** 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) { mMatchRule = rule; }
/** @return The current match rule
*/
MatchRule matchRule() const { return mMatchRule; }
private:
QStringList mCategoryList;
bool mEnabled;
QString mName;
MatchRule mMatchRule;
};
}
#endif
_______________________________________________
kde-pim mailing list
kde-pim@mail.kde.org
http://mail.kde.org/mailman/listinfo/kde-pim
kde-pim home page at http://pim.kde.org/
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic