File indexing completed on 2024-12-01 03:41:41
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 2003 Scott Wheeler <wheeler@kde.org> 0004 SPDX-FileCopyrightText: 2004 Gustavo Sverzut Barbieri <gsbarbieri@users.sourceforge.net> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #ifndef KLISTWIDGETSEARCHLINE_H 0010 #define KLISTWIDGETSEARCHLINE_H 0011 0012 #include <QLineEdit> 0013 #include <memory> 0014 0015 #include <kitemviews_export.h> 0016 0017 class QListWidget; 0018 class QListWidgetItem; 0019 class QModelIndex; 0020 0021 /** 0022 * @class KListWidgetSearchLine klistwidgetsearchline.h KListWidgetSearchLine 0023 * 0024 * This class makes it easy to add a search line for filtering the items in a 0025 * listwidget based on a simple text search. 0026 * 0027 * No changes to the application other than instantiating this class with an 0028 * appropriate QListWidget should be needed. 0029 */ 0030 class KITEMVIEWS_EXPORT KListWidgetSearchLine : public QLineEdit 0031 { 0032 Q_OBJECT 0033 0034 public: 0035 /** 0036 * Constructs a KListWidgetSearchLine with \a listWidget being the QListWidget to 0037 * be filtered. 0038 * 0039 * If \a listWidget is null then the widget will be disabled until a listWidget 0040 * is set with setListWidget(). 0041 */ 0042 explicit KListWidgetSearchLine(QWidget *parent = nullptr, QListWidget *listWidget = nullptr); 0043 0044 /** 0045 * Destroys the KListWidgetSearchLine. 0046 */ 0047 ~KListWidgetSearchLine() override; 0048 0049 /** 0050 * Returns if the search is case sensitive. This defaults to Qt::CaseInsensitive. 0051 * 0052 * @see setCaseSensitive() 0053 */ 0054 Qt::CaseSensitivity caseSensitive() const; 0055 0056 /** 0057 * Returns the listWidget that is currently filtered by the search. 0058 * 0059 * @see setListWidget() 0060 */ 0061 QListWidget *listWidget() const; 0062 0063 public Q_SLOTS: 0064 /** 0065 * Updates search to only make visible the items that match \a s. If 0066 * \a s is null then the line edit's text will be used. 0067 */ 0068 virtual void updateSearch(const QString &s = QString()); 0069 0070 /** 0071 * Make the search case sensitive or case insensitive. 0072 * 0073 * @see caseSenstive() 0074 */ 0075 void setCaseSensitivity(Qt::CaseSensitivity cs); 0076 0077 /** 0078 * Sets the QListWidget that is filtered by this search line. If \a lv is null 0079 * then the widget will be disabled. 0080 * 0081 * @see listWidget() 0082 */ 0083 void setListWidget(QListWidget *lv); 0084 0085 /** 0086 * Clear line edit and empty hiddenItems, returning elements to listWidget. 0087 */ 0088 void clear(); 0089 0090 protected: 0091 /** 0092 * Returns true if \a item matches the search \a s. This will be evaluated 0093 * based on the value of caseSensitive(). This can be overridden in 0094 * subclasses to implement more complicated matching schemes. 0095 */ 0096 virtual bool itemMatches(const QListWidgetItem *item, const QString &s) const; 0097 /** 0098 * Re-implemented for internal reasons. API not affected. 0099 */ 0100 bool event(QEvent *event) override; 0101 0102 private: 0103 friend class KListWidgetSearchLinePrivate; 0104 std::unique_ptr<class KListWidgetSearchLinePrivate> const d; 0105 0106 Q_PRIVATE_SLOT(d, void _k_listWidgetDeleted()) 0107 Q_PRIVATE_SLOT(d, void _k_queueSearch(const QString &)) 0108 Q_PRIVATE_SLOT(d, void _k_activateSearch()) 0109 Q_PRIVATE_SLOT(d, void _k_rowsInserted(const QModelIndex &, int, int)) 0110 Q_PRIVATE_SLOT(d, void _k_dataChanged(const QModelIndex &, const QModelIndex &)) 0111 }; 0112 0113 #endif /* KLISTWIDGETSEARCHLINE_H */