1 // For license of this file, see <project-root-folder>/LICENSE.md.
2 
3 #ifndef LABELSMENU_H
4 #define LABELSMENU_H
5 
6 #include "gui/reusable/nonclosablemenu.h"
7 
8 #include "services/abstract/label.h"
9 
10 class LabelsMenu : public NonClosableMenu {
11   Q_OBJECT
12 
13   public:
14     explicit LabelsMenu(const QList<Message>& messages, const QList<Label*>& labels, QWidget* parent = nullptr);
15 
16   protected:
17     virtual void keyPressEvent(QKeyEvent* event);
18     virtual void mousePressEvent(QMouseEvent* event);
19 
20   signals:
21     void labelsChanged();
22 
23   private slots:
24     void changeLabelAssignment(Qt::CheckState state);
25 
26   private:
27     void addLabelAction(Label* label, Qt::CheckState state);
28 
29   private:
30     QList<Message> m_messages;
31 };
32 
33 class LabelAction : public QAction {
34   Q_OBJECT
35 
36   public:
37     explicit LabelAction(Label* label, QWidget* parent_widget, QObject* parent);
38 
39     Qt::CheckState checkState() const;
40     void setCheckState(Qt::CheckState state);
41 
42     Label* label() const;
43 
44   public slots:
45     void toggleCheckState();
46 
47   signals:
48     void checkStateChanged(Qt::CheckState state);
49 
50   private slots:
51     void updateActionForState();
52 
53   private:
54     Label* m_label;
55     QWidget* m_parentWidget;
56     Qt::CheckState m_checkState;
57 };
58 
59 #endif // LABELSMENU_H
60