Fixed crash when no gstreamer0.10-plugins-good-extra package installed
authorNikolay Tischenko <niktischenko@gmail.com>
Tue, 28 Sep 2010 13:21:07 +0000 (20:21 +0700)
committerNikolay Tischenko <niktischenko@gmail.com>
Tue, 28 Sep 2010 13:21:07 +0000 (20:21 +0700)
Improved equalizer, added presets support

src/equalizerdialog.cpp
src/equalizerdialog.h
src/mainwindow.cpp
src/player/player.cpp
src/playerform.cpp
src/ui/equalizerdialog.ui

index 847d408..f583d4e 100644 (file)
 
 #include "equalizerdialog.h"
 #include "ui_equalizerdialog.h"
+#include "config.h"
+
+using namespace SomePlayer::Storage;
 
 EqualizerDialog::EqualizerDialog(QWidget *parent) :
                QDialog(parent),
                ui(new Ui::EqualizerDialog)
 {
        ui->setupUi(this);
-       ui->band0Slider->setMinimum(-240);
+       ui->band0Slider->setMinimum(-120);
        ui->band0Slider->setValue(0);
-       ui->band1Slider->setMinimum(-240);
+       ui->band1Slider->setMinimum(-120);
        ui->band1Slider->setValue(0);
-       ui->band2Slider->setMinimum(-240);
+       ui->band2Slider->setMinimum(-120);
        ui->band2Slider->setValue(0);
-       ui->band3Slider->setMinimum(-240);
+       ui->band3Slider->setMinimum(-120);
        ui->band3Slider->setValue(0);
-       ui->band4Slider->setMinimum(-240);
+       ui->band4Slider->setMinimum(-120);
        ui->band4Slider->setValue(0);
-       ui->band5Slider->setMinimum(-240);
+       ui->band5Slider->setMinimum(-120);
        ui->band5Slider->setValue(0);
-       ui->band6Slider->setMinimum(-240);
+       ui->band6Slider->setMinimum(-120);
        ui->band6Slider->setValue(0);
-       ui->band7Slider->setMinimum(-240);
+       ui->band7Slider->setMinimum(-120);
        ui->band7Slider->setValue(0);
-       ui->band8Slider->setMinimum(-240);
+       ui->band8Slider->setMinimum(-120);
        ui->band8Slider->setValue(0);
-       ui->band9Slider->setMinimum(-240);
+       ui->band9Slider->setMinimum(-120);
        ui->band9Slider->setValue(0);
 
        ui->band0Slider->setMaximum(120);
@@ -57,6 +60,10 @@ EqualizerDialog::EqualizerDialog(QWidget *parent) :
        ui->band8Slider->setMaximum(120);
        ui->band9Slider->setMaximum(120);
 
+       ui->masterSlider->setMinimum(-120);
+       ui->masterSlider->setMaximum(120);
+       ui->masterSlider->setValue(0);
+
        connect(ui->band0Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value0_changed(int)));
        connect(ui->band1Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value1_changed(int)));
        connect(ui->band2Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value2_changed(int)));
@@ -67,9 +74,10 @@ EqualizerDialog::EqualizerDialog(QWidget *parent) :
        connect(ui->band7Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value7_changed(int)));
        connect(ui->band8Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value8_changed(int)));
        connect(ui->band9Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value9_changed(int)));
-
+       connect(ui->masterSlider, SIGNAL(valueChanged(int)), this, SLOT(_value_master_changed(int)));
        connect(ui->enableToggleButton, SIGNAL(clicked()), this, SLOT(_state_changed()));
-
+       connect(ui->saveButton, SIGNAL(clicked()), this, SLOT(_save_preset()));
+       connect(ui->presetComboBox, SIGNAL(activated(QString)), this, SLOT(_load_preset(QString)));
 }
 
 EqualizerDialog::~EqualizerDialog()
@@ -124,5 +132,75 @@ void EqualizerDialog::setEqualizerEnabled(bool enabled) {
        ui->band7Slider->setEnabled(enabled);
        ui->band8Slider->setEnabled(enabled);
        ui->band9Slider->setEnabled(enabled);
+       ui->masterSlider->setEnabled(enabled);
+       ui->saveButton->setEnabled(enabled);
+       ui->presetComboBox->setEnabled(enabled);
        ui->enableToggleButton->setChecked(enabled);
 }
