[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