File indexing completed on 2024-05-05 05:00:08

0001 /*
0002     SPDX-FileCopyrightText: 2005 Ivor Hewitt <ivor@ivor.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 #ifndef FILTEROPTS_H
0007 #define FILTEROPTS_H
0008 
0009 #include <QAbstractItemModel>
0010 #include <QTabWidget>
0011 
0012 #include <kcmodule.h>
0013 #include <ksharedconfig.h>
0014 
0015 class QListWidget;
0016 class QPushButton;
0017 class QLineEdit;
0018 class QCheckBox;
0019 class QTreeView;
0020 class KListWidgetSearchLine;
0021 class KPluralHandlingSpinBox;
0022 
0023 class AutomaticFilterModel : public QAbstractItemModel
0024 {
0025     Q_OBJECT
0026 public:
0027     AutomaticFilterModel(QObject *parent = nullptr);
0028 
0029     void load(KConfigGroup &cg);
0030     void save(KConfigGroup &cg);
0031     void defaults();
0032 
0033     QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
0034     QModelIndex parent(const QModelIndex &index) const override;
0035     bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
0036     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0037     int columnCount(const QModelIndex &parent = QModelIndex()) const override;
0038     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0039     bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
0040     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
0041     Qt::ItemFlags flags(const QModelIndex &index) const override;
0042 
0043 signals:
0044     void changed(bool);
0045 
0046 private:
0047     struct FilterConfig {
0048         bool enableFilter;
0049         QString filterName;
0050         QString filterURL;
0051         QString filterLocalFilename;
0052     };
0053     QList<struct FilterConfig> mFilters;
0054 
0055     KSharedConfig::Ptr mConfig;
0056     QString mGroupname;
0057 };
0058 
0059 class KCMFilter : public KCModule
0060 {
0061     Q_OBJECT
0062 public:
0063     //TODO KF6: when dropping compatibility with KF5, remove QVariantList argument
0064     KCMFilter(QObject *parent, const KPluginMetaData &md={}, const QVariantList &args={});
0065     ~KCMFilter() override;
0066 
0067     void load() override;
0068     void save() override;
0069     void defaults() override;
0070 
0071 protected Q_SLOTS:
0072     void insertFilter();
0073     void updateFilter();
0074     void removeFilter();
0075     void slotItemSelected();
0076     void slotEnableChecked();
0077     void slotKillChecked();
0078     void slotInfoLinkActivated(const QString &url);
0079 
0080     void exportFilters();
0081     void importFilters();
0082     void updateButton();
0083 
0084     void spinBoxChanged(int);
0085 
0086 #if QT_VERSION_MAJOR < 6
0087     void setNeedsSave(bool needs) {emit changed(needs);}
0088 #endif
0089 
0090 private:
0091     QListWidget *mListBox;
0092     KListWidgetSearchLine *mSearchLine;
0093     QLineEdit *mString;
0094     QCheckBox *mEnableCheck;
0095     QCheckBox *mKillCheck;
0096     QPushButton *mInsertButton;
0097     QPushButton *mUpdateButton;
0098     QPushButton *mRemoveButton;
0099     QPushButton *mImportButton;
0100     QPushButton *mExportButton;
0101     QTabWidget *mFilterWidget;
0102     QTreeView *mAutomaticFilterList;
0103     KPluralHandlingSpinBox *mRefreshFreqSpinBox;
0104 
0105     KSharedConfig::Ptr mConfig;
0106     QString mGroupname;
0107     int mSelCount;
0108     QString mOriginalString;
0109 
0110     AutomaticFilterModel mAutomaticFilterModel;
0111 };
0112 
0113 #endif