1 #pragma once
2 
3 #include <QComboBox>
4 #include <QDialog>
5 #include <QHBoxLayout>
6 #include <QLineEdit>
7 #include <QVBoxLayout>
8 
9 namespace chatterino {
10 class ChannelFilterEditorDialog : public QDialog
11 {
12 public:
13     ChannelFilterEditorDialog(QWidget *parent);
14 
15     const QString getFilter() const;
16     const QString getTitle() const;
17 
18 private:
19     class ExpressionSpecifier
20     {
21     public:
22         virtual QLayout *layout() const = 0;
23         virtual QString expressionText() = 0;
24         virtual void setEnabled(bool enabled) = 0;
25     };
26 
27     class ValueSpecifier : public ExpressionSpecifier
28     {
29     public:
30         ValueSpecifier();
31 
32         QLayout *layout() const override;
33         QString expressionText() override;
34         void setEnabled(bool enabled) override;
35 
36         void setType(const QString &type);
37         void setValue(const QString &value);
38 
39     private:
40         QComboBox *typeCombo_, *varCombo_;
41         QHBoxLayout *layout_;
42         QLineEdit *valueInput_;
43     };
44 
45     class BinaryOperationSpecifier : public ExpressionSpecifier
46     {
47     public:
48         BinaryOperationSpecifier(ExpressionSpecifier *left,
49                                  ExpressionSpecifier *right);
50 
51         QLayout *layout() const override;
52         QString expressionText() override;
53         void setEnabled(bool enabled) override;
54 
55         void setOperation(const QString &op);
56 
57     private:
58         QComboBox *opCombo_;
59         QVBoxLayout *layout_;
60         ExpressionSpecifier *left_, *right_;
61     };
62 
63     QString startFilter_;
64     ExpressionSpecifier *expressionSpecifier_;
65     QLineEdit *titleInput_;
66 };
67 }  // namespace chatterino
68