]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/components/extended_panels.hpp
Qt: Equalizer: rework (fix #7923)
[vlc] / modules / gui / qt4 / components / extended_panels.hpp
index 17829a8beffe1b12a699e539a7391945f4d9ec1a..5e77ed22766e15753451ca637d167963eab00c0b 100644 (file)
@@ -37,8 +37,6 @@
 #include <QTabWidget>
 
 #define BANDS 10
-#define NUM_CP_CTRL 7
-#define NUM_SP_CTRL 5
 
 class QSignalMapper;
 
@@ -83,102 +81,117 @@ private slots:
     void ValueChange( bool value );
 };
 
-class Equalizer: public QWidget
+class FilterSliderData : public QObject
 {
     Q_OBJECT
-    friend class ExtendedDialog;
+
 public:
-    Equalizer( intf_thread_t *, QWidget * );
-    QComboBox *presetsComboBox;
+    typedef struct
+    {
+        QString name;
+        QString descs;
+        QString units;
+        float f_min;      // min
+        float f_max;      // max
+        float f_value;    // value
+        float f_resolution; // resolution
+        float f_visual_multiplier; // only for display (f_value *)
+    } slider_data_t;
+    FilterSliderData( QObject *parent, intf_thread_t *p_intf,
+                      QSlider *slider,
+                      QLabel *valueLabel, QLabel *nameLabel,
+                      const slider_data_t *p_data );
+    void setValue( float f );
+
+protected:
+    FilterSliderData( QObject *parent, QSlider *slider );
+    virtual float initialValue();
+    QSlider *slider;
+    QLabel *valueLabel;
+    QLabel *nameLabel;
+    const slider_data_t *p_data;
+    intf_thread_t *p_intf;
 
-    char * createValuesFromPreset( int i_preset );
-    void updateUIFromCore();
-    void changeFreqLabels( bool );
-private:
-    Ui::EqualizerWidget ui;
-    QSlider *bands[BANDS];
-    QLabel *band_texts[BANDS];
-    bool b_vlcBands;
+public slots:
+    virtual void onValueChanged( int i ) const;
+    virtual void updateText( int i );
+    virtual void writeToConfig() const;
+};
 
-    void delCallbacks( vlc_object_t * );
-    void addCallbacks( vlc_object_t * );
+class AudioFilterControlWidget : public QWidget
+{
+    Q_OBJECT
 
+public:
+    AudioFilterControlWidget( intf_thread_t *, QWidget *, const char *name );
+    virtual ~AudioFilterControlWidget();
+
+protected:
+    virtual void build();
+    QVector<FilterSliderData::slider_data_t> controls;
+    QGroupBox *slidersBox;
     intf_thread_t *p_intf;
-    void clean() { enable(); }
-private slots:
-    void enable(bool);
-    void enable();
-    void set2Pass();
-    void setPreamp();
-    void setCoreBands();
-    void setCorePreset(int);
+    QString name; // filter's module name
+    int i_smallfont;
+
+protected slots:
+    void enable( bool ) const;
 };
 
-class Compressor: public QWidget
+class EqualizerSliderData : public FilterSliderData
 {
     Q_OBJECT
 
 public:
-    Compressor( intf_thread_t *, QWidget * );
+    EqualizerSliderData( QObject *parent, intf_thread_t *p_intf,
+                         QSlider *slider,
+                         QLabel *valueLabel, QLabel *nameLabel,
+                         const slider_data_t *p_data, int index );
 
-private:
-    typedef struct
-    {
-        const char *psz_name;
-        const char *psz_descs;
-        const char *psz_units;
-        const float f_min;      // min
-        const float f_max;      // max
-        const float f_value;    // value
-        const float f_resolution; // resolution
-    } comp_controls_t;
-    static const comp_controls_t comp_controls[NUM_CP_CTRL];
-    QSlider *compCtrl[NUM_CP_CTRL];
-    QLabel *ctrl_texts[NUM_CP_CTRL];
-    QLabel *ctrl_readout[NUM_CP_CTRL];
-    float controlVars[NUM_CP_CTRL];
-    float oldControlVars[NUM_CP_CTRL];
-
-    QGroupBox *compressorBox;
+protected:
+    virtual float initialValue();
+    int index;
+    QStringList getBandsFromAout() const;
 
-    intf_thread_t *p_intf;
+public slots:
+    virtual void onValueChanged( int i ) const;
+    virtual void writeToConfig() const;
+};
+
+class Equalizer: public AudioFilterControlWidget
+{
+    Q_OBJECT
 
-    void updateSliders();
+public:
+    Equalizer( intf_thread_t *, QWidget * );
+
+protected:
+    virtual void build();
+
+private:
+    QVector<FilterSliderData *> eqSliders;
+    FilterSliderData *preamp;
+    FilterSliderData::slider_data_t preamp_values;
 
 private slots:
-    void enable();
-    void setValues();
+    void setCorePreset( int );
+    void enable2Pass( bool ) const;
 };
 
-class Spatializer: public QWidget
+class Compressor: public AudioFilterControlWidget
 {
     Q_OBJECT
 
 public:
-    Spatializer( intf_thread_t *, QWidget * );
+    Compressor( intf_thread_t *, QWidget * );
+};
 
-private:
-    typedef struct
-    {
-        const char *psz_name;
-        const char *psz_desc;
-    } spat_controls_t;
-    static const spat_controls_t spat_controls[NUM_SP_CTRL];
-    QSlider *spatCtrl[NUM_SP_CTRL];
-    QLabel *ctrl_texts[NUM_SP_CTRL];
-    QLabel *ctrl_readout[NUM_SP_CTRL];
-    float controlVars[NUM_SP_CTRL];
-    float oldControlVars[NUM_SP_CTRL];
-
-    QGroupBox *spatializerBox;
-
-    void delCallbacks( vlc_object_t * );
-    void addCallbacks( vlc_object_t * );
-    intf_thread_t *p_intf;
+class Spatializer: public AudioFilterControlWidget
+{
+    Q_OBJECT
 
-private slots:
-    void enable();
-    void setValues();
+public:
+    Spatializer( intf_thread_t *, QWidget * );
 };
 
 class SyncWidget : public QWidget