+
+void EqualizerDialog::_value_master_changed(int v) {
+       ui->band0Slider->setValue(v);
+       ui->band1Slider->setValue(v);
+       ui->band2Slider->setValue(v);
+       ui->band3Slider->setValue(v);
+       ui->band4Slider->setValue(v);
+       ui->band5Slider->setValue(v);
+       ui->band6Slider->setValue(v);
+       ui->band7Slider->setValue(v);
+       ui->band8Slider->setValue(v);
+       ui->band9Slider->setValue(v);
+       for (int i = 0; i < 10; i++) {
+               emit valueChanged(i, v);
+       }
+}
+
+void EqualizerDialog::reloadPresets() {
+       Config config;
+       QStringList presets = config.getValue("equalizer/presets").toStringList();
+       ui->presetComboBox->clear();
+       ui->presetComboBox->addItems(presets);
+}
+
+void EqualizerDialog::_save_preset() {
+       Config config;
+       QString name = ui->presetComboBox->currentText();
+       QStringList presets = config.getValue("equalizer/presets").toStringList();
+       if (!presets.contains(name))
+               presets.append(name);
+       config.setValue("equalizer/presets", presets);
+       config.setValue(QString("equalizer_preset_")+name+"/band0", ui->band0Slider->value());
+       config.setValue(QString("equalizer_preset_")+name+"/band1", ui->band1Slider->value());
+       config.setValue(QString("equalizer_preset_")+name+"/band2", ui->band2Slider->value());
+       config.setValue(QString("equalizer_preset_")+name+"/band3", ui->band3Slider->value());
+       config.setValue(QString("equalizer_preset_")+name+"/band4", ui->band4Slider->value());
+       config.setValue(QString("equalizer_preset_")+name+"/band5", ui->band5Slider->value());
+       config.setValue(QString("equalizer_preset_")+name+"/band6", ui->band6Slider->value());
+       config.setValue(QString("equalizer_preset_")+name+"/band7", ui->band7Slider->value());
+       config.setValue(QString("equalizer_preset_")+name+"/band8", ui->band8Slider->value());
+       config.setValue(QString("equalizer_preset_")+name+"/band9", ui->band9Slider->value());
+       reloadPresets();
+}
+
+void EqualizerDialog::_load_preset(QString name) {
+       Config config;
+       ui->band0Slider->setValue(config.getValue("equalizer_preset_"+name+"/band0").toInt());
+       _value0_changed(ui->band0Slider->value());
+       ui->band1Slider->setValue(config.getValue("equalizer_preset_"+name+"/band1").toInt());
+       _value1_changed(ui->band1Slider->value());
+       ui->band2Slider->setValue(config.getValue("equalizer_preset_"+name+"/band2").toInt());
+       _value2_changed(ui->band2Slider->value());
+       ui->band3Slider->setValue(config.getValue("equalizer_preset_"+name+"/band3").toInt());
+       _value3_changed(ui->band3Slider->value());
+       ui->band4Slider->setValue(config.getValue("equalizer_preset_"+name+"/band4").toInt());
+       _value4_changed(ui->band4Slider->value());
+       ui->band5Slider->setValue(config.getValue("equalizer_preset_"+name+"/band5").toInt());
+       _value5_changed(ui->band5Slider->value());
+       ui->band6Slider->setValue(config.getValue("equalizer_preset_"+name+"/band6").toInt());
+       _value6_changed(ui->band6Slider->value());
+       ui->band7Slider->setValue(config.getValue("equalizer_preset_"+name+"/band7").toInt());
+       _value7_changed(ui->band7Slider->value());
+       ui->band8Slider->setValue(config.getValue("equalizer_preset_"+name+"/band8").toInt());
+       _value8_changed(ui->band8Slider->value());
+       ui->band9Slider->setValue(config.getValue("equalizer_preset_"+name+"/band9").toInt());
+       _value9_changed(ui->band9Slider->value());
+}
index 8486677..658e60e 100644 (file)
@@ -40,6 +40,7 @@ signals:
 public slots:
        void setValue(int, int);
        void setEqualizerEnabled(bool);
+       void reloadPresets();
 
 private slots:
        void _value0_changed(int v) { emit valueChanged(0, v);}
@@ -52,8 +53,11 @@ private slots:
        void _value7_changed(int v) { emit valueChanged(7, v);}
        void _value8_changed(int v) { emit valueChanged(8, v);}
        void _value9_changed(int v) { emit valueChanged(9, v);}
-
+       void _value_master_changed(int v);
        void _state_changed();
+       void _save_preset();
+       void _load_preset(QString);
+
 private:
        Ui::EqualizerDialog *ui;
 };
index 2767608..8f88fc6 100644 (file)
@@ -277,6 +277,7 @@ void MainWindow::_equalizer() {
                        _equalizer_dialog->setValue(i, (int)(val * 10 + 0.5));
                }
                _equalizer_dialog->setEqualizerEnabled(_player_form->isEqualizerEnabled());
