Mixxx

/home/maxime/Projets/Mixxx/1.10/mixxx/src/dlgprefrecord.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002                           dlgprefrecord.cpp  -  description
00003                              -------------------
00004     begin                : Thu Jun 19 2007
00005     copyright            : (C) 2007 by John Sully
00006     email                : jsully@scs.ryerson.ca
00007 ***************************************************************************/
00008 
00009 /***************************************************************************
00010 *                                                                         *
00011 *   This program is free software; you can redistribute it and/or modify  *
00012 *   it under the terms of the GNU General Public License as published by  *
00013 *   the Free Software Foundation; either version 2 of the License, or     *
00014 *   (at your option) any later version.                                   *
00015 *                                                                         *
00016 ***************************************************************************/
00017 
00018 #include <QtCore>
00019 #include <QtGui>
00020 #include "dlgprefrecord.h"
00021 #include "recording/defs_recording.h"
00022 #include "controlobject.h"
00023 #include "controlobjectthreadmain.h"
00024 #include "recording/encoder.h"
00025 
00026 
00027 DlgPrefRecord::DlgPrefRecord(QWidget * parent, ConfigObject<ConfigValue> * _config) : QWidget(parent), Ui::DlgPrefRecordDlg()
00028 {
00029     config = _config;
00030     confirmOverwrite = false;
00031     radioFlac = 0;
00032     radioMp3 = 0;
00033     radioOgg = 0;
00034     radioAiff= 0;
00035     radioWav = 0;
00036 
00037 
00038     setupUi(this);
00039 
00040     recordControl = new ControlObjectThreadMain(ControlObject::getControl(ConfigKey("[Master]", "Record"))); //See RECORD_* #defines in defs_recording.h
00041 
00042 
00043 
00044 #ifdef __SHOUTCAST__
00045     radioOgg = new QRadioButton("Ogg Vorbis");
00046     radioMp3 = new QRadioButton(ENCODING_MP3);
00047     connect(radioOgg,SIGNAL(clicked()),
00048             this, SLOT(slotApply()));
00049     connect(radioMp3, SIGNAL(clicked()),
00050             this, SLOT(slotApply()));
00051     horizontalLayout->addWidget(radioOgg);
00052     horizontalLayout->addWidget(radioMp3);
00053 
00054 #endif
00055 
00056     //AIFF and WAVE are supported by default
00057     radioWav = new QRadioButton(ENCODING_WAVE);
00058     connect(radioWav, SIGNAL(clicked()),
00059             this, SLOT(slotApply()));
00060     horizontalLayout->addWidget(radioWav);
00061 
00062     radioAiff = new QRadioButton(ENCODING_AIFF);
00063     connect(radioAiff, SIGNAL(clicked()),
00064             this, SLOT(slotApply()));
00065     horizontalLayout->addWidget(radioAiff);
00066 
00067 
00068 #ifdef SF_FORMAT_FLAC
00069     radioFlac = new QRadioButton(ENCODING_FLAC);
00070     connect(radioFlac,SIGNAL(clicked()),
00071             this, SLOT(slotApply()));
00072     horizontalLayout->addWidget(radioFlac);
00073 #endif
00074 
00075     //Read config and check radio button
00076     QString format = config->getValueString(ConfigKey("[Recording]","Encoding"));
00077     if(format == ENCODING_WAVE)
00078         radioWav->setChecked(true);
00079 #ifdef __SHOUTCAST__
00080     else if(format == ENCODING_OGG)
00081         radioOgg->setChecked(true);
00082     else if (format == ENCODING_MP3)
00083         radioMp3->setChecked(true);
00084 #endif
00085 #ifdef SF_FORMAT_FLAC
00086     else if (format == ENCODING_AIFF)
00087         radioAiff->setChecked(true);
00088 #endif
00089     else //Invalid, so set default and save
00090     {
00091         //If no config was available, set to WAVE as default
00092         radioWav->setChecked(true);
00093         config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_WAVE));
00094     }
00095 
00096     //Connections
00097     connect(SliderQuality,    SIGNAL(valueChanged(int)), this,  SLOT(slotSliderQuality()));
00098     connect(SliderQuality,    SIGNAL(sliderMoved(int)), this,   SLOT(slotSliderQuality()));
00099     connect(SliderQuality,    SIGNAL(sliderReleased()), this,   SLOT(slotSliderQuality()));
00100     connect(CheckBoxRecordCueFile, SIGNAL(stateChanged(int)), this, SLOT(slotEnableCueFile(int)));
00101     connect(comboBoxSplitting, SIGNAL(activated(int)),   this,   SLOT(slotChangeSplitSize()));
00102 
00103     slotApply();
00104     recordControl->slotSet(RECORD_OFF); //make sure a corrupt config file won't cause us to record constantly
00105 
00106     comboBoxSplitting->addItem(SPLIT_650MB);
00107     comboBoxSplitting->addItem(SPLIT_700MB);
00108     comboBoxSplitting->addItem(SPLIT_1024MB);
00109     comboBoxSplitting->addItem(SPLIT_2048MB);
00110     comboBoxSplitting->addItem(SPLIT_4096MB);
00111 
00112     QString fileSizeStr = config->getValueString(ConfigKey("[Recording]","FileSize"));
00113     int index = comboBoxSplitting->findText(fileSizeStr);
00114     if(index > 0){
00115         //set file split size
00116         comboBoxSplitting->setCurrentIndex(index);
00117     }
00118     //Otherwise 650 MB will be default file split size
00119 
00120     //Read CUEfile info
00121     CheckBoxRecordCueFile->setChecked((bool) config->getValueString(ConfigKey("[Recording]","CueEnabled")).toInt());
00122 
00123 }
00124 
00125 void DlgPrefRecord::slotSliderQuality()
00126 {
00127     updateTextQuality();
00128 
00129     if (radioOgg && radioOgg->isChecked())
00130     {
00131         config->set(ConfigKey(RECORDING_PREF_KEY, "OGG_Quality"), ConfigValue(SliderQuality->value()));
00132     }
00133     else if (radioMp3 && radioMp3->isChecked())
00134     {
00135         config->set(ConfigKey(RECORDING_PREF_KEY, "MP3_Quality"), ConfigValue(SliderQuality->value()));
00136     }
00137 }
00138 
00139 int DlgPrefRecord::getSliderQualityVal()
00140 {
00141 
00142     /* Commented by Tobias Rafreider
00143      * We always use the bitrate to denote the quality since it is more common to the users
00144      */
00145     return Encoder::convertToBitrate(SliderQuality->value());
00146 
00147 }
00148 
00149 void DlgPrefRecord::updateTextQuality()
00150 {
00151     int quality = getSliderQualityVal();
00152     //QString encodingType = comboBoxEncoding->currentText();
00153 
00154     TextQuality->setText(QString( QString::number(quality) + tr("kbps")));
00155 
00156 
00157 }
00158 
00159 void DlgPrefRecord::slotEncoding()
00160 {
00161     //set defaults
00162     groupBoxQuality->setEnabled(true);
00163     //config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(comboBoxEncoding->currentText()));
00164 
00165     if (radioWav && radioWav->isChecked()) {
00166         config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_WAVE));
00167         groupBoxQuality->setEnabled(false);
00168     }
00169     else if(radioFlac && radioFlac->isChecked()){
00170         config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_FLAC));
00171         groupBoxQuality->setEnabled(false);
00172     }
00173     else if(radioAiff && radioAiff->isChecked()){
00174         config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_AIFF));
00175         groupBoxQuality->setEnabled(false);
00176     }
00177     else if (radioOgg && radioOgg->isChecked())
00178     {
00179         int value = config->getValueString(ConfigKey(RECORDING_PREF_KEY, "OGG_Quality")).toInt();
00180         //if value == 0 then a default value of 128kbps is proposed.
00181         if(!value)
00182             value = 6; // 128kbps
00183 
00184         SliderQuality->setValue(value);
00185         config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_OGG));
00186     }
00187     else if (radioMp3 && radioMp3->isChecked())
00188     {
00189         int value = config->getValueString(ConfigKey(RECORDING_PREF_KEY, "MP3_Quality")).toInt();
00190         //if value == 0 then a default value of 128kbps is proposed.
00191         if(!value)
00192             value = 6; // 128kbps
00193 
00194         SliderQuality->setValue(value);
00195         config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_MP3));
00196     }
00197     else
00198         qDebug() << "Invalid recording encoding type in" << __FILE__ << "on line:" << __LINE__;
00199 }
00200 
00201 void DlgPrefRecord::setMetaData()
00202 {
00203     config->set(ConfigKey(RECORDING_PREF_KEY, "Title"), ConfigValue(LineEditTitle->text()));
00204     config->set(ConfigKey(RECORDING_PREF_KEY, "Author"), ConfigValue(LineEditAuthor->text()));
00205     config->set(ConfigKey(RECORDING_PREF_KEY, "Album"), ConfigValue(LineEditAlbum->text()));
00206 }
00207 
00208 void DlgPrefRecord::loadMetaData()
00209 {
00210     LineEditTitle->setText( config->getValueString(ConfigKey(RECORDING_PREF_KEY, "Title")));
00211     LineEditAuthor->setText( config->getValueString(ConfigKey(RECORDING_PREF_KEY, "Author")));
00212     LineEditAlbum->setText( config->getValueString(ConfigKey(RECORDING_PREF_KEY, "Album")));
00213 }
00214 
00215 DlgPrefRecord::~DlgPrefRecord()
00216 {
00217    delete recordControl;
00218 }
00219 
00220 void DlgPrefRecord::slotRecordPathChange()
00221 {
00222     confirmOverwrite = false;
00223     slotApply();
00224 }
00225 
00226 //This function updates/refreshes the contents of this dialog
00227 void DlgPrefRecord::slotUpdate()
00228 {
00229     if (radioWav && radioWav->isChecked())
00230     {
00231         config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_WAVE));
00232     }
00233     else if (radioAiff && radioAiff->isChecked())
00234     {
00235         config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_AIFF));
00236     }
00237     else if (radioFlac && radioFlac->isChecked())
00238     {
00239         config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_FLAC));
00240     }
00241     else if (radioOgg && radioOgg->isChecked())
00242     {
00243         config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_OGG));
00244     }
00245     else if (radioMp3 && radioMp3->isChecked())
00246     {
00247        config->set(ConfigKey(RECORDING_PREF_KEY, "Encoding"), ConfigValue(ENCODING_MP3));
00248     }
00249     loadMetaData();
00250 }
00251 
00252 void DlgPrefRecord::slotApply()
00253 {
00254     setMetaData();
00255 
00256     slotEncoding();
00257 }
00258 void DlgPrefRecord::slotEnableCueFile(int enabled)
00259 {
00260     config->set(ConfigKey(RECORDING_PREF_KEY, "CueEnabled"), ConfigValue(CheckBoxRecordCueFile->isChecked()));
00261 
00262 }
00263 void DlgPrefRecord::slotChangeSplitSize()
00264 {
00265         config->set(ConfigKey(RECORDING_PREF_KEY, "FileSize"), ConfigValue(comboBoxSplitting->currentText()));
00266 
00267 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines