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