You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tellico/src/filterdialog.h

174 lines
4.1 KiB

/***************************************************************************
copyright : (C) 2003-2006 by Robby Stephenson
email : robby@periapsis.org
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of version 2 of the GNU General Public License as *
* published by the Free Software Foundation; *
* *
***************************************************************************/
#ifndef FILTERDIALOG_H
#define FILTERDIALOG_H
// kwidgetlister is copied from tdepim/libtdenetwork cvs
#include "gui/kwidgetlister.h"
#include "filter.h"
#include "datavectors.h"
#include <kdialogbase.h>
#include <tqhbox.h>
#include <tqstring.h>
#include <tqstringlist.h>
class KComboBox;
class KLineEdit;
class KPushButton;
class TQRadioButton;
class TQDialog;
namespace Tellico {
class FilterDialog;
/**
* A widget to edit a single FilterRule.
* It consists of a read-only @ref KComboBox for the field,
* a read-only @ref KComboBox for the function and
* a @ref KLineEdit for the content or the pattern (in case of regexps).
*
* This class borrows heavily from KMSearchRule in kmail by Marc Mutz
*
* @author Robby Stephenson
*/
class FilterRuleWidget : public TQHBox {
Q_OBJECT
public:
/**
* Constructor. You give a @ref FilterRule as parameter, which will
* be used to initialize the widget.
*/
FilterRuleWidget(FilterRule* rule, TQWidget* parent, const char* name=0);
/**
* Set the rule. The rule is accepted regardless of the return
* value of @ref FilterRule::isEmpty. This widget makes a shallow
* copy of @p rule and operates directly on it. If @p rule is
* 0, the widget resets itself, takes user input, but does essentially
* nothing. If you pass 0, you should probably disable it.
*/
void setRule(const FilterRule* rule);
/**
* Return a reference to the currently worked-on @ref FilterRule.
*/
FilterRule* rule() const;
/**
* Resets the rule currently worked on and updates the widget accordingly.
*/
void reset();
signals:
void signalModified();
public slots:
void setFocus();
protected slots:
void slotEditRegExp();
void slotRuleFieldChanged(int which);
void slotRuleFunctionChanged(int which);
private:
void initLists();
void initWidget();
KComboBox* m_ruleField;
KComboBox* m_ruleFunc;
KLineEdit* m_ruleValue;
KPushButton* m_editRegExp;
TQDialog* m_editRegExpDialog;
TQStringList m_ruleFieldList;
TQStringList m_ruleFuncList;
};
class FilterRuleWidgetLister : public KWidgetLister {
Q_OBJECT
public:
FilterRuleWidgetLister(TQWidget* parent, const char* name=0);
const TQPtrList<TQWidget>& widgetList() const;
void setFilter(Filter::Ptr filter);
public slots:
void reset();
virtual void setFocus();
signals:
void signalModified();
protected:
virtual void clearWidget(TQWidget* widget);
virtual TQWidget* createWidget(TQWidget* parent);
};
/**
* @author Robby Stephenson
*/
class FilterDialog : public KDialogBase {
Q_OBJECT
public:
enum Mode {
CreateFilter,
ModifyFilter
};
/**
* The constructor sets up the dialog.
*
* @param parent A pointer to the parent widget
* @param name The widget name
*/
FilterDialog(Mode mode, TQWidget* parent, const char* name=0);
FilterPtr currentFilter();
void setFilter(FilterPtr filter);
public slots:
void slotClear();
protected slots:
virtual void slotOk();
virtual void slotApply();
void slotShrink();
void slotFilterChanged();
void slotSaveFilter();
signals:
void signalUpdateFilter(Tellico::FilterPtr);
void signalCollectionModified();
private:
void init();
FilterPtr m_filter;
const Mode m_mode;
TQRadioButton* m_matchAll;
TQRadioButton* m_matchAny;
FilterRuleWidgetLister* m_ruleLister;
KLineEdit* m_filterName;
KPushButton* m_saveFilter;
};
} // end namespace
#endif