![]() |
Mixxx
|
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 }