libkdepim
kscoring.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef KSCORING_H
00019 #define KSCORING_H
00020
00021 #include <unistd.h>
00022
00023 #include <tqglobal.h>
00024 #include <tqptrlist.h>
00025 #include <tqptrstack.h>
00026 #include <tqregexp.h>
00027
00028 #include <tqobject.h>
00029 #include <tqstring.h>
00030 #include <tqstringlist.h>
00031 #include <tqdatetime.h>
00032 #include <tqcolor.h>
00033 #include <tqtable.h>
00034 #include <tqmap.h>
00035 #include <tqdict.h>
00036
00037 #include <kdialogbase.h>
00038 #include <klineedit.h>
00039 #include <knuminput.h>
00040
00041 #include <kdepimmacros.h>
00042
00043 class TQDomNode;
00044 class TQDomDocument;
00045 class TQDomElement;
00046 class TQTextStream;
00047 class TQLabel;
00048
00049
00057
00058 class KDE_EXPORT ScorableGroup
00059 {
00060 public:
00061 virtual ~ScorableGroup();
00062 };
00063
00064 class KDE_EXPORT ScorableArticle
00065 {
00066 public:
00067 virtual ~ScorableArticle();
00068
00069 virtual void addScore(short) {}
00070 virtual void displayMessage(const TQString&);
00071 virtual void changeColor(const TQColor&) {}
00072 virtual void markAsRead() {}
00073 virtual TQString from() const = 0;
00074 virtual TQString subject() const = 0;
00075 virtual TQString getHeaderByType(const TQString&) const = 0;
00076
00077 };
00078
00079
00080
00084 class KDE_EXPORT ActionBase {
00085 public:
00086 ActionBase();
00087 virtual ~ActionBase();
00088 virtual TQString toString() const =0;
00089 virtual void apply(ScorableArticle&) const =0;
00090 virtual ActionBase* clone() const =0;
00091 virtual int getType() const =0;
00092 virtual TQString getValueString() const { return TQString(); }
00093 virtual void setValue(const TQString&) {}
00094 static ActionBase* factory(int type, const TQString &value);
00095 static TQStringList userNames();
00096 static TQString userName(int type);
00097 static int getTypeForName(const TQString& name);
00098 static int getTypeForUserName(const TQString& name);
00099 TQString userName() { return userName(getType()); }
00100 enum ActionTypes { SETSCORE, NOTIFY, COLOR, MARKASREAD };
00101 };
00102
00103 class KDE_EXPORT ActionColor : public ActionBase {
00104 public:
00105 ActionColor(const TQColor&);
00106 ActionColor(const TQString&);
00107 ActionColor(const ActionColor&);
00108 virtual ~ActionColor();
00109 virtual TQString toString() const;
00110 virtual int getType() const { return COLOR; }
00111 virtual TQString getValueString() const { return color.name(); }
00112 virtual void setValue(const TQString& s) { color.setNamedColor(s); }
00113 void setValue(const TQColor& c) { color = c; }
00114 TQColor value() const { return color; }
00115 virtual void apply(ScorableArticle&) const;
00116 virtual ActionColor* clone() const;
00117 private:
00118 TQColor color;
00119 };
00120
00121 class KDE_EXPORT ActionSetScore : public ActionBase {
00122 public:
00123 ActionSetScore(short);
00124 ActionSetScore(const ActionSetScore&);
00125 ActionSetScore(const TQString&);
00126 virtual ~ActionSetScore();
00127 virtual TQString toString() const;
00128 virtual int getType() const { return SETSCORE; }
00129 virtual TQString getValueString() const { return TQString::number(val); }
00130 virtual void setValue(const TQString& s) { val = s.toShort(); }
00131 void setValue(short v) { val = v; }
00132 short value() const { return val; }
00133 virtual void apply(ScorableArticle&) const;
00134 virtual ActionSetScore* clone() const;
00135 private:
00136 short val;
00137 };
00138
00139 class KDE_EXPORT ActionNotify : public ActionBase {
00140 public:
00141 ActionNotify(const TQString&);
00142 ActionNotify(const ActionNotify&);
00143 virtual ~ActionNotify() {}
00144 virtual TQString toString() const;
00145 virtual int getType() const { return NOTIFY; }
00146 virtual TQString getValueString() const { return note; }
00147 virtual void setValue(const TQString& s) { note = s; }
00148 virtual void apply(ScorableArticle&) const;
00149 virtual ActionNotify* clone() const;
00150 private:
00151 TQString note;
00152 };
00153
00154 class KDE_EXPORT ActionMarkAsRead : public ActionBase {
00155 public:
00156 ActionMarkAsRead();
00157 ActionMarkAsRead( const ActionMarkAsRead& );
00158 virtual ~ActionMarkAsRead() {}
00159 virtual TQString toString() const;
00160 virtual int getType() const { return MARKASREAD; }
00161 virtual void apply( ScorableArticle &article ) const;
00162 virtual ActionMarkAsRead* clone() const;
00163 };
00164
00165 class KDE_EXPORT NotifyCollection
00166 {
00167 public:
00168 NotifyCollection();
00169 ~NotifyCollection();
00170 void addNote(const ScorableArticle&, const TQString&);
00171 TQString collection() const;
00172 void displayCollection(TQWidget *p=0) const;
00173 private:
00174 struct article_info {
00175 TQString from;
00176 TQString subject;
00177 };
00178 typedef TQValueList<article_info> article_list;
00179 typedef TQDict<article_list> note_list;
00180 note_list notifyList;
00181 };
00182
00183
00184
00185 class KDE_EXPORT KScoringExpression
00186 {
00187 friend class KScoringRule;
00188 public:
00189 enum Condition { CONTAINS, MATCH, EQUALS, SMALLER, GREATER, MATCHCS };
00190
00191 KScoringExpression(const TQString&,const TQString&,const TQString&, const TQString&);
00192 ~KScoringExpression();
00193
00194 bool match(ScorableArticle& a) const ;
00195 TQString getTypeString() const;
00196 static TQString getTypeString(int);
00197 int getType() const;
00198 TQString toString() const;
00199 void write(TQTextStream& ) const;
00200
00201 bool isNeg() const { return neg; }
00202 Condition getCondition() const { return cond; }
00203 TQString getExpression() const { return expr_str; }
00204 TQString getHeader() const { return header; }
00205 static TQStringList conditionNames();
00206 static TQStringList headerNames();
00207 static int getConditionForName(const TQString&);
00208 static TQString getNameForCondition(int);
00209 private:
00210 bool neg;
00211 TQString header;
00212 const char* c_header;
00213 Condition cond;
00214 TQRegExp expr;
00215 TQString expr_str;
00216 int expr_int;
00217 };
00218
00219
00220 class KDE_EXPORT KScoringRule
00221 {
00222 friend class KScoringManager;
00223 public:
00224 KScoringRule(const TQString& name);
00225 KScoringRule(const KScoringRule& r);
00226 ~KScoringRule();
00227
00228 typedef TQPtrList<KScoringExpression> ScoreExprList;
00229 typedef TQPtrList<ActionBase> ActionList;
00230 typedef TQStringList GroupList;
00231 enum LinkMode { AND, OR };
00232
00233 TQString getName() const { return name; }
00234 TQStringList getGroups() const { return groups; }
00235 void setGroups(const TQStringList &l) { groups = l; }
00236 LinkMode getLinkMode() const { return link; }
00237 TQString getLinkModeName() const;
00238 TQString getExpireDateString() const;
00239 TQDate getExpireDate() const { return expires; }
00240 void setExpireDate(const TQDate &d) { expires = d; }
00241 bool isExpired() const;
00242 ScoreExprList getExpressions() const { return expressions; }
00243 ActionList getActions() const { return actions; }
00244 void cleanExpressions();
00245 void cleanActions();
00246
00247 bool matchGroup(const TQString& group) const ;
00248 void applyRule(ScorableArticle& a) const;
00249 void applyRule(ScorableArticle& a, const TQString& group) const;
00250 void applyAction(ScorableArticle& a) const;
00251
00252 void setLinkMode(const TQString& link);
00253 void setLinkMode(LinkMode m) { link = m; }
00254 void setExpire(const TQString& exp);
00255 void addExpression( KScoringExpression* );
00256 void addGroup( const TQString& group) { groups.append(group); }
00257
00258 void addAction(int, const TQString& );
00259 void addAction(ActionBase*);
00260
00261 void updateXML(TQDomElement& e, TQDomDocument& d);
00262 TQString toString() const;
00263
00264
00265 void write(TQTextStream& ) const;
00266 protected:
00268 void setName(const TQString &n) { name = n; }
00269 private:
00270 TQString name;
00271 GroupList groups;
00272
00273 LinkMode link;
00274 ScoreExprList expressions;
00275 ActionList actions;
00276 TQDate expires;
00277 };
00278
00283 class KDE_EXPORT RuleStack
00284 {
00285 public:
00286 RuleStack();
00287 ~RuleStack();
00289 void push(TQPtrList<KScoringRule>&);
00292 void pop(TQPtrList<KScoringRule>&);
00294 void top(TQPtrList<KScoringRule>&);
00296 void drop();
00297 private:
00298 TQPtrStack< TQPtrList<KScoringRule> > stack;
00299 };
00300
00301
00302
00303 class KDE_EXPORT KScoringManager : public TQObject
00304 {
00305 Q_OBJECT
00306 TQ_OBJECT
00307
00308 public:
00309
00310 typedef TQPtrList<KScoringRule> ScoringRuleList;
00311
00312 KScoringManager(const TQString& appName = TQString());
00313 virtual ~KScoringManager();
00314
00315
00316 virtual TQStringList getGroups() const =0;
00317
00320 virtual TQStringList getDefaultHeaders() const;
00321
00322
00323 void applyRules(ScorableArticle& article, const TQString& group);
00324
00325 void applyRules(ScorableArticle&);
00326
00327 void applyRules(ScorableGroup* group);
00328
00329
00330 void pushRuleList();
00331
00332
00333
00334 void popRuleList();
00335
00336 void removeTOS();
00337
00338 KScoringRule* addRule(KScoringRule *);
00339 KScoringRule* addRule(const ScorableArticle&, TQString group, short =0);
00340 KScoringRule* addRule();
00341 void cancelNewRule(KScoringRule *);
00342 void deleteRule(KScoringRule *);
00343 void editRule(KScoringRule *e, TQWidget *w=0);
00344 KScoringRule* copyRule(KScoringRule *);
00345 void moveRuleAbove( KScoringRule *above, KScoringRule *below );
00346 void moveRuleBelow( KScoringRule *below, KScoringRule *above );
00347 void setGroup(const TQString& g);
00348
00349 bool hasRulesForCurrentGroup();
00350 TQString findUniqueName() const;
00351
00354 void editorReady();
00355
00356 ScoringRuleList getAllRules() const { return allRules; }
00357 KScoringRule *findRule(const TQString&);
00358 TQStringList getRuleNames();
00359 void setRuleName(KScoringRule *, const TQString&);
00360 int getRuleCount() const { return allRules.count(); }
00361 TQString toString() const;
00362
00363 bool setCacheValid(bool v);
00364 bool isCacheValid() { return cacheValid; }
00365 void initCache(const TQString& group);
00366
00367 void load();
00368 void save();
00369
00370
00371 virtual bool canScores() const { return true; }
00372 virtual bool canNotes() const { return true; }
00373 virtual bool canColors() const { return false; }
00374 virtual bool canMarkAsRead() const { return false; }
00375 virtual bool hasFeature(int);
00376
00377 signals:
00378 void changedRules();
00379 void changedRuleName(const TQString& oldName, const TQString& newName);
00380 void finishedEditing();
00381
00382 private:
00383 void addRuleInternal(KScoringRule *e);
00384 void expireRules();
00385
00386 TQDomDocument createXMLfromInternal();
00387 void createInternalFromXML(TQDomNode);
00388
00389
00390 ScoringRuleList allRules;
00391
00392
00393 RuleStack stack;
00394
00395
00396 bool cacheValid;
00397
00398 ScoringRuleList ruleList;
00399
00400 TQString group;
00401
00402
00403
00404
00405 TQString mFilename;
00406 };
00407
00408
00409
00410 class KDE_EXPORT NotifyDialog : public KDialogBase
00411 {
00412 Q_OBJECT
00413 TQ_OBJECT
00414 public:
00415 static void display(ScorableArticle&,const TQString&);
00416 protected slots:
00417 void slotShowAgainToggled(bool);
00418 private:
00419 NotifyDialog(TQWidget* p =0);
00420 static NotifyDialog *me;
00421
00422 TQLabel *note;
00423 TQString msg;
00424 typedef TQMap<TQString,bool> NotesMap;
00425 static NotesMap dict;
00426 };
00427
00428
00429 #endif
|