File indexing completed on 2024-05-05 05:13:11

0001 /*
0002    SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <KLineEdit>
0010 #include <QHash>
0011 #include <QIcon>
0012 class QAction;
0013 namespace Akregator
0014 {
0015 class StatusSearchLine : public KLineEdit
0016 {
0017     Q_OBJECT
0018 public:
0019     enum Status { AllArticles = 0, NewArticles, UnreadArticles, ReadArticles, ImportantArticles };
0020 
0021     explicit StatusSearchLine(QWidget *parent = nullptr);
0022     ~StatusSearchLine() override;
0023 
0024     void setStatus(StatusSearchLine::Status status);
0025 
0026     [[nodiscard]] Status status() const;
0027 
0028 Q_SIGNALS:
0029     void statusChanged(Akregator::StatusSearchLine::Status status);
0030     void forceLostFocus();
0031 
0032 protected:
0033     void keyPressEvent(QKeyEvent *e) override;
0034 
0035 private Q_SLOTS:
0036     void showMenu();
0037 
0038 private:
0039     struct StatusInfo {
0040         StatusInfo() = default;
0041 
0042         StatusInfo(const QString &text, const QIcon &icon)
0043             : mText(text)
0044             , mIcon(icon)
0045         {
0046         }
0047 
0048         QString mText;
0049         QIcon mIcon;
0050     };
0051 
0052     void initializeHash();
0053     void initializeActions();
0054     void updateStatusIcon(StatusSearchLine::Status status);
0055     Status mDefaultStatus = AllArticles;
0056     QHash<StatusSearchLine::Status, StatusInfo> mHashStatus;
0057     QAction *mSearchLineStatusAction = nullptr;
0058 };
0059 }