diff options
Diffstat (limited to 'libkdepim/kscoringeditor.h')
-rw-r--r-- | libkdepim/kscoringeditor.h | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/libkdepim/kscoringeditor.h b/libkdepim/kscoringeditor.h new file mode 100644 index 000000000..5fc919f86 --- /dev/null +++ b/libkdepim/kscoringeditor.h @@ -0,0 +1,308 @@ +/* + kscoringeditor.h + + Copyright (c) 2001 Mathias Waack + Copyright (C) 2005 by Volker Krause <volker.krause@rwth-aachen.de> + + Author: Mathias Waack <mathias@atoll-net.de> + + 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. + 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US +*/ + +#ifndef SCOREEDITWIDGET_H +#define SCOREEDITWIDGET_H + +#include <qmap.h> +#include <kdialogbase.h> +#include <qtable.h> +#include <qframe.h> + +#include "kwidgetlister.h" + +#include <kdepimmacros.h> + +class KComboBox; +class KLineEdit; +class KIntSpinBox; +class KListBox; +class QFrame; +class QLabel; +class QListBoxItem; +class QPushButton; +class QCheckBox; +class QRadioButton; + +class KScoringRule; +class KScoringExpression; +class KScoringManager; +class ActionBase; +class KScoringEditor; +class ScoreEditWidget; +class KColorCombo; + +/** this widget implements an editor for one condition. + It is used in ExpressionEditWidget +*/ +class KDE_EXPORT SingleConditionWidget : public QFrame +{ + Q_OBJECT + friend class ConditionEditWidget; +public: + SingleConditionWidget(KScoringManager *,QWidget *p =0, const char *n =0); + ~SingleConditionWidget(); + void setCondition(KScoringExpression*); + KScoringExpression *createCondition() const; + void clear(); + +protected slots: + void toggleRegExpButton( int ); + void showRegExpDialog(); + +private: + /** marks a condition as negated */ + QCheckBox *neg; + /** list of possible headers */ + KComboBox *headers; + /** list of match types */ + KComboBox *matches; + /** the expression which will be matched */ + KLineEdit *expr; + /** the button to open the regexp-editor */ + QPushButton *regExpButton; + + KScoringManager *manager; +}; + +/** this widget implements the conditions editor + */ +class ConditionEditWidget: public KWidgetLister +{ + Q_OBJECT +public: + ConditionEditWidget(KScoringManager *,QWidget *p =0, const char *n =0); + ~ConditionEditWidget(); + QWidget* createWidget(QWidget*); + void updateRule(KScoringRule*); + void clearWidget(QWidget*); +public slots: + void slotEditRule(KScoringRule*); +private: + KScoringManager *manager; +}; + +/** this widget implements an editor for one action. + It is used in ActionEditWidget +*/ +class SingleActionWidget : public QWidget +{ + Q_OBJECT + friend class ActionEditWidget; +public: + SingleActionWidget(KScoringManager *m,QWidget *p =0, const char *n =0); + ~SingleActionWidget(); + void setAction(ActionBase*); + ActionBase *createAction() const; + void clear(); +private: + /** the list of available action */ + KComboBox *types; + /** the stack of the edit widgets for each action type */ + QWidgetStack *stack; + /** the notify action editor */ + KLineEdit *notifyEditor; + /** the score acton editor */ + KIntSpinBox *scoreEditor; + /** the color action editor */ + KColorCombo *colorEditor; + /** the dummy label */ + QLabel *dummyLabel; + + KScoringManager *manager; +}; + +/** this widget implements the action editor + */ +class KDE_EXPORT ActionEditWidget : public KWidgetLister +{ + Q_OBJECT +public: + ActionEditWidget(KScoringManager *m,QWidget *p =0, const char *n =0); + ~ActionEditWidget(); + QWidget* createWidget(QWidget *parent); + void updateRule(KScoringRule*); + void clearWidget(QWidget *); +public slots: + void slotEditRule(KScoringRule *); +private: + KScoringManager *manager; +}; + +/** This widget implements the rule editor + */ +class RuleEditWidget : public QWidget +{ + Q_OBJECT +public: + RuleEditWidget(KScoringManager *m,QWidget *p =0, const char *n =0); + ~RuleEditWidget(); +public slots: + void setDirty(); + void slotEditRule(const QString&); + void updateRule(KScoringRule*); + void updateRule(); +signals: + void shrink(); +protected slots: + void slotAddGroup(); + void slotShrink(); +private slots: + void slotExpireEditChanged(int value); +private: + void clearContents(); + + bool dirty; + /** the name of the rule */ + KLineEdit *ruleNameEdit; + /** the list of groups this rule applies to */ + KLineEdit *groupsEdit; + /** list of all available groups */ + KComboBox *groupsBox; + /** the expire enable */ + QCheckBox *expireCheck; + /** the label to the expireCheck */ + QLabel *expireLabel; + /** the expire delay */ + KIntSpinBox *expireEdit; + /** the link modes of the conditions */ + QRadioButton *linkModeOr, *linkModeAnd; + /** the actions editor */ + ActionEditWidget *actionEditor; + /** the conditions editor */ + ConditionEditWidget *condEditor; + + KScoringManager *manager; + + // the old name of the current rule + QString oldRuleName; +}; + +/** This widget shows a list of rules with buttons for + copy, delete aso. +*/ +class KDE_EXPORT RuleListWidget : public QWidget +{ + Q_OBJECT +public: + RuleListWidget(KScoringManager *m, bool =false, QWidget *p =0, const char *n =0); + ~RuleListWidget(); + QString currentRule() const { return ruleList->currentText(); } +protected: + void updateButton(); + +signals: + void ruleSelected(const QString&); + void ruleEdited(const QString&); + void leavingRule(); +public slots: + void slotRuleSelected(const QString&); + void slotRuleSelected(QListBoxItem *); + void slotRuleSelected(int); + void updateRuleList(); + void updateRuleList(const KScoringRule*); + void slotRuleNameChanged(const QString&,const QString&); +protected slots: + void slotGroupFilter(const QString&); + void slotEditRule(QListBoxItem*); + void slotEditRule(const QString&); + void slotEditRule(); + void slotDelRule(); + void slotNewRule(); + void slotCopyRule(); + void slotRuleUp(); + void slotRuleDown(); + +private: + /** the list of rules */ + KListBox *ruleList; + /** the current group */ + QString group; + /** marks if we're alone or together with the edit widget */ + bool alone; + + KScoringManager *manager; + + QPushButton *editRule; + QPushButton *newRule; + QPushButton *delRule; + QPushButton *copyRule; + QPushButton *mRuleUp; + QPushButton *mRuleDown; +}; + +class KDE_EXPORT KScoringEditor : public KDialogBase +{ + Q_OBJECT +public: + ~KScoringEditor(); + void setRule(KScoringRule*); + static KScoringEditor *createEditor(KScoringManager* m, QWidget *parent=0, const char *name=0); + static KScoringEditor *editor() { return scoreEditor; } + void setDirty(); +protected: + KScoringEditor(KScoringManager* m, QWidget *parent=0, const char *name=0); +private: + /** the editor for the current rule */ + RuleEditWidget* ruleEditor; + /** the list of known rules */ + RuleListWidget *ruleLister; +protected slots: + void slotShrink(); + void slotDoShrink(); + void slotApply(); + void slotOk(); + void slotCancel(); + void slotFinished(); +private: + KScoringManager *manager; + ScoreEditWidget *edit; + /** make sure that there is only one instance of ourselve */ + static KScoringEditor *scoreEditor; +}; + +class KScoringEditorWidgetDialog : public KDialogBase +{ + Q_OBJECT +public: + KScoringEditorWidgetDialog(KScoringManager *m, const QString& rName, QWidget *parent=0, const char *name=0); +protected slots: + void slotApply(); + void slotOk(); + void slotShrink(); + void slotDoShrink(); +private: + RuleEditWidget *ruleEditor; + KScoringManager *manager; + QString ruleName; +}; + +class KDE_EXPORT KScoringEditorWidget : public QWidget +{ + Q_OBJECT +public: + KScoringEditorWidget(KScoringManager *m,QWidget *p =0, const char *n =0); + ~KScoringEditorWidget(); +protected slots: + void slotRuleEdited(const QString&); +private: + RuleListWidget *ruleLister; + KScoringManager *manager; +}; + + +#endif // SCOREEDITWIDGET_H |