]> 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 c215f2a24f5a69479f4349b7c0da3e0d7fa69e45..5e77ed22766e15753451ca637d167963eab00c0b 100644 (file)
@@ -2,7 +2,7 @@
  * extended_panels.hpp : Exentended Panels
  ****************************************************************************
  * Copyright (C) 2006 the VideoLAN team
- * $Id: preferences.hpp 16643 2006-09-13 12:45:46Z zorglub $
+ * $Id$
  *
  * Authors: ClĂ©ment Stenac <zorglub@videolan.org>
  *          Antoine Cellerier <dionoea at videolan dot org>
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
-#include <vlc_aout.h>
+#include <vlc_common.h>
 
 #include "ui/equalizer.h"
 #include "ui/video_effects.h"
-#include "ui/v4l2.h"
+
+#include <QTabWidget>
 
 #define BANDS 10
-#define NUM_SP_CTRL 5
 
 class QSignalMapper;
 
-class ExtVideo: public QWidget
+class ExtVideo: public QObject
 {
     Q_OBJECT
+    friend class ExtendedDialog;
 public:
-    ExtVideo( intf_thread_t *, QWidget * );
-    virtual ~ExtVideo();
+    ExtVideo( struct intf_thread_t *, QTabWidget * );
     /*void gotoConf( QObject* );*/
 private:
     Ui::ExtVideoWidget ui;
@@ -54,10 +53,13 @@ private:
     intf_thread_t *p_intf;
     void initComboBoxItems( QObject* );
     void setWidgetValue( QObject* );
-    void ChangeVFiltersString( char *psz_name, vlc_bool_t b_add );
+    void clean();
 private slots:
     void updateFilters();
     void updateFilterOptions();
+    void cropChange();
+    void browseLogo();
+    void browseEraseFile();
 };
 
 class ExtV4l2 : public QWidget
@@ -65,14 +67,13 @@ class ExtV4l2 : public QWidget
     Q_OBJECT
 public:
     ExtV4l2( intf_thread_t *, QWidget * );
-    virtual ~ExtV4l2();
 
     virtual void showEvent( QShowEvent *event );
 
 private:
     intf_thread_t *p_intf;
-    Ui::ExtV4l2Widget ui;
     QGroupBox *box;
+    QLabel *help;
 
 private slots:
     void Refresh( void );
@@ -80,73 +81,162 @@ private slots:
     void ValueChange( bool value );
 };
 
-class Equalizer: public QWidget
+class FilterSliderData : public QObject
 {
     Q_OBJECT
+
 public:
-    Equalizer( intf_thread_t *, QWidget * );
-    virtual ~Equalizer();
-    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;
 
-private:
-    Ui::EqualizerWidget ui;
-    QSlider *bands[BANDS];
-    QLabel *band_texts[BANDS];
+public slots:
+    virtual void onValueChanged( int i ) const;
+    virtual void updateText( int i );
+    virtual void writeToConfig() const;
+};
 
-    void delCallbacks( aout_instance_t * );
-    void addCallbacks( aout_instance_t * );
-    void setValues( char *, float );
+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;
-private slots:
-    void enable(bool);
-    void enable();
-    void set2Pass();
-    void setPreamp();
-    void setBand();
-    void setPreset(int);
+    QString name; // filter's module name
+    int i_smallfont;
+
+protected slots:
+    void enable( bool ) const;
 };
 
-class Spatializer: public QWidget
+class EqualizerSliderData : public FilterSliderData
 {
     Q_OBJECT
+
 public:
-    Spatializer( intf_thread_t *, QWidget * );
-    virtual ~Spatializer();
+    EqualizerSliderData( QObject *parent, intf_thread_t *p_intf,
+                         QSlider *slider,
+                         QLabel *valueLabel, QLabel *nameLabel,
+                         const slider_data_t *p_data, int index );
+
+protected:
+    virtual float initialValue();
+    int index;
+    QStringList getBandsFromAout() const;
+
+public slots:
+    virtual void onValueChanged( int i ) const;
+    virtual void writeToConfig() const;
+};
 
-private:
-    QSlider *spatCtrl[NUM_SP_CTRL];
-    QLabel *ctrl_texts[NUM_SP_CTRL];
-    QLabel *ctrl_readout[NUM_SP_CTRL];
-    float controlVars[5];
-    float oldControlVars[5];
+class Equalizer: public AudioFilterControlWidget
+{
+    Q_OBJECT
 
-    QCheckBox *enableCheck;
+public:
+    Equalizer( intf_thread_t *, QWidget * );
+
+protected:
+    virtual void build();
+
+private:
+    QVector<FilterSliderData *> eqSliders;
+    FilterSliderData *preamp;
+    FilterSliderData::slider_data_t preamp_values;
 
-    void delCallbacks( aout_instance_t * );
-    void addCallbacks( aout_instance_t * );
-    intf_thread_t *p_intf;
 private slots:
-    void enable(bool);
-    void enable();
-    void setValues(float *);
-    void setInitValues();
+    void setCorePreset( int );
+    void enable2Pass( bool ) const;
+};
+
+class Compressor: public AudioFilterControlWidget
+{
+    Q_OBJECT
+
+public:
+    Compressor( intf_thread_t *, QWidget * );
 };
 
-class ExtendedControls: public QWidget
+class Spatializer: public AudioFilterControlWidget
 {
     Q_OBJECT
+
 public:
-    ExtendedControls( intf_thread_t *, QWidget * ) {};
-    virtual ~ExtendedControls() {};
+    Spatializer( intf_thread_t *, QWidget * );
+};
 
+class SyncWidget : public QWidget
+{
+    Q_OBJECT
+public:
+    SyncWidget( QWidget * );
+    void setValue( double d );
+signals:
+    void valueChanged( double );
+private slots:
+    void valueChangedHandler( double d );
+private:
+    QDoubleSpinBox spinBox;
+    QLabel spinLabel;
+};
+
+class SyncControls : public QWidget
+{
+    Q_OBJECT
+    friend class ExtendedDialog;
+public:
+    SyncControls( intf_thread_t *, QWidget * );
+    virtual ~SyncControls();
 private:
     intf_thread_t *p_intf;
+    SyncWidget *AVSpin;
+    SyncWidget *subsSpin;
+    QDoubleSpinBox *subSpeedSpin;
+    QDoubleSpinBox *subDurationSpin;
+
+    bool b_userAction;
+
+    void clean();
+
+    void initSubsDuration();
+    void subsdelayClean();
+    void subsdelaySetFactor( double );
+public slots:
+    void update();
 private slots:
-    void slower() {};
-    void faster() {};
-    void normal() {};
-    void snapshot() {};
+    void advanceAudio( double );
+    void advanceSubs( double );
+    void adjustSubsSpeed( double );
+    void adjustSubsDuration( double );
 };
 
 #endif