DlgPrefCrossfader::DlgPrefCrossfader(QWidget * parent, ConfigObject<ConfigValue> * _config) : QWidget(parent), m_COTMode(CONFIG_KEY, "xFaderMode"), m_COTCurve(CONFIG_KEY, "xFaderCurve"), m_COTCalibration(CONFIG_KEY, "xFaderCalibration"), m_COTReverse(CONFIG_KEY, "xFaderReverse") { config = _config; m_pxfScene = NULL; m_transform = 0; m_cal = 0; m_xFaderMode = MIXXX_XFADER_ADDITIVE; setupUi(this); connect(PushButtonReset, SIGNAL(clicked(bool)), this, SLOT(setDefaults())); QButtonGroup crossfaderModes; crossfaderModes.addButton(radioButtonAdditive); crossfaderModes.addButton(radioButtonConstantPower); loadSettings(); connect(SliderXFader, SIGNAL(valueChanged(int)), this, SLOT(slotUpdateXFader())); connect(SliderXFader, SIGNAL(sliderMoved(int)), this, SLOT(slotUpdateXFader())); connect(SliderXFader, SIGNAL(sliderReleased()), this, SLOT(slotUpdateXFader())); connect(SliderXFader, SIGNAL(sliderReleased()), this, SLOT(slotApply())); //Update the crossfader curve graph and other setings when the crossfader mode is changed. connect(radioButtonAdditive, SIGNAL(clicked(bool)), this, SLOT(slotUpdate())); connect(radioButtonConstantPower, SIGNAL(clicked(bool)), this, SLOT(slotUpdate())); }
// Loads the config keys and sets the widgets in the dialog to match void DlgPrefCrossfader::loadSettings() { // Range xFaderCurve EngineXfader::kTransformMin .. EngineXfader::kTransformMax m_transform = m_config->getValue( ConfigKey(EngineXfader::kXfaderConfigKey, "xFaderCurve"), EngineXfader::kTransformDefault); // Range SliderXFader 0 .. 100 double sliderVal = RescalerUtils::oneByXToLinear( m_transform - EngineXfader::kTransformMin + 1, EngineXfader::kTransformMax - EngineXfader::kTransformMin + 1, SliderXFader->minimum(), SliderXFader->maximum()); SliderXFader->setValue(static_cast<int>(sliderVal + 0.5)); m_xFaderMode = m_config->getValueString(ConfigKey(EngineXfader::kXfaderConfigKey, "xFaderMode")).toInt(); if (m_xFaderMode == MIXXX_XFADER_CONSTPWR) { radioButtonConstantPower->setChecked(true); } else { radioButtonAdditive->setChecked(true); } m_xFaderReverse = m_config->getValueString( ConfigKey(EngineXfader::kXfaderConfigKey, "xFaderReverse")).toInt() == 1; checkBoxReverse->setChecked(m_xFaderReverse); slotUpdateXFader(); slotApply(); }
// Loads the config keys and sets the widgets in the dialog to match void DlgPrefCrossfader::loadSettings() { m_transform = 1. + ((double) SliderXFader->value() / SliderXFader->maximum()); double sliderTransform = m_config->getValueString( ConfigKey(kConfigKey, "xFaderCurve")).toDouble(); double sliderVal = SliderXFader->maximum() / kXFaderSteepnessCoeff * (sliderTransform - 1.); SliderXFader->setValue((int) sliderVal); m_xFaderMode = m_config->getValueString(ConfigKey(kConfigKey, "xFaderMode")).toInt(); if (m_xFaderMode == MIXXX_XFADER_CONSTPWR) { radioButtonConstantPower->setChecked(true); //SliderXFader->setEnabled(true); } else { radioButtonAdditive->setChecked(true); //SliderXFader->setEnabled(false); } m_xFaderReverse = m_config->getValueString( ConfigKey(kConfigKey, "xFaderReverse")).toInt() == 1; checkBoxReverse->setChecked(m_xFaderReverse); slotUpdateXFader(); slotApply(); }
// Update the dialog when the crossfader mode is changed void DlgPrefCrossfader::slotUpdate() { if (radioButtonAdditive->isChecked()) { m_xFaderMode = MIXXX_XFADER_ADDITIVE; } if (radioButtonConstantPower->isChecked()) { m_xFaderMode = MIXXX_XFADER_CONSTPWR; } slotUpdateXFader(); }
// Apply and save any changes made in the dialog void DlgPrefCrossfader::slotApply() { m_mode.set(m_xFaderMode); m_curve.set(m_transform); m_calibration.set(m_cal); if (checkBoxReverse->isChecked() != m_xFaderReverse) { m_reverse.set(checkBoxReverse->isChecked()); double position = m_crossfader.get(); m_crossfader.set(0.0 - position); m_xFaderReverse = checkBoxReverse->isChecked(); } slotUpdateXFader(); }
/** Update the dialog when the crossfader mode is changed */ void DlgPrefCrossfader::slotUpdate() { if (radioButtonAdditive->isChecked()) { m_xFaderMode = MIXXX_XFADER_ADDITIVE; // SliderXFader->setValue(SliderXFader->minimum()); } if (radioButtonConstantPower->isChecked()) { m_xFaderMode = MIXXX_XFADER_CONSTPWR; double sliderTransform = config->getValueString(ConfigKey(CONFIG_KEY, "xFaderCurve")).toDouble(); double sliderVal = SliderXFader->maximum() / MIXXX_XFADER_STEEPNESS_COEFF * (sliderTransform - 1.); SliderXFader->setValue((int)sliderVal); } slotUpdateXFader(); }
// Update the dialog when the crossfader mode is changed void DlgPrefCrossfader::slotUpdate() { if (radioButtonAdditive->isChecked()) { m_xFaderMode = MIXXX_XFADER_ADDITIVE; } if (radioButtonConstantPower->isChecked()) { m_xFaderMode = MIXXX_XFADER_CONSTPWR; double sliderTransform = m_config->getValueString( ConfigKey(kConfigKey, "xFaderCurve")).toDouble(); double sliderVal = SliderXFader->maximum() / kXFaderSteepnessCoeff * (sliderTransform - 1.); SliderXFader->setValue((int)sliderVal); } slotUpdateXFader(); }
DlgPrefCrossfader::DlgPrefCrossfader( QWidget* parent, UserSettingsPointer config) : DlgPreferencePage(parent), m_config(config), m_pxfScene(NULL), m_xFaderMode(MIXXX_XFADER_ADDITIVE), m_transform(EngineXfader::kTransformDefault), m_cal(0.0), m_mode(EngineXfader::kXfaderConfigKey, "xFaderMode"), m_curve(EngineXfader::kXfaderConfigKey, "xFaderCurve"), m_calibration(EngineXfader::kXfaderConfigKey, "xFaderCalibration"), m_reverse(EngineXfader::kXfaderConfigKey, "xFaderReverse"), m_crossfader("[Master]", "crossfader"), m_xFaderReverse(false) { setupUi(this); QButtonGroup crossfaderModes; crossfaderModes.addButton(radioButtonAdditive); crossfaderModes.addButton(radioButtonConstantPower); loadSettings(); connect(SliderXFader, SIGNAL(valueChanged(int)), this, SLOT(slotUpdateXFader())); connect(SliderXFader, SIGNAL(sliderMoved(int)), this, SLOT(slotUpdateXFader())); connect(SliderXFader, SIGNAL(sliderReleased()), this, SLOT(slotUpdateXFader())); connect(SliderXFader, SIGNAL(sliderReleased()), this, SLOT(slotApply())); // Update the crossfader curve graph and other settings when the // crossfader mode is changed. connect(radioButtonAdditive, SIGNAL(clicked(bool)), this, SLOT(slotUpdate())); connect(radioButtonConstantPower, SIGNAL(clicked(bool)), this, SLOT(slotUpdate())); }