#ifndef QUICKSELECTOR_H #define QUICKSELECTOR_H #include "floatingwidget.h" #include #include class QListWidget; class QListWidgetItem; namespace vnotex { class LineEdit; struct QuickSelectorItem { QuickSelectorItem() = default; QuickSelectorItem(const QVariant &p_key, const QString &p_name, const QString &p_tip, const QString &p_shortcut); QVariant m_key; QString m_name; QString m_tip; // Empty or size < 3. QString m_shortcut; }; class QuickSelector : public FloatingWidget { Q_OBJECT public: QuickSelector(const QString &p_title, const QVector &p_items, bool p_sortByShortcut, QWidget *p_parent = nullptr); QVariant result() const Q_DECL_OVERRIDE; protected: bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE; private: void setupUI(const QString &p_title); void updateItemList(); void activateItem(const QListWidgetItem *p_item); void activate(const QuickSelectorItem *p_item); void searchAndFilter(const QString &p_text); // Return the number of items that hit @p_judge. int filterItems(const std::function &p_judge); QuickSelectorItem &getSelectorItem(const QListWidgetItem *p_item); QVector m_items; LineEdit *m_searchLineEdit = nullptr; QListWidget *m_itemList = nullptr; QVariant m_selectedKey; }; } #endif // QUICKSELECTOR_H