+               _equalizer_dialog->reloadPresets();
                _equalizer_dialog->exec();
        } else {
                QMessageBox::information(this, "Error", "No equalizer support. Please install gstreamer0.10-plugins-good-extra");
index 9395d8f..17976ba 100644 (file)
@@ -35,8 +35,11 @@ Player::Player(QObject *parent) :
        _player = new Phonon::MediaObject(this);
        _output = new Phonon::AudioOutput(Phonon::MusicCategory, this);
        _player->setTickInterval(1000);
-       _equalizer == NULL;
-       _equalizer_enabled == false;
+       _equalizer = NULL;
+       _equalizer_enabled = false;
+       connect(_player, SIGNAL(stateChanged(Phonon::State,Phonon::State)), this, SLOT(_stateChanged(Phonon::State,Phonon::State)));
+       connect(_player, SIGNAL(tick(qint64)), this, SLOT(_tick(qint64)));
+       _path = Phonon::createPath(_player, _output);
        QList<Phonon::EffectDescription> effects = Phonon::BackendCapabilities::availableAudioEffects();
        foreach (Phonon::EffectDescription desc, effects) {
                if (desc.name() == "equalizer-10bands") {
@@ -47,7 +50,7 @@ Player::Player(QObject *parent) :
                                        QVariant var = config.getValue(QString("equalizer/band%1").arg(i));
                                        setEqualizerValue(i, var.toDouble());
                                }
-                               _equalizer_enabled = true;
+                               enableEqualizer();
                        } else if (config.getValue("equalizer/equalizer") == "") {
                                for (int i = 0; i < 10; i++) {
                                        config.setValue(QString("equalizer/band%1").arg(i), 0);
@@ -55,9 +58,6 @@ Player::Player(QObject *parent) :
                        }
                }
        }
-       connect(_player, SIGNAL(stateChanged(Phonon::State,Phonon::State)), this, SLOT(_stateChanged(Phonon::State,Phonon::State)));
-       connect(_player, SIGNAL(tick(qint64)), this, SLOT(_tick(qint64)));
-       _path = Phonon::createPath(_player, _output);
        int seed = QTime::currentTime().msec();
        qsrand(seed);
        _random = _config.getValue("playback/random").toBool();
@@ -159,7 +159,8 @@ void Player::_stateChanged(Phonon::State newState, Phonon::State /*oldState*/) {
        case Phonon::BufferingState:
                break;
        case Phonon::ErrorState:
-               _state = PLAYER_ERROR;
+               play(); // force
+//             _state = PLAYER_ERROR;
                break;
        }
 }
@@ -217,6 +218,10 @@ void Player::setVolume(int v) {
 }
 
 void Player::equalizerValue(int band, double *val) {
+       if (_equalizer == NULL) {
+               *val = 0;
+               return;
+       }
        if (band < 0 || band > 9) {
                *val = -24;
                return;
@@ -229,6 +234,8 @@ void Player::equalizerValue(int band, double *val) {
 }
 
 void Player::enableEqualizer() {
+       if (_equalizer == NULL)
+               return;
        _equalizer_enabled = true;
        _path.insertEffect(_equalizer);
        Config config;
@@ -236,6 +243,8 @@ void Player::enableEqualizer() {
 }
 
 void Player::disableEqualizer() {
+       if (_equalizer == NULL)
+               return;
        _equalizer_enabled = false;
        _path.removeEffect(_equalizer);
        Config config;
@@ -243,6 +252,8 @@ void Player::disableEqualizer() {
 }
 
 void Player::setEqualizerValue(int band, double value) {
+       if (_equalizer == NULL)
+               return;
        if (band < 0 || band > 9 || value < -24 || value > 12) {
                return;
        }
index 31352d0..856edb7 100644 (file)
@@ -93,7 +93,8 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) :
        connect(_player, SIGNAL(tick(int,int)), this, SLOT(_tick(int,int)));
        connect(ui->randomButton, SIGNAL(clicked()), this, SLOT(_toggle_random()));
        connect(ui->repeatButton, SIGNAL(clicked()), this, SLOT(_toggle_repeat()));
-       connect(_seek_slider, SIGNAL(sliderReleased()), this, SLOT(_slider_released()));
+       connect(_seek_slider, SIGNAL(sliderMoved(int)), _player, SLOT(seek(int)));
+       //connect(_seek_slider, SIGNAL(sliderReleased()), this, SLOT(_slider_released()));
        connect(ui->volumeSlider, SIGNAL(sliderMoved(int)), _player, SLOT(setVolume(int)));
        connect(ui->playlistView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(_custom_context_venu_requested(QPoint)));
        connect(delete_action, SIGNAL(triggered()), this, SLOT(_delete_track()));
index faa480d..ac470f6 100644 (file)
         <number>0</number>
        </property>
        <item>
+        <widget class="QSlider" name="masterSlider">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_2">
+         <item>
+          <widget class="QLabel" name="label">
+           <property name="text">
+            <string>+12dB</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="verticalSpacer">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QLabel" name="label_2">
+           <property name="text">
+            <string>-12dB</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
         <widget class="QSlider" name="band0Slider">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
        <property name="minimumSize">
         <size>
          <width>150</width>
-         <height>0</height>
+         <height>70</height>
         </size>
        </property>
        <property name="text">
       </spacer>
      </item>
      <item>
-      <widget class="QDialogButtonBox" name="buttonBox">
+      <widget class="QComboBox" name="presetComboBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>300</width>
+         <height>70</height>
+        </size>
+       </property>
+       <property name="editable">
+        <bool>true</bool>
+       </property>
+       <property name="frame">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
-       <property name="standardButtons">
-        <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="saveButton">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>150</width>
+         <height>70</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>Save</string>
+       </property>
+       <property name="flat">
+        <bool>false</bool>
        </property>
       </widget>
      </item>
   </layout>
  </widget>
  <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>EqualizerDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>EqualizerDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
+ <connections/>
 </ui>