summaryrefslogtreecommitdiffstats
path: root/src/dlgprefrecord.cpp
diff options
context:
space:
mode:
authorMax Linke <kain88@mixxx.org>2013-06-19 09:37:25 +0200
committerMax Linke <kain88@mixxx.org>2013-06-19 09:37:25 +0200
commit31457ec4e38b58e01959c28855d4560669a7ae47 (patch)
treeb2c84201362166386cd8c762efa75c2562fb57cf /src/dlgprefrecord.cpp
parente7155e89ec6df721aa0d0996f4ec827dbc8da183 (diff)
parente1f6cd9f2e2a539ed2d675c1f0213821522585f0 (diff)
merge with master branch
Diffstat (limited to 'src/dlgprefrecord.cpp')
-rw-r--r--src/dlgprefrecord.cpp308
1 files changed, 308 insertions, 0 deletions
diff --git a/src/dlgprefrecord.cpp b/src/dlgprefrecord.cpp
new file mode 100644
index 0000000000..304e18e628
--- /dev/null
+++ b/src/dlgprefrecord.cpp
@@ -0,0 +1,308 @@
+/***************************************************************************
+ dlgprefrecord.cpp - description
+ -------------------
+ begin : Thu Jun 19 2007
+ copyright : (C) 2007 by John Sully
+ email : jsully@scs.ryerson.ca
+***************************************************************************/
+
+/***************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+***************************************************************************/
+
+#include <QtCore>
+#include <QtGui>
+
+#include "dlgprefrecord.h"
+#include "recording/defs_recording.h"
+#include "controlobject.h"
+#include "controlobjectthreadmain.h"
+#include "encoder/encoder.h"
+
+DlgPrefRecord::DlgPrefRecord(QWidget * parent, ConfigObject<ConfigValue> * _config)
+ : QWidget(parent) {
+ config = _config;
+ confirmOverwrite = false;
+ radioFlac = 0;
+ radioMp3 = 0;
+ radioOgg = 0;
+ radioAiff= 0;
+ radioWav = 0;
+ setupUi(this);
+
+ //See RECORD_* #defines in defs_recording.h
+ recordControl = new ControlObjectThreadMain(
+ ControlObject::getControl(ConfigKey(RECORDING_PREF_KEY, "status")));
+
+ radioOgg = new QRadioButton("Ogg Vorbis");
+ radioMp3 = new QRadioButton(ENCODING_MP3);
+
+ // Setting recordings path
+ QString recordingsPath = config->getValueString(ConfigKey(RECORDING_PREF_KEY,"Directory"));
+ if (recordingsPath == "") {
+ // Initialize recordings path in config to old default path.
+ // Do it here so we show current value in UI correctly.
+ QString musicDir = QDesktopServices::storageLocation(QDesktopServices::MusicLocation);
+ QDir recordDir(musicDir + "/Mixxx/Recordings");
+ recordingsPath = recordDir.absolutePath();
+ }
+ LineEditRecordings->setText(recordingsPath);
+
+ connect(PushButtonBrowseRecordings, SIGNAL(clicked()), this, SLOT(slotBrowseRecordingsDir()));
+ connect(LineEditRecordings, SIGNAL(returnPressed()), this, SLOT(slotApply()));
+
+ connect(radioOgg,SIGNAL(clicked()),
+ this, SLOT(slotApply()));
+ connect(radioMp3, SIGNAL(clicked()),
+ this, SLOT(slotApply()));
+ horizontalLayout->addWidget(radioOgg);
+ horizontalLayout->addWidget(radioMp3);
+
+ //AIFF and WAVE are supported by default
+ radioWav = new QRadioButton(ENCODING_WAVE);
+ connect(radioWav, SIGNAL(clicked()),
+ this, SLOT(slotApply()));
+ horizontalLayout->addWidget(radioWav);
+
+ radioAiff = new QRadioButton(ENCODING_AIFF);
+ connect(radioAiff, SIGNAL(clicked()),
+ this, SLOT(slotApply()));
+ horizontalLayout->addWidget(radioAiff);
+
+#ifdef SF_FORMAT_FLAC
+ radioFlac = new QRadioButton(ENCODING_FLAC);
+ connect(radioFlac,SIGNAL(clicked()),
+ this, SLOT(slotApply()));
+ horizontalLayout->addWidget(radioFlac);
+#endif
+
+ //Read config and check radio button
+ QString format = config->getValueString(ConfigKey(RECORDING_PREF_KEY,"Encoding"));
+ if(format == ENCODING_WAVE)
+ radioWav->setChecked(true);
+ else if(format == ENCODING_OGG)
+ radioOgg->setChecked(true);
+ else if (format == ENCODING_MP3)
+ radioMp3->setChecked(true);
+ else if (format == ENCODING_AIFF)
+ radioAiff->setChecked(true);
+#ifdef SF_FORMAT_FLAC
+ else if (format == ENCODING_FLAC)
+ radioFlac->setChecked(true);
+#endif
+ else //Invalid, so set default and save
+ {
+ //If no config was available, set to WAVE as default
+ radioWav->setChecked(true);
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_WAVE));
+ }
+
+ loadMetaData();
+
+ //Connections
+ connect(SliderQuality, SIGNAL(valueChanged(int)), this, SLOT(slotSliderQuality()));
+ connect(SliderQuality, SIGNAL(sliderMoved(int)), this, SLOT(slotSliderQuality()));
+ connect(SliderQuality, SIGNAL(sliderReleased()), this, SLOT(slotSliderQuality()));
+ connect(CheckBoxRecordCueFile, SIGNAL(stateChanged(int)), this, SLOT(slotEnableCueFile(int)));
+ connect(comboBoxSplitting, SIGNAL(activated(int)), this, SLOT(slotChangeSplitSize()));
+
+ slotApply();
+ recordControl->slotSet(RECORD_OFF); //make sure a corrupt config file won't cause us to record constantly
+
+ comboBoxSplitting->addItem(SPLIT_650MB);
+ comboBoxSplitting->addItem(SPLIT_700MB);
+ comboBoxSplitting->addItem(SPLIT_1024MB);
+ comboBoxSplitting->addItem(SPLIT_2048MB);
+ comboBoxSplitting->addItem(SPLIT_4096MB);
+
+ QString fileSizeStr = config->getValueString(ConfigKey(RECORDING_PREF_KEY,"FileSize"));
+ int index = comboBoxSplitting->findText(fileSizeStr);
+ if(index > 0){
+ //set file split size
+ comboBoxSplitting->setCurrentIndex(index);
+ }
+ //Otherwise 650 MB will be default file split size
+
+ //Read CUEfile info
+ CheckBoxRecordCueFile->setChecked((bool) config->getValueString(ConfigKey(RECORDING_PREF_KEY,"CueEnabled")).toInt());
+
+}
+
+void DlgPrefRecord::slotSliderQuality()
+{
+ updateTextQuality();
+
+ if (radioOgg && radioOgg->isChecked())
+ {
+ config->set(ConfigKey(RECORDING_PREF_KEY, "OGG_Quality"), ConfigValue(SliderQuality->value()));
+ }
+ else if (radioMp3 && radioMp3->isChecked())
+ {
+ config->set(ConfigKey(RECORDING_PREF_KEY, "MP3_Quality"), ConfigValue(SliderQuality->value()));
+ }
+}
+
+int DlgPrefRecord::getSliderQualityVal()
+{
+
+ /* Commented by Tobias Rafreider
+ * We always use the bitrate to denote the quality since it is more common to the users
+ */
+ return Encoder::convertToBitrate(SliderQuality->value());
+
+}
+
+void DlgPrefRecord::updateTextQuality()
+{
+ int quality = getSliderQualityVal();
+ //QString encodingType = comboBoxEncoding->currentText();
+
+ TextQuality->setText(QString( QString::number(quality) + tr("kbps")));
+
+
+}
+
+void DlgPrefRecord::slotEncoding()
+{
+ //set defaults
+ groupBoxQuality->setEnabled(true);
+ //config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(comboBoxEncoding->currentText()));
+
+ if (radioWav && radioWav->isChecked()) {
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_WAVE));
+ groupBoxQuality->setEnabled(false);
+ }
+ else if(radioFlac && radioFlac->isChecked()){
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_FLAC));
+ groupBoxQuality->setEnabled(false);
+ }
+ else if(radioAiff && radioAiff->isChecked()){
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_AIFF));
+ groupBoxQuality->setEnabled(false);
+ }
+ else if (radioOgg && radioOgg->isChecked())
+ {
+ int value = config->getValueString(ConfigKey(RECORDING_PREF_KEY, "OGG_Quality")).toInt();
+ //if value == 0 then a default value of 128kbps is proposed.
+ if(!value)
+ value = 6; // 128kbps
+
+ SliderQuality->setValue(value);
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_OGG));
+ }
+ else if (radioMp3 && radioMp3->isChecked())
+ {
+ int value = config->getValueString(ConfigKey(RECORDING_PREF_KEY, "MP3_Quality")).toInt();
+ //if value == 0 then a default value of 128kbps is proposed.
+ if(!value)
+ value = 6; // 128kbps
+
+ SliderQuality->setValue(value);
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_MP3));
+ }
+ else
+ qDebug() << "Invalid recording encoding type in" << __FILE__ << "on line:" << __LINE__;
+}
+
+void DlgPrefRecord::setMetaData()
+{
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Title"), ConfigValue(LineEditTitle->text()));
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Author"), ConfigValue(LineEditAuthor->text()));
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Album"), ConfigValue(LineEditAlbum->text()));
+}
+
+void DlgPrefRecord::loadMetaData()
+{
+ LineEditTitle->setText( config->getValueString(ConfigKey(RECORDING_PREF_KEY, "Title")));
+ LineEditAuthor->setText( config->getValueString(ConfigKey(RECORDING_PREF_KEY, "Author")));
+ LineEditAlbum->setText( config->getValueString(ConfigKey(RECORDING_PREF_KEY, "Album")));
+}
+
+DlgPrefRecord::~DlgPrefRecord()
+{
+ delete recordControl;
+}
+
+void DlgPrefRecord::slotRecordPathChange()
+{
+ confirmOverwrite = false;
+ slotApply();
+}
+
+//This function updates/refreshes the contents of this dialog
+void DlgPrefRecord::slotUpdate()
+{
+ // Recordings path
+ QString recordingsPath = config->getValueString(ConfigKey(RECORDING_PREF_KEY,"Directory"));
+ LineEditRecordings->setText(recordingsPath);
+
+ if (radioWav && radioWav->isChecked())
+ {
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_WAVE));
+ }
+ else if (radioAiff && radioAiff->isChecked())
+ {
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_AIFF));
+ }
+ else if (radioFlac && radioFlac->isChecked())
+ {
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_FLAC));
+ }
+ else if (radioOgg && radioOgg->isChecked())
+ {
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_OGG));
+ }
+ else if (radioMp3 && radioMp3->isChecked())
+ {
+ config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_MP3));
+ }
+ loadMetaData();
+}
+
+void DlgPrefRecord::slotBrowseRecordingsDir()
+{
+ QString fd = QFileDialog::getExistingDirectory(this, tr("Choose recordings directory"),
+ config->getValueString(ConfigKey(RECORDING_PREF_KEY,"Directory")));
+ if (fd != "")
+ {
+ LineEditRecordings->setText(fd);
+ }
+}
+
+void DlgPrefRecord::slotApply()
+{
+ setRecordingFolder();
+
+ setMetaData();
+
+ slotEncoding();
+}
+
+void DlgPrefRecord::setRecordingFolder() {
+ if (LineEditRecordings->text() == "") {
+ qDebug() << "Recordings path was empty in dialog";
+ return;
+ }
+ if (LineEditRecordings->text() != config->getValueString(ConfigKey(RECORDING_PREF_KEY,"Directory")))
+ {
+ qDebug() << "Saved recordings path" << LineEditRecordings->text();
+ config->set(ConfigKey(RECORDING_PREF_KEY,"Directory"), LineEditRecordings->text());
+ }
+}
+
+void DlgPrefRecord::slotEnableCueFile(int enabled)
+{
+ config->set(ConfigKey(RECORDING_PREF_KEY, "CueEnabled"), ConfigValue(enabled != Qt::Unchecked));
+}
+
+void DlgPrefRecord::slotChangeSplitSize()
+{
+ config->set(ConfigKey(RECORDING_PREF_KEY, "FileSize"),
+ ConfigValue(comboBoxSplitting->currentText()));
+
+}