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