kmfiltermgr.h
00001 /* 00002 * kmail: KDE mail client 00003 * Copyright (c) 1996-1998 Stefan Taferner <taferner@kde.org> 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License as published by 00007 * the Free Software Foundation; either version 2 of the License, or 00008 * (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with this program; if not, write to the Free Software 00017 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00018 * 00019 */ 00020 #ifndef kmfiltermgr_h 00021 #define kmfiltermgr_h 00022 00023 #include "kmfilteraction.h" // for KMFilterAction::ReturnCode 00024 #include "kmfolder.h" 00025 00026 #include <tqguardedptr.h> 00027 #include <tqobject.h> 00028 00029 class KMFilter; 00030 class KMFilterDlg; 00031 template <typename T> class TQValueVector; 00032 template <typename T> class TQValueList; 00033 00034 class KMFilterMgr: public TQObject 00035 { 00036 Q_OBJECT 00037 00038 00039 public: 00040 KMFilterMgr(bool popFilter = false); 00041 virtual ~KMFilterMgr(); 00042 00044 void clear(); 00045 00046 enum FilterSet { NoSet = 0x0, Inbound = 0x1, Outbound = 0x2, Explicit = 0x4, 00047 All = Inbound|Outbound|Explicit }; 00048 00050 void readConfig(void); 00051 00053 void writeConfig(bool withSync=TRUE); 00054 00058 void openDialog( TQWidget *parent, bool checkForEmptyFilterList = true ); 00059 00062 void createFilter( const TQCString & field, const TQString & value ); 00063 00064 bool beginFiltering(KMMsgBase *msgBase) const; 00065 int moveMessage(KMMessage *msg) const; 00066 void endFiltering(KMMsgBase *msgBase) const; 00067 00073 bool atLeastOneFilterAppliesTo( unsigned int accountID ) const; 00079 bool atLeastOneIncomingFilterAppliesTo( unsigned int accountID ) const; 00083 bool atLeastOneOnlineImapFolderTarget(); 00084 00087 const TQString createUniqueName( const TQString & name ); 00088 00092 void appendFilters( const TQValueList<KMFilter*> &filters, 00093 bool replaceIfNameExists = false ); 00094 00097 void setFilters( const TQValueList<KMFilter*> &filters ); 00098 00100 const TQValueList<KMFilter*> & filters() const { return mFilters; } 00101 00116 int process( KMMessage * msg, FilterSet aSet = Inbound, 00117 bool account = false, uint accountId = 0 ); 00118 00123 int process( KMMessage * msg, const KMFilter * filter ); 00124 00127 int process( TQ_UINT32 serNum, const KMFilter * filter ); 00128 00129 void cleanup(); 00132 void ref(); 00138 void deref(bool force = false); 00139 00144 int tempOpenFolder(KMFolder* aFolder); 00145 00148 void beginUpdate() {} 00149 00151 void endUpdate(); 00152 00154 #ifndef NDEBUG 00155 void dump() const; 00156 #endif 00157 00162 bool folderRemoved(KMFolder* aFolder, KMFolder* aNewFolder); 00163 00166 void folderCreated(KMFolder*) {} 00167 00169 void setShowLaterMsgs( bool show ) { 00170 mShowLater = show; 00171 } 00172 00174 bool showLaterMsgs() const { 00175 return mShowLater; 00176 } 00177 public slots: 00178 void slotFolderRemoved( KMFolder *aFolder ); 00179 00180 signals: 00181 void filterListUpdated(); 00182 00183 private: 00184 int processPop( KMMessage *msg ) const; 00186 bool isMatching( TQ_UINT32 serNum, const KMFilter *filter ); 00187 00188 TQGuardedPtr<KMFilterDlg> mEditDialog; 00189 TQValueVector<KMFolder *> mOpenFolders; 00190 TQValueList<KMFilter *> mFilters; 00191 bool bPopFilter; 00192 bool mShowLater; 00193 bool mDirtyBufferedFolderTarget; 00194 bool mBufferedFolderTarget; 00195 00196 int mRefCount; 00197 }; 00198 00199 #endif /*kmfiltermgr_h*/