kmail

kmsearchpatternedit.h

00001 // -*- mode: C++; c-file-style: "gnu" -*-
00002 // kmfilterrulesedit.h
00003 // Author: Marc Mutz <Marc@Mutz.com>
00004 // This code is under GPL
00005 
00006 #ifndef KMFILTERRULESEDIT_H
00007 #define KMFILTERRULESEDIT_H
00008 
00009 #include "kwidgetlister.h"
00010 
00011 #include <tqgroupbox.h>
00012 #include <tqstringlist.h>
00013 
00014 class KMSearchRule;
00015 class KMSearchPattern;
00016 
00017 template <typename T> class TQPtrList;
00018 class TQString;
00019 class TQComboBox;
00020 class TQLineEdit;
00021 class TQRadioButton;
00022 class TQWidgetStack;
00023 class TQLabel;
00024 class KMSearchPatternEdit;
00025 
00040 class KMSearchRuleWidget : public TQWidget
00041 {
00042   Q_OBJECT
00043   TQ_OBJECT
00044 public:
00047   KMSearchRuleWidget( TQWidget* parent=0, KMSearchRule* aRule=0, const char* name=0, bool headersOnly = false, bool absoluteDates = false );
00048 
00049   enum { Message, Body, AnyHeader, Recipients, Size, AgeInDays, Status,
00050          Subject, From, To, CC, ReplyTo, Organization };
00051 
00055   void setHeadersOnly( bool headersOnly );
00061   void setRule( KMSearchRule* aRule );
00063   KMSearchRule* rule() const;
00066   void reset();
00067   static int ruleFieldToId( const TQString & i18nVal );
00068 
00069 public slots:
00070   void slotFunctionChanged();
00071   void slotValueChanged();
00072 
00073 signals:
00077   void fieldChanged( const TQString & );
00078 
00081   void contentsChanged( const TQString & );
00082 
00083 protected:
00086   static TQCString ruleFieldToEnglish(const TQString & i18nVal);
00089   int indexOfRuleField( const TQCString & aName ) const;
00090 
00091 protected slots:
00092   void slotRuleFieldChanged( const TQString & );
00093 
00094 private:
00095   void initWidget();
00096   void initFieldList( bool headersOnly, bool absoluteDates );
00097 
00098   TQStringList mFilterFieldList;
00099   TQComboBox *mRuleField;
00100   TQWidgetStack *mFunctionStack;
00101   TQWidgetStack *mValueStack;
00102   bool mAbsoluteDates;
00103 };
00104 
00105 
00106 class KMSearchRuleWidgetLister : public KWidgetLister
00107 {
00108   Q_OBJECT
00109   TQ_OBJECT
00110 
00111   friend class ::KMSearchPatternEdit;
00112 
00113 public:
00114   KMSearchRuleWidgetLister( TQWidget *parent=0, const char* name=0, bool headersOnly = false, bool absoluteDates = false );
00115 
00116   virtual ~KMSearchRuleWidgetLister();
00117 
00118   void setRuleList( TQPtrList<KMSearchRule> * aList );
00119   void setHeadersOnly( bool headersOnly );
00120 
00121 public slots:
00122   void reset();
00123 
00124 protected:
00125   virtual void clearWidget( TQWidget *aWidget );
00126   virtual TQWidget* createWidget( TQWidget *parent );
00127 
00128 private:
00129   void regenerateRuleListFromWidgets();
00130   TQPtrList<KMSearchRule> *mRuleList;
00131   bool mHeadersOnly;
00132   bool mAbsoluteDates;
00133 };
00134 
00135 
00168 class KMSearchPatternEdit : public TQGroupBox  {
00169   Q_OBJECT
00170   TQ_OBJECT
00171 public:
00174   KMSearchPatternEdit(TQWidget *parent=0, const char *name=0, bool headersOnly = false, bool absoluteDates = false);
00177   KMSearchPatternEdit(const TQString & title, TQWidget *parent=0, const char *name=0, bool headersOnly = false, bool absoluteDates = false);
00178   ~KMSearchPatternEdit();
00179 
00184   void setSearchPattern( KMSearchPattern* aPattern );
00188   void setHeadersOnly( bool headersOnly );
00189 
00191   void updateSearchPattern() { mRuleLister->regenerateRuleListFromWidgets(); }
00192 
00193 public slots:
00196   void reset();
00197 
00198 signals:
00201   void maybeNameChanged();
00202 
00203 private slots:
00204   void slotRadioClicked(int aIdx);
00205   void slotAutoNameHack();
00206 
00207 private:
00208   void initLayout( bool headersOnly, bool absoluteDates );
00209 
00210   KMSearchPattern *mPattern;
00211   TQRadioButton    *mAllRBtn, *mAnyRBtn;
00212   KMSearchRuleWidgetLister *mRuleLister;
00213 };
00214 
00215 #endif