MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), mPeriodSizeValidator(NULL), mPeriodCountValidator(NULL), mSourceCountValidator(NULL), mEffectSlotValidator(NULL), mSourceSendValidator(NULL), mSampleRateValidator(NULL), mReverbBoostValidator(NULL) { ui->setupUi(this); mPeriodSizeValidator = new QIntValidator(64, 8192, this); ui->periodSizeEdit->setValidator(mPeriodSizeValidator); mPeriodCountValidator = new QIntValidator(2, 16, this); ui->periodCountEdit->setValidator(mPeriodCountValidator); mSourceCountValidator = new QIntValidator(0, 256, this); ui->srcCountLineEdit->setValidator(mSourceCountValidator); mEffectSlotValidator = new QIntValidator(0, 16, this); ui->effectSlotLineEdit->setValidator(mEffectSlotValidator); mSourceSendValidator = new QIntValidator(0, 4, this); ui->srcSendLineEdit->setValidator(mSourceSendValidator); mSampleRateValidator = new QIntValidator(8000, 192000, this); ui->sampleRateCombo->lineEdit()->setValidator(mSampleRateValidator); mReverbBoostValidator = new QDoubleValidator(-12.0, +12.0, 1, this); ui->reverbBoostEdit->setValidator(mReverbBoostValidator); connect(ui->actionLoad, SIGNAL(triggered()), this, SLOT(loadConfigFromFile())); connect(ui->actionSave_As, SIGNAL(triggered()), this, SLOT(saveConfigAsFile())); connect(ui->applyButton, SIGNAL(clicked()), this, SLOT(saveCurrentConfig())); connect(ui->periodSizeSlider, SIGNAL(valueChanged(int)), this, SLOT(updatePeriodSizeEdit(int))); connect(ui->periodSizeEdit, SIGNAL(editingFinished()), this, SLOT(updatePeriodSizeSlider())); connect(ui->periodCountSlider, SIGNAL(valueChanged(int)), this, SLOT(updatePeriodCountEdit(int))); connect(ui->periodCountEdit, SIGNAL(editingFinished()), this, SLOT(updatePeriodCountSlider())); connect(ui->hrtfAddButton, SIGNAL(clicked()), this, SLOT(addHrtfFile())); connect(ui->hrtfRemoveButton, SIGNAL(clicked()), this, SLOT(removeHrtfFile())); connect(ui->hrtfFileList, SIGNAL(itemSelectionChanged()), this, SLOT(updateHrtfRemoveButton())); ui->enabledBackendList->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->enabledBackendList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showEnabledBackendMenu(QPoint))); ui->disabledBackendList->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->disabledBackendList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showDisabledBackendMenu(QPoint))); connect(ui->reverbBoostSlider, SIGNAL(valueChanged(int)), this, SLOT(updateReverbBoostEdit(int))); connect(ui->reverbBoostEdit, SIGNAL(textEdited(QString)), this, SLOT(updateReverbBoostSlider(QString))); loadConfig(getDefaultConfigName()); }
void MainWindow::loadConfig(const QString &fname) { QSettings settings(fname, QSettings::IniFormat); QString sampletype = settings.value("sample-type").toString(); ui->sampleFormatCombo->setCurrentIndex(0); if(sampletype.isEmpty() == false) { for(int i = 1;i < ui->sampleFormatCombo->count();i++) { QString item = ui->sampleFormatCombo->itemText(i); if(item.startsWith(sampletype)) { ui->sampleFormatCombo->setCurrentIndex(i); break; } } } QString channelconfig = settings.value("channels").toString(); ui->channelConfigCombo->setCurrentIndex(0); if(channelconfig.isEmpty() == false) { for(int i = 1;i < ui->channelConfigCombo->count();i++) { QString item = ui->channelConfigCombo->itemText(i); if(item.startsWith(channelconfig)) { ui->channelConfigCombo->setCurrentIndex(i); break; } } } QString srate = settings.value("frequency").toString(); if(srate.isEmpty()) ui->sampleRateCombo->setCurrentIndex(0); else { ui->sampleRateCombo->lineEdit()->clear(); ui->sampleRateCombo->lineEdit()->insert(srate); } ui->srcCountLineEdit->clear(); ui->srcCountLineEdit->insert(settings.value("sources").toString()); ui->effectSlotLineEdit->clear(); ui->effectSlotLineEdit->insert(settings.value("slots").toString()); ui->srcSendLineEdit->clear(); ui->srcSendLineEdit->insert(settings.value("sends").toString()); QString resampler = settings.value("resampler").toString().trimmed(); if(resampler.isEmpty()) ui->resamplerComboBox->setCurrentIndex(0); else { for(int i = 1;i < ui->resamplerComboBox->count();i++) { QString item = ui->resamplerComboBox->itemText(i); int end = item.indexOf(' '); if(end < 0) end = item.size(); if(resampler.size() == end && resampler.compare(item.leftRef(end), Qt::CaseInsensitive) == 0) { ui->resamplerComboBox->setCurrentIndex(i); break; } } } int periodsize = settings.value("period_size").toInt(); ui->periodSizeEdit->clear(); if(periodsize >= 64) { ui->periodSizeEdit->insert(QString::number(periodsize)); updatePeriodSizeSlider(); } int periodcount = settings.value("periods").toInt(); ui->periodCountEdit->clear(); if(periodcount >= 2) { ui->periodCountEdit->insert(QString::number(periodcount)); updatePeriodCountSlider(); } QStringList disabledCpuExts = settings.value("disable-cpu-exts").toStringList(); if(disabledCpuExts.size() == 1) disabledCpuExts = disabledCpuExts[0].split(QChar(',')); std::transform(disabledCpuExts.begin(), disabledCpuExts.end(), disabledCpuExts.begin(), std::mem_fun_ref(&QString::trimmed)); ui->enableSSECheckBox->setChecked(!disabledCpuExts.contains("sse", Qt::CaseInsensitive)); ui->enableSSE2CheckBox->setChecked(!disabledCpuExts.contains("sse2", Qt::CaseInsensitive)); ui->enableSSE41CheckBox->setChecked(!disabledCpuExts.contains("sse4.1", Qt::CaseInsensitive)); ui->enableNeonCheckBox->setChecked(!disabledCpuExts.contains("neon", Qt::CaseInsensitive)); if(settings.value("hrtf").toString() == QString()) ui->hrtfEnableButton->setChecked(true); else { if(settings.value("hrtf", true).toBool()) ui->hrtfForceButton->setChecked(true); else ui->hrtfDisableButton->setChecked(true); } QStringList hrtf_tables = settings.value("hrtf_tables").toStringList(); if(hrtf_tables.size() == 1) hrtf_tables = hrtf_tables[0].split(QChar(',')); std::transform(hrtf_tables.begin(), hrtf_tables.end(), hrtf_tables.begin(), std::mem_fun_ref(&QString::trimmed)); ui->hrtfFileList->clear(); ui->hrtfFileList->addItems(hrtf_tables); updateHrtfRemoveButton(); ui->enabledBackendList->clear(); ui->disabledBackendList->clear(); QStringList drivers = settings.value("drivers").toStringList(); if(drivers.size() == 0) ui->backendCheckBox->setChecked(true); else { if(drivers.size() == 1) drivers = drivers[0].split(QChar(',')); std::transform(drivers.begin(), drivers.end(), drivers.begin(), std::mem_fun_ref(&QString::trimmed)); bool lastWasEmpty = false; foreach(const QString &backend, drivers) { lastWasEmpty = backend.isEmpty(); if(!backend.startsWith(QChar('-')) && !lastWasEmpty) ui->enabledBackendList->addItem(backend); else if(backend.size() > 1) ui->disabledBackendList->addItem(backend.right(backend.size()-1)); } ui->backendCheckBox->setChecked(lastWasEmpty); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), mPeriodSizeValidator(NULL), mPeriodCountValidator(NULL), mSourceCountValidator(NULL), mEffectSlotValidator(NULL), mSourceSendValidator(NULL), mSampleRateValidator(NULL), mJackBufferValidator(NULL), mNeedsSave(false) { ui->setupUi(this); for(int i = 0;speakerModeList[i].name[0];i++) ui->channelConfigCombo->addItem(speakerModeList[i].name); ui->channelConfigCombo->adjustSize(); for(int i = 0;sampleTypeList[i].name[0];i++) ui->sampleFormatCombo->addItem(sampleTypeList[i].name); ui->sampleFormatCombo->adjustSize(); for(int i = 0;stereoModeList[i].name[0];i++) ui->stereoModeCombo->addItem(stereoModeList[i].name); ui->stereoModeCombo->adjustSize(); for(int i = 0;stereoPanList[i].name[0];i++) ui->stereoPanningComboBox->addItem(stereoPanList[i].name); ui->stereoPanningComboBox->adjustSize(); int count; for(count = 0;resamplerList[count].name[0];count++) { } ui->resamplerSlider->setRange(0, count-1); ui->hrtfStateComboBox->adjustSize(); #if !defined(HAVE_NEON) && !defined(HAVE_SSE) ui->cpuExtDisabledLabel->move(ui->cpuExtDisabledLabel->x(), ui->cpuExtDisabledLabel->y() - 60); #else ui->cpuExtDisabledLabel->setVisible(false); #endif #ifndef HAVE_NEON #ifndef HAVE_SSE4_1 #ifndef HAVE_SSE3 #ifndef HAVE_SSE2 #ifndef HAVE_SSE ui->enableSSECheckBox->setVisible(false); #endif /* !SSE */ ui->enableSSE2CheckBox->setVisible(false); #endif /* !SSE2 */ ui->enableSSE3CheckBox->setVisible(false); #endif /* !SSE3 */ ui->enableSSE41CheckBox->setVisible(false); #endif /* !SSE4.1 */ ui->enableNeonCheckBox->setVisible(false); #else /* !Neon */ #ifndef HAVE_SSE4_1 #ifndef HAVE_SSE3 #ifndef HAVE_SSE2 #ifndef HAVE_SSE ui->enableNeonCheckBox->move(ui->enableNeonCheckBox->x(), ui->enableNeonCheckBox->y() - 30); ui->enableSSECheckBox->setVisible(false); #endif /* !SSE */ ui->enableSSE2CheckBox->setVisible(false); #endif /* !SSE2 */ ui->enableSSE3CheckBox->setVisible(false); #endif /* !SSE3 */ ui->enableSSE41CheckBox->setVisible(false); #endif /* !SSE4.1 */ #endif mPeriodSizeValidator = new QIntValidator(64, 8192, this); ui->periodSizeEdit->setValidator(mPeriodSizeValidator); mPeriodCountValidator = new QIntValidator(2, 16, this); ui->periodCountEdit->setValidator(mPeriodCountValidator); mSourceCountValidator = new QIntValidator(0, 256, this); ui->srcCountLineEdit->setValidator(mSourceCountValidator); mEffectSlotValidator = new QIntValidator(0, 16, this); ui->effectSlotLineEdit->setValidator(mEffectSlotValidator); mSourceSendValidator = new QIntValidator(0, 4, this); ui->srcSendLineEdit->setValidator(mSourceSendValidator); mSampleRateValidator = new QIntValidator(8000, 192000, this); ui->sampleRateCombo->lineEdit()->setValidator(mSampleRateValidator); mJackBufferValidator = new QIntValidator(0, 8192, this); ui->jackBufferSizeLine->setValidator(mJackBufferValidator); connect(ui->actionLoad, SIGNAL(triggered()), this, SLOT(loadConfigFromFile())); connect(ui->actionSave_As, SIGNAL(triggered()), this, SLOT(saveConfigAsFile())); connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(showAboutPage())); connect(ui->closeCancelButton, SIGNAL(clicked()), this, SLOT(cancelCloseAction())); connect(ui->applyButton, SIGNAL(clicked()), this, SLOT(saveCurrentConfig())); connect(ui->channelConfigCombo, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(enableApplyButton())); connect(ui->sampleFormatCombo, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(enableApplyButton())); connect(ui->stereoModeCombo, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(enableApplyButton())); connect(ui->sampleRateCombo, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(enableApplyButton())); connect(ui->sampleRateCombo, SIGNAL(editTextChanged(const QString&)), this, SLOT(enableApplyButton())); connect(ui->resamplerSlider, SIGNAL(valueChanged(int)), this, SLOT(updateResamplerLabel(int))); connect(ui->periodSizeSlider, SIGNAL(valueChanged(int)), this, SLOT(updatePeriodSizeEdit(int))); connect(ui->periodSizeEdit, SIGNAL(editingFinished()), this, SLOT(updatePeriodSizeSlider())); connect(ui->periodCountSlider, SIGNAL(valueChanged(int)), this, SLOT(updatePeriodCountEdit(int))); connect(ui->periodCountEdit, SIGNAL(editingFinished()), this, SLOT(updatePeriodCountSlider())); connect(ui->stereoPanningComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->decoderHQModeCheckBox, SIGNAL(stateChanged(int)), this, SLOT(toggleHqState(int))); connect(ui->decoderDistCompCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->decoderQuadLineEdit, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->decoderQuadButton, SIGNAL(clicked()), this, SLOT(selectQuadDecoderFile())); connect(ui->decoder51LineEdit, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->decoder51Button, SIGNAL(clicked()), this, SLOT(select51DecoderFile())); connect(ui->decoder51RearLineEdit, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->decoder51RearButton, SIGNAL(clicked()), this, SLOT(select51RearDecoderFile())); connect(ui->decoder61LineEdit, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->decoder61Button, SIGNAL(clicked()), this, SLOT(select61DecoderFile())); connect(ui->decoder71LineEdit, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->decoder71Button, SIGNAL(clicked()), this, SLOT(select71DecoderFile())); connect(ui->preferredHrtfComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(enableApplyButton())); connect(ui->hrtfStateComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(enableApplyButton())); connect(ui->hrtfAddButton, SIGNAL(clicked()), this, SLOT(addHrtfFile())); connect(ui->hrtfRemoveButton, SIGNAL(clicked()), this, SLOT(removeHrtfFile())); connect(ui->hrtfFileList, SIGNAL(itemSelectionChanged()), this, SLOT(updateHrtfRemoveButton())); connect(ui->defaultHrtfPathsCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->srcCountLineEdit, SIGNAL(editingFinished()), this, SLOT(enableApplyButton())); connect(ui->srcSendLineEdit, SIGNAL(editingFinished()), this, SLOT(enableApplyButton())); connect(ui->effectSlotLineEdit, SIGNAL(editingFinished()), this, SLOT(enableApplyButton())); connect(ui->enableSSECheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableSSE2CheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableSSE3CheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableSSE41CheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableNeonCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); ui->enabledBackendList->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->enabledBackendList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showEnabledBackendMenu(QPoint))); ui->disabledBackendList->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->disabledBackendList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showDisabledBackendMenu(QPoint))); connect(ui->backendCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->defaultReverbComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(enableApplyButton())); connect(ui->emulateEaxCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableEaxReverbCheck, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableStdReverbCheck, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableChorusCheck, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableCompressorCheck, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableDistortionCheck, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableEchoCheck, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableEqualizerCheck, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableFlangerCheck, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableModulatorCheck, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->enableDedicatedCheck, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->pulseAutospawnCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->pulseAllowMovesCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->pulseFixRateCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->jackAutospawnCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->jackBufferSizeSlider, SIGNAL(valueChanged(int)), this, SLOT(updateJackBufferSizeEdit(int))); connect(ui->jackBufferSizeLine, SIGNAL(editingFinished()), this, SLOT(updateJackBufferSizeSlider())); connect(ui->alsaDefaultDeviceLine, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->alsaDefaultCaptureLine, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->alsaResamplerCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->alsaMmapCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); connect(ui->ossDefaultDeviceLine, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->ossPlaybackPushButton, SIGNAL(clicked(bool)), this, SLOT(selectOSSPlayback())); connect(ui->ossDefaultCaptureLine, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->ossCapturePushButton, SIGNAL(clicked(bool)), this, SLOT(selectOSSCapture())); connect(ui->solarisDefaultDeviceLine, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->solarisPlaybackPushButton, SIGNAL(clicked(bool)), this, SLOT(selectSolarisPlayback())); connect(ui->waveOutputLine, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton())); connect(ui->waveOutputButton, SIGNAL(clicked(bool)), this, SLOT(selectWaveOutput())); connect(ui->waveBFormatCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableApplyButton())); ui->backendListWidget->setCurrentRow(0); ui->tabWidget->setCurrentIndex(0); for(int i = 1;i < ui->backendListWidget->count();i++) ui->backendListWidget->setRowHidden(i, true); for(int i = 0;backendList[i].backend_name[0];i++) { QList<QListWidgetItem*> items = ui->backendListWidget->findItems( backendList[i].full_string, Qt::MatchFixedString ); foreach(const QListWidgetItem *item, items) ui->backendListWidget->setItemHidden(item, false); } loadConfig(getDefaultConfigName()); }