libkdenetwork Library API Documentation

kscoring.h

00001 /* 00002 kscoring.h 00003 00004 Copyright (c) 2001 Mathias Waack 00005 00006 Author: Mathias Waack <mathias@atoll-net.de> 00007 00008 This program is free software; you can redistribute it and/or modify 00009 it under the terms of the GNU General Public License as published by 00010 the Free Software Foundation; either version 2 of the License, or 00011 (at your option) any later version. 00012 You should have received a copy of the GNU General Public License 00013 along with this program; if not, write to the Free Software Foundation, 00014 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, US 00015 */ 00016 00017 #ifndef KSCORING_H 00018 #define KSCORING_H 00019 00020 #include <unistd.h> 00021 00022 #include <qglobal.h> 00023 #include <qptrlist.h> 00024 #include <qptrstack.h> 00025 #include <qregexp.h> 00026 00027 #include <qobject.h> 00028 #include <qstring.h> 00029 #include <qstringlist.h> 00030 #include <qdatetime.h> 00031 #include <qcolor.h> 00032 #include <qtable.h> 00033 #include <qmap.h> 00034 #include <qdict.h> 00035 00036 #include <kdialogbase.h> 00037 #include <klineedit.h> 00038 #include <knuminput.h> 00039 00040 class QDomNode; 00041 class QDomDocument; 00042 class QDomElement; 00043 class QTextStream; 00044 class QLabel; 00045 00046 00054 //---------------------------------------------------------------------------- 00055 class ScorableGroup 00056 { 00057 public: 00058 virtual ~ScorableGroup(); 00059 }; 00060 00061 class ScorableArticle 00062 { 00063 public: 00064 virtual ~ScorableArticle(); 00065 00066 virtual void addScore(short) {} 00067 virtual void displayMessage(const QString&); 00068 virtual void changeColor(const QColor&) {} 00069 virtual QString from() const = 0; 00070 virtual QString subject() const = 0; 00071 virtual QString getHeaderByType(const QString&) const = 0; 00072 //virtual ScorableGroup group() const =0; 00073 }; 00074 00075 00076 //---------------------------------------------------------------------------- 00080 class ActionBase { 00081 public: 00082 ActionBase(); 00083 virtual ~ActionBase(); 00084 virtual QString toString() const =0; 00085 virtual void apply(ScorableArticle&) const =0; 00086 virtual ActionBase* clone() const =0; 00087 virtual int getType() const =0; 00088 virtual QString getValueString() const =0; 00089 virtual void setValue(const QString&) =0; 00090 static ActionBase* factory(int type, QString value); 00091 static QStringList userNames(); 00092 static QString userName(int type); 00093 static int getTypeForName(const QString& name); 00094 static int getTypeForUserName(const QString& name); 00095 QString userName() { return userName(getType()); } 00096 enum ActionTypes { SETSCORE, NOTIFY, COLOR }; 00097 }; 00098 00099 class ActionColor : public ActionBase { 00100 public: 00101 ActionColor(const QColor&); 00102 ActionColor(const QString&); 00103 ActionColor(const ActionColor&); 00104 virtual ~ActionColor(); 00105 virtual QString toString() const; 00106 virtual int getType() const { return COLOR; } 00107 virtual QString getValueString() const { return color.name(); } 00108 virtual void setValue(const QString& s) { color.setNamedColor(s); } 00109 void setValue(const QColor& c) { color = c; } 00110 QColor value() const { return color; } 00111 virtual void apply(ScorableArticle&) const; 00112 virtual ActionColor* clone() const; 00113 private: 00114 QColor color; 00115 }; 00116 00117 class ActionSetScore : public ActionBase { 00118 public: 00119 ActionSetScore(short); 00120 ActionSetScore(const ActionSetScore&); 00121 ActionSetScore(const QString&); 00122 virtual ~ActionSetScore(); 00123 virtual QString toString() const; 00124 virtual int getType() const { return SETSCORE; } 00125 virtual QString getValueString() const { return QString::number(val); } 00126 virtual void setValue(const QString& s) { val = s.toShort(); } 00127 void setValue(short v) { val = v; } 00128 short value() const { return val; } 00129 virtual void apply(ScorableArticle&) const; 00130 virtual ActionSetScore* clone() const; 00131 private: 00132 short val; 00133 }; 00134 00135 class ActionNotify : public ActionBase { 00136 public: 00137 ActionNotify(const QString&); 00138 ActionNotify(const ActionNotify&); 00139 virtual ~ActionNotify() {} 00140 virtual QString toString() const; 00141 virtual int getType() const { return NOTIFY; } 00142 virtual QString getValueString() const { return note; } 00143 virtual void setValue(const QString& s) { note = s; } 00144 virtual void apply(ScorableArticle&) const; 00145 virtual ActionNotify* clone() const; 00146 private: 00147 QString note; 00148 }; 00149 00150 class NotifyCollection 00151 { 00152 public: 00153 NotifyCollection(); 00154 ~NotifyCollection(); 00155 void addNote(const ScorableArticle&, const QString&); 00156 QString collection() const; 00157 void displayCollection(QWidget *p=0) const; 00158 private: 00159 struct article_info { 00160 QString from; 00161 QString subject; 00162 }; 00163 typedef QValueList<article_info> article_list; 00164 typedef QDict<article_list> note_list; 00165 note_list notifyList; 00166 }; 00167 00168 00169 //---------------------------------------------------------------------------- 00170 class KScoringExpression 00171 { 00172 friend class KScoringRule; 00173 public: 00174 enum Condition { CONTAINS, MATCH, EQUALS, SMALLER, GREATER }; 00175 00176 KScoringExpression(const QString&,const QString&,const QString&, const QString&); 00177 ~KScoringExpression(); 00178 00179 bool match(ScorableArticle& a) const ; 00180 QString getTypeString() const; 00181 static QString getTypeString(int); 00182 int getType() const; 00183 QString toString() const; 00184 void write(QTextStream& ) const; 00185 00186 bool isNeg() const { return neg; } 00187 Condition getCondition() const { return cond; } 00188 QString getExpression() const { return expr_str; } 00189 QString getHeader() const { return header; } 00190 static QStringList conditionNames(); 00191 static QStringList headerNames(); 00192 static int getConditionForName(const QString&); 00193 static QString getNameForCondition(int); 00194 private: 00195 bool neg; 00196 QString header; 00197 const char* c_header; 00198 Condition cond; 00199 QRegExp expr; 00200 QString expr_str; 00201 int expr_int; 00202 }; 00203 00204 //---------------------------------------------------------------------------- 00205 class KScoringRule 00206 { 00207 friend class KScoringManager; 00208 public: 00209 KScoringRule(const QString& name); 00210 KScoringRule(const KScoringRule& r); 00211 ~KScoringRule(); 00212 00213 typedef QPtrList<KScoringExpression> ScoreExprList; 00214 typedef QPtrList<ActionBase> ActionList; 00215 typedef QStringList GroupList; 00216 enum LinkMode { AND, OR }; 00217 00218 QString getName() const { return name; } 00219 QStringList getGroups() const { return groups; } 00220 void setGroups(QStringList l) { groups = l; } 00221 LinkMode getLinkMode() const { return link; } 00222 QString getLinkModeName() const; 00223 QString getExpireDateString() const; 00224 QDate getExpireDate() const { return expires; } 00225 void setExpireDate(QDate d) { expires = d; } 00226 bool isExpired() const; 00227 ScoreExprList getExpressions() const { return expressions; } 00228 ActionList getActions() const { return actions; } 00229 void cleanExpressions(); 00230 void cleanActions(); 00231 00232 bool matchGroup(const QString& group) const ; 00233 void applyRule(ScorableArticle& a) const; 00234 void applyRule(ScorableArticle& a, const QString& group) const; 00235 void applyAction(ScorableArticle& a) const; 00236 00237 void setLinkMode(const QString& link); 00238 void setLinkMode(LinkMode m) { link = m; } 00239 void setExpire(const QString& exp); 00240 void addExpression( KScoringExpression* ); 00241 void addGroup( const QString& group) { groups.append(group); } 00242 //void addServer(const QString& server) { servers.append(server); } 00243 void addAction(int, const QString& ); 00244 void addAction(ActionBase*); 00245 00246 void updateXML(QDomElement& e, QDomDocument& d); 00247 QString toString() const; 00248 00249 // writes the rule in XML format into the textstream 00250 void write(QTextStream& ) const; 00251 protected: 00253 void setName(QString n) { name = n; } 00254 private: 00255 QString name; 00256 GroupList groups; 00257 //ServerList servers; 00258 LinkMode link; 00259 ScoreExprList expressions; 00260 ActionList actions; 00261 QDate expires; 00262 }; 00263 00268 class RuleStack 00269 { 00270 public: 00271 RuleStack(); 00272 ~RuleStack(); 00274 void push(QPtrList<KScoringRule>&); 00277 void pop(QPtrList<KScoringRule>&); 00279 void top(QPtrList<KScoringRule>&); 00281 void drop(); 00282 private: 00283 QPtrStack< QPtrList<KScoringRule> > stack; 00284 }; 00285 00286 //---------------------------------------------------------------------------- 00287 // Manages the score rules. 00288 class KScoringManager : public QObject 00289 { 00290 Q_OBJECT 00291 00292 public: 00293 //* this is the container for all rules 00294 typedef QPtrList<KScoringRule> ScoringRuleList; 00295 00296 KScoringManager(const QString& appName = QString::null); 00297 virtual ~KScoringManager(); 00298 00299 //* returns a list of all available groups, must be overridden 00300 virtual QStringList getGroups() const =0; 00301 00304 virtual QStringList getDefaultHeaders() const; 00305 00306 //* setting current server and group and calling applyRules(ScorableArticle&) 00307 void applyRules(ScorableArticle& article, const QString& group/*, const QString& server*/); 00308 //* assuming a properly set group 00309 void applyRules(ScorableArticle&); 00310 //* same as above 00311 void applyRules(ScorableGroup* group); 00312 00313 //* pushes the current rule list onto a stack 00314 void pushRuleList(); 00315 //* restores the current rule list from list stored on a stack 00316 //* by a previous call to pushRuleList (this implicitly deletes the 00317 //* current rule list) 00318 void popRuleList(); 00319 //* removes the TOS from the stack of rule lists 00320 void removeTOS(); 00321 00322 KScoringRule* addRule(KScoringRule *); 00323 KScoringRule* addRule(const ScorableArticle&, QString group, short =0); 00324 KScoringRule* addRule(); 00325 void cancelNewRule(KScoringRule *); 00326 void deleteRule(KScoringRule *); 00327 void editRule(KScoringRule *e, QWidget *w=0); 00328 KScoringRule* copyRule(KScoringRule *); 00329 void setGroup(const QString& g); 00330 // has to be called after setGroup() or initCache() 00331 bool hasRulesForCurrentGroup(); 00332 QString findUniqueName() const; 00333 00336 void editorReady(); 00337 00338 ScoringRuleList getAllRules() const { return allRules; } 00339 KScoringRule *findRule(const QString&); 00340 QStringList getRuleNames(); 00341 void setRuleName(KScoringRule *, const QString&); 00342 int getRuleCount() const { return allRules.count(); } 00343 QString toString() const; 00344 00345 bool setCacheValid(bool v); 00346 bool isCacheValid() { return cacheValid; } 00347 void initCache(const QString& group/*, const QString& server*/); 00348 00349 void load(); 00350 void save(); 00351 00352 //--------------- Properties 00353 virtual bool canScores() const { return true; } 00354 virtual bool canNotes() const { return true; } 00355 virtual bool canColors() const { return false; } 00356 virtual bool hasFeature(int); 00357 00358 signals: 00359 void changedRules(); 00360 void changedRuleName(const QString& oldName, const QString& newName); 00361 void finishedEditing(); 00362 00363 private: 00364 void addRuleInternal(KScoringRule *e); 00365 void expireRules(); 00366 00367 QDomDocument createXMLfromInternal(); 00368 void createInternalFromXML(QDomNode); 00369 00370 // list of all Rules 00371 ScoringRuleList allRules; 00372 00373 // the stack for temporary storing rule lists 00374 RuleStack stack; 00375 00376 // for the cache 00377 bool cacheValid; 00378 // current rule set, ie the cache 00379 ScoringRuleList ruleList; 00380 //QString server; 00381 QString group; 00382 00383 //ScorableServer* _s; 00384 00385 // filename of the scorefile 00386 QString mFilename; 00387 }; 00388 00389 00390 //---------------------------------------------------------------------------- 00391 class NotifyDialog : public KDialogBase 00392 { 00393 Q_OBJECT 00394 public: 00395 static void display(ScorableArticle&,const QString&); 00396 protected slots: 00397 void slotShowAgainToggled(bool); 00398 private: 00399 NotifyDialog(QWidget* p =0); 00400 static NotifyDialog *me; 00401 00402 QLabel *note; 00403 QString msg; 00404 typedef QMap<QString,bool> NotesMap; 00405 static NotesMap dict; 00406 }; 00407 00408 00409 #endif
KDE Logo
This file is part of the documentation for libkdenetwork Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Oct 1 15:18:39 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003