diff --git a/build/depends.py b/build/depends.py
index 8824db46c98a..002330f0edcb 100644
--- a/build/depends.py
+++ b/build/depends.py
@@ -670,11 +670,12 @@ def sources(self, build):
"preferences/configobject.cpp",
"preferences/dialog/dlgprefautodj.cpp",
- "preferences/dialog/dlgprefcontrols.cpp",
+ "preferences/dialog/dlgprefdeck.cpp",
"preferences/dialog/dlgprefcrossfader.cpp",
"preferences/dialog/dlgprefeffects.cpp",
"preferences/dialog/dlgprefeq.cpp",
"preferences/dialog/dlgpreferences.cpp",
+ "preferences/dialog/dlgprefinterface.cpp",
"preferences/dialog/dlgpreflibrary.cpp",
"preferences/dialog/dlgprefnovinyl.cpp",
"preferences/dialog/dlgprefrecord.cpp",
@@ -1200,11 +1201,12 @@ def sources(self, build):
'library/recording/dlgrecording.ui',
'preferences/dialog/dlgprefautodjdlg.ui',
'preferences/dialog/dlgprefbeatsdlg.ui',
- 'preferences/dialog/dlgprefcontrolsdlg.ui',
+ 'preferences/dialog/dlgprefdeckdlg.ui',
'preferences/dialog/dlgprefcrossfaderdlg.ui',
'preferences/dialog/dlgprefeffectsdlg.ui',
'preferences/dialog/dlgprefeqdlg.ui',
'preferences/dialog/dlgpreferencesdlg.ui',
+ 'preferences/dialog/dlgprefinterfacedlg.ui',
'preferences/dialog/dlgprefkeydlg.ui',
'preferences/dialog/dlgpreflibrarydlg.ui',
'preferences/dialog/dlgprefnovinyldlg.ui',
diff --git a/res/images/preferences/ic_preferences_decks.png b/res/images/preferences/ic_preferences_decks.png
new file mode 100644
index 000000000000..f34c97e65296
Binary files /dev/null and b/res/images/preferences/ic_preferences_decks.png differ
diff --git a/res/mixxx.qrc b/res/mixxx.qrc
index de5b498070aa..17bf11d233e1 100644
--- a/res/mixxx.qrc
+++ b/res/mixxx.qrc
@@ -31,6 +31,7 @@
images/preferences/ic_preferences_broadcast.png
images/preferences/ic_preferences_controllers.png
images/preferences/ic_preferences_crossfader.png
+ images/preferences/ic_preferences_decks.png
images/preferences/ic_preferences_effects.png
images/preferences/ic_preferences_equalizers.png
images/preferences/ic_preferences_interface.png
diff --git a/src/engine/ratecontrol.cpp b/src/engine/ratecontrol.cpp
index c5ddefb466cf..6bb840b341ab 100644
--- a/src/engine/ratecontrol.cpp
+++ b/src/engine/ratecontrol.cpp
@@ -17,18 +17,16 @@
#include
-// Static default values for rate buttons (percents). Note that these are not
-// actually used -- the preferences code sets the values that are stored in the
-// user's configuration. These are just fail safe defaults.
-double RateControl::m_dTemp = 4.00; //(eg. 4.00%)
-double RateControl::m_dTempSmall = 2.00;
-double RateControl::m_dPerm = 0.50;
-double RateControl::m_dPermSmall = 0.05;
-
-int RateControl::m_iRateRampSensitivity = 250;
+// Static default values for rate buttons (percents)
+double RateControl::m_dTemporaryRateChangeCoarse;
+double RateControl::m_dTemporaryRateChangeFine;
+double RateControl::m_dPermanentRateChangeCoarse;
+double RateControl::m_dPermanentRateChangeFine;
+int RateControl::m_iRateRampSensitivity;
+enum RateControl::RampMode RateControl::m_eRateRampMode;
+
const double RateControl::kWheelMultiplier = 40.0;
const double RateControl::kPausedJogMultiplier = 18.0;
-enum RateControl::RATERAMP_MODE RateControl::m_eRateRampMode = RateControl::RATERAMP_STEP;
RateControl::RateControl(QString group,
UserSettingsPointer pConfig)
@@ -44,7 +42,7 @@ RateControl::RateControl(QString group,
m_pScratchController = new PositionScratchController(group);
m_pRateDir = new ControlObject(ConfigKey(group, "rate_dir"));
- m_pRateRange = new ControlObject(ConfigKey(group, "rateRange"));
+ m_pRateRange = new ControlPotmeter(ConfigKey(group, "rateRange"), 0.01, 0.90);
// Allow rate slider to go out of bounds so that master sync rate
// adjustments are not capped.
m_pRateSlider = new ControlPotmeter(ConfigKey(group, "rate"),
@@ -161,14 +159,15 @@ RateControl::RateControl(QString group,
// FIXME: This should be dependent on sample rate/block size or something
m_pJogFilter->setFilterLength(25);
- // Update Internal Settings
- // Set Pitchbend Mode
- m_eRateRampMode = (RateControl::RATERAMP_MODE)
- getConfig()->getValueString(ConfigKey("[Controls]","RateRamp")).toInt();
+// // Update Internal Settings
+// // Set Pitchbend Mode
+// m_eRateRampMode = static_cast(
+// getConfig()->getValue(ConfigKey("[Controls]","RateRamp"),
+// static_cast(RampMode::Stepping)));
- // Set the Sensitivity
- m_iRateRampSensitivity =
- getConfig()->getValueString(ConfigKey("[Controls]","RateRampSensitivity")).toInt();
+// // Set the Sensitivity
+// m_iRateRampSensitivity =
+// getConfig()->getValueString(ConfigKey("[Controls]","RateRampSensitivity")).toInt();
m_pSyncMode = new ControlProxy(group, "sync_mode", this);
}
@@ -209,15 +208,17 @@ void RateControl::setBpmControl(BpmControl* bpmcontrol) {
}
//static
-void RateControl::setRateRamp(bool linearMode)
-{
- m_eRateRampMode = linearMode ?
- RateControl::RATERAMP_LINEAR : RateControl::RATERAMP_STEP;
+void RateControl::setRateRampMode(RampMode mode) {
+ m_eRateRampMode = mode;
}
//static
-void RateControl::setRateRampSensitivity(int sense)
-{
+RateControl::RampMode RateControl::getRateRampMode() {
+ return m_eRateRampMode;
+}
+
+//static
+void RateControl::setRateRampSensitivity(int sense) {
// Reverse the actual sensitivity value passed.
// That way the gui works in an intuitive manner.
sense = RATE_SENSITIVITY_MAX - sense + RATE_SENSITIVITY_MIN;
@@ -231,23 +232,43 @@ void RateControl::setRateRampSensitivity(int sense)
}
//static
-void RateControl::setTemp(double v) {
- m_dTemp = v;
+void RateControl::setTemporaryRateChangeCoarseAmount(double v) {
+ m_dTemporaryRateChangeCoarse = v;
}
//static
-void RateControl::setTempSmall(double v) {
- m_dTempSmall = v;
+void RateControl::setTemporaryRateChangeFineAmount(double v) {
+ m_dTemporaryRateChangeFine = v;
}
//static
-void RateControl::setPerm(double v) {
- m_dPerm = v;
+void RateControl::setPermanentRateChangeCoarseAmount(double v) {
+ m_dPermanentRateChangeCoarse = v;
}
//static
-void RateControl::setPermSmall(double v) {
- m_dPermSmall = v;
+void RateControl::setPermanentRateChangeFineAmount(double v) {
+ m_dPermanentRateChangeFine = v;
+}
+
+//static
+double RateControl::getTemporaryRateChangeCoarseAmount() {
+ return m_dTemporaryRateChangeCoarse;
+}
+
+//static
+double RateControl::getTemporaryRateChangeFineAmount() {
+ return m_dTemporaryRateChangeFine;
+}
+
+//static
+double RateControl::getPermanentRateChangeCoarseAmount() {
+ return m_dPermanentRateChangeCoarse;
+}
+
+//static
+double RateControl::getPermanentRateChangeFineAmount() {
+ return m_dPermanentRateChangeFine;
}
void RateControl::slotReverseRollActivate(double v) {
@@ -283,7 +304,7 @@ void RateControl::slotControlRatePermDown(double)
// Adjusts temp rate down if button pressed
if (buttonRatePermDown->get()) {
m_pRateSlider->set(m_pRateSlider->get() -
- m_pRateDir->get() * m_dPerm / (100 * m_pRateRange->get()));
+ m_pRateDir->get() * m_dPermanentRateChangeCoarse / (100 * m_pRateRange->get()));
}
}
@@ -292,7 +313,7 @@ void RateControl::slotControlRatePermDownSmall(double)
// Adjusts temp rate down if button pressed
if (buttonRatePermDownSmall->get())
m_pRateSlider->set(m_pRateSlider->get() -
- m_pRateDir->get() * m_dPermSmall / (100. * m_pRateRange->get()));
+ m_pRateDir->get() * m_dPermanentRateChangeFine / (100. * m_pRateRange->get()));
}
void RateControl::slotControlRatePermUp(double)
@@ -300,7 +321,7 @@ void RateControl::slotControlRatePermUp(double)
// Adjusts temp rate up if button pressed
if (buttonRatePermUp->get()) {
m_pRateSlider->set(m_pRateSlider->get() +
- m_pRateDir->get() * m_dPerm / (100. * m_pRateRange->get()));
+ m_pRateDir->get() * m_dPermanentRateChangeCoarse / (100. * m_pRateRange->get()));
}
}
@@ -309,7 +330,7 @@ void RateControl::slotControlRatePermUpSmall(double)
// Adjusts temp rate up if button pressed
if (buttonRatePermUpSmall->get())
m_pRateSlider->set(m_pRateSlider->get() +
- m_pRateDir->get() * m_dPermSmall / (100. * m_pRateRange->get()));
+ m_pRateDir->get() * m_dPermanentRateChangeFine / (100. * m_pRateRange->get()));
}
void RateControl::slotControlRateTempDown(double)
@@ -540,7 +561,7 @@ void RateControl::process(const double rate,
if ((m_ePbPressed) && (!m_bTempStarted)) {
m_bTempStarted = true;
- if (m_eRateRampMode == RATERAMP_STEP) {
+ if (m_eRateRampMode == RampMode::Stepping) {
// old temporary pitch shift behavior
double range = m_pRateRange->get();
@@ -550,9 +571,9 @@ void RateControl::process(const double rate,
return;
}
- double change = m_pRateDir->get() * m_dTemp /
+ double change = m_pRateDir->get() * m_dTemporaryRateChangeCoarse /
(100. * range);
- double csmall = m_pRateDir->get() * m_dTempSmall /
+ double csmall = m_pRateDir->get() * m_dTemporaryRateChangeFine /
(100. * range);
if (buttonRateTempUp->get())
@@ -563,9 +584,8 @@ void RateControl::process(const double rate,
addRateTemp(csmall);
else if (buttonRateTempDownSmall->get())
subRateTemp(csmall);
- } else {
- // m_eRateRampMode == RATERAMP_LINEAR
- m_dTempRateChange = ((double)latrate / ((double)m_iRateRampSensitivity / 100.));
+ } else if (m_eRateRampMode == RampMode::Linear) {
+ m_dTemporaryRateChangeCoarse = ((double)latrate / ((double)m_iRateRampSensitivity / 100.));
if (m_eRampBackMode == RATERAMP_RAMPBACK_PERIOD)
m_dRateTempRampbackChange = 0.0;
@@ -573,13 +593,13 @@ void RateControl::process(const double rate,
}
- if (m_eRateRampMode == RATERAMP_LINEAR) {
+ if (m_eRateRampMode == RampMode::Linear) {
if (m_ePbCurrent) {
// apply ramped pitchbending
if (m_ePbCurrent == RateControl::RATERAMP_UP) {
- addRateTemp(m_dTempRateChange);
+ addRateTemp(m_dTemporaryRateChangeCoarse);
} else if (m_ePbCurrent == RateControl::RATERAMP_DOWN) {
- subRateTemp(m_dTempRateChange);
+ subRateTemp(m_dTemporaryRateChangeCoarse);
}
} else if ((m_bTempStarted)
|| ((m_eRampBackMode != RATERAMP_RAMPBACK_NONE)
@@ -605,7 +625,7 @@ void RateControl::process(const double rate,
resetRateTemp();
}
}
- } else if ((m_eRateRampMode == RATERAMP_STEP) && (m_bTempStarted)) {
+ } else if ((m_eRateRampMode == RampMode::Stepping) && (m_bTempStarted)) {
if (!m_ePbCurrent) {
m_bTempStarted = false;
resetRateTemp();
diff --git a/src/engine/ratecontrol.h b/src/engine/ratecontrol.h
index 99f6d0d4a03c..c67d0cd531ce 100644
--- a/src/engine/ratecontrol.h
+++ b/src/engine/ratecontrol.h
@@ -34,6 +34,31 @@ class RateControl : public EngineControl {
RateControl(QString group, UserSettingsPointer pConfig);
~RateControl() override;
+ // Enumerations which hold the state of the pitchbend buttons.
+ // These enumerations can be used like a bitmask.
+ enum RATERAMP_DIRECTION {
+ RATERAMP_NONE = 0, // No buttons are held down
+ RATERAMP_DOWN = 1, // Down button is being held
+ RATERAMP_UP = 2, // Up button is being held
+ RATERAMP_BOTH = 3 // Both buttons are being held down
+ };
+
+ enum class RampMode {
+ Stepping = 0, // pitch takes a temporary step up/down a certain amount
+ Linear = 1 // pitch moves up/down in a progresively linear fashion
+ };
+
+ // This defines how the rate returns to normal. Currently unused.
+ // Rate ramp back mode:
+ // RATERAMP_RAMPBACK_NONE: returns back to normal all at once.
+ // RATERAMP_RAMPBACK_SPEED: moves back in a linearly progresive manner.
+ // RATERAMP_RAMPBACK_PERIOD: returns to normal within a period of time.
+ enum RATERAMP_RAMPBACK_MODE {
+ RATERAMP_RAMPBACK_NONE,
+ RATERAMP_RAMPBACK_SPEED,
+ RATERAMP_RAMPBACK_PERIOD
+ };
+
void setBpmControl(BpmControl* bpmcontrol);
// Must be called during each callback of the audio thread so that
// RateControl has a chance to update itself.
@@ -50,17 +75,23 @@ class RateControl : public EngineControl {
double calcRateRatio() const;
// Set rate change when temp rate button is pressed
- static void setTemp(double v);
+ static void setTemporaryRateChangeCoarseAmount(double v);
+ static double getTemporaryRateChangeCoarseAmount();
// Set rate change when temp rate small button is pressed
- static void setTempSmall(double v);
+ static void setTemporaryRateChangeFineAmount(double v);
+ static double getTemporaryRateChangeFineAmount();
// Set rate change when perm rate button is pressed
- static void setPerm(double v);
+ static void setPermanentRateChangeCoarseAmount(double v);
+ static double getPermanentRateChangeCoarseAmount();
// Set rate change when perm rate small button is pressed
- static void setPermSmall(double v);
+ static void setPermanentRateChangeFineAmount(double v);
+ static double getPermanentRateChangeFineAmount();
// Set Rate Ramp Mode
- static void setRateRamp(bool);
+ static void setRateRampMode(RampMode mode);
+ static RampMode getRateRampMode();
// Set Rate Ramp Sensitivity
static void setRateRampSensitivity(int);
+ static int getRateRampSensitivity();
void notifySeek(double dNewPlaypos) override;
public slots:
@@ -94,13 +125,23 @@ class RateControl : public EngineControl {
double getTempRate(void);
// Values used when temp and perm rate buttons are pressed
- static double m_dTemp, m_dTempSmall, m_dPerm, m_dPermSmall;
-
- ControlPushButton *buttonRateTempDown, *buttonRateTempDownSmall,
- *buttonRateTempUp, *buttonRateTempUpSmall;
- ControlPushButton *buttonRatePermDown, *buttonRatePermDownSmall,
- *buttonRatePermUp, *buttonRatePermUpSmall;
- ControlObject *m_pRateDir, *m_pRateRange;
+ static double m_dTemporaryRateChangeCoarse;
+ static double m_dTemporaryRateChangeFine;
+ static double m_dPermanentRateChangeCoarse;
+ static double m_dPermanentRateChangeFine;
+
+ ControlPushButton *buttonRateTempDown;
+ ControlPushButton *buttonRateTempDownSmall;
+ ControlPushButton *buttonRateTempUp;
+ ControlPushButton *buttonRateTempUpSmall;
+
+ ControlPushButton *buttonRatePermDown;
+ ControlPushButton *buttonRatePermDownSmall;
+ ControlPushButton *buttonRatePermUp;
+ ControlPushButton *buttonRatePermUpSmall;
+
+ ControlObject *m_pRateDir;
+ ControlObject *m_pRateRange;
ControlPotmeter* m_pRateSlider;
ControlPotmeter* m_pRateSearch;
ControlPushButton* m_pReverseButton;
@@ -130,34 +171,6 @@ class RateControl : public EngineControl {
ControlProxy* m_pSyncMode;
ControlProxy* m_pSlipEnabled;
- // Enumerations which hold the state of the pitchbend buttons.
- // These enumerations can be used like a bitmask.
- enum RATERAMP_DIRECTION {
- RATERAMP_NONE = 0, // No buttons are held down
- RATERAMP_DOWN = 1, // Down button is being held
- RATERAMP_UP = 2, // Up button is being held
- RATERAMP_BOTH = 3 // Both buttons are being held down
- };
-
- // Rate ramping mode:
- // RATERAMP_STEP: pitch takes a temporary step up/down a certain amount.
- // RATERAMP_LINEAR: pitch moves up/down in a progresively linear fashion.
- enum RATERAMP_MODE {
- RATERAMP_STEP = 0,
- RATERAMP_LINEAR = 1
- };
-
- // This defines how the rate returns to normal. Currently unused.
- // Rate ramp back mode:
- // RATERAMP_RAMPBACK_NONE: returns back to normal all at once.
- // RATERAMP_RAMPBACK_SPEED: moves back in a linearly progresive manner.
- // RATERAMP_RAMPBACK_PERIOD: returns to normal within a period of time.
- enum RATERAMP_RAMPBACK_MODE {
- RATERAMP_RAMPBACK_NONE,
- RATERAMP_RAMPBACK_SPEED,
- RATERAMP_RAMPBACK_PERIOD
- };
-
// The current rate ramping direction. Only holds the last button pressed.
int m_ePbCurrent;
// The rate ramping buttons which are currently being pressed.
@@ -168,7 +181,7 @@ class RateControl : public EngineControl {
// Set to the rate change used for rate temp
double m_dTempRateChange;
// Set the Temporary Rate Change Mode
- static enum RATERAMP_MODE m_eRateRampMode;
+ static RampMode m_eRateRampMode;
// The Rate Temp Sensitivity, the higher it is the slower it gets
static int m_iRateRampSensitivity;
// Factor applied to the deprecated "wheel" rate value.
diff --git a/src/mixxx.cpp b/src/mixxx.cpp
index 7c41dfbfb95c..0f982ac79f0a 100644
--- a/src/mixxx.cpp
+++ b/src/mixxx.cpp
@@ -370,13 +370,13 @@ void MixxxMainWindow::initialize(QApplication* pApp, const CmdlineArgs& args) {
// Load skin to a QWidget that we set as the central widget. Assignment
// intentional in next line.
- if (!(m_pWidgetParent = m_pSkinLoader->loadDefaultSkin(this, m_pKeyboard,
- m_pPlayerManager,
- m_pControllerManager,
- m_pLibrary,
- m_pVCManager,
- m_pEffectsManager,
- m_pRecordingManager))) {
+ if (!(m_pWidgetParent = m_pSkinLoader->loadConfiguredSkin(this, m_pKeyboard,
+ m_pPlayerManager,
+ m_pControllerManager,
+ m_pLibrary,
+ m_pVCManager,
+ m_pEffectsManager,
+ m_pRecordingManager))) {
reportCriticalErrorAndQuit(
"default skin cannot be loaded see mixxx trace for more information.");
@@ -1223,14 +1223,14 @@ void MixxxMainWindow::rebootMixxxView() {
// Load skin to a QWidget that we set as the central widget. Assignment
// intentional in next line.
- if (!(m_pWidgetParent = m_pSkinLoader->loadDefaultSkin(this,
- m_pKeyboard,
- m_pPlayerManager,
- m_pControllerManager,
- m_pLibrary,
- m_pVCManager,
- m_pEffectsManager,
- m_pRecordingManager))) {
+ if (!(m_pWidgetParent = m_pSkinLoader->loadConfiguredSkin(this,
+ m_pKeyboard,
+ m_pPlayerManager,
+ m_pControllerManager,
+ m_pLibrary,
+ m_pVCManager,
+ m_pEffectsManager,
+ m_pRecordingManager))) {
QMessageBox::critical(this,
tr("Error in skin file"),
diff --git a/src/preferences/dialog/dlgprefcontrols.cpp b/src/preferences/dialog/dlgprefcontrols.cpp
deleted file mode 100644
index 9a4f8c0fb739..000000000000
--- a/src/preferences/dialog/dlgprefcontrols.cpp
+++ /dev/null
@@ -1,982 +0,0 @@
-/***************************************************************************
- dlgprefcontrols.cpp - description
- -------------------
- begin : Sat Jul 5 2003
- copyright : (C) 2003 by Tue & Ken Haste Andersen
- email : haste@diku.dk
-***************************************************************************/
-
-/***************************************************************************
-* *
-* 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
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "mixer/basetrackplayer.h"
-#include "preferences/dialog/dlgprefcontrols.h"
-#include "preferences/constants.h"
-#include "preferences/usersettings.h"
-#include "control/controlobject.h"
-#include "control/controlproxy.h"
-#include "widget/wnumberpos.h"
-#include "engine/enginebuffer.h"
-#include "engine/ratecontrol.h"
-#include "skin/skinloader.h"
-#include "skin/legacyskinparser.h"
-#include "mixer/playermanager.h"
-#include "mixer/playerinfo.h"
-#include "control/controlobject.h"
-#include "mixxx.h"
-#include "util/screensaver.h"
-#include "defs_urls.h"
-#include "util/autohidpi.h"
-
-DlgPrefControls::DlgPrefControls(QWidget * parent, MixxxMainWindow * mixxx,
- SkinLoader* pSkinLoader,
- PlayerManager* pPlayerManager,
- UserSettingsPointer pConfig)
- : DlgPreferencePage(parent),
- m_pConfig(pConfig),
- m_mixxx(mixxx),
- m_pSkinLoader(pSkinLoader),
- m_pPlayerManager(pPlayerManager),
- m_iNumConfiguredDecks(0),
- m_iNumConfiguredSamplers(0),
- m_autoScaleFactor(0) {
- setupUi(this);
-
- m_pNumDecks = new ControlProxy("[Master]", "num_decks", this);
- m_pNumDecks->connectValueChanged(SLOT(slotNumDecksChanged(double)));
- slotNumDecksChanged(m_pNumDecks->get());
-
- m_pNumSamplers = new ControlProxy("[Master]", "num_samplers", this);
- m_pNumSamplers->connectValueChanged(SLOT(slotNumSamplersChanged(double)));
- slotNumSamplersChanged(m_pNumSamplers->get());
-
- // Track time display configuration
- m_pControlTrackTimeDisplay = new ControlObject(
- ConfigKey("[Controls]", "ShowDurationRemaining"));
- connect(m_pControlTrackTimeDisplay, SIGNAL(valueChanged(double)),
- this, SLOT(slotSetTrackTimeDisplay(double)));
-
- // If not present in the config, set the default value
- if (!m_pConfig->exists(ConfigKey("[Controls]","PositionDisplay"))) {
- m_pConfig->set(ConfigKey("[Controls]","PositionDisplay"),
- QString::number(static_cast(TrackTime::DisplayMode::Remaining)));
- }
-
- double positionDisplayType = m_pConfig->getValue(
- ConfigKey("[Controls]", "PositionDisplay"),
- static_cast(TrackTime::DisplayMode::Elapsed));
- if (positionDisplayType ==
- static_cast(TrackTime::DisplayMode::Remaining)) {
- radioButtonRemaining->setChecked(true);
- m_pControlTrackTimeDisplay->set(
- static_cast(TrackTime::DisplayMode::Remaining));
- } else if (positionDisplayType ==
- static_cast(TrackTime::DisplayMode::ElapsedAndRemaining)) {
- radioButtonElapsedAndRemaining->setChecked(true);
- m_pControlTrackTimeDisplay->set(
- static_cast(TrackTime::DisplayMode::ElapsedAndRemaining));
- } else {
- radioButtonElapsed->setChecked(true);
- m_pControlTrackTimeDisplay->set(
- static_cast(TrackTime::DisplayMode::Elapsed));
- }
- connect(buttonGroupTrackTime, SIGNAL(buttonClicked(QAbstractButton*)),
- this, SLOT(slotSetTrackTimeDisplay(QAbstractButton *)));
-
- // Set default direction as stored in config file
- if (m_pConfig->getValueString(ConfigKey("[Controls]", "RateDir")).length() == 0)
- m_pConfig->set(ConfigKey("[Controls]", "RateDir"),ConfigValue(0));
-
- connect(checkBoxInvertSpeedSlider, SIGNAL(toggled(bool)),
- this, SLOT(slotSetRateDir(bool)));
-
- ComboBoxRateRange->clear();
- ComboBoxRateRange->addItem(tr("4%"), 4);
- ComboBoxRateRange->addItem(tr("6% (semitone)"), 6);
- ComboBoxRateRange->addItem(tr("8% (Technics SL-1210)"), 8);
- ComboBoxRateRange->addItem(tr("10%"), 10);
- ComboBoxRateRange->addItem(tr("16%"), 16);
- ComboBoxRateRange->addItem(tr("24%"), 24);
- ComboBoxRateRange->addItem(tr("50%"), 50);
- ComboBoxRateRange->addItem(tr("90%"), 90);
- connect(ComboBoxRateRange, SIGNAL(activated(int)),
- this, SLOT(slotSetRateRange(int)));
-
- // Set default range as stored in config file
- if (m_pConfig->getValueString(ConfigKey("[Controls]", "RateRangePercent")).length() == 0) {
- // Fall back to old [Controls]RateRange
- if (m_pConfig->getValueString(ConfigKey("[Controls]", "RateRange")).length() == 0) {
- m_pConfig->set(ConfigKey("[Controls]", "RateRangePercent"), ConfigValue(8));
- } else {
- int oldIdx = m_pConfig->getValueString(ConfigKey("[Controls]", "RateRange")).toInt();
- double oldRange = static_cast(oldIdx-1) / 10.0;
- if (oldIdx == 0) {
- oldRange = 0.06;
- }
- if (oldIdx == 1) {
- oldRange = 0.08;
- }
- m_pConfig->set(ConfigKey("[Controls]", "RateRangePercent"),
- ConfigValue(static_cast(oldRange * 100.)));
- slotSetRateRangePercent(oldRange * 100.);
- }
- }
-
- //
- // Key lock mode
- //
- connect(buttonGroupKeyLockMode, SIGNAL(buttonClicked(QAbstractButton*)),
- this, SLOT(slotKeyLockMode(QAbstractButton *)));
-
- // 0 Lock original key, 1 Lock current key
- m_keylockMode = m_pConfig->getValue(
- ConfigKey("[Controls]", "keylockMode"), 0);
- foreach (ControlProxy* pControl, m_keylockModeControls) {
- pControl->set(m_keylockMode);
- }
-
- //
- // Key unlock mode
- //
- connect(buttonGroupKeyUnlockMode, SIGNAL(buttonClicked(QAbstractButton*)),
- this, SLOT(slotKeyUnlockMode(QAbstractButton *)));
-
- // 0 Reset locked key (default), 1 Keep locked key
- m_keyunlockMode = m_pConfig->getValue(
- ConfigKey("[Controls]", "keyunlockMode"), 0);
- foreach (ControlProxy* pControl, m_keyunlockModeControls) {
- pControl->set(m_keyunlockMode);
- }
-
- //
- // Rate buttons configuration
- //
- //NOTE: THESE DEFAULTS ARE A LIE! You'll need to hack the same values into the static variables
- // at the top of enginebuffer.cpp
- if (m_pConfig->getValueString(ConfigKey("[Controls]", "RateTempLeft")).length() == 0)
- m_pConfig->set(ConfigKey("[Controls]", "RateTempLeft"), ConfigValue(QString("4.0")));
- if (m_pConfig->getValueString(ConfigKey("[Controls]", "RateTempRight")).length() == 0)
- m_pConfig->set(ConfigKey("[Controls]", "RateTempRight"), ConfigValue(QString("2.0")));
- if (m_pConfig->getValueString(ConfigKey("[Controls]", "RatePermLeft")).length() == 0)
- m_pConfig->set(ConfigKey("[Controls]", "RatePermLeft"), ConfigValue(QString("0.50")));
- if (m_pConfig->getValueString(ConfigKey("[Controls]", "RatePermRight")).length() == 0)
- m_pConfig->set(ConfigKey("[Controls]", "RatePermRight"), ConfigValue(QString("0.05")));
-
- connect(spinBoxTempRateLeft, SIGNAL(valueChanged(double)),
- this, SLOT(slotSetRateTempLeft(double)));
- connect(spinBoxTempRateRight, SIGNAL(valueChanged(double)),
- this, SLOT(slotSetRateTempRight(double)));
- connect(spinBoxPermRateLeft, SIGNAL(valueChanged(double)),
- this, SLOT(slotSetRatePermLeft(double)));
- connect(spinBoxPermRateRight, SIGNAL(valueChanged(double)),
- this, SLOT(slotSetRatePermRight(double)));
-
- spinBoxTempRateLeft->setValue(m_pConfig->getValueString(
- ConfigKey("[Controls]", "RateTempLeft")).toDouble());
- spinBoxTempRateRight->setValue(m_pConfig->getValueString(
- ConfigKey("[Controls]", "RateTempRight")).toDouble());
- spinBoxPermRateLeft->setValue(m_pConfig->getValueString(
- ConfigKey("[Controls]", "RatePermLeft")).toDouble());
- spinBoxPermRateRight->setValue(m_pConfig->getValueString(
- ConfigKey("[Controls]", "RatePermRight")).toDouble());
-
-// labelSpeedRampSensitivity->setEnabled(true);
-// SliderRateRampSensitivity->setEnabled(true);
-// SpinBoxRateRampSensitivity->setEnabled(true);
-
- //
- // Override Playing Track on Track Load
- //
- // The check box reflects the opposite of the config value
- checkBoxDisallowLoadToPlayingDeck->setChecked(
- m_pConfig->getValueString(ConfigKey("[Controls]", "AllowTrackLoadToPlayingDeck")).toInt()==0);
- connect(checkBoxDisallowLoadToPlayingDeck, SIGNAL(toggled(bool)),
- this, SLOT(slotSetAllowTrackLoadToPlayingDeck(bool)));
-
- //
- // Locale setting
- //
-
- // Iterate through the available locales and add them to the combobox
- // Borrowed following snippet from http://qt-project.org/wiki/How_to_create_a_multi_language_application
- QString translationsFolder = m_pConfig->getResourcePath() + "translations/";
- QString currentLocale = pConfig->getValueString(ConfigKey("[Config]", "Locale"));
-
- QDir translationsDir(translationsFolder);
- QStringList fileNames = translationsDir.entryList(QStringList("mixxx_*.qm"));
- fileNames.push_back("mixxx_en_US.qm"); // add source language as a fake value
-
- bool indexFlag = false; // it'll indicate if the selected index changed.
- for (int i = 0; i < fileNames.size(); ++i) {
- // Extract locale from filename
- QString locale = fileNames[i];
- locale.truncate(locale.lastIndexOf('.'));
- locale.remove(0, locale.indexOf('_') + 1);
- QLocale qlocale = QLocale(locale);
-
- QString lang = QLocale::languageToString(qlocale.language());
- QString country = QLocale::countryToString(qlocale.country());
- if (lang == "C") { // Ugly hack to remove the non-resolving locales
- continue;
- }
- lang = QString("%1 (%2)").arg(lang).arg(country);
- ComboBoxLocale->addItem(lang, locale); // locale as userdata (for storing to config)
- if (locale == currentLocale) { // Set the currently selected locale
- ComboBoxLocale->setCurrentIndex(ComboBoxLocale->count() - 1);
- indexFlag = true;
- }
- }
- ComboBoxLocale->model()->sort(0); // Sort languages list
-
- ComboBoxLocale->insertItem(0, "System", ""); // System default locale - insert at the top
- if (!indexFlag) { // if selectedIndex didn't change - select system default
- ComboBoxLocale->setCurrentIndex(0);
- }
- connect(ComboBoxLocale, SIGNAL(activated(int)),
- this, SLOT(slotSetLocale(int)));
-
- //
- // Cue Mode
- //
-
- // Add "(?)" with a manual link to the label
- labelCueMode->setText(
- labelCueMode->text() +
- " (?)");
-
- // Set default value in config file and control objects, if not present
- // Default is "0" = Mixxx Mode
- int cueDefaultValue = m_pConfig->getValue(
- ConfigKey("[Controls]", "CueDefault"), 0);
-
- // Update combo box
- // The itemData values are out of order to avoid breaking configurations
- // when Mixxx mode (no blinking) was introduced.
- ComboBoxCueDefault->addItem(tr("Mixxx mode"), 0);
- ComboBoxCueDefault->addItem(tr("Mixxx mode (no blinking)"), 4);
- ComboBoxCueDefault->addItem(tr("Pioneer mode"), 1);
- ComboBoxCueDefault->addItem(tr("Denon mode"), 2);
- ComboBoxCueDefault->addItem(tr("Numark mode"), 3);
- ComboBoxCueDefault->addItem(tr("CUP mode"), 5);
- const int cueDefaultIndex = cueDefaultIndexByData(cueDefaultValue);
- ComboBoxCueDefault->setCurrentIndex(cueDefaultIndex);
- slotSetCueDefault(cueDefaultIndex);
- connect(ComboBoxCueDefault, SIGNAL(activated(int)), this, SLOT(slotSetCueDefault(int)));
-
- // Cue recall
- checkBoxSeekToCue->setChecked(m_pConfig->getValueString(
- ConfigKey("[Controls]", "CueRecall")).toInt()==0);
- //NOTE: for CueRecall, 0 means ON...
- connect(checkBoxSeekToCue, SIGNAL(toggled(bool)),
- this, SLOT(slotSetCueRecall(bool)));
-
- //
- // Skin configurations
- //
- QString warningString = "
"
- + tr("The minimum size of the selected skin is bigger than your screen resolution.");
- warningLabel->setText(warningString);
-
- ComboBoxSkinconf->clear();
-
- QList skinSearchPaths = m_pSkinLoader->getSkinSearchPaths();
- QList skins;
- foreach (QDir dir, skinSearchPaths) {
- dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
- skins.append(dir.entryInfoList());
- }
-
- QString configuredSkinPath = m_pSkinLoader->getSkinPath();
- QIcon sizeWarningIcon(":/images/preferences/ic_preferences_warning.png");
- int index = 0;
- foreach (QFileInfo skinInfo, skins) {
- bool size_ok = checkSkinResolution(skinInfo.absoluteFilePath());
- if (size_ok) {
- ComboBoxSkinconf->insertItem(index, skinInfo.fileName());
- } else {
- ComboBoxSkinconf->insertItem(index, sizeWarningIcon, skinInfo.fileName());
- }
-
- if (skinInfo.absoluteFilePath() == configuredSkinPath) {
- ComboBoxSkinconf->setCurrentIndex(index);
- if (size_ok) {
- warningLabel->hide();
- } else {
- warningLabel->show();
- }
- }
- index++;
- }
-
- connect(ComboBoxSkinconf, SIGNAL(activated(int)), this, SLOT(slotSetSkin(int)));
- connect(ComboBoxSchemeconf, SIGNAL(activated(int)), this, SLOT(slotSetScheme(int)));
-
- slotUpdateSchemes();
-
-
-#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
- AutoHiDpi autoHiDpi;
- m_autoScaleFactor = autoHiDpi.getScaleFactor();
- double scaleFactor = m_autoScaleFactor;
- if (scaleFactor > 0) {
- // we got a valid auto scale factor
- bool scaleFactorAuto = m_pConfig->getValue(
- ConfigKey("[Config]", "ScaleFactorAuto"), true);
- checkBoxScaleFactorAuto->setChecked(scaleFactorAuto);
- if (scaleFactorAuto) {
- comboBoxScaleFactor->setEnabled(false);
- m_pConfig->setValue(
- ConfigKey("[Config]", "ScaleFactor"), m_autoScaleFactor);
- } else {
- scaleFactor = m_pConfig->getValue(
- ConfigKey("[Config]", "ScaleFactor"), 1.0);
- }
- connect(checkBoxScaleFactorAuto, SIGNAL(toggled(bool)),
- this, SLOT(slotSetScaleFactorAuto(bool)));
- } else {
- checkBoxScaleFactorAuto->setEnabled(false);
- scaleFactor = m_pConfig->getValue(
- ConfigKey("[Config]", "ScaleFactor"), 1.0);
- }
- connect(checkBoxScaleFactorAuto, SIGNAL(toggled(bool)),
- this, SLOT(slotSetScaleFactorAuto(bool)));
-
- //: Entry of the HiDPI scale combo box. %1 is the scale factor in percent
- comboBoxScaleFactor->addItem(QString(tr("%1 % (Experimental)")).arg(50), 0.5);
- comboBoxScaleFactor->addItem(QString(tr("%1 %")).arg(100), 1);
- comboBoxScaleFactor->addItem(QString(tr("%1 % (Experimental)")).arg(200), 2);
- comboBoxScaleFactor->addItem(QString(tr("%1 % (Experimental)")).arg(300), 3);
- comboBoxScaleFactor->addItem(QString(tr("%1 % (Experimental)")).arg(400), 4);
- int i;
- for (i = 0; i < comboBoxScaleFactor->count(); ++i) {
- if (scaleFactor == comboBoxScaleFactor->itemData(i)) {
- comboBoxScaleFactor->setCurrentIndex(i);
- break;
- }
- }
- if (i == comboBoxScaleFactor->count()) {
- // no default scale, add custom scale
- comboBoxScaleFactor->addItem(
- QString(tr("%1 % (Experimental)")).arg(scaleFactor * 100), scaleFactor);
- comboBoxScaleFactor->setCurrentIndex(i);
- }
- connect(comboBoxScaleFactor, SIGNAL(activated(int)),
- this, SLOT(slotSetScaleFactor(int)));
-#else
- checkBoxScaleFactorAuto->hide();
- comboBoxScaleFactor->hide();
- labelScaleFactor->hide();
-#endif
-
-
- //
- // Start in fullscreen mode
- //
- checkBoxStartFullScreen->setChecked(m_pConfig->getValueString(
- ConfigKey("[Config]", "StartInFullscreen")).toInt()==1);
- connect(checkBoxStartFullScreen, SIGNAL(toggled(bool)),
- this, SLOT(slotSetStartInFullScreen(bool)));
-
- //
- // Screensaver mode
- //
- comboBoxScreensaver->clear();
- comboBoxScreensaver->addItem(tr("Allow screensaver to run"),
- static_cast(mixxx::ScreenSaverPreference::PREVENT_OFF));
- comboBoxScreensaver->addItem(tr("Prevent screensaver from running"),
- static_cast(mixxx::ScreenSaverPreference::PREVENT_ON));
- comboBoxScreensaver->addItem(tr("Prevent screensaver while playing"),
- static_cast(mixxx::ScreenSaverPreference::PREVENT_ON_PLAY));
-
- int inhibitsettings = static_cast(mixxx->getInhibitScreensaver());
- comboBoxScreensaver->setCurrentIndex(comboBoxScreensaver->findData(inhibitsettings));
-
- //
- // Tooltip configuration
- //
-
- // Initialize checkboxes to match config
- mixxx::TooltipsPreference configTooltips = m_mixxx->getToolTipsCfg();
- switch (configTooltips) {
- case mixxx::TooltipsPreference::TOOLTIPS_OFF:
- radioButtonTooltipsOff->setChecked(true);
- break;
- case mixxx::TooltipsPreference::TOOLTIPS_ON:
- radioButtonTooltipsLibraryAndSkin->setChecked(true);
- break;
- case mixxx::TooltipsPreference::TOOLTIPS_ONLY_IN_LIBRARY:
- radioButtonTooltipsLibrary->setChecked(true);
- break;
- }
-
- slotSetTooltips(); // Update disabled status of "only library" checkbox
- connect(buttonGroupTooltips, SIGNAL(buttonClicked(QAbstractButton*)),
- this, SLOT(slotSetTooltips()));
-
- //
- // Ramping Temporary Rate Change configuration
- //
-
- // Set Ramp Rate On or Off
- connect(radioButtonSpeedBendRamping, SIGNAL(toggled(bool)),
- this, SLOT(slotSetRateRamp(bool)));
- if ((bool)
- m_pConfig->getValueString(ConfigKey("[Controls]", "RateRamp")).toInt()) {
- radioButtonSpeedBendRamping->setChecked(true);
- } else {
- radioButtonSpeedBendStatic->setChecked(true);
- }
-
- // Update Ramp Rate Sensitivity
- connect(SliderRateRampSensitivity, SIGNAL(valueChanged(int)),
- this, SLOT(slotSetRateRampSensitivity(int)));
- SliderRateRampSensitivity->setValue(m_pConfig->getValueString(
- ConfigKey("[Controls]", "RateRampSensitivity")).toInt());
-
-
- // Update "reset speed" and "reset pitch" check boxes
- // TODO: All defaults should only be set in slotResetToDefaults.
- int configSPAutoReset = m_pConfig->getValue(
- ConfigKey("[Controls]", "SpeedAutoReset"),
- BaseTrackPlayer::RESET_PITCH);
-
- m_speedAutoReset = (configSPAutoReset==BaseTrackPlayer::RESET_SPEED ||
- configSPAutoReset==BaseTrackPlayer::RESET_PITCH_AND_SPEED);
- m_pitchAutoReset = (configSPAutoReset==BaseTrackPlayer::RESET_PITCH ||
- configSPAutoReset==BaseTrackPlayer::RESET_PITCH_AND_SPEED);
-
- // Do these need to be here when slotUpdate() has them as well?
- checkBoxResetSpeed->setChecked(m_speedAutoReset);
- checkBoxResetPitch->setChecked(m_pitchAutoReset);
-
- connect(checkBoxResetSpeed, SIGNAL(toggled(bool)),
- this, SLOT(slotUpdateSpeedAutoReset(bool)));
- connect(checkBoxResetPitch, SIGNAL(toggled(bool)),
- this, SLOT(slotUpdatePitchAutoReset(bool)));
-
- slotUpdate();
-}
-
-DlgPrefControls::~DlgPrefControls() {
- delete m_pControlTrackTimeDisplay;
- qDeleteAll(m_rateControls);
- qDeleteAll(m_rateDirControls);
- qDeleteAll(m_cueControls);
- qDeleteAll(m_rateRangeControls);
- qDeleteAll(m_keylockModeControls);
- qDeleteAll(m_keyunlockModeControls);
-}
-
-void DlgPrefControls::slotUpdateSchemes() {
- // Since this involves opening a file we won't do this as part of regular slotUpdate
- QList schlist = LegacySkinParser::getSchemeList(
- m_pSkinLoader->getSkinPath());
-
- ComboBoxSchemeconf->clear();
-
- if (schlist.size() == 0) {
- ComboBoxSchemeconf->setEnabled(false);
- ComboBoxSchemeconf->addItem(tr("This skin does not support color schemes", 0));
- ComboBoxSchemeconf->setCurrentIndex(0);
- } else {
- ComboBoxSchemeconf->setEnabled(true);
- QString selectedScheme = m_pConfig->getValueString(ConfigKey("[Config]", "Scheme"));
- for (int i = 0; i < schlist.size(); i++) {
- ComboBoxSchemeconf->addItem(schlist[i]);
-
- if (schlist[i] == selectedScheme) {
- ComboBoxSchemeconf->setCurrentIndex(i);
- }
- }
- }
-}
-
-void DlgPrefControls::slotUpdate() {
- double deck1RateRange = m_rateRangeControls[0]->get();
- double deck1RateDir = m_rateDirControls[0]->get();
-
- int idx = ComboBoxRateRange->findData(static_cast(deck1RateRange * 100));
- if (idx == -1) {
- ComboBoxRateRange->addItem(QString::number(deck1RateRange * 100.).append("%"),
- deck1RateRange * 100.);
- }
-
- ComboBoxRateRange->setCurrentIndex(idx);
-
- if (deck1RateDir == 1) {
- checkBoxInvertSpeedSlider->setChecked(false);
- } else {
- checkBoxInvertSpeedSlider->setChecked(true);
- }
-
- if (m_keylockMode == 1)
- radioButtonCurrentKey->setChecked(true);
- else
- radioButtonOriginalKey->setChecked(true);
-
- if (m_keyunlockMode == 1)
- radioButtonKeepUnlockedKey->setChecked(true);
- else
- radioButtonResetUnlockedKey->setChecked(true);
-
- checkBoxResetSpeed->setChecked(m_speedAutoReset);
- checkBoxResetPitch->setChecked(m_pitchAutoReset);
-}
-
-void DlgPrefControls::slotResetToDefaults() {
- // Track time display mode
- radioButtonRemaining->setChecked(true);
-
- // Up increases speed.
- checkBoxInvertSpeedSlider->setChecked(false);
-
- // 8% Rate Range
- ComboBoxRateRange->setCurrentIndex(ComboBoxRateRange->findData(8));
-
- // Don't load tracks into playing decks.
- checkBoxDisallowLoadToPlayingDeck->setChecked(true);
-
- // Use System locale
- ComboBoxLocale->setCurrentIndex(0);
-
- // Mixxx cue mode
- ComboBoxCueDefault->setCurrentIndex(0);
-
- // Cue recall on.
- checkBoxSeekToCue->setChecked(true);
-
- // Default to normal size widgets
- comboBoxScaleFactor->setCurrentIndex(1); // 100 %
- checkBoxScaleFactorAuto->setChecked(true);
-
- // Don't start in full screen.
- checkBoxStartFullScreen->setChecked(false);
-
- // Inhibit the screensaver
- comboBoxScreensaver->setCurrentIndex(comboBoxScreensaver->findData(
- static_cast(mixxx::ScreenSaverPreference::PREVENT_ON)));
-
- // Tooltips on everywhere.
- radioButtonTooltipsLibraryAndSkin->setChecked(true);
-
- // Rate-ramping default off.
- radioButtonSpeedBendStatic->setChecked(true);
-
- // 0 rate-ramp sensitivity
- SliderRateRampSensitivity->setValue(0);
-
- // Permanent and temporary pitch adjust fine/coarse.
- spinBoxTempRateLeft->setValue(4.0);
- spinBoxTempRateRight->setValue(2.0);
- spinBoxPermRateLeft->setValue(0.50);
- spinBoxPermRateRight->setValue(0.05);
-
- // Automatically reset the pitch/key but not speed/tempo slider on track load
- m_speedAutoReset = false;
- m_pitchAutoReset = true;
-
- checkBoxResetSpeed->setChecked(m_speedAutoReset);
- checkBoxResetPitch->setChecked(m_pitchAutoReset);
-
- // Lock to original key
- m_keylockMode = 0;
- radioButtonOriginalKey->setChecked(true);
-
- // Reset key on unlock
- m_keyunlockMode = 0;
- radioButtonResetUnlockedKey->setChecked(true);
-}
-
-void DlgPrefControls::slotSetLocale(int pos) {
- QString newLocale = ComboBoxLocale->itemData(pos).toString();
- m_pConfig->set(ConfigKey("[Config]", "Locale"), ConfigValue(newLocale));
- notifyRebootNecessary();
-}
-
-void DlgPrefControls::slotSetRateRange(int pos) {
- slotSetRateRangePercent(ComboBoxRateRange->itemData(pos).toInt());
-}
-
-void DlgPrefControls::slotSetRateRangePercent (int rateRangePercent) {
- double rateRange = rateRangePercent / 100.;
-
- // Set rate range for every group
- foreach (ControlProxy* pControl, m_rateRangeControls) {
- pControl->set(rateRange);
- }
-
- // Reset rate for every group
- foreach (ControlProxy* pControl, m_rateControls) {
- pControl->set(0);
- }
-}
-
-void DlgPrefControls::slotSetRateDir(bool invert) {
- int index = 0;
- if (invert) index = 1;
- slotSetRateDir(index);
-}
-
-void DlgPrefControls::slotSetRateDir(int index) {
- float dir = 1.;
- if (index == 1)
- dir = -1.;
- float oldDir = m_rateDirControls[0]->get();
-
- // Set rate direction for every group
- foreach (ControlProxy* pControl, m_rateDirControls) {
- pControl->set(dir);
- }
-
- // If the setting was changed, ie the old direction is not equal to the new one,
- // multiply the rate by -1 so the current sound does not change.
- if(fabs(dir - oldDir) > 0.1) {
- foreach (ControlProxy* pControl, m_rateControls) {
- pControl->set(-1 * pControl->get());
- }
- }
-
-}
-
-void DlgPrefControls::slotKeyLockMode(QAbstractButton* b) {
- if (b == radioButtonCurrentKey) {
- m_keylockMode = 1;
- }
- else { m_keylockMode = 0; }
-}
-
-void DlgPrefControls::slotKeyUnlockMode(QAbstractButton* b) {
- if (b == radioButtonResetUnlockedKey) {
- m_keyunlockMode = 0;
- }
- else { m_keyunlockMode = 1; }
-}
-
-void DlgPrefControls::slotSetAllowTrackLoadToPlayingDeck(bool b) {
- // If b is true, it means NOT to allow track loading
- m_pConfig->set(ConfigKey("[Controls]", "AllowTrackLoadToPlayingDeck"),
- ConfigValue(b?0:1));
-}
-
-void DlgPrefControls::slotSetCueDefault(int index)
-{
- int cueMode = ComboBoxCueDefault->itemData(index).toInt();
- m_pConfig->set(ConfigKey("[Controls]", "CueDefault"), ConfigValue(cueMode));
-
- // Set cue behavior for every group
- foreach (ControlProxy* pControl, m_cueControls) {
- pControl->set(cueMode);
- }
-}
-
-void DlgPrefControls::slotSetCueRecall(bool b)
-{
- m_pConfig->set(ConfigKey("[Controls]", "CueRecall"), ConfigValue(b?0:1));
-}
-
-
-void DlgPrefControls::slotSetScaleFactor(int index) {
- double scaleFactor = comboBoxScaleFactor->itemData(index).toDouble();
- m_pConfig->setValue(ConfigKey("[Config]", "ScaleFactor"), scaleFactor);
- // reload the skin when the button is toggled
- repaint();
- m_mixxx->rebootMixxxView();
-}
-
-void DlgPrefControls::slotSetScaleFactorAuto(bool checked) {
- m_pConfig->setValue(
- ConfigKey("[Config]", "ScaleFactorAuto"), checked);
- comboBoxScaleFactor->setEnabled(!checked);
- if (checked) {
- m_pConfig->setValue(
- ConfigKey("[Config]", "ScaleFactor"), m_autoScaleFactor);
- // reload the skin when the button is toggled
- repaint();
- m_mixxx->rebootMixxxView();
- } else {
- slotSetScaleFactor(comboBoxScaleFactor->currentIndex());
- }
-}
-
-void DlgPrefControls::slotSetStartInFullScreen(bool b) {
- m_pConfig->set(ConfigKey("[Config]", "StartInFullscreen"), ConfigValue(b?1:0));
-}
-
-void DlgPrefControls::slotSetTooltips() {
- //0=OFF, 1=ON, 2=ON (only in Library)
- mixxx::TooltipsPreference valueToSet = mixxx::TooltipsPreference::TOOLTIPS_ON;
- if (radioButtonTooltipsOff->isChecked()) {
- valueToSet = mixxx::TooltipsPreference::TOOLTIPS_OFF;
- } else if (radioButtonTooltipsLibrary->isChecked()) {
- valueToSet = mixxx::TooltipsPreference::TOOLTIPS_ONLY_IN_LIBRARY;
- }
- m_mixxx->setToolTipsCfg(valueToSet);
-}
-
-void DlgPrefControls::notifyRebootNecessary() {
- // make the fact that you have to restart mixxx more obvious
- QMessageBox::information(
- this, tr("Information"),
- tr("Mixxx must be restarted before the changes will take effect."));
-}
-
-void DlgPrefControls::slotSetScheme(int) {
- m_pConfig->set(ConfigKey("[Config]", "Scheme"), ComboBoxSchemeconf->currentText());
- repaint();
- m_mixxx->rebootMixxxView();
-}
-
-void DlgPrefControls::slotSetSkin(int) {
- ComboBoxSkinconf->repaint(); // without it the combobox sticks to the old value until
- // the new Skin is fully loaded
- m_pConfig->set(ConfigKey("[Config]", "ResizableSkin"), ComboBoxSkinconf->currentText());
- repaint();
- m_mixxx->rebootMixxxView();
- checkSkinResolution(ComboBoxSkinconf->currentText())
- ? warningLabel->hide() : warningLabel->show();
- slotUpdateSchemes();
-}
-
-void DlgPrefControls::slotSetTrackTimeDisplay(QAbstractButton* b) {
- double timeDisplay;
- if (b == radioButtonRemaining) {
- timeDisplay = static_cast(TrackTime::DisplayMode::Remaining);
- } else if (b == radioButtonElapsedAndRemaining) {
- timeDisplay = static_cast(TrackTime::DisplayMode::ElapsedAndRemaining);
- } else {
- timeDisplay = static_cast(TrackTime::DisplayMode::Elapsed);
- }
- m_pConfig->set(ConfigKey("[Controls]","PositionDisplay"), ConfigValue(timeDisplay));
- m_pControlTrackTimeDisplay->set(timeDisplay);
-}
-
-void DlgPrefControls::slotSetTrackTimeDisplay(double v) {
- if (v == 1.0) {
- // Remaining
- radioButtonRemaining->setChecked(true);
- m_pConfig->set(ConfigKey("[Controls]", "PositionDisplay"), ConfigValue(1));
- } else if (v == 2.0) {
- // Elapsed and remaining
- radioButtonElapsedAndRemaining->setChecked(true);
- m_pConfig->set(ConfigKey("[Controls]", "PositionDisplay"), ConfigValue(2));
- } else {
- // Elapsed
- radioButtonElapsed->setChecked(true);
- m_pConfig->set(ConfigKey("[Controls]", "PositionDisplay"), ConfigValue(0));
- }
-}
-
-void DlgPrefControls::slotSetRateTempLeft(double v) {
- QString str;
- str = str.setNum(v, 'f');
- m_pConfig->set(ConfigKey("[Controls]", "RateTempLeft"),ConfigValue(str));
- RateControl::setTemp(v);
-}
-
-void DlgPrefControls::slotSetRateTempRight(double v) {
- QString str;
- str = str.setNum(v, 'f');
- m_pConfig->set(ConfigKey("[Controls]", "RateTempRight"),ConfigValue(str));
- RateControl::setTempSmall(v);
-}
-
-void DlgPrefControls::slotSetRatePermLeft(double v) {
- QString str;
- str = str.setNum(v, 'f');
- m_pConfig->set(ConfigKey("[Controls]", "RatePermLeft"),ConfigValue(str));
- RateControl::setPerm(v);
-}
-
-void DlgPrefControls::slotSetRatePermRight(double v) {
- QString str;
- str = str.setNum(v, 'f');
- m_pConfig->set(ConfigKey("[Controls]", "RatePermRight"),ConfigValue(str));
- RateControl::setPermSmall(v);
-}
-
-void DlgPrefControls::slotSetRateRampSensitivity(int sense) {
- m_pConfig->set(ConfigKey("[Controls]", "RateRampSensitivity"),
- ConfigValue(SliderRateRampSensitivity->value()));
- RateControl::setRateRampSensitivity(sense);
-}
-
-void DlgPrefControls::slotSetRateRamp(bool mode) {
- m_pConfig->set(ConfigKey("[Controls]", "RateRamp"),
- ConfigValue(radioButtonSpeedBendRamping->isChecked()));
- RateControl::setRateRamp(mode);
-}
-
-void DlgPrefControls::slotApply() {
- double deck1RateRange = m_rateRangeControls[0]->get();
- double deck1RateDir = m_rateDirControls[0]->get();
-
- m_pConfig->set(ConfigKey("[Controls]", "RateRangePercent"),
- ConfigValue(static_cast(deck1RateRange * 100)));
-
- // Write rate direction to config file
- if (deck1RateDir == 1) {
- m_pConfig->set(ConfigKey("[Controls]", "RateDir"), ConfigValue(0));
- } else {
- m_pConfig->set(ConfigKey("[Controls]", "RateDir"), ConfigValue(1));
- }
-
- int configSPAutoReset = BaseTrackPlayer::RESET_NONE;
-
- // screensaver mode update
- int inhibitcombo = comboBoxScreensaver->itemData(
- comboBoxScreensaver->currentIndex()).toInt();
- int inhibitsettings = static_cast(m_mixxx->getInhibitScreensaver());
- if (inhibitcombo != inhibitsettings) {
- m_mixxx->setInhibitScreensaver(static_cast(inhibitcombo));
- }
-
-
- if (m_speedAutoReset && m_pitchAutoReset) {
- configSPAutoReset = BaseTrackPlayer::RESET_PITCH_AND_SPEED;
- }
- else if (m_speedAutoReset) configSPAutoReset = BaseTrackPlayer::RESET_SPEED;
- else if (m_pitchAutoReset) configSPAutoReset = BaseTrackPlayer::RESET_PITCH;
-
- m_pConfig->set(ConfigKey("[Controls]", "SpeedAutoReset"),
- ConfigValue(configSPAutoReset));
-
- m_pConfig->set(ConfigKey("[Controls]", "keylockMode"),
- ConfigValue(m_keylockMode));
- // Set key lock behavior for every group
- foreach (ControlProxy* pControl, m_keylockModeControls) {
- pControl->set(m_keylockMode);
- }
-
- m_pConfig->set(ConfigKey("[Controls]", "keyunlockMode"),
- ConfigValue(m_keyunlockMode));
- // Set key un-lock behavior for every group
- foreach (ControlProxy* pControl, m_keyunlockModeControls) {
- pControl->set(m_keyunlockMode);
- }
-}
-
-//Returns TRUE if skin fits to screen resolution, FALSE otherwise
-bool DlgPrefControls::checkSkinResolution(QString skin)
-{
- int screenWidth = QApplication::desktop()->width();
- int screenHeight = QApplication::desktop()->height();
-
- const QRegExp min_size_regex("(\\d+), *(\\d+)<");
- QFile skinfile(skin + "/skin.xml");
- if (skinfile.open(QFile::ReadOnly | QFile::Text)) {
- QTextStream in(&skinfile);
- bool found_size = false;
- while (!in.atEnd()) {
- if (min_size_regex.indexIn(in.readLine()) != -1) {
- found_size = true;
- break;
- }
- }
- if (found_size) {
- return !(min_size_regex.cap(1).toInt() > screenWidth ||
- min_size_regex.cap(2).toInt() > screenHeight);
- }
- }
-
- // If regex failed, fall back to skin name parsing.
- QString skinName = skin.left(skin.indexOf(QRegExp("\\d")));
- QString resName = skin.right(skin.count()-skinName.count());
- QString res = resName.left(resName.lastIndexOf(QRegExp("\\d"))+1);
- QString skinWidth = res.left(res.indexOf("x"));
- QString skinHeight = res.right(res.count()-skinWidth.count()-1);
- return !(skinWidth.toInt() > screenWidth || skinHeight.toInt() > screenHeight);
-}
-
-void DlgPrefControls::slotNumDecksChanged(double new_count) {
- int numdecks = static_cast(new_count);
- if (numdecks <= m_iNumConfiguredDecks) {
- // TODO(owilliams): If we implement deck deletion, shrink the size of configured decks.
- return;
- }
-
- for (int i = m_iNumConfiguredDecks; i < numdecks; ++i) {
- QString group = PlayerManager::groupForDeck(i);
- m_rateControls.push_back(new ControlProxy(
- group, "rate"));
- m_rateRangeControls.push_back(new ControlProxy(
- group, "rateRange"));
- m_rateDirControls.push_back(new ControlProxy(
- group, "rate_dir"));
- m_cueControls.push_back(new ControlProxy(
- group, "cue_mode"));
- m_keylockModeControls.push_back(new ControlProxy(
- group, "keylockMode"));
- m_keylockModeControls.last()->set(m_keylockMode);
- m_keyunlockModeControls.push_back(new ControlProxy(
- group, "keyunlockMode"));
- m_keyunlockModeControls.last()->set(m_keyunlockMode);
- }
-
- m_iNumConfiguredDecks = numdecks;
- slotSetRateDir(m_pConfig->getValueString(ConfigKey("[Controls]", "RateDir")).toInt());
- slotSetRateRangePercent(m_pConfig->getValueString(ConfigKey("[Controls]", "RateRangePercent")).toInt());
-}
-
-void DlgPrefControls::slotNumSamplersChanged(double new_count) {
- int numsamplers = static_cast(new_count);
- if (numsamplers <= m_iNumConfiguredSamplers) {
- return;
- }
-
- for (int i = m_iNumConfiguredSamplers; i < numsamplers; ++i) {
- QString group = PlayerManager::groupForSampler(i);
- m_rateControls.push_back(new ControlProxy(
- group, "rate"));
- m_rateRangeControls.push_back(new ControlProxy(
- group, "rateRange"));
- m_rateDirControls.push_back(new ControlProxy(
- group, "rate_dir"));
- m_cueControls.push_back(new ControlProxy(
- group, "cue_mode"));
- m_keylockModeControls.push_back(new ControlProxy(
- group, "keylockMode"));
- m_keylockModeControls.last()->set(m_keylockMode);
- m_keyunlockModeControls.push_back(new ControlProxy(
- group, "keyunlockMode"));
- m_keyunlockModeControls.last()->set(m_keyunlockMode);
- }
-
- m_iNumConfiguredSamplers = numsamplers;
- slotSetRateDir(m_pConfig->getValueString(ConfigKey("[Controls]", "RateDir")).toInt());
- slotSetRateRangePercent(m_pConfig->getValueString(ConfigKey("[Controls]", "RateRangePercent")).toInt());
-}
-
-void DlgPrefControls::slotUpdateSpeedAutoReset(bool b) {
- m_speedAutoReset = b;
-}
-
-void DlgPrefControls::slotUpdatePitchAutoReset(bool b) {
- m_pitchAutoReset = b;
-}
-
-int DlgPrefControls::cueDefaultIndexByData(int userData) const {
- for (int i = 0; i < ComboBoxCueDefault->count(); ++i) {
- if (ComboBoxCueDefault->itemData(i).toInt() == userData) {
- return i;
- }
- }
- qWarning() << "No default cue behavior found for value" << userData
- << "returning default";
- return 0;
-}
diff --git a/src/preferences/dialog/dlgprefdeck.cpp b/src/preferences/dialog/dlgprefdeck.cpp
new file mode 100644
index 000000000000..b5ef06a99b47
--- /dev/null
+++ b/src/preferences/dialog/dlgprefdeck.cpp
@@ -0,0 +1,651 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "mixer/basetrackplayer.h"
+#include "preferences/dialog/dlgprefdeck.h"
+#include "preferences/usersettings.h"
+#include "control/controlobject.h"
+#include "control/controlproxy.h"
+#include "widget/wnumberpos.h"
+#include "engine/enginebuffer.h"
+#include "engine/ratecontrol.h"
+#include "mixer/playermanager.h"
+#include "mixer/playerinfo.h"
+#include "control/controlobject.h"
+#include "mixxx.h"
+#include "defs_urls.h"
+
+namespace {
+constexpr int kDefaultRateRangePercent = 8;
+constexpr double kRateDirectionInverted = -1;
+constexpr RateControl::RampMode kDefaultRampingMode = RateControl::RampMode::Stepping;
+constexpr double kDefaultTemporaryRateChangeCoarse = 4.00; // percent
+constexpr double kDefaultTemporaryRateChangeFine = 2.00;
+constexpr double kDefaultPermanentRateChangeCoarse = 0.50;
+constexpr double kDefaultPermanentRateChangeFine = 0.05;
+constexpr int kDefaultRateRampSensitivity = 250;
+}
+
+DlgPrefDeck::DlgPrefDeck(QWidget * parent, MixxxMainWindow * mixxx,
+ PlayerManager* pPlayerManager,
+ UserSettingsPointer pConfig)
+ : DlgPreferencePage(parent),
+ m_pConfig(pConfig),
+ m_mixxx(mixxx),
+ m_pPlayerManager(pPlayerManager),
+ m_iNumConfiguredDecks(0),
+ m_iNumConfiguredSamplers(0) {
+ setupUi(this);
+
+ m_pNumDecks = new ControlProxy("[Master]", "num_decks", this);
+ m_pNumDecks->connectValueChanged(SLOT(slotNumDecksChanged(double)));
+ slotNumDecksChanged(m_pNumDecks->get(), true);
+
+ m_pNumSamplers = new ControlProxy("[Master]", "num_samplers", this);
+ m_pNumSamplers->connectValueChanged(SLOT(slotNumSamplersChanged(double)));
+ slotNumSamplersChanged(m_pNumSamplers->get(), true);
+
+ // Set default value in config file and control objects, if not present
+ // Default is "0" = Mixxx Mode
+ int cueDefaultValue = m_pConfig->getValue(
+ ConfigKey("[Controls]", "CueDefault"), 0);
+
+ // Update combo box
+ // The itemData values are out of order to avoid breaking configurations
+ // when Mixxx mode (no blinking) was introduced.
+ // TODO: replace magic numbers with an enum class
+ ComboBoxCueMode->addItem(tr("Mixxx mode"), 0);
+ ComboBoxCueMode->addItem(tr("Mixxx mode (no blinking)"), 4);
+ ComboBoxCueMode->addItem(tr("Pioneer mode"), 1);
+ ComboBoxCueMode->addItem(tr("Denon mode"), 2);
+ ComboBoxCueMode->addItem(tr("Numark mode"), 3);
+ ComboBoxCueMode->addItem(tr("CUP mode"), 5);
+ const int cueModeIndex = cueDefaultIndexByData(cueDefaultValue);
+ ComboBoxCueMode->setCurrentIndex(cueModeIndex);
+ slotCueModeCombobox(cueModeIndex);
+ for (ControlProxy* pControl : m_cueControls) {
+ pControl->set(m_iCueMode);
+ }
+ connect(ComboBoxCueMode, SIGNAL(activated(int)), this, SLOT(slotCueModeCombobox(int)));
+
+ // Track time display configuration
+ m_pControlTrackTimeDisplay = new ControlObject(
+ ConfigKey("[Controls]", "ShowDurationRemaining"));
+ connect(m_pControlTrackTimeDisplay, SIGNAL(valueChanged(double)),
+ this, SLOT(slotSetTrackTimeDisplay(double)));
+
+ // If not present in the config, set the default value
+ if (!m_pConfig->exists(ConfigKey("[Controls]","PositionDisplay"))) {
+ m_pConfig->set(ConfigKey("[Controls]","PositionDisplay"),
+ QString::number(static_cast(TrackTime::DisplayMode::Remaining)));
+ }
+
+ double positionDisplayType = m_pConfig->getValue(
+ ConfigKey("[Controls]", "PositionDisplay"),
+ static_cast(TrackTime::DisplayMode::Elapsed));
+ if (positionDisplayType ==
+ static_cast(TrackTime::DisplayMode::Remaining)) {
+ radioButtonRemaining->setChecked(true);
+ m_pControlTrackTimeDisplay->set(
+ static_cast(TrackTime::DisplayMode::Remaining));
+ } else if (positionDisplayType ==
+ static_cast(TrackTime::DisplayMode::ElapsedAndRemaining)) {
+ radioButtonElapsedAndRemaining->setChecked(true);
+ m_pControlTrackTimeDisplay->set(
+ static_cast(TrackTime::DisplayMode::ElapsedAndRemaining));
+ } else {
+ radioButtonElapsed->setChecked(true);
+ m_pControlTrackTimeDisplay->set(
+ static_cast(TrackTime::DisplayMode::Elapsed));
+ }
+ connect(buttonGroupTrackTime, SIGNAL(buttonClicked(QAbstractButton*)),
+ this, SLOT(slotSetTrackTimeDisplay(QAbstractButton *)));
+
+ // Override Playing Track on Track Load
+ // The check box reflects the opposite of the config value
+ m_bDisallowTrackLoadToPlayingDeck = !m_pConfig->getValue(
+ ConfigKey("[Controls]", "AllowTrackLoadToPlayingDeck"), false);
+ checkBoxDisallowLoadToPlayingDeck->setChecked(m_bDisallowTrackLoadToPlayingDeck);
+ connect(checkBoxDisallowLoadToPlayingDeck, SIGNAL(toggled(bool)),
+ this, SLOT(slotDisallowTrackLoadToPlayingDeckCheckbox(bool)));
+
+ // Jump to cue on track load
+ // The check box reflects the opposite of the config value
+ m_bJumpToCueOnTrackLoad = !m_pConfig->getValue(ConfigKey("[Controls]", "CueRecall"), false);
+ checkBoxSeekToCue->setChecked(m_bJumpToCueOnTrackLoad);
+ connect(checkBoxSeekToCue, SIGNAL(toggled(bool)),
+ this, SLOT(slotJumpToCueOnTrackLoadCheckbox(bool)));
+
+ m_bRateInverted = m_pConfig->getValue(ConfigKey("[Controls]", "RateDir"), false);
+ setRateDirectionForAllDecks(m_bRateInverted);
+ checkBoxInvertSpeedSlider->setChecked(m_bRateInverted);
+ connect(checkBoxInvertSpeedSlider, SIGNAL(toggled(bool)),
+ this, SLOT(slotRateInversionCheckbox(bool)));
+
+ ComboBoxRateRange->clear();
+ ComboBoxRateRange->addItem(tr("4%"), 4);
+ ComboBoxRateRange->addItem(tr("6% (semitone)"), 6);
+ ComboBoxRateRange->addItem(tr("8% (Technics SL-1210)"), 8);
+ ComboBoxRateRange->addItem(tr("10%"), 10);
+ ComboBoxRateRange->addItem(tr("16%"), 16);
+ ComboBoxRateRange->addItem(tr("24%"), 24);
+ ComboBoxRateRange->addItem(tr("50%"), 50);
+ ComboBoxRateRange->addItem(tr("90%"), 90);
+ connect(ComboBoxRateRange, SIGNAL(activated(int)),
+ this, SLOT(slotRateRangeComboBox(int)));
+
+ // RateRange is the legacy ConfigKey. RateRangePercent is used now.
+ if (m_pConfig->exists(ConfigKey("[Controls]", "RateRange")) &&
+ !m_pConfig->exists(ConfigKey("[Controls]", "RateRangePercent"))) {
+ int legacyIndex = m_pConfig->getValueString(ConfigKey("[Controls]", "RateRange")).toInt();
+ if (legacyIndex == 0) {
+ m_iRateRangePercent = 6;
+ } else if (legacyIndex == 1) {
+ m_iRateRangePercent = 8;
+ } else {
+ m_iRateRangePercent = (legacyIndex-1) * 10;
+ }
+ } else {
+ m_iRateRangePercent = m_pConfig->getValue(ConfigKey("[Controls]", "RateRangePercent"),
+ kDefaultRateRangePercent);
+ }
+ if (!(m_iRateRangePercent > 0 && m_iRateRangePercent <= 90)) {
+ m_iRateRangePercent = kDefaultRateRangePercent;
+ }
+ setRateRangeForAllDecks(m_iRateRangePercent);
+
+ //
+ // Key lock mode
+ //
+ connect(buttonGroupKeyLockMode, SIGNAL(buttonClicked(QAbstractButton*)),
+ this, SLOT(slotKeyLockModeSelected(QAbstractButton *)));
+
+ m_keylockMode = static_cast(
+ m_pConfig->getValue(ConfigKey("[Controls]", "keylockMode"),
+ static_cast(KeylockMode::LockOriginalKey)));
+ for (ControlProxy* pControl : m_keylockModeControls) {
+ pControl->set(static_cast(m_keylockMode));
+ }
+
+ //
+ // Key unlock mode
+ //
+ connect(buttonGroupKeyUnlockMode, SIGNAL(buttonClicked(QAbstractButton*)),
+ this, SLOT(slotKeyUnlockModeSelected(QAbstractButton *)));
+
+ m_keyunlockMode = static_cast(
+ m_pConfig->getValue(ConfigKey("[Controls]", "keyunlockMode"),
+ static_cast(KeyunlockMode::ResetLockedKey)));
+ for (ControlProxy* pControl : m_keyunlockModeControls) {
+ pControl->set(static_cast(m_keyunlockMode));
+ }
+
+ //
+ // Rate buttons configuration
+ //
+ connect(spinBoxTemporaryRateCoarse, SIGNAL(valueChanged(double)),
+ this, SLOT(slotRateTempCoarseSpinbox(double)));
+ connect(spinBoxTemporaryRateFine, SIGNAL(valueChanged(double)),
+ this, SLOT(slotRateTempFineSpinbox(double)));
+ connect(spinBoxPermanentRateCoarse, SIGNAL(valueChanged(double)),
+ this, SLOT(slotRatePermCoarseSpinbox(double)));
+ connect(spinBoxPermanentRateFine, SIGNAL(valueChanged(double)),
+ this, SLOT(slotRatePermFineSpinbox(double)));
+
+ m_dRateTempCoarse = m_pConfig->getValue(ConfigKey("[Controls]", "RateTempLeft"),
+ kDefaultPermanentRateChangeCoarse);
+ m_dRateTempFine = m_pConfig->getValue(ConfigKey("[Controls]", "RateTempRight"),
+ kDefaultPermanentRateChangeFine);
+ m_dRatePermCoarse = m_pConfig->getValue(ConfigKey("[Controls]", "RatePermLeft"),
+ kDefaultTemporaryRateChangeCoarse);
+ m_dRatePermFine = m_pConfig->getValue(ConfigKey("[Controls]", "RatePermRight"),
+ kDefaultTemporaryRateChangeFine);
+
+ spinBoxTemporaryRateCoarse->setValue(m_dRateTempCoarse);
+ spinBoxTemporaryRateFine->setValue(m_dRateTempFine);
+ spinBoxPermanentRateCoarse->setValue(m_dRatePermCoarse);
+ spinBoxPermanentRateFine->setValue(m_dRatePermFine);
+
+ RateControl::setTemporaryRateChangeCoarseAmount(m_dRateTempCoarse);
+ RateControl::setTemporaryRateChangeFineAmount(m_dRateTempFine);
+ RateControl::setPermanentRateChangeCoarseAmount(m_dRatePermCoarse);
+ RateControl::setPermanentRateChangeFineAmount(m_dRatePermFine);
+
+ // Rate Ramp Sensitivity
+ m_iRateRampSensitivity = m_pConfig->getValue(ConfigKey("[Controls]", "RateRampSensitivity"), kDefaultRateRampSensitivity);
+ SliderRateRampSensitivity->setValue(m_iRateRampSensitivity);
+ connect(SliderRateRampSensitivity, SIGNAL(valueChanged(int)),
+ this, SLOT(slotRateRampSensitivitySlider(int)));
+
+ //
+ // Cue Mode
+ //
+
+ // Add "(?)" with a manual link to the label
+ labelCueMode->setText(
+ labelCueMode->text() +
+ " (?)");
+
+ //
+ // Ramping Temporary Rate Change configuration
+ //
+
+ // Set Ramp Rate On or Off
+ connect(radioButtonRateRampModeLinear, SIGNAL(toggled(bool)),
+ this, SLOT(slotRateRampingModeLinearButton(bool)));
+ m_bRateRamping = static_cast(
+ m_pConfig->getValue(ConfigKey("[Controls]", "RateRamp"),
+ static_cast(kDefaultRampingMode)));
+ if (m_bRateRamping == RateControl::RampMode::Linear) {
+ radioButtonRateRampModeLinear->setChecked(true);
+ } else {
+ radioButtonRateRampModeStepping->setChecked(true);
+ }
+
+ // Update "reset speed" and "reset pitch" check boxes
+ // TODO: All defaults should only be set in slotResetToDefaults.
+ int configSPAutoReset = m_pConfig->getValue(
+ ConfigKey("[Controls]", "SpeedAutoReset"),
+ BaseTrackPlayer::RESET_PITCH);
+
+ m_speedAutoReset = (configSPAutoReset==BaseTrackPlayer::RESET_SPEED ||
+ configSPAutoReset==BaseTrackPlayer::RESET_PITCH_AND_SPEED);
+ m_pitchAutoReset = (configSPAutoReset==BaseTrackPlayer::RESET_PITCH ||
+ configSPAutoReset==BaseTrackPlayer::RESET_PITCH_AND_SPEED);
+
+ checkBoxResetSpeed->setChecked(m_speedAutoReset);
+ checkBoxResetPitch->setChecked(m_pitchAutoReset);
+
+ connect(checkBoxResetSpeed, SIGNAL(toggled(bool)),
+ this, SLOT(slotUpdateSpeedAutoReset(bool)));
+ connect(checkBoxResetPitch, SIGNAL(toggled(bool)),
+ this, SLOT(slotUpdatePitchAutoReset(bool)));
+
+ slotUpdate();
+}
+
+DlgPrefDeck::~DlgPrefDeck() {
+ delete m_pControlTrackTimeDisplay;
+ qDeleteAll(m_rateControls);
+ qDeleteAll(m_rateDirectionControls);
+ qDeleteAll(m_cueControls);
+ qDeleteAll(m_rateRangeControls);
+ qDeleteAll(m_keylockModeControls);
+ qDeleteAll(m_keyunlockModeControls);
+}
+
+void DlgPrefDeck::slotUpdate() {
+ slotSetTrackTimeDisplay(m_pControlTrackTimeDisplay->get());
+
+ checkBoxDisallowLoadToPlayingDeck->setChecked(!m_pConfig->getValue(
+ ConfigKey("[Controls]", "AllowTrackLoadToPlayingDeck"), false));
+
+ checkBoxSeekToCue->setChecked(!m_pConfig->getValue(
+ ConfigKey("[Controls]", "CueRecall"), false));
+
+ double deck1RateRange = m_rateRangeControls[0]->get();
+ int index = ComboBoxRateRange->findData(static_cast(deck1RateRange * 100));
+ if (index == -1) {
+ ComboBoxRateRange->addItem(QString::number(deck1RateRange * 100.).append("%"),
+ deck1RateRange * 100.);
+ }
+ ComboBoxRateRange->setCurrentIndex(index);
+
+ double deck1RateDirection = m_rateDirectionControls[0]->get();
+ checkBoxInvertSpeedSlider->setChecked(deck1RateDirection == kRateDirectionInverted);
+
+ double deck1CueMode = m_cueControls[0]->get();
+ index = ComboBoxCueMode->findData(static_cast(deck1CueMode));
+ ComboBoxCueMode->setCurrentIndex(index);
+
+ KeylockMode deck1KeylockMode =
+ static_cast(static_cast(m_keylockModeControls[0]->get()));
+ if (deck1KeylockMode == KeylockMode::LockCurrentKey) {
+ radioButtonCurrentKey->setChecked(true);
+ } else {
+ radioButtonOriginalKey->setChecked(true);
+ }
+
+ KeyunlockMode deck1KeyunlockMode =
+ static_cast(static_cast(m_keyunlockModeControls[0]->get()));
+ if (deck1KeyunlockMode == KeyunlockMode::KeepLockedKey) {
+ radioButtonKeepUnlockedKey->setChecked(true);
+ } else {
+ radioButtonResetUnlockedKey->setChecked(true);
+ }
+
+ int reset = m_pConfig->getValue(ConfigKey("[Controls]", "SpeedAutoReset"),
+ static_cast(BaseTrackPlayer::RESET_PITCH));
+ if (reset == BaseTrackPlayer::RESET_PITCH) {
+ checkBoxResetPitch->setChecked(true);
+ checkBoxResetSpeed->setChecked(false);
+ } else if (reset == BaseTrackPlayer::RESET_SPEED) {
+ checkBoxResetPitch->setChecked(false);
+ checkBoxResetSpeed->setChecked(true);
+ } else if (reset == BaseTrackPlayer::RESET_PITCH_AND_SPEED) {
+ checkBoxResetPitch->setChecked(true);
+ checkBoxResetSpeed->setChecked(true);
+ } else if (reset == BaseTrackPlayer::RESET_NONE) {
+ checkBoxResetPitch->setChecked(false);
+ checkBoxResetSpeed->setChecked(false);
+ }
+
+ SliderRateRampSensitivity->setValue(
+ m_pConfig->getValue(ConfigKey("[Controls]", "RateRampSensitivity"),
+ kDefaultRateRampSensitivity));
+
+ spinBoxTemporaryRateCoarse->setValue(RateControl::getTemporaryRateChangeCoarseAmount());
+ spinBoxTemporaryRateFine->setValue(RateControl::getTemporaryRateChangeFineAmount());
+ spinBoxPermanentRateCoarse->setValue(RateControl::getPermanentRateChangeCoarseAmount());
+ spinBoxPermanentRateFine->setValue(RateControl::getPermanentRateChangeFineAmount());
+}
+
+void DlgPrefDeck::slotResetToDefaults() {
+ // Track time display mode
+ radioButtonRemaining->setChecked(true);
+
+ // Up increases speed.
+ checkBoxInvertSpeedSlider->setChecked(false);
+
+ // 8% Rate Range
+ ComboBoxRateRange->setCurrentIndex(ComboBoxRateRange->findData(kDefaultRateRangePercent));
+
+ // Don't load tracks into playing decks.
+ checkBoxDisallowLoadToPlayingDeck->setChecked(true);
+
+ // Mixxx cue mode
+ ComboBoxCueMode->setCurrentIndex(0);
+
+ // Cue recall on.
+ checkBoxSeekToCue->setChecked(true);
+
+ // Rate-ramping default off.
+ radioButtonRateRampModeStepping->setChecked(true);
+
+ SliderRateRampSensitivity->setValue(kDefaultRateRampSensitivity);
+
+ // Permanent and temporary pitch adjust fine/coarse.
+ spinBoxTemporaryRateCoarse->setValue(4.0);
+ spinBoxTemporaryRateFine->setValue(2.0);
+ spinBoxPermanentRateCoarse->setValue(0.50);
+ spinBoxPermanentRateFine->setValue(0.05);
+
+ checkBoxResetSpeed->setChecked(false);
+ checkBoxResetPitch->setChecked(true);
+
+ radioButtonOriginalKey->setChecked(true);
+ radioButtonResetUnlockedKey->setChecked(true);
+}
+
+void DlgPrefDeck::slotRateRangeComboBox(int index) {
+ m_iRateRangePercent = ComboBoxRateRange->itemData(index).toInt();
+}
+
+void DlgPrefDeck::setRateRangeForAllDecks(int rangePercent) {
+ for (ControlProxy* pControl : m_rateRangeControls) {
+ pControl->set(rangePercent / 100.0);
+ }
+}
+
+void DlgPrefDeck::slotRateInversionCheckbox(bool inverted) {
+ m_bRateInverted = inverted;
+}
+
+void DlgPrefDeck::setRateDirectionForAllDecks(bool inverted) {
+ double oldRateDirectionMultiplier = m_rateDirectionControls[0]->get();
+ double rateDirectionMultiplier = 1.0;
+ if (inverted) {
+ rateDirectionMultiplier = kRateDirectionInverted;
+ }
+ for (ControlProxy* pControl : m_rateDirectionControls) {
+ pControl->set(rateDirectionMultiplier);
+ }
+
+ // If the rate slider direction setting has changed,
+ // multiply the rate by -1 so the current sound does not change.
+ if (rateDirectionMultiplier != oldRateDirectionMultiplier) {
+ for (ControlProxy* pControl : m_rateControls) {
+ pControl->set(-1 * pControl->get());
+ }
+ }
+}
+
+void DlgPrefDeck::slotKeyLockModeSelected(QAbstractButton* pressedButton) {
+ if (pressedButton == radioButtonCurrentKey) {
+ m_keylockMode = KeylockMode::LockCurrentKey;
+ } else {
+ m_keylockMode = KeylockMode::LockOriginalKey;
+ }
+}
+
+void DlgPrefDeck::slotKeyUnlockModeSelected(QAbstractButton* pressedButton) {
+ if (pressedButton == radioButtonResetUnlockedKey) {
+ m_keyunlockMode = KeyunlockMode::ResetLockedKey;
+ } else {
+ m_keyunlockMode = KeyunlockMode::KeepLockedKey;
+ }
+}
+
+void DlgPrefDeck::slotDisallowTrackLoadToPlayingDeckCheckbox(bool checked) {
+ m_bDisallowTrackLoadToPlayingDeck = checked;
+}
+
+void DlgPrefDeck::slotCueModeCombobox(int index) {
+ m_iCueMode = ComboBoxCueMode->itemData(index).toInt();
+}
+
+void DlgPrefDeck::slotJumpToCueOnTrackLoadCheckbox(bool checked) {
+ m_bJumpToCueOnTrackLoad = checked;
+}
+
+void DlgPrefDeck::slotSetTrackTimeDisplay(QAbstractButton* b) {
+ if (b == radioButtonRemaining) {
+ m_timeDisplayMode = TrackTime::DisplayMode::Remaining;
+ } else if (b == radioButtonElapsedAndRemaining) {
+ m_timeDisplayMode = TrackTime::DisplayMode::ElapsedAndRemaining;
+ } else {
+ m_timeDisplayMode = TrackTime::DisplayMode::Elapsed;
+ }
+}
+
+void DlgPrefDeck::slotSetTrackTimeDisplay(double v) {
+ m_timeDisplayMode = static_cast(v);
+ m_pConfig->set(ConfigKey("[Controls]","PositionDisplay"), ConfigValue(v));
+ if (m_timeDisplayMode == TrackTime::DisplayMode::Remaining) {
+ radioButtonRemaining->setChecked(true);
+ } else if (m_timeDisplayMode == TrackTime::DisplayMode::ElapsedAndRemaining) {
+ radioButtonElapsedAndRemaining->setChecked(true);
+ } else { // Elapsed
+ radioButtonElapsed->setChecked(true);
+ }
+}
+
+void DlgPrefDeck::slotRateTempCoarseSpinbox(double value) {
+ m_dRateTempCoarse = value;
+}
+
+void DlgPrefDeck::slotRateTempFineSpinbox(double value) {
+ m_dRateTempFine = value;
+}
+
+void DlgPrefDeck::slotRatePermCoarseSpinbox(double value) {
+ m_dRatePermCoarse = value;
+}
+
+void DlgPrefDeck::slotRatePermFineSpinbox(double value) {
+ m_dRatePermFine = value;
+}
+
+void DlgPrefDeck::slotRateRampSensitivitySlider(int value) {
+ m_iRateRampSensitivity = value;
+}
+
+void DlgPrefDeck::slotRateRampingModeLinearButton(bool checked) {
+ if (checked) {
+ m_bRateRamping = RateControl::RampMode::Linear;
+ } else {
+ m_bRateRamping = RateControl::RampMode::Stepping;
+ }
+}
+
+void DlgPrefDeck::slotApply() {
+ double timeDisplay = static_cast(m_timeDisplayMode);
+ m_pConfig->set(ConfigKey("[Controls]","PositionDisplay"), ConfigValue(timeDisplay));
+ m_pControlTrackTimeDisplay->set(timeDisplay);
+
+ // Set cue mode for every deck
+ for (ControlProxy* pControl : m_cueControls) {
+ pControl->set(m_iCueMode);
+ }
+ m_pConfig->setValue(ConfigKey("[Controls]", "CueDefault"), m_iCueMode);
+
+ m_pConfig->setValue(ConfigKey("[Controls]", "AllowTrackLoadToPlayingDeck"),
+ !m_bDisallowTrackLoadToPlayingDeck);
+
+ m_pConfig->setValue(ConfigKey("[Controls]", "CueRecall"), !m_bJumpToCueOnTrackLoad);
+
+ // Set rate range
+ setRateRangeForAllDecks(m_iRateRangePercent);
+ m_pConfig->setValue(ConfigKey("[Controls]", "RateRangePercent"),
+ m_iRateRangePercent);
+
+ setRateDirectionForAllDecks(m_bRateInverted);
+ m_pConfig->setValue(ConfigKey("[Controls]", "RateDir"),
+ static_cast(m_bRateInverted));
+
+ int configSPAutoReset = BaseTrackPlayer::RESET_NONE;
+
+ if (m_speedAutoReset && m_pitchAutoReset) {
+ configSPAutoReset = BaseTrackPlayer::RESET_PITCH_AND_SPEED;
+ } else if (m_speedAutoReset) {
+ configSPAutoReset = BaseTrackPlayer::RESET_SPEED;
+ } else if (m_pitchAutoReset) {
+ configSPAutoReset = BaseTrackPlayer::RESET_PITCH;
+ }
+
+ m_pConfig->set(ConfigKey("[Controls]", "SpeedAutoReset"),
+ ConfigValue(configSPAutoReset));
+
+ m_pConfig->setValue(ConfigKey("[Controls]", "keylockMode"),
+ static_cast(m_keylockMode));
+ // Set key lock behavior for every group
+ for (ControlProxy* pControl : m_keylockModeControls) {
+ pControl->set(static_cast(m_keylockMode));
+ }
+
+ m_pConfig->setValue(ConfigKey("[Controls]", "keyunlockMode"),
+ static_cast(m_keyunlockMode));
+ // Set key un-lock behavior for every group
+ for (ControlProxy* pControl : m_keyunlockModeControls) {
+ pControl->set(static_cast(m_keyunlockMode));
+ }
+
+ RateControl::setRateRampMode(m_bRateRamping);
+ m_pConfig->setValue(ConfigKey("[Controls]", "RateRamp"), static_cast(m_bRateRamping));
+
+ RateControl::setRateRampSensitivity(m_iRateRampSensitivity);
+ m_pConfig->setValue(ConfigKey("[Controls]", "RateRampSensitivity"), m_iRateRampSensitivity);
+
+ RateControl::setTemporaryRateChangeCoarseAmount(m_dRateTempCoarse);
+ RateControl::setTemporaryRateChangeFineAmount(m_dRateTempFine);
+ RateControl::setPermanentRateChangeCoarseAmount(m_dRatePermCoarse);
+ RateControl::setPermanentRateChangeFineAmount(m_dRatePermFine);
+
+ m_pConfig->setValue(ConfigKey("[Controls]", "RateTempLeft"), m_dRateTempCoarse);
+ m_pConfig->setValue(ConfigKey("[Controls]", "RateTempRight"), m_dRateTempFine);
+ m_pConfig->setValue(ConfigKey("[Controls]", "RatePermLeft"), m_dRatePermCoarse);
+ m_pConfig->setValue(ConfigKey("[Controls]", "RatePermRight"), m_dRatePermFine);
+}
+
+void DlgPrefDeck::slotNumDecksChanged(double new_count, bool initializing) {
+ int numdecks = static_cast(new_count);
+ if (numdecks <= m_iNumConfiguredDecks) {
+ // TODO(owilliams): If we implement deck deletion, shrink the size of configured decks.
+ return;
+ }
+
+ for (int i = m_iNumConfiguredDecks; i < numdecks; ++i) {
+ QString group = PlayerManager::groupForDeck(i);
+ m_rateControls.push_back(new ControlProxy(
+ group, "rate"));
+ m_rateRangeControls.push_back(new ControlProxy(
+ group, "rateRange"));
+ m_rateDirectionControls.push_back(new ControlProxy(
+ group, "rate_dir"));
+ m_cueControls.push_back(new ControlProxy(
+ group, "cue_mode"));
+ m_keylockModeControls.push_back(new ControlProxy(
+ group, "keylockMode"));
+ m_keylockModeControls.last()->set(static_cast(m_keylockMode));
+ m_keyunlockModeControls.push_back(new ControlProxy(
+ group, "keyunlockMode"));
+ m_keyunlockModeControls.last()->set(static_cast(m_keyunlockMode));
+ }
+
+ m_iNumConfiguredDecks = numdecks;
+
+ // The rate range hasn't been read from the config file when this is first called.
+ if (!initializing) {
+ setRateDirectionForAllDecks(m_rateDirectionControls[0]->get() == kRateDirectionInverted);
+ setRateRangeForAllDecks(m_rateRangeControls[0]->get() * 100);
+ }
+}
+
+void DlgPrefDeck::slotNumSamplersChanged(double new_count, bool initializing) {
+ int numsamplers = static_cast(new_count);
+ if (numsamplers <= m_iNumConfiguredSamplers) {
+ return;
+ }
+
+ for (int i = m_iNumConfiguredSamplers; i < numsamplers; ++i) {
+ QString group = PlayerManager::groupForSampler(i);
+ m_rateControls.push_back(new ControlProxy(
+ group, "rate"));
+ m_rateRangeControls.push_back(new ControlProxy(
+ group, "rateRange"));
+ m_rateDirectionControls.push_back(new ControlProxy(
+ group, "rate_dir"));
+ m_cueControls.push_back(new ControlProxy(
+ group, "cue_mode"));
+ m_keylockModeControls.push_back(new ControlProxy(
+ group, "keylockMode"));
+ m_keylockModeControls.last()->set(static_cast(m_keylockMode));
+ m_keyunlockModeControls.push_back(new ControlProxy(
+ group, "keyunlockMode"));
+ m_keyunlockModeControls.last()->set(static_cast(m_keyunlockMode));
+ }
+
+ m_iNumConfiguredSamplers = numsamplers;
+
+ // The rate range hasn't been read from the config file when this is first called.
+ if (!initializing) {
+ setRateDirectionForAllDecks(m_rateDirectionControls[0]->get() == kRateDirectionInverted);
+ setRateRangeForAllDecks(m_rateRangeControls[0]->get() * 100);
+ }
+}
+
+void DlgPrefDeck::slotUpdateSpeedAutoReset(bool b) {
+ m_speedAutoReset = b;
+}
+
+void DlgPrefDeck::slotUpdatePitchAutoReset(bool b) {
+ m_pitchAutoReset = b;
+}
+
+int DlgPrefDeck::cueDefaultIndexByData(int userData) const {
+ for (int i = 0; i < ComboBoxCueMode->count(); ++i) {
+ if (ComboBoxCueMode->itemData(i).toInt() == userData) {
+ return i;
+ }
+ }
+ qWarning() << "No default cue behavior found for value" << userData
+ << "returning default";
+ return 0;
+}
diff --git a/src/preferences/dialog/dlgprefdeck.h b/src/preferences/dialog/dlgprefdeck.h
new file mode 100644
index 000000000000..bd7e0bd79f0a
--- /dev/null
+++ b/src/preferences/dialog/dlgprefdeck.h
@@ -0,0 +1,125 @@
+#ifndef DLGPREFDECK_H
+#define DLGPREFDECK_H
+
+#include
+
+#include "engine/ratecontrol.h"
+#include "preferences/constants.h"
+#include "preferences/dialog/ui_dlgprefdeckdlg.h"
+#include "preferences/usersettings.h"
+#include "preferences/dlgpreferencepage.h"
+
+class ControlProxy;
+class ControlPotmeter;
+class SkinLoader;
+class PlayerManager;
+class MixxxMainWindow;
+class ControlObject;
+
+namespace TrackTime {
+ enum class DisplayMode {
+ Elapsed,
+ Remaining,
+ ElapsedAndRemaining,
+ };
+}
+
+enum class KeylockMode {
+ LockOriginalKey,
+ LockCurrentKey
+};
+
+enum class KeyunlockMode {
+ ResetLockedKey,
+ KeepLockedKey
+};
+
+/**
+ *@author Tue & Ken Haste Andersen
+ */
+
+class DlgPrefDeck : public DlgPreferencePage, public Ui::DlgPrefDeckDlg {
+ Q_OBJECT
+ public:
+ DlgPrefDeck(QWidget *parent, MixxxMainWindow *mixxx,
+ PlayerManager* pPlayerManager,
+ UserSettingsPointer pConfig);
+ virtual ~DlgPrefDeck();
+
+ public slots:
+ void slotUpdate();
+ void slotApply();
+ void slotResetToDefaults();
+
+ void slotRateRangeComboBox(int index);
+ void slotRateInversionCheckbox(bool invert);
+ void slotKeyLockModeSelected(QAbstractButton*);
+ void slotKeyUnlockModeSelected(QAbstractButton*);
+ void slotRateTempCoarseSpinbox(double);
+ void slotRateTempFineSpinbox(double);
+ void slotRatePermCoarseSpinbox(double);
+ void slotRatePermFineSpinbox(double);
+ void slotSetTrackTimeDisplay(QAbstractButton*);
+ void slotSetTrackTimeDisplay(double);
+ void slotDisallowTrackLoadToPlayingDeckCheckbox(bool);
+ void slotCueModeCombobox(int);
+ void slotJumpToCueOnTrackLoadCheckbox(bool);
+ void slotRateRampingModeLinearButton(bool);
+ void slotRateRampSensitivitySlider(int);
+
+ void slotNumDecksChanged(double, bool initializing=false);
+ void slotNumSamplersChanged(double, bool initializing=false);
+
+ void slotUpdateSpeedAutoReset(bool);
+ void slotUpdatePitchAutoReset(bool);
+
+ private:
+ // Because the CueDefault list is out of order, we have to set the combo
+ // box using the user data, not the index. Returns the index of the item
+ // that has the corresponding userData. If the userdata is not in the list,
+ // returns zero.
+ int cueDefaultIndexByData(int userData) const;
+
+ void setRateRangeForAllDecks(int rangePercent);
+ void setRateDirectionForAllDecks(bool inverted);
+
+ UserSettingsPointer m_pConfig;
+ ControlObject* m_pControlTrackTimeDisplay;
+ ControlProxy* m_pNumDecks;
+ ControlProxy* m_pNumSamplers;
+ QList m_cueControls;
+ QList m_rateControls;
+ QList m_rateDirectionControls;
+ QList m_rateRangeControls;
+ QList m_keylockModeControls;
+ QList m_keyunlockModeControls;
+ MixxxMainWindow *m_mixxx;
+ PlayerManager* m_pPlayerManager;
+
+ int m_iNumConfiguredDecks;
+ int m_iNumConfiguredSamplers;
+
+ TrackTime::DisplayMode m_timeDisplayMode;
+
+ int m_iCueMode;
+
+ bool m_bDisallowTrackLoadToPlayingDeck;
+ bool m_bJumpToCueOnTrackLoad;
+
+ int m_iRateRangePercent;
+ bool m_bRateInverted;
+
+ bool m_speedAutoReset;
+ bool m_pitchAutoReset;
+ KeylockMode m_keylockMode;
+ KeyunlockMode m_keyunlockMode;
+
+ RateControl::RampMode m_bRateRamping;
+ int m_iRateRampSensitivity;
+ double m_dRateTempCoarse;
+ double m_dRateTempFine;
+ double m_dRatePermCoarse;
+ double m_dRatePermFine;
+};
+
+#endif
diff --git a/src/preferences/dialog/dlgprefcontrolsdlg.ui b/src/preferences/dialog/dlgprefdeckdlg.ui
similarity index 72%
rename from src/preferences/dialog/dlgprefcontrolsdlg.ui
rename to src/preferences/dialog/dlgprefdeckdlg.ui
index e22094056ec9..35712d80e95d 100644
--- a/src/preferences/dialog/dlgprefcontrolsdlg.ui
+++ b/src/preferences/dialog/dlgprefdeckdlg.ui
@@ -1,7 +1,7 @@
- DlgPrefControlsDlg
-
+ DlgPrefDeckDlg
+
0
@@ -11,220 +11,10 @@
- Interface Preferences
+ Deck Preferences
-
-
-
- Skin options
-
-
-
-
-
-
- true
-
-
-
-
-
- Skin
-
-
- false
-
-
- ComboBoxSkinconf
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
-
- -
-
-
-
-
-
- Qt::AlignJustify|Qt::AlignVCenter
-
-
-
- -
-
-
- true
-
-
-
-
-
- Color scheme
-
-
- false
-
-
- ComboBoxSchemeconf
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- Select from different color schemes of a skin if available.
-
-
-
- -
-
-
- Locale
-
-
- ComboBoxLocale
-
-
-
- -
-
-
- Locales determine country and language specific settings.
-
-
-
- -
-
-
- Full-screen mode
-
-
- checkBoxStartFullScreen
-
-
-
- -
-
-
- Start in full-screen mode
-
-
-
- -
-
-
- true
-
-
-
-
-
- Tool tips
-
-
- false
-
-
- radioButtonTooltipsOff
-
-
-
- -
-
-
-
-
-
- Off
-
-
- buttonGroupTooltips
-
-
-
- -
-
-
- Library only
-
-
- buttonGroupTooltips
-
-
-
- -
-
-
- Library and Skin
-
-
- buttonGroupTooltips
-
-
-
-
-
- -
-
-
- HiDPI / Retina scaling
-
-
- checkBoxScaleFactorAuto
-
-
-
- -
-
-
- Change the size of text, buttons, and other items.
-
-
-
- -
-
-
- Adopt scale factor from the operating system
-
-
- Auto Scaling
-
-
-
- -
-
-
- Screen saver
-
-
-
- -
-
-
-
-
-
- -
Deck options
@@ -239,12 +29,12 @@
true
- ComboBoxCueDefault
+ ComboBoxCueMode
-
-
+
Mixxx mode:
- Cue button while pause at cue point = preview
@@ -362,7 +152,7 @@ CUP mode:
- -
+
-
Speed (Tempo) and Key (Pitch) options
@@ -371,7 +161,7 @@ CUP mode:
-
-
-
+
Permanent rate change when left-clicking
@@ -399,7 +189,7 @@ CUP mode:
-
-
+
Permanent rate change when right-clicking
@@ -447,7 +237,7 @@ CUP mode:
-
-
+
false
@@ -577,7 +367,7 @@ CUP mode:
Pitch bend behavior
- radioButtonSpeedBendStatic
+ radioButtonRateRampModeStepping
@@ -592,7 +382,7 @@ CUP mode:
-
-
+
false
@@ -670,7 +460,7 @@ CUP mode:
false
- spinBoxPermRateLeft
+ spinBoxPermanentRateCoarse
@@ -695,7 +485,7 @@ CUP mode:
false
- spinBoxPermRateRight
+ spinBoxPermanentRateFine
@@ -739,7 +529,7 @@ CUP mode:
-
-
+
Abrupt jump
@@ -749,7 +539,7 @@ CUP mode:
-
-
+
Smoothly adjusts deck speed when temporary change buttons are held down
@@ -793,7 +583,7 @@ CUP mode:
- -
+
-
Qt::Vertical
@@ -810,14 +600,7 @@ CUP mode:
- ComboBoxSkinconf
- ComboBoxSchemeconf
- ComboBoxLocale
- checkBoxStartFullScreen
- radioButtonTooltipsOff
- radioButtonTooltipsLibrary
- radioButtonTooltipsLibraryAndSkin
- ComboBoxCueDefault
+ ComboBoxCueMode
radioButtonElapsed
radioButtonRemaining
radioButtonElapsedAndRemaining
@@ -831,14 +614,14 @@ CUP mode:
radioButtonCurrentKey
radioButtonResetUnlockedKey
radioButtonKeepUnlockedKey
- radioButtonSpeedBendRamping
- radioButtonSpeedBendStatic
+ radioButtonRateRampModeLinear
+ radioButtonRateRampModeStepping
SliderRateRampSensitivity
SpinBoxRateRampSensitivity
- spinBoxPermRateLeft
- spinBoxPermRateRight
- spinBoxTempRateLeft
- spinBoxTempRateRight
+ spinBoxPermanentRateCoarse
+ spinBoxPermanentRateFine
+ spinBoxTemporaryRateCoarse
+ spinBoxTemporaryRateFine
@@ -875,7 +658,7 @@ CUP mode:
- radioButtonSpeedBendRamping
+ radioButtonRateRampModeLinear
toggled(bool)
labelSpeedRampSensitivity
setEnabled(bool)
@@ -891,7 +674,7 @@ CUP mode:
- radioButtonSpeedBendRamping
+ radioButtonRateRampModeLinear
toggled(bool)
SliderRateRampSensitivity
setEnabled(bool)
@@ -907,7 +690,7 @@ CUP mode:
- radioButtonSpeedBendRamping
+ radioButtonRateRampModeLinear
toggled(bool)
SpinBoxRateRampSensitivity
setEnabled(bool)
@@ -923,7 +706,7 @@ CUP mode:
- radioButtonSpeedBendStatic
+ radioButtonRateRampModeStepping
toggled(bool)
labelSpeedTemporary
setEnabled(bool)
@@ -939,9 +722,9 @@ CUP mode:
- radioButtonSpeedBendStatic
+ radioButtonRateRampModeStepping
toggled(bool)
- spinBoxTempRateLeft
+ spinBoxTemporaryRateCoarse
setEnabled(bool)
@@ -955,9 +738,9 @@ CUP mode:
- radioButtonSpeedBendStatic
+ radioButtonRateRampModeStepping
toggled(bool)
- spinBoxTempRateRight
+ spinBoxTemporaryRateFine
setEnabled(bool)
@@ -974,7 +757,6 @@ CUP mode:
-
false
diff --git a/src/preferences/dialog/dlgpreferences.cpp b/src/preferences/dialog/dlgpreferences.cpp
index 4f6ff1cf19ee..3d2339fe0cef 100644
--- a/src/preferences/dialog/dlgpreferences.cpp
+++ b/src/preferences/dialog/dlgpreferences.cpp
@@ -24,35 +24,39 @@
#include
#include
+#include "preferences/dialog/dlgpreferences.h"
+
+#include "preferences/dialog/dlgprefsound.h"
+#include "preferences/dialog/dlgpreflibrary.h"
+#include "controllers/dlgprefcontrollers.h"
+
#ifdef __VINYLCONTROL__
#include "preferences/dialog/dlgprefvinyl.h"
#else
#include "preferences/dialog/dlgprefnovinyl.h"
#endif
+#include "preferences/dialog/dlgprefinterface.h"
+#include "preferences/dialog/dlgprefwaveform.h"
+#include "preferences/dialog/dlgprefdeck.h"
+#include "preferences/dialog/dlgprefeq.h"
+#include "preferences/dialog/dlgprefcrossfader.h"
+#include "preferences/dialog/dlgprefeffects.h"
+#include "preferences/dialog/dlgprefautodj.h"
+
#ifdef __BROADCAST__
#include "preferences/dialog/dlgprefbroadcast.h"
#endif
+#include "preferences/dialog/dlgprefrecord.h"
#include "preferences/dialog/dlgprefbeats.h"
#include "preferences/dialog/dlgprefkey.h"
+#include "preferences/dialog/dlgprefreplaygain.h"
#ifdef __MODPLUG__
#include "preferences/dialog/dlgprefmodplug.h"
#endif
-#include "preferences/dialog/dlgpreferences.h"
-#include "preferences/dialog/dlgprefsound.h"
-#include "controllers/dlgprefcontrollers.h"
-#include "preferences/dialog/dlgpreflibrary.h"
-#include "preferences/dialog/dlgprefcontrols.h"
-#include "preferences/dialog/dlgprefwaveform.h"
-#include "preferences/dialog/dlgprefautodj.h"
-#include "preferences/dialog/dlgprefeq.h"
-#include "preferences/dialog/dlgprefcrossfader.h"
-#include "preferences/dialog/dlgprefrecord.h"
-#include "preferences/dialog/dlgprefreplaygain.h"
-#include "preferences/dialog/dlgprefeffects.h"
#include "mixxx.h"
#include "controllers/controllermanager.h"
#include "skin/skinloader.h"
@@ -75,7 +79,6 @@ DlgPreferences::DlgPreferences(MixxxMainWindow * mixxx, SkinLoader* pSkinLoader,
connect(buttonBox, SIGNAL(clicked(QAbstractButton*)),
this, SLOT(slotButtonPressed(QAbstractButton*)));
-
createIcons();
while (pagesWidget->count() > 0) {
@@ -83,59 +86,65 @@ DlgPreferences::DlgPreferences(MixxxMainWindow * mixxx, SkinLoader* pSkinLoader,
}
// Construct widgets for use in tabs.
+ m_soundPage = new DlgPrefSound(this, soundman, pPlayerManager, m_pConfig);
+ addPageWidget(m_soundPage);
+ m_libraryPage = new DlgPrefLibrary(this, m_pConfig, pLibrary);
+ addPageWidget(m_libraryPage);
+ connect(m_libraryPage, SIGNAL(scanLibrary()),
+ pLibrary, SLOT(scan()));
+ m_controllersPage = new DlgPrefControllers(this, m_pConfig, controllers,
+ m_pControllerTreeItem);
+ addPageWidget(m_controllersPage);
#ifdef __VINYLCONTROL__
// It's important for this to be before the connect for wsound.
// TODO(rryan) determine why/if this is still true
- m_wvinylcontrol = new DlgPrefVinyl(this, pVCManager, m_pConfig);
- addPageWidget(m_wvinylcontrol);
+ m_vinylControlPage = new DlgPrefVinyl(this, pVCManager, m_pConfig);
+ addPageWidget(m_vinylControlPage);
#else
m_wnovinylcontrol = new DlgPrefNoVinyl(this, soundman, m_pConfig);
addPageWidget(m_wnovinylcontrol);
#endif
- m_wsound = new DlgPrefSound(this, soundman, pPlayerManager, m_pConfig);
- addPageWidget(m_wsound);
- m_wlibrary = new DlgPrefLibrary(this, m_pConfig, pLibrary);
- addPageWidget(m_wlibrary);
- connect(m_wlibrary, SIGNAL(scanLibrary()),
- pLibrary, SLOT(scan()));
- m_wcontrols = new DlgPrefControls(this, mixxx, pSkinLoader, pPlayerManager, m_pConfig);
- addPageWidget(m_wcontrols);
- m_wwaveform = new DlgPrefWaveform(this, mixxx, m_pConfig, pLibrary);
- addPageWidget(m_wwaveform);
- m_wautodj = new DlgPrefAutoDJ(this, m_pConfig);
- addPageWidget(m_wautodj);
- m_weq = new DlgPrefEQ(this, pEffectsManager, m_pConfig);
- addPageWidget(m_weq);
+
+ m_interfacePage = new DlgPrefInterface(this, mixxx, pSkinLoader, m_pConfig);
+ addPageWidget(m_interfacePage);
+ m_waveformPage = new DlgPrefWaveform(this, mixxx, m_pConfig, pLibrary);
+ addPageWidget(m_waveformPage);
+ m_deckPage = new DlgPrefDeck(this, mixxx, pPlayerManager, m_pConfig);
+ addPageWidget(m_deckPage);
+ m_equalizerPage = new DlgPrefEQ(this, pEffectsManager, m_pConfig);
+ addPageWidget(m_equalizerPage);
+ m_crossfaderPage = new DlgPrefCrossfader(this, m_pConfig);
+ addPageWidget(m_crossfaderPage);
// TODO: Re-enable the effects preferences pane when it does something useful.
- //m_weffects = new DlgPrefEffects(this, m_pConfig, pEffectsManager);
- //addPageWidget(m_weffects);
- m_wcrossfader = new DlgPrefCrossfader(this, m_pConfig);
- addPageWidget(m_wcrossfader);
+ //m_effectsPage = new DlgPrefEffects(this, m_pConfig, pEffectsManager);
+ //addPageWidget(m_effectsPage);
+ m_autoDjPage = new DlgPrefAutoDJ(this, m_pConfig);
+ addPageWidget(m_autoDjPage);
-#ifdef __VAMP__
- m_wbeats = new DlgPrefBeats(this, m_pConfig);
- addPageWidget (m_wbeats);
- m_wkey = new DlgPrefKey(this, m_pConfig);
- addPageWidget(m_wkey);
+#ifdef __BROADCAST__
+ m_broadcastingPage = new DlgPrefBroadcast(this,
+ pSettingsManager->broadcastSettings());
+ addPageWidget(m_broadcastingPage);
#endif
- m_wreplaygain = new DlgPrefReplayGain(this, m_pConfig);
- addPageWidget(m_wreplaygain);
- m_wrecord = new DlgPrefRecord(this, m_pConfig);
- addPageWidget(m_wrecord);
-#ifdef __BROADCAST__
- m_wbroadcast = new DlgPrefBroadcast(this,
- pSettingsManager->broadcastSettings());
- addPageWidget(m_wbroadcast);
+ m_recordingPage = new DlgPrefRecord(this, m_pConfig);
+ addPageWidget(m_recordingPage);
+
+#ifdef __VAMP__
+ m_beatgridPage = new DlgPrefBeats(this, m_pConfig);
+ addPageWidget (m_beatgridPage);
+ m_musicalKeyPage = new DlgPrefKey(this, m_pConfig);
+ addPageWidget(m_musicalKeyPage);
#endif
+
+ m_replayGainPage = new DlgPrefReplayGain(this, m_pConfig);
+ addPageWidget(m_replayGainPage);
+
#ifdef __MODPLUG__
- m_wmodplug = new DlgPrefModplug(this, m_pConfig);
- addPageWidget(m_wmodplug);
+ m_modplugPage = new DlgPrefModplug(this, m_pConfig);
+ addPageWidget(m_modplugPage);
#endif
- m_wcontrollers = new DlgPrefControllers(this, m_pConfig, controllers,
- m_pControllerTreeItem);
- addPageWidget(m_wcontrollers);
// Install event handler to generate closeDlg signal
installEventFilter(this);
@@ -156,7 +165,7 @@ DlgPreferences::~DlgPreferences() {
// because otherwise the QStackedWidget will delete the controller
// preference pages (and DlgPrefControllers dynamically generates and
// deletes them).
- delete m_wcontrollers;
+ delete m_controllersPage;
}
void DlgPreferences::createIcons() {
@@ -166,18 +175,6 @@ void DlgPreferences::createIcons() {
m_pSoundButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
m_pSoundButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
- m_pControlsButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
- m_pControlsButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_interface.png"));
- m_pControlsButton->setText(0, tr("Interface"));
- m_pControlsButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
- m_pControlsButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-
- m_pWaveformButton = new QTreeWidgetItem(m_pControlsButton, QTreeWidgetItem::Type);
- m_pWaveformButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_waveforms.png"));
- m_pWaveformButton->setText(0, tr("Waveforms"));
- m_pWaveformButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
- m_pWaveformButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-
m_pLibraryButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
m_pLibraryButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_library.png"));
m_pLibraryButton->setText(0, tr("Library"));
@@ -190,11 +187,41 @@ void DlgPreferences::createIcons() {
m_pControllerTreeItem->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
m_pControllerTreeItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
- m_pAutoDJButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
- m_pAutoDJButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_autodj.png"));
- m_pAutoDJButton->setText(0, tr("Auto DJ"));
- m_pAutoDJButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
- m_pAutoDJButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+#ifdef __VINYLCONTROL__
+ m_pVinylControlButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
+ //QT screws up my nice vinyl svg for some reason, so we'll use a PNG version
+ //instead...
+ m_pVinylControlButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_vinyl.png"));
+ m_pVinylControlButton->setText(0, tr("Vinyl Control"));
+ m_pVinylControlButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
+ m_pVinylControlButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+#else
+ m_pVinylControlButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
+ //QT screws up my nice vinyl svg for some reason, so we'll use a PNG version
+ //instead...
+ m_pVinylControlButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_vinyl.png"));
+ m_pVinylControlButton->setText(0, tr("Vinyl Control"));
+ m_pVinylControlButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
+ m_pVinylControlButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+#endif
+
+ m_pInterfaceButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
+ m_pInterfaceButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_interface.png"));
+ m_pInterfaceButton->setText(0, tr("Interface"));
+ m_pInterfaceButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
+ m_pInterfaceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+
+ m_pWaveformButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
+ m_pWaveformButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_waveforms.png"));
+ m_pWaveformButton->setText(0, tr("Waveforms"));
+ m_pWaveformButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
+ m_pWaveformButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+
+ m_pDecksButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
+ m_pDecksButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_decks.png"));
+ m_pDecksButton->setText(0, tr("Decks"));
+ m_pDecksButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
+ m_pDecksButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
m_pEqButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
m_pEqButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_equalizers.png"));
@@ -202,6 +229,12 @@ void DlgPreferences::createIcons() {
m_pEqButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
m_pEqButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ m_pCrossfaderButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
+ m_pCrossfaderButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_crossfader.png"));
+ m_pCrossfaderButton->setText(0, tr("Crossfader"));
+ m_pCrossfaderButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
+ m_pCrossfaderButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+
// TODO: Re-enable the effects pane when it does something useful.
//m_pEffectsButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
//m_pEffectsButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_effects.png"));
@@ -209,11 +242,19 @@ void DlgPreferences::createIcons() {
//m_pEffectsButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
//m_pEffectsButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
- m_pCrossfaderButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
- m_pCrossfaderButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_crossfader.png"));
- m_pCrossfaderButton->setText(0, tr("Crossfader"));
- m_pCrossfaderButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
- m_pCrossfaderButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ m_pAutoDJButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
+ m_pAutoDJButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_autodj.png"));
+ m_pAutoDJButton->setText(0, tr("Auto DJ"));
+ m_pAutoDJButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
+ m_pAutoDJButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+
+#ifdef __BROADCAST__
+ m_pBroadcastButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
+ m_pBroadcastButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_broadcast.png"));
+ m_pBroadcastButton->setText(0, tr("Live Broadcasting"));
+ m_pBroadcastButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
+ m_pBroadcastButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+#endif
m_pRecordingButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
m_pRecordingButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_recording.png"));
@@ -241,32 +282,6 @@ void DlgPreferences::createIcons() {
m_pReplayGainButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
m_pReplayGainButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-#ifdef __VINYLCONTROL__
- m_pVinylControlButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
- //QT screws up my nice vinyl svg for some reason, so we'll use a PNG version
- //instead...
- m_pVinylControlButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_vinyl.png"));
- m_pVinylControlButton->setText(0, tr("Vinyl Control"));
- m_pVinylControlButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
- m_pVinylControlButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-#else
- m_pVinylControlButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
- //QT screws up my nice vinyl svg for some reason, so we'll use a PNG version
- //instead...
- m_pVinylControlButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_vinyl.png"));
- m_pVinylControlButton->setText(0, tr("Vinyl Control"));
- m_pVinylControlButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
- m_pVinylControlButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-#endif
-
-#ifdef __BROADCAST__
- m_pBroadcastButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
- m_pBroadcastButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_broadcast.png"));
- m_pBroadcastButton->setText(0, tr("Live Broadcasting"));
- m_pBroadcastButton->setTextAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
- m_pBroadcastButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-#endif
-
#ifdef __MODPLUG__
m_pModplugButton = new QTreeWidgetItem(contentsTreeWidget, QTreeWidgetItem::Type);
m_pModplugButton->setIcon(0, QIcon(":/images/preferences/ic_preferences_modplug.png"));
@@ -285,52 +300,54 @@ void DlgPreferences::changePage(QTreeWidgetItem* current, QTreeWidgetItem* previ
current = previous;
if (current == m_pSoundButton) {
- switchToPage(m_wsound);
+ switchToPage(m_soundPage);
} else if (current == m_pLibraryButton) {
- switchToPage(m_wlibrary);
- } else if (current == m_pControlsButton) {
- switchToPage(m_wcontrols);
- } else if (current == m_pWaveformButton) {
- switchToPage(m_wwaveform);
- } else if (current == m_pAutoDJButton) {
- switchToPage(m_wautodj);
- } else if (current == m_pEqButton) {
- switchToPage(m_weq);
- // TODO: Re-enable the effects preferences pane when it does something useful.
- //} else if (current == m_pEffectsButton) {
- // switchToPage(m_weffects);
- } else if (current == m_pCrossfaderButton) {
- switchToPage(m_wcrossfader);
- } else if (current == m_pRecordingButton) {
- switchToPage(m_wrecord);
- } else if (current == m_pBeatDetectionButton) {
- switchToPage(m_wbeats);
- } else if (current == m_pKeyDetectionButton) {
- switchToPage(m_wkey);
- } else if (current == m_pReplayGainButton) {
- switchToPage(m_wreplaygain);
+ switchToPage(m_libraryPage);
+ } else if (m_controllersPage->handleTreeItemClick(current)) {
+ // Do nothing. m_controllersPage handled this click.
#ifdef __VINYLCONTROL__
} else if (current == m_pVinylControlButton) {
- switchToPage(m_wvinylcontrol);
+ switchToPage(m_vinylControlPage);
#else
} else if (current == m_pVinylControlButton) {
switchToPage(m_wnovinylcontrol);
#endif
+ } else if (current == m_pInterfaceButton) {
+ switchToPage(m_interfacePage);
+ } else if (current == m_pWaveformButton) {
+ switchToPage(m_waveformPage);
+ } else if (current == m_pDecksButton) {
+ switchToPage(m_deckPage);
+ } else if (current == m_pEqButton) {
+ switchToPage(m_equalizerPage);
+ } else if (current == m_pCrossfaderButton) {
+ switchToPage(m_crossfaderPage);
+ // TODO: Re-enable the effects preferences pane when it does something useful.
+ //} else if (current == m_pEffectsButton) {
+ // switchToPage(m_effectsPage);
+ } else if (current == m_pAutoDJButton) {
+ switchToPage(m_autoDjPage);
#ifdef __BROADCAST__
} else if (current == m_pBroadcastButton) {
- switchToPage(m_wbroadcast);
+ switchToPage(m_broadcastingPage);
#endif
+ } else if (current == m_pRecordingButton) {
+ switchToPage(m_recordingPage);
+ } else if (current == m_pBeatDetectionButton) {
+ switchToPage(m_beatgridPage);
+ } else if (current == m_pKeyDetectionButton) {
+ switchToPage(m_musicalKeyPage);
+ } else if (current == m_pReplayGainButton) {
+ switchToPage(m_replayGainPage);
#ifdef __MODPLUG__
} else if (current == m_pModplugButton) {
- switchToPage(m_wmodplug);
+ switchToPage(m_modplugPage);
#endif
- } else if (m_wcontrollers->handleTreeItemClick(current)) {
- // Do nothing. m_wcontrollers handled this click.
}
}
void DlgPreferences::showSoundHardwarePage() {
- switchToPage(m_wsound);
+ switchToPage(m_soundPage);
contentsTreeWidget->setCurrentItem(m_pSoundButton);
}
diff --git a/src/preferences/dialog/dlgpreferences.h b/src/preferences/dialog/dlgpreferences.h
index 5b9c00974408..94306a34ea2f 100644
--- a/src/preferences/dialog/dlgpreferences.h
+++ b/src/preferences/dialog/dlgpreferences.h
@@ -32,21 +32,22 @@
class MixxxMainWindow;
class SoundManager;
class DlgPrefSound;
+class DlgPrefLibrary;
class DlgPrefController;
class DlgPrefControllers;
-class DlgPrefLibrary;
-class DlgPrefControls;
+class DlgPrefVinyl;
+class DlgPrefNoVinyl;
+class DlgPrefInterface;
class DlgPrefWaveform;
-class DlgPrefAutoDJ;
+class DlgPrefDeck;
class DlgPrefEQ;
class DlgPrefEffects;
class DlgPrefCrossfader;
+class DlgPrefAutoDJ;
+class DlgPrefBroadcast;
class DlgPrefRecord;
-class DlgPrefKey;
class DlgPrefBeats;
-class DlgPrefVinyl;
-class DlgPrefNoVinyl;
-class DlgPrefBroadcast;
+class DlgPrefKey;
class DlgPrefReplayGain;
class ControllerManager;
class EffectsManager;
@@ -101,45 +102,47 @@ class DlgPreferences : public QDialog, public Ui::DlgPreferencesDlg {
QStringList m_geometry;
UserSettingsPointer m_pConfig;
- DlgPrefSound* m_wsound;
- DlgPrefLibrary* m_wlibrary;
- DlgPrefControllers *m_wcontrollers;
- DlgPrefControls* m_wcontrols;
- DlgPrefWaveform* m_wwaveform;
- DlgPrefAutoDJ* m_wautodj;
- DlgPrefEQ* m_weq;
+ DlgPrefSound* m_soundPage;
+ DlgPrefLibrary* m_libraryPage;
+ DlgPrefControllers *m_controllersPage;
+ DlgPrefVinyl* m_vinylControlPage;
+ DlgPrefNoVinyl* m_noVinylControlPage;
+ DlgPrefInterface* m_interfacePage;
+ DlgPrefWaveform* m_waveformPage;
+ DlgPrefDeck* m_deckPage;
+ DlgPrefEQ* m_equalizerPage;
+ DlgPrefCrossfader* m_crossfaderPage;
//TODO: Re-enable the effects pane when it does something useful.
- //DlgPrefEffects* m_weffects;
- DlgPrefCrossfader* m_wcrossfader;
- DlgPrefRecord* m_wrecord;
- DlgPrefKey* m_wkey;
- DlgPrefBeats* m_wbeats;
- DlgPrefVinyl* m_wvinylcontrol;
- DlgPrefNoVinyl* m_wnovinylcontrol;
- DlgPrefBroadcast* m_wbroadcast;
- DlgPrefReplayGain* m_wreplaygain;
+ //DlgPrefEffects* m_effectsPage;
+ DlgPrefAutoDJ* m_autoDjPage;
+ DlgPrefBroadcast* m_broadcastingPage;
+ DlgPrefRecord* m_recordingPage;
+ DlgPrefBeats* m_beatgridPage;
+ DlgPrefKey* m_musicalKeyPage;
+ DlgPrefReplayGain* m_replayGainPage;
#ifdef __MODPLUG__
- DlgPrefModplug* m_wmodplug;
+ DlgPrefModplug* m_modplugPage;
#endif
QTreeWidgetItem* m_pSoundButton;
QTreeWidgetItem* m_pLibraryButton;
- QTreeWidgetItem* m_pControlsButton;
+ QTreeWidgetItem* m_pControllerTreeItem;
+ QTreeWidgetItem* m_pVinylControlButton;
+ QTreeWidgetItem* m_pInterfaceButton;
QTreeWidgetItem* m_pWaveformButton;
- QTreeWidgetItem* m_pAutoDJButton;
+ QTreeWidgetItem* m_pDecksButton;
QTreeWidgetItem* m_pEqButton;
- //QTreeWidgetItem* m_pEffectsButton;
QTreeWidgetItem* m_pCrossfaderButton;
+ //QTreeWidgetItem* m_pEffectsButton;
+ QTreeWidgetItem* m_pAutoDJButton;
+ QTreeWidgetItem* m_pBroadcastButton;
QTreeWidgetItem* m_pRecordingButton;
QTreeWidgetItem* m_pBeatDetectionButton;
QTreeWidgetItem* m_pKeyDetectionButton;
- QTreeWidgetItem* m_pVinylControlButton;
- QTreeWidgetItem* m_pBroadcastButton;
QTreeWidgetItem* m_pReplayGainButton;
#ifdef __MODPLUG__
QTreeWidgetItem* m_pModplugButton;
#endif
- QTreeWidgetItem* m_pControllerTreeItem;
QSize m_pageSizeHint;
diff --git a/src/preferences/dialog/dlgprefinterface.cpp b/src/preferences/dialog/dlgprefinterface.cpp
new file mode 100644
index 000000000000..0ff6c729d163
--- /dev/null
+++ b/src/preferences/dialog/dlgprefinterface.cpp
@@ -0,0 +1,434 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "preferences/dialog/dlgprefinterface.h"
+#include "preferences/usersettings.h"
+#include "control/controlobject.h"
+#include "control/controlproxy.h"
+#include "skin/skinloader.h"
+#include "skin/legacyskinparser.h"
+#include "control/controlobject.h"
+#include "mixxx.h"
+#include "util/screensaver.h"
+#include "defs_urls.h"
+#include "util/autohidpi.h"
+
+DlgPrefInterface::DlgPrefInterface(QWidget * parent, MixxxMainWindow * mixxx,
+ SkinLoader* pSkinLoader,
+ UserSettingsPointer pConfig)
+ : DlgPreferencePage(parent),
+ m_pConfig(pConfig),
+ m_mixxx(mixxx),
+ m_pSkinLoader(pSkinLoader),
+ m_dScaleFactorAuto(1.0),
+ m_bUseAutoScaleFactor(false),
+ m_dScaleFactor(1.0),
+ m_bStartWithFullScreen(false),
+ m_bRebootMixxxView(false) {
+ setupUi(this);
+
+ //
+ // Locale setting
+ //
+
+ // Iterate through the available locales and add them to the combobox
+ // Borrowed following snippet from http://qt-project.org/wiki/How_to_create_a_multi_language_application
+ QString translationsFolder = m_pConfig->getResourcePath() + "translations/";
+ QString currentLocale = pConfig->getValueString(ConfigKey("[Config]", "Locale"));
+
+ QDir translationsDir(translationsFolder);
+ QStringList fileNames = translationsDir.entryList(QStringList("mixxx_*.qm"));
+ fileNames.push_back("mixxx_en_US.qm"); // add source language as a fake value
+
+ bool indexFlag = false; // it'll indicate if the selected index changed.
+ for (int i = 0; i < fileNames.size(); ++i) {
+ // Extract locale from filename
+ QString locale = fileNames[i];
+ locale.truncate(locale.lastIndexOf('.'));
+ locale.remove(0, locale.indexOf('_') + 1);
+ QLocale qlocale = QLocale(locale);
+
+ QString lang = QLocale::languageToString(qlocale.language());
+ QString country = QLocale::countryToString(qlocale.country());
+ if (lang == "C") { // Ugly hack to remove the non-resolving locales
+ continue;
+ }
+ lang = QString("%1 (%2)").arg(lang).arg(country);
+ ComboBoxLocale->addItem(lang, locale); // locale as userdata (for storing to config)
+ if (locale == currentLocale) { // Set the currently selected locale
+ ComboBoxLocale->setCurrentIndex(ComboBoxLocale->count() - 1);
+ indexFlag = true;
+ }
+ }
+ ComboBoxLocale->model()->sort(0); // Sort languages list
+
+ ComboBoxLocale->insertItem(0, "System", ""); // System default locale - insert at the top
+ if (!indexFlag) { // if selectedIndex didn't change - select system default
+ ComboBoxLocale->setCurrentIndex(0);
+ }
+ connect(ComboBoxLocale, SIGNAL(activated(int)),
+ this, SLOT(slotSetLocale(int)));
+
+ //
+ // Skin configurations
+ //
+ QString warningString = "
"
+ + tr("The minimum size of the selected skin is bigger than your screen resolution.");
+ warningLabel->setText(warningString);
+
+ ComboBoxSkinconf->clear();
+
+ QList skinSearchPaths = m_pSkinLoader->getSkinSearchPaths();
+ QList skins;
+ for (QDir& dir : skinSearchPaths) {
+ dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
+ skins.append(dir.entryInfoList());
+ }
+
+ QString configuredSkinPath = m_pSkinLoader->getConfiguredSkinPath();
+ QIcon sizeWarningIcon(":/images/preferences/ic_preferences_warning.png");
+ int index = 0;
+ for (const QFileInfo& skinInfo : skins) {
+ bool size_ok = checkSkinResolution(skinInfo.absoluteFilePath());
+ if (size_ok) {
+ ComboBoxSkinconf->insertItem(index, skinInfo.fileName());
+ } else {
+ ComboBoxSkinconf->insertItem(index, sizeWarningIcon, skinInfo.fileName());
+ }
+
+ if (skinInfo.absoluteFilePath() == configuredSkinPath) {
+ m_skin = skinInfo.fileName();
+ ComboBoxSkinconf->setCurrentIndex(index);
+ if (size_ok) {
+ warningLabel->hide();
+ } else {
+ warningLabel->show();
+ }
+ }
+ index++;
+ }
+
+ connect(ComboBoxSkinconf, SIGNAL(activated(int)), this, SLOT(slotSetSkin(int)));
+ connect(ComboBoxSchemeconf, SIGNAL(activated(int)), this, SLOT(slotSetScheme(int)));
+
+ slotUpdateSchemes();
+
+
+#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
+ AutoHiDpi autoHiDpi;
+ m_dScaleFactorAuto = autoHiDpi.getScaleFactor();
+ double scaleFactor = m_dScaleFactorAuto;
+ if (scaleFactor > 0) {
+ // we got a valid auto scale factor
+ bool scaleFactorAuto = m_pConfig->getValue(
+ ConfigKey("[Config]", "ScaleFactorAuto"), true);
+ checkBoxScaleFactorAuto->setChecked(scaleFactorAuto);
+ if (scaleFactorAuto) {
+ comboBoxScaleFactor->setEnabled(false);
+ m_pConfig->setValue(
+ ConfigKey("[Config]", "ScaleFactor"), m_dScaleFactorAuto);
+ } else {
+ scaleFactor = m_pConfig->getValue(
+ ConfigKey("[Config]", "ScaleFactor"), 1.0);
+ }
+ } else {
+ checkBoxScaleFactorAuto->setEnabled(false);
+ scaleFactor = m_pConfig->getValue(
+ ConfigKey("[Config]", "ScaleFactor"), 1.0);
+ }
+ connect(checkBoxScaleFactorAuto, SIGNAL(toggled(bool)),
+ this, SLOT(slotSetScaleFactorAuto(bool)));
+
+ //: Entry of the HiDPI scale combo box. %1 is the scale factor in percent
+ comboBoxScaleFactor->addItem(QString(tr("%1 %")).arg(50), 0.5);
+ comboBoxScaleFactor->addItem(QString(tr("%1 %")).arg(100), 1);
+ comboBoxScaleFactor->addItem(QString(tr("%1 %")).arg(200), 2);
+ comboBoxScaleFactor->addItem(QString(tr("%1 %")).arg(300), 3);
+ comboBoxScaleFactor->addItem(QString(tr("%1 %")).arg(400), 4);
+ int i;
+ for (i = 0; i < comboBoxScaleFactor->count(); ++i) {
+ if (scaleFactor == comboBoxScaleFactor->itemData(i)) {
+ comboBoxScaleFactor->setCurrentIndex(i);
+ break;
+ }
+ }
+ if (i == comboBoxScaleFactor->count()) {
+ // no default scale, add custom scale
+ comboBoxScaleFactor->addItem(
+ QString(tr("%1 % (Experimental)")).arg(scaleFactor * 100), scaleFactor);
+ comboBoxScaleFactor->setCurrentIndex(i);
+ }
+ connect(comboBoxScaleFactor, SIGNAL(activated(int)),
+ this, SLOT(slotSetScaleFactor(int)));
+#else
+ checkBoxScaleFactorAuto->hide();
+ comboBoxScaleFactor->hide();
+ labelScaleFactor->hide();
+#endif
+
+
+ //
+ // Start in fullscreen mode
+ //
+ checkBoxStartFullScreen->setChecked(m_pConfig->getValueString(
+ ConfigKey("[Config]", "StartInFullscreen")).toInt()==1);
+
+ //
+ // Screensaver mode
+ //
+ comboBoxScreensaver->clear();
+ comboBoxScreensaver->addItem(tr("Allow screensaver to run"),
+ static_cast(mixxx::ScreenSaverPreference::PREVENT_OFF));
+ comboBoxScreensaver->addItem(tr("Prevent screensaver from running"),
+ static_cast(mixxx::ScreenSaverPreference::PREVENT_ON));
+ comboBoxScreensaver->addItem(tr("Prevent screensaver while playing"),
+ static_cast(mixxx::ScreenSaverPreference::PREVENT_ON_PLAY));
+
+ int inhibitsettings = static_cast(mixxx->getInhibitScreensaver());
+ comboBoxScreensaver->setCurrentIndex(comboBoxScreensaver->findData(inhibitsettings));
+
+ //
+ // Tooltip configuration
+ //
+
+ // Initialize checkboxes to match config
+ loadTooltipPreferenceFromConfig();
+ slotSetTooltips(); // Update disabled status of "only library" checkbox
+ connect(buttonGroupTooltips, SIGNAL(buttonClicked(QAbstractButton*)),
+ this, SLOT(slotSetTooltips()));
+
+ slotUpdate();
+}
+
+DlgPrefInterface::~DlgPrefInterface() {
+}
+
+void DlgPrefInterface::slotUpdateSchemes() {
+ // Since this involves opening a file we won't do this as part of regular slotUpdate
+ QList schlist = LegacySkinParser::getSchemeList(
+ m_pSkinLoader->getSkinPath(m_skin));
+
+ ComboBoxSchemeconf->clear();
+
+ if (schlist.size() == 0) {
+ ComboBoxSchemeconf->setEnabled(false);
+ ComboBoxSchemeconf->addItem(tr("This skin does not support color schemes", 0));
+ ComboBoxSchemeconf->setCurrentIndex(0);
+ } else {
+ ComboBoxSchemeconf->setEnabled(true);
+ QString selectedScheme = m_pConfig->getValueString(ConfigKey("[Config]", "Scheme"));
+ for (int i = 0; i < schlist.size(); i++) {
+ ComboBoxSchemeconf->addItem(schlist[i]);
+
+ if (schlist[i] == selectedScheme) {
+ ComboBoxSchemeconf->setCurrentIndex(i);
+ }
+ }
+ }
+}
+
+void DlgPrefInterface::slotUpdate() {
+ m_skinOnUpdate = m_pConfig->getValueString(ConfigKey("[Config]", "ResizableSkin"));
+ ComboBoxSkinconf->setCurrentIndex(ComboBoxSkinconf->findText(m_skinOnUpdate));
+ slotUpdateSchemes();
+ m_bRebootMixxxView = false;
+
+ m_localeOnUpdate = m_pConfig->getValueString(ConfigKey("[Config]", "Locale"));
+ ComboBoxLocale->setCurrentIndex(ComboBoxLocale->findData(m_localeOnUpdate));
+
+ checkBoxScaleFactorAuto->setChecked(m_pConfig->getValue(
+ ConfigKey("[Config]", "ScaleFactorAuto"), m_bUseAutoScaleFactor));
+
+ comboBoxScaleFactor->setCurrentIndex(comboBoxScaleFactor->findData(
+ m_pConfig->getValue(
+ ConfigKey("[Config]", "ScaleFactor"), m_dScaleFactorAuto)));
+
+ checkBoxStartFullScreen->setChecked(m_pConfig->getValue(
+ ConfigKey("[Config]", "StartInFullscreen"), m_bStartWithFullScreen));
+
+ loadTooltipPreferenceFromConfig();
+
+ int inhibitsettings = static_cast(m_mixxx->getInhibitScreensaver());
+ comboBoxScreensaver->setCurrentIndex(comboBoxScreensaver->findData(inhibitsettings));
+}
+
+void DlgPrefInterface::slotResetToDefaults() {
+ int index = ComboBoxSkinconf->findText(m_pSkinLoader->getDefaultSkinName());
+ ComboBoxSkinconf->setCurrentIndex(index);
+ slotSetSkin(index);
+
+ // Use System locale
+ ComboBoxLocale->setCurrentIndex(0);
+
+ // Default to normal size widgets
+ comboBoxScaleFactor->setCurrentIndex(1); // 100 %
+ if (m_dScaleFactorAuto > 0) {
+ checkBoxScaleFactorAuto->setChecked(true);
+ }
+
+ // Don't start in full screen.
+ checkBoxStartFullScreen->setChecked(false);
+
+ // Inhibit the screensaver
+ comboBoxScreensaver->setCurrentIndex(comboBoxScreensaver->findData(
+ static_cast(mixxx::ScreenSaverPreference::PREVENT_ON)));
+
+ // Tooltips on everywhere.
+ radioButtonTooltipsLibraryAndSkin->setChecked(true);
+}
+
+void DlgPrefInterface::slotSetLocale(int pos) {
+ m_locale = ComboBoxLocale->itemData(pos).toString();
+}
+
+void DlgPrefInterface::slotSetScaleFactor(int index) {
+ double newScaleFactor = comboBoxScaleFactor->itemData(index).toDouble();
+ if (m_dScaleFactor != newScaleFactor) {
+ m_dScaleFactor = newScaleFactor;
+ m_bRebootMixxxView = true;
+ }
+}
+
+void DlgPrefInterface::slotSetScaleFactorAuto(bool newValue) {
+ if (newValue) {
+ if (!m_bUseAutoScaleFactor) {
+ m_bRebootMixxxView = true;
+ }
+ } else {
+ slotSetScaleFactor(comboBoxScaleFactor->currentIndex());
+ }
+
+ m_bUseAutoScaleFactor = newValue;
+ comboBoxScaleFactor->setEnabled(!newValue);
+}
+
+void DlgPrefInterface::slotSetTooltips() {
+ m_tooltipMode = mixxx::TooltipsPreference::TOOLTIPS_ON;
+ if (radioButtonTooltipsOff->isChecked()) {
+ m_tooltipMode = mixxx::TooltipsPreference::TOOLTIPS_OFF;
+ } else if (radioButtonTooltipsLibrary->isChecked()) {
+ m_tooltipMode = mixxx::TooltipsPreference::TOOLTIPS_ONLY_IN_LIBRARY;
+ }
+}
+
+void DlgPrefInterface::notifyRebootNecessary() {
+ // make the fact that you have to restart mixxx more obvious
+ QMessageBox::information(
+ this, tr("Information"),
+ tr("Mixxx must be restarted before the new locale setting will take effect."));
+}
+
+void DlgPrefInterface::slotSetScheme(int) {
+ QString newScheme = ComboBoxSchemeconf->currentText();
+ if (m_colorScheme != newScheme) {
+ m_colorScheme = newScheme;
+ m_bRebootMixxxView = true;
+ }
+}
+
+void DlgPrefInterface::slotSetSkin(int) {
+ QString newSkin = ComboBoxSkinconf->currentText();
+ if (newSkin != m_skin) {
+ m_skin = newSkin;
+ m_bRebootMixxxView = newSkin != m_skinOnUpdate;
+ checkSkinResolution(ComboBoxSkinconf->currentText())
+ ? warningLabel->hide() : warningLabel->show();
+ slotUpdateSchemes();
+ }
+}
+
+void DlgPrefInterface::slotApply() {
+ m_pConfig->set(ConfigKey("[Config]", "ResizableSkin"), m_skin);
+ m_pConfig->set(ConfigKey("[Config]", "Scheme"), m_colorScheme);
+
+ m_pConfig->set(ConfigKey("[Config]", "Locale"), m_locale);
+
+ m_pConfig->setValue(
+ ConfigKey("[Config]", "ScaleFactorAuto"), m_bUseAutoScaleFactor);
+ if (m_bUseAutoScaleFactor) {
+ m_pConfig->setValue(
+ ConfigKey("[Config]", "ScaleFactor"), m_dScaleFactorAuto);
+ } else {
+ m_pConfig->setValue(ConfigKey("[Config]", "ScaleFactor"), m_dScaleFactor);
+ }
+
+ m_pConfig->set(ConfigKey("[Config]", "StartInFullscreen"),
+ ConfigValue(checkBoxStartFullScreen->isChecked()));
+
+ m_mixxx->setToolTipsCfg(m_tooltipMode);
+
+ // screensaver mode update
+ int screensaverComboBoxState = comboBoxScreensaver->itemData(
+ comboBoxScreensaver->currentIndex()).toInt();
+ int screensaverConfiguredState = static_cast(m_mixxx->getInhibitScreensaver());
+ if (screensaverComboBoxState != screensaverConfiguredState) {
+ m_mixxx->setInhibitScreensaver(
+ static_cast(screensaverComboBoxState));
+ }
+
+ if (m_locale != m_localeOnUpdate) {
+ notifyRebootNecessary();
+ // hack to prevent showing the notification when pressing "Okay" after "Apply"
+ m_localeOnUpdate = m_locale;
+ }
+
+ if (m_bRebootMixxxView) {
+ m_mixxx->rebootMixxxView();
+ // Allow switching skins multiple times without closing the dialog
+ m_skinOnUpdate = m_skin;
+ }
+ m_bRebootMixxxView = false;
+}
+
+//Returns TRUE if skin fits to screen resolution, FALSE otherwise
+bool DlgPrefInterface::checkSkinResolution(QString skin)
+{
+ int screenWidth = QApplication::desktop()->width();
+ int screenHeight = QApplication::desktop()->height();
+
+ const QRegExp min_size_regex("(\\d+), *(\\d+)<");
+ QFile skinfile(skin + "/skin.xml");
+ if (skinfile.open(QFile::ReadOnly | QFile::Text)) {
+ QTextStream in(&skinfile);
+ bool found_size = false;
+ while (!in.atEnd()) {
+ if (min_size_regex.indexIn(in.readLine()) != -1) {
+ found_size = true;
+ break;
+ }
+ }
+ if (found_size) {
+ return !(min_size_regex.cap(1).toInt() > screenWidth ||
+ min_size_regex.cap(2).toInt() > screenHeight);
+ }
+ }
+
+ // If regex failed, fall back to skin name parsing.
+ QString skinName = skin.left(skin.indexOf(QRegExp("\\d")));
+ QString resName = skin.right(skin.count()-skinName.count());
+ QString res = resName.left(resName.lastIndexOf(QRegExp("\\d"))+1);
+ QString skinWidth = res.left(res.indexOf("x"));
+ QString skinHeight = res.right(res.count()-skinWidth.count()-1);
+ return !(skinWidth.toInt() > screenWidth || skinHeight.toInt() > screenHeight);
+}
+
+void DlgPrefInterface::loadTooltipPreferenceFromConfig() {
+ mixxx::TooltipsPreference configTooltips = m_mixxx->getToolTipsCfg();
+ switch (configTooltips) {
+ case mixxx::TooltipsPreference::TOOLTIPS_OFF:
+ radioButtonTooltipsOff->setChecked(true);
+ break;
+ case mixxx::TooltipsPreference::TOOLTIPS_ON:
+ radioButtonTooltipsLibraryAndSkin->setChecked(true);
+ break;
+ case mixxx::TooltipsPreference::TOOLTIPS_ONLY_IN_LIBRARY:
+ radioButtonTooltipsLibrary->setChecked(true);
+ break;
+ }
+ m_tooltipMode = configTooltips;
+}
diff --git a/src/preferences/dialog/dlgprefcontrols.h b/src/preferences/dialog/dlgprefinterface.h
similarity index 54%
rename from src/preferences/dialog/dlgprefcontrols.h
rename to src/preferences/dialog/dlgprefinterface.h
index 1b9292723be1..21e53f99a53a 100644
--- a/src/preferences/dialog/dlgprefcontrols.h
+++ b/src/preferences/dialog/dlgprefinterface.h
@@ -20,7 +20,8 @@
#include
-#include "preferences/dialog/ui_dlgprefcontrolsdlg.h"
+#include "preferences/constants.h"
+#include "preferences/dialog/ui_dlgprefinterfacedlg.h"
#include "preferences/usersettings.h"
#include "preferences/dlgpreferencepage.h"
@@ -31,65 +32,33 @@ class PlayerManager;
class MixxxMainWindow;
class ControlObject;
-namespace TrackTime {
- enum class DisplayMode {
- Elapsed,
- Remaining,
- ElapsedAndRemaining,
- };
-}
-
/**
*@author Tue & Ken Haste Andersen
*/
-class DlgPrefControls : public DlgPreferencePage, public Ui::DlgPrefControlsDlg {
+class DlgPrefInterface : public DlgPreferencePage, public Ui::DlgPrefControlsDlg {
Q_OBJECT
public:
- DlgPrefControls(QWidget *parent, MixxxMainWindow *mixxx,
- SkinLoader* pSkinLoader, PlayerManager* pPlayerManager,
- UserSettingsPointer pConfig);
- virtual ~DlgPrefControls();
+ DlgPrefInterface(QWidget *parent, MixxxMainWindow *mixxx,
+ SkinLoader* pSkinLoader, UserSettingsPointer pConfig);
+ virtual ~DlgPrefInterface();
public slots:
void slotUpdate();
void slotApply();
void slotResetToDefaults();
- void slotSetRateRange(int pos);
- void slotSetRateRangePercent(int rateRangePercent);
- void slotSetRateDir(bool invert);
- void slotSetRateDir(int pos);
- void slotKeyLockMode(QAbstractButton*);
- void slotKeyUnlockMode(QAbstractButton*);
- void slotSetRateTempLeft(double);
- void slotSetRateTempRight(double);
- void slotSetRatePermLeft(double);
- void slotSetRatePermRight(double);
void slotSetTooltips();
void slotSetSkin(int);
void slotSetScheme(int);
void slotUpdateSchemes();
- void slotSetTrackTimeDisplay(QAbstractButton*);
- void slotSetTrackTimeDisplay(double);
- void slotSetAllowTrackLoadToPlayingDeck(bool);
- void slotSetCueDefault(int);
- void slotSetCueRecall(bool);
- void slotSetRateRamp(bool);
- void slotSetRateRampSensitivity(int);
void slotSetLocale(int);
void slotSetScaleFactor(int index);
void slotSetScaleFactorAuto(bool checked);
- void slotSetStartInFullScreen(bool b);
-
- void slotNumDecksChanged(double);
- void slotNumSamplersChanged(double);
-
- void slotUpdateSpeedAutoReset(bool);
- void slotUpdatePitchAutoReset(bool);
private:
void notifyRebootNecessary();
+ void loadTooltipPreferenceFromConfig();
bool checkSkinResolution(QString skin);
// Because the CueDefault list is out of order, we have to set the combo
@@ -100,26 +69,23 @@ class DlgPrefControls : public DlgPreferencePage, public Ui::DlgPrefControlsDlg
UserSettingsPointer m_pConfig;
ControlObject* m_pControlTrackTimeDisplay;
- ControlProxy* m_pNumDecks;
- ControlProxy* m_pNumSamplers;
- QList m_cueControls;
- QList m_rateControls;
- QList m_rateDirControls;
- QList m_rateRangeControls;
- QList m_keylockModeControls;
- QList m_keyunlockModeControls;
MixxxMainWindow *m_mixxx;
SkinLoader* m_pSkinLoader;
PlayerManager* m_pPlayerManager;
- int m_iNumConfiguredDecks;
- int m_iNumConfiguredSamplers;
-
- bool m_speedAutoReset;
- bool m_pitchAutoReset;
- int m_keylockMode;
- int m_keyunlockMode;
- double m_autoScaleFactor;
+ QString m_skin;
+ QString m_skinOnUpdate;
+ QString m_colorScheme;
+ QString m_locale;
+ QString m_localeOnUpdate;
+ mixxx::TooltipsPreference m_tooltipMode;
+ double m_dScaleFactorAuto;
+ bool m_bUseAutoScaleFactor;
+ double m_dScaleFactor;
+ bool m_bStartWithFullScreen;
+ mixxx::ScreenSaverPreference m_screensaverMode;
+
+ bool m_bRebootMixxxView;
};
#endif
diff --git a/src/preferences/dialog/dlgprefinterfacedlg.ui b/src/preferences/dialog/dlgprefinterfacedlg.ui
new file mode 100644
index 000000000000..ebc2f23977fe
--- /dev/null
+++ b/src/preferences/dialog/dlgprefinterfacedlg.ui
@@ -0,0 +1,255 @@
+
+
+ DlgPrefControlsDlg
+
+
+
+ 0
+ 0
+ 562
+ 723
+
+
+
+ Interface Preferences
+
+
+ -
+
+
+ Interface options
+
+
+
-
+
+
+ true
+
+
+
+
+
+ Skin
+
+
+ false
+
+
+ ComboBoxSkinconf
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+ Qt::AlignJustify|Qt::AlignVCenter
+
+
+
+ -
+
+
+ true
+
+
+
+
+
+ Color scheme
+
+
+ false
+
+
+ ComboBoxSchemeconf
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+ Select from different color schemes of a skin if available.
+
+
+
+ -
+
+
+ Locale
+
+
+ ComboBoxLocale
+
+
+
+ -
+
+
+ Locales determine country and language specific settings.
+
+
+
+ -
+
+
+ Full-screen mode
+
+
+ checkBoxStartFullScreen
+
+
+
+ -
+
+
+ Start in full-screen mode
+
+
+
+ -
+
+
+ true
+
+
+
+
+
+ Tool tips
+
+
+ false
+
+
+ radioButtonTooltipsOff
+
+
+
+ -
+
+
-
+
+
+ Off
+
+
+ buttonGroupTooltips
+
+
+
+ -
+
+
+ Library only
+
+
+ buttonGroupTooltips
+
+
+
+ -
+
+
+ Library and Skin
+
+
+ buttonGroupTooltips
+
+
+
+
+
+ -
+
+
+ HiDPI / Retina scaling
+
+
+ checkBoxScaleFactorAuto
+
+
+
+ -
+
+
+ Change the size of text, buttons, and other items.
+
+
+
+ -
+
+
+ Adopt scale factor from the operating system
+
+
+ Auto Scaling
+
+
+
+ -
+
+
+ Screen saver
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+ ComboBoxSkinconf
+ ComboBoxSchemeconf
+ ComboBoxLocale
+ checkBoxStartFullScreen
+ radioButtonTooltipsOff
+ radioButtonTooltipsLibrary
+ radioButtonTooltipsLibraryAndSkin
+
+
+
+
+
diff --git a/src/skin/skinloader.cpp b/src/skin/skinloader.cpp
index efed15edeb3c..560d85d5e07c 100644
--- a/src/skin/skinloader.cpp
+++ b/src/skin/skinloader.cpp
@@ -28,7 +28,7 @@ SkinLoader::~SkinLoader() {
LegacySkinParser::freeChannelStrings();
}
-QList SkinLoader::getSkinSearchPaths() {
+QList SkinLoader::getSkinSearchPaths() const {
QList searchPaths;
// If we can't find the skins folder then we can't load a skin at all. This
// is a critical error in the user's Mixxx installation.
@@ -47,7 +47,16 @@ QList SkinLoader::getSkinSearchPaths() {
return searchPaths;
}
-QString SkinLoader::getConfiguredSkinPath() {
+QString SkinLoader::getSkinPath(const QString& skinName) const {
+ for (QDir dir : getSkinSearchPaths()) {
+ if (dir.cd(skinName)) {
+ return dir.absolutePath();
+ }
+ }
+ return QString();
+}
+
+QString SkinLoader::getConfiguredSkinPath() const {
QString configSkin = m_pConfig->getValueString(ConfigKey("[Config]", "ResizableSkin"));
// If we don't have a skin defined, we might be migrating from 1.11 and
@@ -62,18 +71,16 @@ QString SkinLoader::getConfiguredSkinPath() {
if (configSkin.isEmpty()) {
configSkin = getDefaultSkinName();
}
- m_pConfig->set(ConfigKey("[Config]", "ResizableSkin"),
- ConfigValue(configSkin));
}
- QList skinSearchPaths = getSkinSearchPaths();
- foreach (QDir dir, skinSearchPaths) {
- if (dir.cd(configSkin)) {
- return dir.absolutePath();
- }
- }
+ QString skinPath = getSkinPath(configSkin);
- return QString();
+ if (skinPath.isEmpty()) {
+ skinPath = getSkinPath(getDefaultSkinName());
+ qDebug() << "Could not find the user's configured skin."
+ << "Falling back on the default skin:" << skinPath;
+ }
+ return skinPath;
}
QString SkinLoader::getDefaultSkinName() const {
@@ -85,42 +92,17 @@ QString SkinLoader::getDefaultSkinName() const {
}
}
-QString SkinLoader::getDefaultSkinPath() {
- // Fall back to default skin.
- QString defaultSkin = getDefaultSkinName();
-
- QList skinSearchPaths = getSkinSearchPaths();
- foreach (QDir dir, skinSearchPaths) {
- if (dir.cd(defaultSkin)) {
- return dir.absolutePath();
- }
- }
-
- return QString();
-}
-
-QString SkinLoader::getSkinPath() {
+QWidget* SkinLoader::loadConfiguredSkin(QWidget* pParent,
+ KeyboardEventFilter* pKeyboard,
+ PlayerManager* pPlayerManager,
+ ControllerManager* pControllerManager,
+ Library* pLibrary,
+ VinylControlManager* pVCMan,
+ EffectsManager* pEffectsManager,
+ RecordingManager* pRecordingManager) {
+ ScopedTimer timer("SkinLoader::loadConfiguredSkin");
QString skinPath = getConfiguredSkinPath();
- if (skinPath.isEmpty()) {
- skinPath = getDefaultSkinPath();
- qDebug() << "Could not find the user's configured skin."
- << "Falling back on the default skin:" << skinPath;
- }
- return skinPath;
-}
-
-QWidget* SkinLoader::loadDefaultSkin(QWidget* pParent,
- KeyboardEventFilter* pKeyboard,
- PlayerManager* pPlayerManager,
- ControllerManager* pControllerManager,
- Library* pLibrary,
- VinylControlManager* pVCMan,
- EffectsManager* pEffectsManager,
- RecordingManager* pRecordingManager) {
- ScopedTimer timer("SkinLoader::loadDefaultSkin");
- QString skinPath = getSkinPath();
-
// If we don't have a skin path then fail.
if (skinPath.isEmpty()) {
return NULL;
@@ -133,7 +115,7 @@ QWidget* SkinLoader::loadDefaultSkin(QWidget* pParent,
}
LaunchImage* SkinLoader::loadLaunchImage(QWidget* pParent) {
- QString skinPath = getSkinPath();
+ QString skinPath = getConfiguredSkinPath();
LegacySkinParser parser(m_pConfig);
LaunchImage* pLaunchImage = parser.parseLaunchImage(skinPath, pParent);
if (pLaunchImage == nullptr) {
@@ -143,7 +125,7 @@ LaunchImage* SkinLoader::loadLaunchImage(QWidget* pParent) {
return pLaunchImage;
}
-QString SkinLoader::pickResizableSkin(QString oldSkin) {
+QString SkinLoader::pickResizableSkin(QString oldSkin) const {
if (oldSkin.contains("latenight", Qt::CaseInsensitive)) {
return "LateNight";
}
diff --git a/src/skin/skinloader.h b/src/skin/skinloader.h
index b6a20438b3c9..aa2aac4eeb19 100644
--- a/src/skin/skinloader.h
+++ b/src/skin/skinloader.h
@@ -21,25 +21,24 @@ class SkinLoader {
SkinLoader(UserSettingsPointer pConfig);
virtual ~SkinLoader();
- QWidget* loadDefaultSkin(QWidget* pParent,
- KeyboardEventFilter* pKeyboard,
- PlayerManager* pPlayerManager,
- ControllerManager* pControllerManager,
- Library* pLibrary,
- VinylControlManager* pVCMan,
- EffectsManager* pEffectsManager,
- RecordingManager* pRecordingManager);
+ QWidget* loadConfiguredSkin(QWidget* pParent,
+ KeyboardEventFilter* pKeyboard,
+ PlayerManager* pPlayerManager,
+ ControllerManager* pControllerManager,
+ Library* pLibrary,
+ VinylControlManager* pVCMan,
+ EffectsManager* pEffectsManager,
+ RecordingManager* pRecordingManager);
LaunchImage* loadLaunchImage(QWidget* pParent);
- QString getSkinPath();
- QList getSkinSearchPaths();
+ QString getSkinPath(const QString& skinName) const;
+ QString getConfiguredSkinPath() const;
+ QString getDefaultSkinName() const;
+ QList getSkinSearchPaths() const;
private:
- QString getConfiguredSkinPath();
- QString getDefaultSkinName() const;
- QString getDefaultSkinPath();
- QString pickResizableSkin(QString oldSkin);
+ QString pickResizableSkin(QString oldSkin) const;
UserSettingsPointer m_pConfig;
};
diff --git a/src/test/golden_buffers/BasicProcessingTestPause b/src/test/golden_buffers/BasicProcessingTestPause
index a320e637f831..87e8bc3013fc 100644
--- a/src/test/golden_buffers/BasicProcessingTestPause
+++ b/src/test/golden_buffers/BasicProcessingTestPause
@@ -1,512 +1,512 @@
-0.870045,0.870045
-0.861948,0.861948
-0.84856,0.84856
-0.830516,0.830516
-0.807968,0.807968
-0.781128,0.781128
-0.750002,0.750002
-0.714361,0.714361
-0.674919,0.674919
-0.631909,0.631909
-0.585666,0.585666
-0.53627,0.53627
-0.48376,0.48376
-0.428829,0.428829
-0.371728,0.371728
-0.312858,0.312858
-0.252449,0.252449
-0.190694,0.190694
-0.128185,0.128185
-0.0651973,0.0651973
-0.00217104,0.00217104
--0.0607714,-0.0607714
--0.122884,-0.122884
--0.184202,-0.184202
--0.244202,-0.244202
--0.302562,-0.302562
--0.35919,-0.35919
--0.413136,-0.413136
--0.464718,-0.464718
--0.513441,-0.513441
--0.559221,-0.559221
--0.601631,-0.601631
--0.640249,-0.640249
--0.675047,-0.675047
--0.706017,-0.706017
--0.733083,-0.733083
--0.755762,-0.755762
--0.773895,-0.773895
--0.787486,-0.787486
--0.796809,-0.796809
--0.801671,-0.801671
--0.802055,-0.802055
--0.797472,-0.797472
--0.788508,-0.788508
--0.77524,-0.77524
--0.757792,-0.757792
--0.736156,-0.736156
--0.710123,-0.710123
--0.680235,-0.680235
--0.646716,-0.646716
--0.609878,-0.609878
--0.569642,-0.569642
--0.526265,-0.526265
--0.480012,-0.480012
--0.431392,-0.431392
--0.380587,-0.380587
--0.327903,-0.327903
--0.273414,-0.273414
--0.21764,-0.21764
--0.16091,-0.16091
--0.103676,-0.103676
--0.0458157,-0.0458157
-0.011718,0.011718
-0.0691946,0.0691946
-0.125873,0.125873
-0.181664,0.181664
-0.236224,0.236224
-0.289052,0.289052
-0.340047,0.340047
-0.388933,0.388933
-0.435401,0.435401
-0.479455,0.479455
-0.520074,0.520074
-0.557805,0.557805
-0.592224,0.592224
-0.623193,0.623193
-0.650745,0.650745
-0.673931,0.673931
-0.693374,0.693374
-0.708899,0.708899
-0.720468,0.720468
-0.728001,0.728001
-0.730944,0.730944
-0.729875,0.729875
-0.724734,0.724734
-0.715748,0.715748
-0.702685,0.702685
-0.685463,0.685463
-0.664438,0.664438
-0.639922,0.639922
-0.611962,0.611962
-0.580754,0.580754
-0.546109,0.546109
-0.50857,0.50857
-0.468456,0.468456
-0.425962,0.425962
-0.381235,0.381235
-0.334466,0.334466
-0.285972,0.285972
-0.236228,0.236228
-0.185352,0.185352
-0.133802,0.133802
-0.0815226,0.0815226
-0.029146,0.029146
--0.0231653,-0.0231653
--0.0750298,-0.0750298
--0.126348,-0.126348
--0.176534,-0.176534
--0.225515,-0.225515
--0.27302,-0.27302
--0.318767,-0.318767
--0.362564,-0.362564
--0.403878,-0.403878
--0.442737,-0.442737
--0.478934,-0.478934
--0.512428,-0.512428
--0.542691,-0.542691
--0.569773,-0.569773
--0.593267,-0.593267
--0.6135,-0.6135
--0.630252,-0.630252
--0.643447,-0.643447
--0.652524,-0.652524
--0.65798,-0.65798
--0.659776,-0.659776
--0.65796,-0.65796
--0.652491,-0.652491
--0.642991,-0.642991
--0.629987,-0.629987
--0.613629,-0.613629
--0.593867,-0.593867
--0.571161,-0.571161
--0.544703,-0.544703
--0.515606,-0.515606
--0.48373,-0.48373
--0.449411,-0.449411
--0.412773,-0.412773
--0.373699,-0.373699
--0.332857,-0.332857
--0.290378,-0.290378
--0.246509,-0.246509
--0.201562,-0.201562
--0.15548,-0.15548
--0.108936,-0.108936
--0.0619791,-0.0619791
--0.0149186,-0.0149186
-0.0319385,0.0319385
-0.0783346,0.0783346
-0.124088,0.124088
-0.168852,0.168852
-0.212465,0.212465
-0.254686,0.254686
-0.295051,0.295051
-0.333589,0.333589
-0.370043,0.370043
-0.404261,0.404261
-0.436128,0.436128
-0.465016,0.465016
-0.491197,0.491197
-0.514512,0.514512
-0.534914,0.534914
-0.552138,0.552138
-0.566006,0.566006
-0.576491,0.576491
-0.58382,0.58382
-0.587931,0.587931
-0.588675,0.588675
-0.585818,0.585818
-0.579729,0.579729
-0.570478,0.570478
-0.558145,0.558145
-0.54278,0.54278
-0.524168,0.524168
-0.502721,0.502721
-0.478671,0.478671
-0.452113,0.452113
-0.423223,0.423223
-0.391835,0.391835
-0.358517,0.358517
-0.323399,0.323399
-0.28674,0.28674
-0.248626,0.248626
-0.209349,0.209349
-0.168996,0.168996
-0.12808,0.12808
-0.0866259,0.0866259
-0.0450219,0.0450219
-0.00329269,0.00329269
--0.0381167,-0.0381167
--0.0790644,-0.0790644
--0.119385,-0.119385
--0.158703,-0.158703
--0.196893,-0.196893
--0.23368,-0.23368
--0.268977,-0.268977
--0.302534,-0.302534
--0.334305,-0.334305
--0.363682,-0.363682
--0.390928,-0.390928
--0.415796,-0.415796
--0.438306,-0.438306
--0.458099,-0.458099
--0.475091,-0.475091
--0.489218,-0.489218
--0.500628,-0.500628
--0.509125,-0.509125
--0.514903,-0.514903
--0.517284,-0.517284
--0.516853,-0.516853
--0.513566,-0.513566
--0.507484,-0.507484
--0.498688,-0.498688
--0.486702,-0.486702
--0.472239,-0.472239
--0.455224,-0.455224
--0.435809,-0.435809
--0.414133,-0.414133
--0.390002,-0.390002
--0.363902,-0.363902
--0.335959,-0.335959
--0.306376,-0.306376
--0.275279,-0.275279
--0.242695,-0.242695
--0.208977,-0.208977
--0.174362,-0.174362
--0.139026,-0.139026
--0.103139,-0.103139
--0.066916,-0.066916
--0.0305043,-0.0305043
-0.00577764,0.00577764
-0.0417215,0.0417215
-0.0772901,0.0772901
-0.112062,0.112062
-0.14596,0.14596
-0.178803,0.178803
-0.210471,0.210471
-0.24067,0.24067
-0.269273,0.269273
-0.296051,0.296051
-0.321061,0.321061
-0.344135,0.344135
-0.3651,0.3651
-0.383649,0.383649
-0.399956,0.399956
-0.413888,0.413888
-0.425526,0.425526
-0.434574,0.434574
-0.441019,0.441019
-0.444862,0.444862
-0.446261,0.446261
-0.445176,0.445176
-0.441676,0.441676
-0.435384,0.435384
-0.426783,0.426783
-0.415873,0.415873
-0.402775,0.402775
-0.387512,0.387512
-0.370012,0.370012
-0.350537,0.350537
-0.329327,0.329327
-0.306483,0.306483
-0.282034,0.282034
-0.256133,0.256133
-0.228956,0.228956
-0.200777,0.200777
-0.17165,0.17165
-0.14192,0.14192
-0.111417,0.111417
-0.0806375,0.0806375
-0.0496218,0.0496218
-0.0186409,0.0186409
--0.0122979,-0.0122979
--0.042771,-0.042771
--0.0728361,-0.0728361
--0.10221,-0.10221
--0.130797,-0.130797
--0.158405,-0.158405
--0.184814,-0.184814
--0.209932,-0.209932
--0.233707,-0.233707
--0.255985,-0.255985
--0.276663,-0.276663
--0.295422,-0.295422
--0.312371,-0.312371
--0.327466,-0.327466
--0.340625,-0.340625
--0.351782,-0.351782
--0.360628,-0.360628
--0.367403,-0.367403
--0.372103,-0.372103
--0.374685,-0.374685
--0.37523,-0.37523
--0.373324,-0.373324
--0.369445,-0.369445
--0.363546,-0.363546
--0.355667,-0.355667
--0.345972,-0.345972
--0.334075,-0.334075
--0.320545,-0.320545
--0.305326,-0.305326
--0.28859,-0.28859
--0.270376,-0.270376
--0.250676,-0.250676
--0.229761,-0.229761
--0.207779,-0.207779
--0.1849,-0.1849
--0.161122,-0.161122
--0.136662,-0.136662
--0.111633,-0.111633
--0.0862683,-0.0862683
--0.0606391,-0.0606391
--0.0349581,-0.0349581
--0.00928729,-0.00928729
-0.0161679,0.0161679
-0.041249,0.041249
-0.0659159,0.0659159
-0.0898674,0.0898674
-0.11312,0.11312
-0.135449,0.135449
-0.156797,0.156797
-0.177063,0.177063
-0.196152,0.196152
-0.21381,0.21381
-0.230078,0.230078
-0.244916,0.244916
-0.25821,0.25821
-0.270021,0.270021
-0.279896,0.279896
-0.288186,0.288186
-0.294759,0.294759
-0.299648,0.299648
-0.302811,0.302811
-0.304058,0.304058
-0.303574,0.303574
-0.301419,0.301419
-0.297686,0.297686
-0.292212,0.292212
-0.285109,0.285109
-0.276407,0.276407
-0.266317,0.266317
-0.254874,0.254874
-0.242117,0.242117
-0.228009,0.228009
-0.212805,0.212805
-0.196587,0.196587
-0.179507,0.179507
-0.161576,0.161576
-0.142895,0.142895
-0.123623,0.123623
-0.103932,0.103932
-0.0838408,0.0838408
-0.0636524,0.0636524
-0.0431463,0.0431463
-0.0227929,0.0227929
-0.0025214,0.0025214
--0.0175262,-0.0175262
--0.037165,-0.037165
--0.0563932,-0.0563932
--0.0749994,-0.0749994
--0.0929801,-0.0929801
--0.110169,-0.110169
--0.126597,-0.126597
--0.141923,-0.141923
--0.156313,-0.156313
--0.169606,-0.169606
--0.181789,-0.181789
--0.192835,-0.192835
--0.202426,-0.202426
--0.21084,-0.21084
--0.217924,-0.217924
--0.223689,-0.223689
--0.228174,-0.228174
--0.231097,-0.231097
--0.232726,-0.232726
--0.233025,-0.233025
--0.232022,-0.232022
--0.229745,-0.229745
--0.226043,-0.226043
--0.221139,-0.221139
--0.215073,-0.215073
--0.207907,-0.207907
--0.199671,-0.199671
--0.190316,-0.190316
--0.180035,-0.180035
--0.16891,-0.16891
--0.157005,-0.157005
--0.144427,-0.144427
--0.131128,-0.131128
--0.117297,-0.117297
--0.103048,-0.103048
--0.0884465,-0.0884465
--0.0736054,-0.0736054
--0.0585049,-0.0585049
--0.0433655,-0.0433655
--0.0282226,-0.0282226
--0.0131919,-0.0131919
-0.00169273,0.00169273
-0.016266,0.016266
-0.030524,0.030524
-0.0443365,0.0443365
-0.0576851,0.0576851
-0.0704305,0.0704305
-0.0825504,0.0825504
-0.0939423,0.0939423
-0.104621,0.104621
-0.114488,0.114488
-0.123568,0.123568
-0.131648,0.131648
-0.138852,0.138852
-0.145126,0.145126
-0.150455,0.150455
-0.154863,0.154863
-0.158151,0.158151
-0.160501,0.160501
-0.161883,0.161883
-0.162349,0.162349
-0.161839,0.161839
-0.160353,0.160353
-0.157953,0.157953
-0.15473,0.15473
-0.150667,0.150667
-0.145892,0.145892
-0.140218,0.140218
-0.133909,0.133909
-0.126973,0.126973
-0.11946,0.11946
-0.111469,0.111469
-0.102896,0.102896
-0.0939701,0.0939701
-0.0847054,0.0847054
-0.0751977,0.0751977
-0.065455,0.065455
-0.0555593,0.0555593
-0.0455735,0.0455735
-0.0355961,0.0355961
-0.0256485,0.0256485
-0.0158289,0.0158289
-0.00614847,0.00614847
--0.00330073,-0.00330073
--0.0124718,-0.0124718
--0.0213244,-0.0213244
--0.0298084,-0.0298084
--0.0378563,-0.0378563
--0.0454532,-0.0454532
--0.0525575,-0.0525575
--0.0591528,-0.0591528
--0.0652048,-0.0652048
--0.0706331,-0.0706331
--0.0754847,-0.0754847
--0.0797379,-0.0797379
--0.083368,-0.083368
--0.0864183,-0.0864183
--0.0887583,-0.0887583
--0.0905011,-0.0905011
--0.0916437,-0.0916437
--0.0921941,-0.0921941
--0.0921711,-0.0921711
--0.0915155,-0.0915155
--0.0903369,-0.0903369
--0.0886466,-0.0886466
--0.086473,-0.086473
--0.0838602,-0.0838602
--0.0807634,-0.0807634
--0.0772889,-0.0772889
--0.0734738,-0.0734738
--0.069364,-0.069364
--0.0649775,-0.0649775
--0.0603327,-0.0603327
--0.0555037,-0.0555037
--0.0505413,-0.0505413
--0.0454774,-0.0454774
--0.0403574,-0.0403574
--0.0351972,-0.0351972
--0.0300535,-0.0300535
--0.0249789,-0.0249789
--0.0199991,-0.0199991
--0.0151521,-0.0151521
--0.0104547,-0.0104547
--0.00595534,-0.00595534
--0.00167876,-0.00167876
-0.00234928,0.00234928
-0.0061132,0.0061132
-0.00958225,0.00958225
-0.0127459,0.0127459
-0.0155928,0.0155928
-0.01811,0.01811
-0.0202987,0.0202987
-0.0221317,0.0221317
-0.0236268,0.0236268
-0.0247875,0.0247875
-0.0256184,0.0256184
-0.0261317,0.0261317
-0.0263139,0.0263139
-0.026202,0.026202
-0.0258115,0.0258115
-0.0251664,0.0251664
-0.0242734,0.0242734
-0.0231596,0.0231596
-0.0218462,0.0218462
-0.0203738,0.0203738
-0.018761,0.018761
-0.0170429,0.0170429
-0.0152272,0.0152272
-0.0133636,0.0133636
-0.0114783,0.0114783
-0.00960039,0.00960039
-0.00775741,0.00775741
-0.00597345,0.00597345
-0.00428025,0.00428025
-0.00270506,0.00270506
-0.00127072,0.00127072
+0.798902,0.798902
+0.793413,0.793413
+0.78475,0.78475
+0.772937,0.772937
+0.758237,0.758237
+0.74048,0.74048
+0.719909,0.719909
+0.696612,0.696612
+0.67056,0.67056
+0.642006,0.642006
+0.611,0.611
+0.577752,0.577752
+0.542263,0.542263
+0.504898,0.504898
+0.465533,0.465533
+0.424574,0.424574
+0.382102,0.382102
+0.338191,0.338191
+0.293272,0.293272
+0.247275,0.247275
+0.200485,0.200485
+0.153154,0.153154
+0.105293,0.105293
+0.0573502,0.0573502
+0.00930888,0.00930888
+-0.0386088,-0.0386088
+-0.0860659,-0.0860659
+-0.133196,-0.133196
+-0.179293,-0.179293
+-0.224771,-0.224771
+-0.269016,-0.269016
+-0.312049,-0.312049
+-0.353758,-0.353758
+-0.393691,-0.393691
+-0.432071,-0.432071
+-0.468511,-0.468511
+-0.502965,-0.502965
+-0.53526,-0.53526
+-0.565314,-0.565314
+-0.592978,-0.592978
+-0.618208,-0.618208
+-0.64089,-0.64089
+-0.660869,-0.660869
+-0.67824,-0.67824
+-0.692751,-0.692751
+-0.704579,-0.704579
+-0.713388,-0.713388
+-0.71957,-0.71957
+-0.722633,-0.722633
+-0.723012,-0.723012
+-0.720403,-0.720403
+-0.715001,-0.715001
+-0.706801,-0.706801
+-0.695804,-0.695804
+-0.682124,-0.682124
+-0.665806,-0.665806
+-0.646897,-0.646897
+-0.6255,-0.6255
+-0.601786,-0.601786
+-0.5757,-0.5757
+-0.54756,-0.54756
+-0.517249,-0.517249
+-0.48512,-0.48512
+-0.451178,-0.451178
+-0.415578,-0.415578
+-0.378554,-0.378554
+-0.34012,-0.34012
+-0.300565,-0.300565
+-0.25999,-0.25999
+-0.218543,-0.218543
+-0.176427,-0.176427
+-0.133835,-0.133835
+-0.0908513,-0.0908513
+-0.0477436,-0.0477436
+-0.00463628,-0.00463628
+0.0383024,0.0383024
+0.080882,0.080882
+0.122952,0.122952
+0.164347,0.164347
+0.204897,0.204897
+0.244428,0.244428
+0.282829,0.282829
+0.319932,0.319932
+0.355596,0.355596
+0.389654,0.389654
+0.422072,0.422072
+0.452575,0.452575
+0.481223,0.481223
+0.507816,0.507816
+0.532228,0.532228
+0.554458,0.554458
+0.574363,0.574363
+0.591901,0.591901
+0.607045,0.607045
+0.619649,0.619649
+0.629792,0.629792
+0.637364,0.637364
+0.642379,0.642379
+0.644824,0.644824
+0.644709,0.644709
+0.642014,0.642014
+0.636843,0.636843
+0.629141,0.629141
+0.618941,0.618941
+0.606418,0.606418
+0.591491,0.591491
+0.574334,0.574334
+0.554985,0.554985
+0.533478,0.533478
+0.510038,0.510038
+0.484629,0.484629
+0.457492,0.457492
+0.428616,0.428616
+0.398199,0.398199
+0.366394,0.366394
+0.333262,0.333262
+0.298972,0.298972
+0.263709,0.263709
+0.22752,0.22752
+0.190681,0.190681
+0.153219,0.153219
+0.115352,0.115352
+0.0772514,0.0772514
+0.0390077,0.0390077
+0.000832788,0.000832788
+-0.0371738,-0.0371738
+-0.0748318,-0.0748318
+-0.111998,-0.111998
+-0.148508,-0.148508
+-0.184259,-0.184259
+-0.219094,-0.219094
+-0.252849,-0.252849
+-0.285489,-0.285489
+-0.31675,-0.31675
+-0.346651,-0.346651
+-0.374974,-0.374974
+-0.401696,-0.401696
+-0.42666,-0.42666
+-0.449806,-0.449806
+-0.471086,-0.471086
+-0.490283,-0.490283
+-0.507555,-0.507555
+-0.522627,-0.522627
+-0.5356,-0.5356
+-0.54636,-0.54636
+-0.554916,-0.554916
+-0.561159,-0.561159
+-0.565268,-0.565268
+-0.566962,-0.566962
+-0.566529,-0.566529
+-0.563765,-0.563765
+-0.558839,-0.558839
+-0.551711,-0.551711
+-0.542369,-0.542369
+-0.531053,-0.531053
+-0.517575,-0.517575
+-0.502201,-0.502201
+-0.484895,-0.484895
+-0.465734,-0.465734
+-0.444896,-0.444896
+-0.422343,-0.422343
+-0.39832,-0.39832
+-0.372766,-0.372766
+-0.345991,-0.345991
+-0.317851,-0.317851
+-0.288779,-0.288779
+-0.25858,-0.25858
+-0.22763,-0.22763
+-0.195933,-0.195933
+-0.163576,-0.163576
+-0.130874,-0.130874
+-0.0977513,-0.0977513
+-0.06447,-0.06447
+-0.0311506,-0.0311506
+0.00216399,0.00216399
+0.0351765,0.0351765
+0.0679545,0.0679545
+0.100199,0.100199
+0.131877,0.131877
+0.162858,0.162858
+0.192951,0.192951
+0.222189,0.222189
+0.250253,0.250253
+0.277318,0.277318
+0.302894,0.302894
+0.327364,0.327364
+0.350152,0.350152
+0.371593,0.371593
+0.391328,0.391328
+0.409435,0.409435
+0.425755,0.425755
+0.440353,0.440353
+0.453043,0.453043
+0.463923,0.463923
+0.472829,0.472829
+0.47988,0.47988
+0.484882,0.484882
+0.488052,0.488052
+0.489141,0.489141
+0.488361,0.488361
+0.485643,0.485643
+0.480975,0.480975
+0.474474,0.474474
+0.466102,0.466102
+0.455955,0.455955
+0.444026,0.444026
+0.430479,0.430479
+0.415246,0.415246
+0.398502,0.398502
+0.380278,0.380278
+0.360656,0.360656
+0.339725,0.339725
+0.317639,0.317639
+0.294368,0.294368
+0.270109,0.270109
+0.244986,0.244986
+0.218963,0.218963
+0.192336,0.192336
+0.165094,0.165094
+0.137377,0.137377
+0.109301,0.109301
+0.080991,0.080991
+0.0525584,0.0525584
+0.0240765,0.0240765
+-0.00423005,-0.00423005
+-0.0324248,-0.0324248
+-0.0601677,-0.0601677
+-0.0876269,-0.0876269
+-0.114382,-0.114382
+-0.140669,-0.140669
+-0.166042,-0.166042
+-0.190719,-0.190719
+-0.214344,-0.214344
+-0.237021,-0.237021
+-0.258605,-0.258605
+-0.278919,-0.278919
+-0.29809,-0.29809
+-0.315834,-0.315834
+-0.332293,-0.332293
+-0.347207,-0.347207
+-0.360745,-0.360745
+-0.372628,-0.372628
+-0.383091,-0.383091
+-0.39178,-0.39178
+-0.399013,-0.399013
+-0.404448,-0.404448
+-0.40841,-0.40841
+-0.410573,-0.410573
+-0.411172,-0.411172
+-0.410078,-0.410078
+-0.407401,-0.407401
+-0.4031,-0.4031
+-0.397278,-0.397278
+-0.389848,-0.389848
+-0.380994,-0.380994
+-0.370633,-0.370633
+-0.358944,-0.358944
+-0.345855,-0.345855
+-0.331587,-0.331587
+-0.315966,-0.315966
+-0.299371,-0.299371
+-0.281585,-0.281585
+-0.26294,-0.26294
+-0.243301,-0.243301
+-0.22292,-0.22292
+-0.201764,-0.201764
+-0.18001,-0.18001
+-0.157711,-0.157711
+-0.134976,-0.134976
+-0.111854,-0.111854
+-0.088541,-0.088541
+-0.0649771,-0.0649771
+-0.0414742,-0.0414742
+-0.0178634,-0.0178634
+0.00548459,0.00548459
+0.0287467,0.0287467
+0.0515877,0.0515877
+0.0740919,0.0740919
+0.0960852,0.0960852
+0.117514,0.117514
+0.138292,0.138292
+0.158358,0.158358
+0.17756,0.17756
+0.195976,0.195976
+0.213362,0.213362
+0.229823,0.229823
+0.245157,0.245157
+0.259451,0.259451
+0.272493,0.272493
+0.284435,0.284435
+0.295045,0.295045
+0.30446,0.30446
+0.312522,0.312522
+0.319292,0.319292
+0.32472,0.32472
+0.328813,0.328813
+0.331552,0.331552
+0.332938,0.332938
+0.332995,0.332995
+0.331732,0.331732
+0.329124,0.329124
+0.325265,0.325265
+0.320144,0.320144
+0.313758,0.313758
+0.306234,0.306234
+0.297522,0.297522
+0.287718,0.287718
+0.276884,0.276884
+0.265013,0.265013
+0.252228,0.252228
+0.23856,0.23856
+0.224061,0.224061
+0.20884,0.20884
+0.192905,0.192905
+0.176384,0.176384
+0.159313,0.159313
+0.141794,0.141794
+0.123862,0.123862
+0.105654,0.105654
+0.0871762,0.0871762
+0.068567,0.068567
+0.0498827,0.0498827
+0.0311637,0.0311637
+0.0125435,0.0125435
+-0.00593612,-0.00593612
+-0.0242072,-0.0242072
+-0.0421586,-0.0421586
+-0.0597792,-0.0597792
+-0.076948,-0.076948
+-0.0936314,-0.0936314
+-0.109762,-0.109762
+-0.125272,-0.125272
+-0.140104,-0.140104
+-0.15422,-0.15422
+-0.167553,-0.167553
+-0.180077,-0.180077
+-0.191729,-0.191729
+-0.202482,-0.202482
+-0.212304,-0.212304
+-0.221161,-0.221161
+-0.229045,-0.229045
+-0.235892,-0.235892
+-0.24174,-0.24174
+-0.246524,-0.246524
+-0.250294,-0.250294
+-0.252997,-0.252997
+-0.254651,-0.254651
+-0.255278,-0.255278
+-0.254866,-0.254866
+-0.253433,-0.253433
+-0.251011,-0.251011
+-0.247602,-0.247602
+-0.243245,-0.243245
+-0.237967,-0.237967
+-0.231811,-0.231811
+-0.224774,-0.224774
+-0.216953,-0.216953
+-0.208349,-0.208349
+-0.19901,-0.19901
+-0.189013,-0.189013
+-0.178364,-0.178364
+-0.167152,-0.167152
+-0.155419,-0.155419
+-0.143202,-0.143202
+-0.130583,-0.130583
+-0.117612,-0.117612
+-0.10434,-0.10434
+-0.0908255,-0.0908255
+-0.0771412,-0.0771412
+-0.0633172,-0.0633172
+-0.0494608,-0.0494608
+-0.0355725,-0.0355725
+-0.021753,-0.021753
+-0.00803805,-0.00803805
+0.00551747,0.00551747
+0.018835,0.018835
+0.031901,0.031901
+0.0446443,0.0446443
+0.0570109,0.0570109
+0.0689669,0.0689669
+0.0804649,0.0804649
+0.0914562,0.0914562
+0.101922,0.101922
+0.111801,0.111801
+0.121082,0.121082
+0.129723,0.129723
+0.13771,0.13771
+0.145007,0.145007
+0.151594,0.151594
+0.157468,0.157468
+0.162597,0.162597
+0.166996,0.166996
+0.17062,0.17062
+0.173524,0.173524
+0.175636,0.175636
+0.177029,0.177029
+0.177651,0.177651
+0.177562,0.177562
+0.176732,0.176732
+0.175198,0.175198
+0.172994,0.172994
+0.170092,0.170092
+0.166575,0.166575
+0.162428,0.162428
+0.157686,0.157686
+0.152403,0.152403
+0.146577,0.146577
+0.140273,0.140273
+0.133503,0.133503
+0.126319,0.126319
+0.118755,0.118755
+0.110847,0.110847
+0.10265,0.10265
+0.0941806,0.0941806
+0.0855003,0.0855003
+0.0766468,0.0766468
+0.067642,0.067642
+0.0585803,0.0585803
+0.0494222,0.0494222
+0.0402898,0.0402898
+0.03117,0.03117
+0.0221145,0.0221145
+0.013183,0.013183
+0.00437603,0.00437603
+-0.00422933,-0.00422933
+-0.012653,-0.012653
+-0.0207915,-0.0207915
+-0.0286914,-0.0286914
+-0.0362562,-0.0362562
+-0.0435064,-0.0435064
+-0.0503898,-0.0503898
+-0.0568976,-0.0568976
+-0.0630058,-0.0630058
+-0.0686851,-0.0686851
+-0.0739465,-0.0739465
+-0.0787443,-0.0787443
+-0.0830865,-0.0830865
+-0.0869757,-0.0869757
+-0.0903592,-0.0903592
+-0.0933031,-0.0933031
+-0.0957264,-0.0957264
+-0.0977068,-0.0977068
+-0.0991869,-0.0991869
+-0.100209,-0.100209
+-0.100768,-0.100768
+-0.100856,-0.100856
+-0.100529,-0.100529
+-0.0997542,-0.0997542
+-0.0985717,-0.0985717
+-0.096994,-0.096994
+-0.0950353,-0.0950353
+-0.0927235,-0.0927235
+-0.0900813,-0.0900813
+-0.0871051,-0.0871051
+-0.0838645,-0.0838645
+-0.0803416,-0.0803416
+-0.0765903,-0.0765903
+-0.0726158,-0.0726158
+-0.0684602,-0.0684602
+-0.0641443,-0.0641443
+-0.0596952,-0.0596952
+-0.0551424,-0.0551424
+-0.0505035,-0.0505035
+-0.045822,-0.045822
+-0.0411089,-0.0411089
+-0.0364021,-0.0364021
+-0.0317128,-0.0317128
+-0.0270815,-0.0270815
+-0.0225174,-0.0225174
+-0.018055,-0.018055
+-0.013706,-0.013706
+-0.00950638,-0.00950638
+-0.00543947,-0.00543947
+-0.00157895,-0.00157895
+0.002125,0.002125
+0.00559077,0.00559077
+0.00886257,0.00886257
+0.0118956,0.0118956
+0.0146876,0.0146876
+0.0172387,0.0172387
+0.0195281,0.0195281
+0.0215711,0.0215711
+0.0233403,0.0233403
+0.0248642,0.0248642
+0.0261075,0.0261075
+0.0271143,0.0271143
+0.0278471,0.0278471
+0.0283469,0.0283469
+0.0285948,0.0285948
+0.0286136,0.0286136
+0.028411,0.028411
+0.0279951,0.0279951
+0.0273775,0.0273775
+0.0265826,0.0265826
+0.0256051,0.0256051
+0.0244844,0.0244844
+0.0232185,0.0232185
+0.0218323,0.0218323
+0.0203444,0.0203444
+0.0187692,0.0187692
+0.0171292,0.0171292
+0.0154398,0.0154398
+0.013724,0.013724
+0.0119949,0.0119949
+0.0102784,0.0102784
+0.00858733,0.00858733
+0.00694226,0.00694226
+0.00536166,0.00536166
+0.00385998,0.00385998
+0.00245661,0.00245661
+0.0011646,0.0011646
0,0
diff --git a/src/test/golden_buffers/BasicProcessingTestPlay b/src/test/golden_buffers/BasicProcessingTestPlay
index 082a17c721fb..914179cecec1 100644
--- a/src/test/golden_buffers/BasicProcessingTestPlay
+++ b/src/test/golden_buffers/BasicProcessingTestPlay
@@ -1,512 +1,512 @@
0,0
-0.000256421,0.000256421
-0.000766958,0.000766958
-0.00152728,0.00152728
-0.0025273,0.0025273
-0.00376272,0.00376272
-0.00520848,0.00520848
-0.00685897,0.00685897
-0.00869118,0.00869118
-0.0106886,0.0106886
-0.0128263,0.0128263
-0.0150737,0.0150737
-0.0174074,0.0174074
-0.0198062,0.0198062
-0.0222377,0.0222377
-0.0246781,0.0246781
-0.0270689,0.0270689
-0.029405,0.029405
-0.0316524,0.0316524
-0.0337798,0.0337798
-0.0357613,0.0357613
-0.0375304,0.0375304
-0.0390944,0.0390944
-0.0404192,0.0404192
-0.0414855,0.0414855
-0.0422532,0.0422532
-0.0426922,0.0426922
-0.0427889,0.0427889
-0.042542,0.042542
-0.0419271,0.0419271
-0.040936,0.040936
-0.0395249,0.0395249
-0.0377189,0.0377189
-0.0355191,0.0355191
-0.0329127,0.0329127
-0.029926,0.029926
-0.0265049,0.0265049
-0.0227277,0.0227277
-0.0185729,0.0185729
-0.0140733,0.0140733
-0.00924328,0.00924328
-0.00410357,0.00410357
--0.00131682,-0.00131682
--0.00698298,-0.00698298
--0.0128731,-0.0128731
--0.0189293,-0.0189293
--0.0251402,-0.0251402
--0.0314361,-0.0314361
--0.0378062,-0.0378062
--0.0441856,-0.0441856
--0.0505595,-0.0505595
--0.0568082,-0.0568082
--0.0629506,-0.0629506
--0.0689264,-0.0689264
--0.07469,-0.07469
--0.0802084,-0.0802084
--0.0853575,-0.0853575
--0.0901566,-0.0901566
--0.0945664,-0.0945664
--0.0985457,-0.0985457
--0.102055,-0.102055
--0.104967,-0.104967
--0.107341,-0.107341
--0.109129,-0.109129
--0.110318,-0.110318
--0.110863,-0.110863
--0.110677,-0.110677
--0.109818,-0.109818
--0.108269,-0.108269
--0.106017,-0.106017
--0.103084,-0.103084
--0.0993378,-0.0993378
--0.0949253,-0.0949253
--0.0898058,-0.0898058
--0.0840236,-0.0840236
--0.077575,-0.077575
--0.0704368,-0.0704368
--0.0626968,-0.0626968
--0.0543913,-0.0543913
--0.0455448,-0.0455448
--0.0362058,-0.0362058
--0.0263893,-0.0263893
--0.0161832,-0.0161832
--0.00563579,-0.00563579
-0.00521158,0.00521158
-0.0162755,0.0162755
-0.0274967,0.0274967
-0.0388214,0.0388214
-0.0501751,0.0501751
-0.0614891,0.0614891
-0.0727139,0.0727139
-0.0837068,0.0837068
-0.0944441,0.0944441
-0.104878,0.104878
-0.114926,0.114926
-0.12452,0.12452
-0.133504,0.133504
-0.141906,0.141906
-0.149654,0.149654
-0.156712,0.156712
-0.16298,0.16298
-0.168355,0.168355
-0.172827,0.172827
-0.176414,0.176414
-0.179057,0.179057
-0.18071,0.18071
-0.181241,0.181241
-0.180716,0.180716
-0.179167,0.179167
-0.176559,0.176559
-0.172888,0.172888
-0.168038,0.168038
-0.16212,0.16212
-0.155196,0.155196
-0.147244,0.147244
-0.138348,0.138348
-0.128336,0.128336
-0.11748,0.11748
-0.105739,0.105739
-0.0932349,0.0932349
-0.0799069,0.0799069
-0.0659421,0.0659421
-0.0513037,0.0513037
-0.0361585,0.0361585
-0.0205915,0.0205915
-0.00456074,0.00456074
--0.0116496,-0.0116496
--0.0281072,-0.0281072
--0.0446526,-0.0446526
--0.0611803,-0.0611803
--0.077667,-0.077667
--0.0938793,-0.0938793
--0.109805,-0.109805
--0.125344,-0.125344
--0.14044,-0.14044
--0.154906,-0.154906
--0.168681,-0.168681
--0.181627,-0.181627
--0.193764,-0.193764
--0.204991,-0.204991
--0.215217,-0.215217
--0.224193,-0.224193
--0.232061,-0.232061
--0.238701,-0.238701
--0.244108,-0.244108
--0.248199,-0.248199
--0.250775,-0.250775
--0.251957,-0.251957
--0.25175,-0.25175
--0.250096,-0.250096
--0.247075,-0.247075
--0.242332,-0.242332
--0.236249,-0.236249
--0.228722,-0.228722
--0.219814,-0.219814
--0.209575,-0.209575
--0.197805,-0.197805
--0.184837,-0.184837
--0.170642,-0.170642
--0.155299,-0.155299
--0.138909,-0.138909
--0.121408,-0.121408
--0.103014,-0.103014
--0.0838263,-0.0838263
--0.0639282,-0.0639282
--0.0434323,-0.0434323
--0.022372,-0.022372
--0.000986354,-0.000986354
-0.0206863,0.0206863
-0.0424871,0.0424871
-0.0643451,0.0643451
-0.0859987,0.0859987
-0.107469,0.107469
-0.128548,0.128548
-0.14917,0.14917
-0.169198,0.169198
-0.188382,0.188382
-0.206707,0.206707
-0.22409,0.22409
-0.240425,0.240425
-0.255592,0.255592
-0.269296,0.269296
-0.28165,0.28165
-0.292562,0.292562
-0.301956,0.301956
-0.309756,0.309756
-0.315695,0.315695
-0.319904,0.319904
-0.322396,0.322396
-0.323082,0.323082
-0.322025,0.322025
-0.318823,0.318823
-0.313885,0.313885
-0.307108,0.307108
-0.298555,0.298555
-0.288219,0.288219
-0.276006,0.276006
-0.262057,0.262057
-0.246544,0.246544
-0.229529,0.229529
-0.210962,0.210962
-0.190971,0.190971
-0.169667,0.169667
-0.147211,0.147211
-0.12375,0.12375
-0.0992535,0.0992535
-0.0740583,0.0740583
-0.0480598,0.0480598
-0.0216201,0.0216201
--0.00519789,-0.00519789
--0.0322946,-0.0322946
--0.059388,-0.059388
--0.0864472,-0.0864472
--0.113251,-0.113251
--0.13968,-0.13968
--0.165593,-0.165593
--0.1907,-0.1907
--0.214957,-0.214957
--0.238243,-0.238243
--0.260431,-0.260431
--0.281331,-0.281331
--0.300716,-0.300716
--0.318534,-0.318534
--0.33474,-0.33474
--0.3493,-0.3493
--0.361878,-0.361878
--0.372524,-0.372524
--0.380975,-0.380975
--0.387485,-0.387485
--0.391872,-0.391872
--0.394096,-0.394096
--0.393899,-0.393899
--0.391435,-0.391435
--0.386826,-0.386826
--0.379998,-0.379998
--0.371054,-0.371054
--0.359573,-0.359573
--0.346098,-0.346098
--0.330534,-0.330534
--0.313005,-0.313005
--0.293643,-0.293643
--0.272156,-0.272156
--0.249064,-0.249064
--0.224365,-0.224365
--0.198208,-0.198208
--0.170767,-0.170767
--0.141996,-0.141996
--0.112179,-0.112179
--0.0815567,-0.0815567
--0.0501861,-0.0501861
--0.018334,-0.018334
-0.0139844,0.0139844
-0.046382,0.046382
-0.0788293,0.0788293
-0.11106,0.11106
-0.142994,0.142994
-0.174204,0.174204
-0.204732,0.204732
-0.234317,0.234317
-0.262907,0.262907
-0.290129,0.290129
-0.315891,0.315891
-0.339964,0.339964
-0.362396,0.362396
-0.38296,0.38296
-0.40158,0.40158
-0.417774,0.417774
-0.431789,0.431789
-0.443508,0.443508
-0.452807,0.452807
-0.459798,0.459798
-0.463757,0.463757
-0.465292,0.465292
-0.464192,0.464192
-0.460572,0.460572
-0.454284,0.454284
-0.445171,0.445171
-0.433443,0.433443
-0.419288,0.419288
-0.402664,0.402664
-0.383724,0.383724
-0.362167,0.362167
-0.33849,0.33849
-0.312774,0.312774
-0.285087,0.285087
-0.255769,0.255769
-0.224384,0.224384
-0.191747,0.191747
-0.157724,0.157724
-0.122647,0.122647
-0.0865573,0.0865573
-0.0497553,0.0497553
-0.0123863,0.0123863
--0.0252838,-0.0252838
--0.0630886,-0.0630886
--0.100763,-0.100763
--0.138169,-0.138169
--0.174936,-0.174936
--0.211016,-0.211016
--0.246212,-0.246212
--0.280196,-0.280196
--0.312757,-0.312757
--0.343697,-0.343697
--0.372962,-0.372962
--0.400375,-0.400375
--0.425752,-0.425752
--0.448568,-0.448568
--0.469086,-0.469086
--0.487132,-0.487132
--0.502537,-0.502537
--0.515415,-0.515415
--0.524901,-0.524901
--0.531726,-0.531726
--0.535522,-0.535522
--0.536522,-0.536522
--0.534296,-0.534296
--0.529012,-0.529012
--0.52052,-0.52052
--0.50921,-0.50921
--0.494957,-0.494957
--0.477926,-0.477926
--0.457668,-0.457668
--0.434857,-0.434857
--0.409449,-0.409449
--0.381625,-0.381625
--0.351516,-0.351516
--0.31896,-0.31896
--0.284514,-0.284514
--0.24823,-0.24823
--0.210417,-0.210417
--0.171051,-0.171051
--0.130537,-0.130537
--0.0889773,-0.0889773
--0.0467012,-0.0467012
--0.00392931,-0.00392931
-0.0392431,0.0392431
-0.0822503,0.0822503
-0.125192,0.125192
-0.16759,0.16759
-0.209423,0.209423
-0.250168,0.250168
-0.289837,0.289837
-0.327922,0.327922
-0.364485,0.364485
-0.399226,0.399226
-0.432031,0.432031
-0.462172,0.462172
-0.490056,0.490056
-0.51532,0.51532
-0.537833,0.537833
-0.557668,0.557668
-0.573895,0.573895
-0.587172,0.587172
-0.597229,0.597229
-0.603982,0.603982
-0.60763,0.60763
-0.607203,0.607203
-0.603581,0.603581
-0.596573,0.596573
-0.586151,0.586151
-0.572615,0.572615
-0.555099,0.555099
-0.534673,0.534673
-0.51108,0.51108
-0.484482,0.484482
-0.455192,0.455192
-0.42271,0.42271
-0.3878,0.3878
-0.350558,0.350558
-0.311195,0.311195
-0.269783,0.269783
-0.226575,0.226575
-0.181804,0.181804
-0.135866,0.135866
-0.0887893,0.0887893
-0.0411954,0.0411954
--0.0071671,-0.0071671
--0.055596,-0.055596
--0.104018,-0.104018
--0.152058,-0.152058
--0.199645,-0.199645
--0.246081,-0.246081
--0.291507,-0.291507
--0.335465,-0.335465
--0.377886,-0.377886
--0.41835,-0.41835
--0.456464,-0.456464
--0.492239,-0.492239
--0.525446,-0.525446
--0.555904,-0.555904
--0.583471,-0.583471
--0.607579,-0.607579
--0.628307,-0.628307
--0.645757,-0.645757
--0.659698,-0.659698
--0.670103,-0.670103
--0.67624,-0.67624
--0.678783,-0.678783
--0.677543,-0.677543
--0.67247,-0.67247
--0.663839,-0.663839
--0.650782,-0.650782
--0.634182,-0.634182
--0.613963,-0.613963
--0.590224,-0.590224
--0.563194,-0.563194
--0.532341,-0.532341
--0.498502,-0.498502
--0.461686,-0.461686
--0.422211,-0.422211
--0.38013,-0.38013
--0.335438,-0.335438
--0.288758,-0.288758
--0.240201,-0.240201
--0.190118,-0.190118
--0.138659,-0.138659
--0.0861594,-0.0861594
--0.0329095,-0.0329095
-0.0207748,0.0207748
-0.0745913,0.0745913
-0.128324,0.128324
-0.181403,0.181403
-0.233803,0.233803
-0.285133,0.285133
-0.335055,0.335055
-0.383578,0.383578
-0.42965,0.42965
-0.473745,0.473745
-0.515371,0.515371
-0.554263,0.554263
-0.590466,0.590466
-0.622942,0.622942
-0.652201,0.652201
-0.677949,0.677949
-0.700184,0.700184
-0.718432,0.718432
-0.7325,0.7325
-0.7424,0.7424
-0.748348,0.748348
-0.750064,0.750064
-0.747858,0.747858
-0.740691,0.740691
-0.72955,0.72955
-0.71427,0.71427
-0.695009,0.695009
-0.671787,0.671787
-0.644233,0.644233
-0.613021,0.613021
-0.578312,0.578312
-0.540109,0.540109
-0.499044,0.499044
-0.454263,0.454263
-0.407079,0.407079
-0.357313,0.357313
-0.305397,0.305397
-0.251501,0.251501
-0.195864,0.195864
-0.138806,0.138806
-0.0808575,0.0808575
-0.0221341,0.0221341
--0.0369444,-0.0369444
--0.0961682,-0.0961682
--0.154925,-0.154925
--0.213167,-0.213167
--0.270478,-0.270478
--0.32661,-0.32661
--0.38082,-0.38082
--0.433223,-0.433223
--0.48341,-0.48341
--0.531195,-0.531195
--0.576183,-0.576183
--0.617838,-0.617838
--0.656173,-0.656173
--0.691072,-0.691072
--0.722291,-0.722291
--0.749636,-0.749636
--0.772464,-0.772464
--0.791037,-0.791037
--0.80534,-0.80534
--0.815221,-0.815221
--0.820795,-0.820795
--0.820989,-0.820989
--0.816831,-0.816831
--0.808068,-0.808068
--0.794796,-0.794796
--0.777218,-0.777218
--0.75443,-0.75443
--0.727576,-0.727576
--0.696519,-0.696519
--0.661565,-0.661565
--0.622641,-0.622641
--0.579848,-0.579848
--0.533526,-0.533526
--0.484168,-0.484168
--0.431911,-0.431911
--0.376989,-0.376989
--0.319554,-0.319554
--0.260089,-0.260089
--0.198959,-0.198959
--0.136521,-0.136521
--0.0729288,-0.0729288
--0.00884278,-0.00884278
-0.0557284,0.0557284
-0.120136,0.120136
-0.184168,0.184168
-0.247488,0.247488
-0.309435,0.309435
-0.369972,0.369972
-0.428656,0.428656
-0.485211,0.485211
-0.539321,0.539321
-0.590322,0.590322
+0.000196912,0.000196912
+0.000589817,0.000589817
+0.00117495,0.00117495
+0.00195118,0.00195118
+0.0029058,0.0029058
+0.00404226,0.00404226
+0.00534023,0.00534023
+0.00679857,0.00679857
+0.00840231,0.00840231
+0.0101355,0.0101355
+0.0119923,0.0119923
+0.0139496,0.0139496
+0.0159987,0.0159987
+0.0181145,0.0181145
+0.0202873,0.0202873
+0.0224944,0.0224944
+0.0247158,0.0247158
+0.0269376,0.0269376
+0.0291314,0.0291314
+0.0312867,0.0312867
+0.0333742,0.0333742
+0.0353831,0.0353831
+0.0372828,0.0372828
+0.0390637,0.0390637
+0.0406966,0.0406966
+0.0421731,0.0421731
+0.0434664,0.0434664
+0.0445633,0.0445633
+0.0454498,0.0454498
+0.0460957,0.0460957
+0.0465123,0.0465123
+0.0466591,0.0466591
+0.0465441,0.0465441
+0.046148,0.046148
+0.0454602,0.0454602
+0.0444789,0.0444789
+0.0431947,0.0431947
+0.0416029,0.0416029
+0.0397033,0.0397033
+0.0374978,0.0374978
+0.0349735,0.0349735
+0.0321594,0.0321594
+0.0290255,0.0290255
+0.0256222,0.0256222
+0.0219117,0.0219117
+0.0179401,0.0179401
+0.0137007,0.0137007
+0.00921612,0.00921612
+0.00450122,0.00450122
+-0.000430062,-0.000430062
+-0.00556252,-0.00556252
+-0.0108565,-0.0108565
+-0.0163168,-0.0163168
+-0.0218882,-0.0218882
+-0.0275831,-0.0275831
+-0.0333386,-0.0333386
+-0.0391576,-0.0391576
+-0.0449935,-0.0449935
+-0.050817,-0.050817
+-0.0566173,-0.0566173
+-0.0623399,-0.0623399
+-0.0679776,-0.0679776
+-0.0734772,-0.0734772
+-0.078832,-0.078832
+-0.0839856,-0.0839856
+-0.0889336,-0.0889336
+-0.0936266,-0.0936266
+-0.0980409,-0.0980409
+-0.102157,-0.102157
+-0.105929,-0.105929
+-0.109352,-0.109352
+-0.112383,-0.112383
+-0.115003,-0.115003
+-0.117198,-0.117198
+-0.11893,-0.11893
+-0.120198,-0.120198
+-0.120973,-0.120973
+-0.121236,-0.121236
+-0.120991,-0.120991
+-0.120214,-0.120214
+-0.118894,-0.118894
+-0.117031,-0.117031
+-0.114618,-0.114618
+-0.111659,-0.111659
+-0.108143,-0.108143
+-0.104097,-0.104097
+-0.0994884,-0.0994884
+-0.0943735,-0.0943735
+-0.0887272,-0.0887272
+-0.0825767,-0.0825767
+-0.0759414,-0.0759414
+-0.0688368,-0.0688368
+-0.0612883,-0.0612883
+-0.0533211,-0.0533211
+-0.04495,-0.04495
+-0.0362186,-0.0362186
+-0.0271527,-0.0271527
+-0.0177855,-0.0177855
+-0.00815196,-0.00815196
+0.00170941,0.00170941
+0.0117688,0.0117688
+0.0219607,0.0219607
+0.0322793,0.0322793
+0.0426523,0.0426523
+0.0530409,0.0530409
+0.0634312,0.0634312
+0.0737189,0.0737189
+0.0839171,0.0839171
+0.0939397,0.0939397
+0.10376,0.10376
+0.113336,0.113336
+0.1226,0.1226
+0.131528,0.131528
+0.14006,0.14006
+0.14817,0.14817
+0.155806,0.155806
+0.162922,0.162922
+0.169495,0.169495
+0.175468,0.175468
+0.180822,0.180822
+0.18552,0.18552
+0.189521,0.189521
+0.192817,0.192817
+0.195366,0.195366
+0.19715,0.19715
+0.198157,0.198157
+0.198354,0.198354
+0.197742,0.197742
+0.196313,0.196313
+0.194047,0.194047
+0.190956,0.190956
+0.187037,0.187037
+0.182273,0.182273
+0.176703,0.176703
+0.17033,0.17033
+0.163148,0.163148
+0.155218,0.155218
+0.146511,0.146511
+0.137083,0.137083
+0.126976,0.126976
+0.11618,0.11618
+0.104785,0.104785
+0.0927682,0.0927682
+0.0802337,0.0802337
+0.0671699,0.0671699
+0.0536884,0.0536884
+0.0397644,0.0397644
+0.0255196,0.0255196
+0.0109527,0.0109527
+-0.003838,-0.003838
+-0.0188236,-0.0188236
+-0.0339,-0.0339
+-0.049081,-0.049081
+-0.064228,-0.064228
+-0.0793178,-0.0793178
+-0.0942969,-0.0942969
+-0.109056,-0.109056
+-0.123591,-0.123591
+-0.137772,-0.137772
+-0.151608,-0.151608
+-0.164967,-0.164967
+-0.177859,-0.177859
+-0.190152,-0.190152
+-0.201851,-0.201851
+-0.21285,-0.21285
+-0.223139,-0.223139
+-0.232646,-0.232646
+-0.241298,-0.241298
+-0.249121,-0.249121
+-0.255978,-0.255978
+-0.261907,-0.261907
+-0.266843,-0.266843
+-0.27074,-0.27074
+-0.273604,-0.273604
+-0.27538,-0.27538
+-0.276073,-0.276073
+-0.275655,-0.275655
+-0.274093,-0.274093
+-0.271455,-0.271455
+-0.267624,-0.267624
+-0.262727,-0.262727
+-0.256679,-0.256679
+-0.249545,-0.249545
+-0.241312,-0.241312
+-0.232036,-0.232036
+-0.221676,-0.221676
+-0.210372,-0.210372
+-0.198037,-0.198037
+-0.184825,-0.184825
+-0.170683,-0.170683
+-0.155729,-0.155729
+-0.139987,-0.139987
+-0.123497,-0.123497
+-0.106366,-0.106366
+-0.0886068,-0.0886068
+-0.0703205,-0.0703205
+-0.0515716,-0.0515716
+-0.0323849,-0.0323849
+-0.0129331,-0.0129331
+0.00682541,0.00682541
+0.0267113,0.0267113
+0.0467009,0.0467009
+0.0667213,0.0667213
+0.0866205,0.0866205
+0.106434,0.106434
+0.12595,0.12595
+0.145183,0.145183
+0.164007,0.164007
+0.182354,0.182354
+0.200155,0.200155
+0.217282,0.217282
+0.233756,0.233756
+0.24938,0.24938
+0.264204,0.264204
+0.278076,0.278076
+0.290955,0.290955
+0.302803,0.302803
+0.31352,0.31352
+0.3231,0.3231
+0.33145,0.33145
+0.338538,0.338538
+0.34436,0.34436
+0.348815,0.348815
+0.351934,0.351934
+0.353669,0.353669
+0.353962,0.353962
+0.352901,0.352901
+0.350316,0.350316
+0.346437,0.346437
+0.340969,0.340969
+0.334246,0.334246
+0.326017,0.326017
+0.316422,0.316422
+0.305552,0.305552
+0.293213,0.293213
+0.279776,0.279776
+0.264918,0.264918
+0.24905,0.24905
+0.231885,0.231885
+0.213767,0.213767
+0.194593,0.194593
+0.174458,0.174458
+0.153485,0.153485
+0.131756,0.131756
+0.109195,0.109195
+0.0862275,0.0862275
+0.0624663,0.0624663
+0.038501,0.038501
+0.0139991,0.0139991
+-0.0106129,-0.0106129
+-0.0354806,-0.0354806
+-0.0603177,-0.0603177
+-0.0852237,-0.0852237
+-0.109836,-0.109836
+-0.134353,-0.134353
+-0.158411,-0.158411
+-0.182074,-0.182074
+-0.205193,-0.205193
+-0.227627,-0.227627
+-0.249399,-0.249399
+-0.270248,-0.270248
+-0.290255,-0.290255
+-0.309173,-0.309173
+-0.327094,-0.327094
+-0.343741,-0.343741
+-0.359231,-0.359231
+-0.373282,-0.373282
+-0.386112,-0.386112
+-0.397265,-0.397265
+-0.407193,-0.407193
+-0.415269,-0.415269
+-0.421987,-0.421987
+-0.426904,-0.426904
+-0.430239,-0.430239
+-0.431826,-0.431826
+-0.431766,-0.431766
+-0.429837,-0.429837
+-0.426382,-0.426382
+-0.420986,-0.420986
+-0.414004,-0.414004
+-0.405305,-0.405305
+-0.394835,-0.394835
+-0.382822,-0.382822
+-0.369123,-0.369123
+-0.353862,-0.353862
+-0.337088,-0.337088
+-0.318888,-0.318888
+-0.299199,-0.299199
+-0.278281,-0.278281
+-0.255984,-0.255984
+-0.232632,-0.232632
+-0.208094,-0.208094
+-0.182636,-0.182636
+-0.156241,-0.156241
+-0.128983,-0.128983
+-0.101144,-0.101144
+-0.0726128,-0.0726128
+-0.0436413,-0.0436413
+-0.0143194,-0.0143194
+0.0153227,0.0153227
+0.0450098,0.0450098
+0.0747964,0.0747964
+0.104434,0.104434
+0.133853,0.133853
+0.162964,0.162964
+0.191561,0.191561
+0.219619,0.219619
+0.246997,0.246997
+0.273493,0.273493
+0.299178,0.299178
+0.323706,0.323706
+0.347222,0.347222
+0.369394,0.369394
+0.39032,0.39032
+0.409772,0.409772
+0.427722,0.427722
+0.444081,0.444081
+0.458764,0.458764
+0.471728,0.471728
+0.482844,0.482844
+0.492166,0.492166
+0.499508,0.499508
+0.504995,0.504995
+0.508397,0.508397
+0.50988,0.50988
+0.509254,0.509254
+0.506662,0.506662
+0.502014,0.502014
+0.495303,0.495303
+0.486625,0.486625
+0.475892,0.475892
+0.463241,0.463241
+0.448669,0.448669
+0.432186,0.432186
+0.41391,0.41391
+0.39385,0.39385
+0.372116,0.372116
+0.348754,0.348754
+0.323881,0.323881
+0.297553,0.297553
+0.269921,0.269921
+0.240961,0.240961
+0.210986,0.210986
+0.179899,0.179899
+0.147973,0.147973
+0.115254,0.115254
+0.0818653,0.0818653
+0.0480013,0.0480013
+0.013712,0.013712
+-0.0208158,-0.0208158
+-0.0554474,-0.0554474
+-0.0900573,-0.0900573
+-0.124522,-0.124522
+-0.158674,-0.158674
+-0.192376,-0.192376
+-0.225538,-0.225538
+-0.257911,-0.257911
+-0.289528,-0.289528
+-0.320105,-0.320105
+-0.349615,-0.349615
+-0.377859,-0.377859
+-0.404773,-0.404773
+-0.430216,-0.430216
+-0.45411,-0.45411
+-0.476282,-0.476282
+-0.496709,-0.496709
+-0.515248,-0.515248
+-0.531848,-0.531848
+-0.546419,-0.546419
+-0.558883,-0.558883
+-0.56919,-0.56919
+-0.577267,-0.577267
+-0.583145,-0.583145
+-0.586641,-0.586641
+-0.587916,-0.587916
+-0.586773,-0.586773
+-0.58332,-0.58332
+-0.577542,-0.577542
+-0.569389,-0.569389
+-0.558976,-0.558976
+-0.546229,-0.546229
+-0.531288,-0.531288
+-0.514109,-0.514109
+-0.494804,-0.494804
+-0.47346,-0.47346
+-0.450081,-0.450081
+-0.424795,-0.424795
+-0.397702,-0.397702
+-0.36886,-0.36886
+-0.338404,-0.338404
+-0.306499,-0.306499
+-0.273128,-0.273128
+-0.238556,-0.238556
+-0.202816,-0.202816
+-0.166105,-0.166105
+-0.128568,-0.128568
+-0.090304,-0.090304
+-0.0514938,-0.0514938
+-0.0123029,-0.0123029
+0.0271954,0.0271954
+0.0667074,0.0667074
+0.106188,0.106188
+0.145462,0.145462
+0.184285,0.184285
+0.222658,0.222658
+0.260227,0.260227
+0.297055,0.297055
+0.332797,0.332797
+0.367457,0.367457
+0.400763,0.400763
+0.432647,0.432647
+0.463023,0.463023
+0.491593,0.491593
+0.518491,0.518491
+0.543294,0.543294
+0.566197,0.566197
+0.586841,0.586841
+0.60534,0.60534
+0.621441,0.621441
+0.635225,0.635225
+0.646452,0.646452
+0.655254,0.655254
+0.661383,0.661383
+0.665048,0.665048
+0.665952,0.665952
+0.664283,0.664283
+0.659914,0.659914
+0.652976,0.652976
+0.643289,0.643289
+0.631149,0.631149
+0.616241,0.616241
+0.599042,0.599042
+0.579152,0.579152
+0.557074,0.557074
+0.5325,0.5325
+0.505824,0.505824
+0.47694,0.47694
+0.446022,0.446022
+0.413236,0.413236
+0.378618,0.378618
+0.342383,0.342383
+0.304533,0.304533
+0.265387,0.265387
+0.224981,0.224981
+0.183436,0.183436
+0.141122,0.141122
+0.0978361,0.0978361
+0.0542114,0.0542114
+0.00999775,0.00999775
+-0.0343686,-0.0343686
+-0.0788498,-0.0788498
+-0.123189,-0.123189
+-0.167181,-0.167181
+-0.210812,-0.210812
+-0.253683,-0.253683
+-0.295806,-0.295806
+-0.336976,-0.336976
+-0.376837,-0.376837
+-0.415548,-0.415548
+-0.452638,-0.452638
+-0.488134,-0.488134
+-0.521934,-0.521934
+-0.553627,-0.553627
+-0.583436,-0.583436
+-0.610902,-0.610902
+-0.636115,-0.636115
+-0.659019,-0.659019
+-0.679123,-0.679123
+-0.696975,-0.696975
+-0.71179,-0.71179
+-0.724046,-0.724046
+-0.733437,-0.733437
+-0.739842,-0.739842
+-0.743543,-0.743543
+-0.744047,-0.744047
+-0.741865,-0.741865
+-0.736426,-0.736426
+-0.728321,-0.728321
+-0.717079,-0.717079
+-0.703049,-0.703049
+-0.686124,-0.686124
+-0.666407,-0.666407
+-0.643919,-0.643919
+-0.618891,-0.618891
+-0.591162,-0.591162
+-0.561006,-0.561006
+-0.528624,-0.528624
+-0.493736,-0.493736
+-0.457038,-0.457038
+-0.418195,-0.418195
+-0.377515,-0.377515
+-0.335347,-0.335347
+-0.29141,-0.29141
+-0.246375,-0.246375
+-0.200057,-0.200057
+-0.152735,-0.152735
+-0.104706,-0.104706
+-0.0559716,-0.0559716
+-0.00694585,-0.00694585
+0.0424866,0.0424866
+0.0917853,0.0917853
+0.141034,0.141034
+0.189782,0.189782
+0.238135,0.238135
+0.285557,0.285557
+0.332232,0.332232
+0.37751,0.37751
+0.421773,0.421773
+0.4642,0.4642
+0.505306,0.505306
+0.544168,0.544168
diff --git a/src/test/golden_buffers/BasicProcessingTestPlaying b/src/test/golden_buffers/BasicProcessingTestPlaying
index c9183e5790dd..fecc993b05e6 100644
--- a/src/test/golden_buffers/BasicProcessingTestPlaying
+++ b/src/test/golden_buffers/BasicProcessingTestPlaying
@@ -1,512 +1,512 @@
-0.63688,0.63688
-0.680038,0.680038
-0.719396,0.719396
-0.754834,0.754834
-0.785533,0.785533
-0.811891,0.811891
-0.83379,0.83379
-0.851123,0.851123
-0.863662,0.863662
-0.870995,0.870995
-0.873342,0.873342
-0.870982,0.870982
-0.863835,0.863835
-0.851795,0.851795
-0.834596,0.834596
-0.81273,0.81273
-0.786391,0.786391
-0.755713,0.755713
-0.720901,0.720901
-0.681516,0.681516
-0.638451,0.638451
-0.591853,0.591853
-0.541962,0.541962
-0.489177,0.489177
-0.433153,0.433153
-0.374916,0.374916
-0.314518,0.314518
-0.252548,0.252548
-0.188824,0.188824
-0.124373,0.124373
-0.0588961,0.0588961
--0.00672108,-0.00672108
--0.0723182,-0.0723182
--0.137662,-0.137662
--0.201993,-0.201993
--0.26527,-0.26527
--0.327027,-0.327027
--0.387104,-0.387104
--0.444915,-0.444915
--0.500046,-0.500046
--0.552377,-0.552377
--0.601654,-0.601654
--0.647666,-0.647666
--0.690037,-0.690037
--0.728182,-0.728182
--0.762247,-0.762247
--0.792166,-0.792166
--0.817644,-0.817644
--0.83873,-0.83873
--0.854476,-0.854476
--0.865582,-0.865582
--0.871862,-0.871862
--0.873368,-0.873368
--0.870095,-0.870095
--0.861322,-0.861322
--0.847869,-0.847869
--0.82967,-0.82967
--0.806964,-0.806964
--0.779865,-0.779865
--0.74768,-0.74768
--0.711615,-0.711615
--0.671516,-0.671516
--0.627678,-0.627678
--0.580606,-0.580606
--0.529529,-0.529529
--0.475851,-0.475851
--0.419453,-0.419453
--0.360656,-0.360656
--0.300119,-0.300119
--0.237361,-0.237361
--0.173564,-0.173564
--0.108727,-0.108727
--0.04325,-0.04325
-0.0224007,0.0224007
-0.0879443,0.0879443
-0.153008,0.153008
-0.217205,0.217205
-0.280189,0.280189
-0.341753,0.341753
-0.400984,0.400984
-0.458194,0.458194
-0.512752,0.512752
-0.564496,0.564496
-0.613274,0.613274
-0.657992,0.657992
-0.699297,0.699297
-0.736595,0.736595
-0.769913,0.769913
-0.798999,0.798999
-0.823044,0.823044
-0.842577,0.842577
-0.857496,0.857496
-0.867615,0.867615
-0.873095,0.873095
-0.872948,0.872948
-0.868108,0.868108
-0.858469,0.858469
-0.844002,0.844002
-0.825163,0.825163
-0.800771,0.800771
-0.772278,0.772278
-0.73938,0.73938
-0.702475,0.702475
-0.661736,0.661736
-0.616692,0.616692
-0.568427,0.568427
-0.516969,0.516969
-0.462692,0.462692
-0.405714,0.405714
-0.346463,0.346463
-0.285079,0.285079
-0.222262,0.222262
-0.158171,0.158171
-0.0931609,0.0931609
-0.0276506,0.0276506
--0.0380663,-0.0380663
--0.103584,-0.103584
--0.168341,-0.168341
--0.232591,-0.232591
--0.294968,-0.294968
--0.355912,-0.355912
--0.41485,-0.41485
--0.471487,-0.471487
--0.525678,-0.525678
--0.576342,-0.576342
--0.624007,-0.624007
--0.668165,-0.668165
--0.70863,-0.70863
--0.745268,-0.745268
--0.77722,-0.77722
--0.804792,-0.804792
--0.828071,-0.828071
--0.846657,-0.846657
--0.860796,-0.860796
--0.869288,-0.869288
--0.873142,-0.873142
--0.872141,-0.872141
--0.866395,-0.866395
--0.855829,-0.855829
--0.839889,-0.839889
--0.81937,-0.81937
--0.794311,-0.794311
--0.764925,-0.764925
--0.7313,-0.7313
--0.693009,-0.693009
--0.65105,-0.65105
--0.605432,-0.605432
--0.556474,-0.556474
--0.50451,-0.50451
--0.449292,-0.449292
--0.391682,-0.391682
--0.331884,-0.331884
--0.270246,-0.270246
--0.207223,-0.207223
--0.142686,-0.142686
--0.0775552,-0.0775552
--0.0119775,-0.0119775
-0.0538328,0.0538328
-0.118963,0.118963
-0.18392,0.18392
-0.247357,0.247357
-0.309695,0.309695
-0.370239,0.370239
-0.428749,0.428749
-0.48464,0.48464
-0.537785,0.537785
-0.588022,0.588022
-0.634927,0.634927
-0.678504,0.678504
-0.717683,0.717683
-0.752988,0.752988
-0.784086,0.784086
-0.810952,0.810952
-0.833264,0.833264
-0.850416,0.850416
-0.862882,0.862882
-0.870582,0.870582
-0.873462,0.873462
-0.871661,0.871661
-0.864195,0.864195
-0.852155,0.852155
-0.835316,0.835316
-0.813944,0.813944
-0.788031,0.788031
-0.757219,0.757219
-0.72226,0.72226
-0.683282,0.683282
-0.640551,0.640551
-0.594306,0.594306
-0.544375,0.544375
-0.491337,0.491337
-0.435699,0.435699
-0.377675,0.377675
-0.317451,0.317451
-0.255354,0.255354
-0.191796,0.191796
-0.127159,0.127159
-0.0620021,0.0620021
--0.00383483,-0.00383483
--0.0693184,-0.0693184
--0.13461,-0.13461
--0.199087,-0.199087
--0.262457,-0.262457
--0.324421,-0.324421
--0.384384,-0.384384
--0.442169,-0.442169
--0.497506,-0.497506
--0.550184,-0.550184
--0.599708,-0.599708
--0.645659,-0.645659
--0.687911,-0.687911
--0.726409,-0.726409
--0.760887,-0.760887
--0.791299,-0.791299
--0.816598,-0.816598
--0.837477,-0.837477
--0.853736,-0.853736
--0.865296,-0.865296
--0.872095,-0.872095
--0.873435,-0.873435
--0.869942,-0.869942
--0.861682,-0.861682
--0.848709,-0.848709
--0.830929,-0.830929
--0.80817,-0.80817
--0.780758,-0.780758
--0.749159,-0.749159
--0.713427,-0.713427
--0.673703,-0.673703
--0.629811,-0.629811
--0.582453,-0.582453
--0.531915,-0.531915
--0.47833,-0.47833
--0.42238,-0.42238
--0.363355,-0.363355
--0.302719,-0.302719
--0.240261,-0.240261
--0.176463,-0.176463
--0.111793,-0.111793
--0.0462223,-0.0462223
-0.0193872,0.0193872
-0.0849849,0.0849849
-0.150089,0.150089
-0.214425,0.214425
-0.277337,0.277337
-0.338826,0.338826
-0.398284,0.398284
-0.455789,0.455789
-0.510346,0.510346
-0.562397,0.562397
-0.610714,0.610714
-0.656012,0.656012
-0.697571,0.697571
-0.735302,0.735302
-0.768541,0.768541
-0.797379,0.797379
-0.821918,0.821918
-0.841917,0.841917
-0.857329,0.857329
-0.867295,0.867295
-0.872522,0.872522
-0.872921,0.872921
-0.868548,0.868548
-0.859462,0.859462
-0.844789,0.844789
-0.825657,0.825657
-0.801917,0.801917
-0.773731,0.773731
-0.7413,0.7413
-0.704307,0.704307
-0.663297,0.663297
-0.618738,0.618738
-0.570793,0.570793
-0.519542,0.519542
-0.465251,0.465251
-0.408241,0.408241
-0.349103,0.349103
-0.287918,0.287918
-0.225288,0.225288
-0.161111,0.161111
-0.0961011,0.0961011
-0.0306033,0.0306033
--0.0350611,-0.0350611
--0.100664,-0.100664
--0.165488,-0.165488
--0.229498,-0.229498
--0.292096,-0.292096
--0.353334,-0.353334
--0.412283,-0.412283
--0.469068,-0.469068
--0.522918,-0.522918
--0.574076,-0.574076
--0.621981,-0.621981
--0.666605,-0.666605
--0.706857,-0.706857
--0.743348,-0.743348
--0.775707,-0.775707
--0.803799,-0.803799
--0.827464,-0.827464
--0.845977,-0.845977
--0.859776,-0.859776
--0.868895,-0.868895
--0.873202,-0.873202
--0.872695,-0.872695
--0.866775,-0.866775
--0.856015,-0.856015
--0.840556,-0.840556
--0.820583,-0.820583
--0.795864,-0.795864
--0.766378,-0.766378
--0.732554,-0.732554
--0.694775,-0.694775
--0.653096,-0.653096
--0.607872,-0.607872
--0.558807,-0.558807
--0.50669,-0.50669
--0.451752,-0.451752
--0.394474,-0.394474
--0.334684,-0.334684
--0.273172,-0.273172
--0.209936,-0.209936
--0.145698,-0.145698
--0.0804338,-0.0804338
--0.0150643,-0.0150643
-0.0508201,0.0508201
-0.116085,0.116085
-0.180861,0.180861
-0.244592,0.244592
-0.307021,0.307021
-0.367559,0.367559
-0.425931,0.425931
-0.482067,0.482067
-0.535545,0.535545
-0.586075,0.586075
-0.63288,0.63288
-0.676252,0.676252
-0.71591,0.71591
-0.751535,0.751535
-0.783233,0.783233
-0.809738,0.809738
-0.832018,0.832018
-0.849576,0.849576
-0.862602,0.862602
-0.870628,0.870628
-0.873541,0.873541
-0.871355,0.871355
-0.864555,0.864555
-0.852875,0.852875
-0.836629,0.836629
-0.814996,0.814996
-0.788971,0.788971
-0.758592,0.758592
-0.72402,0.72402
-0.685435,0.685435
-0.642617,0.642617
-0.596218,0.596218
-0.546581,0.546581
-0.493889,0.493889
-0.438546,0.438546
-0.380288,0.380288
-0.320143,0.320143
-0.258127,0.258127
-0.194769,0.194769
-0.130159,0.130159
-0.0649281,0.0649281
--0.000749648,-0.000749648
--0.0663457,-0.0663457
--0.131784,-0.131784
--0.196126,-0.196126
--0.259644,-0.259644
--0.321482,-0.321482
--0.381678,-0.381678
--0.439623,-0.439623
--0.495313,-0.495313
--0.547818,-0.547818
--0.597323,-0.597323
--0.64352,-0.64352
--0.686171,-0.686171
--0.725069,-0.725069
--0.759474,-0.759474
--0.789593,-0.789593
--0.815391,-0.815391
--0.836844,-0.836844
--0.853329,-0.853329
--0.864975,-0.864975
--0.871455,-0.871455
--0.873335,-0.873335
--0.870321,-0.870321
--0.862595,-0.862595
--0.849375,-0.849375
--0.831536,-0.831536
--0.809137,-0.809137
--0.782178,-0.782178
--0.751133,-0.751133
--0.71508,-0.71508
--0.675348,-0.675348
--0.631751,-0.631751
--0.584792,-0.584792
--0.534442,-0.534442
--0.480937,-0.480937
--0.424645,-0.424645
--0.366109,-0.366109
--0.305537,-0.305537
--0.243188,-0.243188
--0.17945,-0.17945
--0.114625,-0.114625
--0.0492492,-0.0492492
-0.016442,0.016442
-0.0820314,0.0820314
-0.147149,0.147149
-0.211414,0.211414
-0.27449,0.27449
-0.336114,0.336114
-0.395784,0.395784
-0.453195,0.453195
-0.507873,0.507873
-0.55987,0.55987
-0.608735,0.608735
-0.654339,0.654339
-0.695777,0.695777
-0.733376,0.733376
-0.766914,0.766914
-0.796366,0.796366
-0.821231,0.821231
-0.841144,0.841144
-0.856316,0.856316
-0.866795,0.866795
-0.872528,0.872528
-0.873428,0.873428
-0.868855,0.868855
-0.859562,0.859562
-0.845422,0.845422
-0.826783,0.826783
-0.803363,0.803363
-0.775204,0.775204
-0.742527,0.742527
-0.705928,0.705928
-0.665302,0.665302
-0.62127,0.62127
-0.572938,0.572938
-0.521796,0.521796
-0.467658,0.467658
-0.410926,0.410926
-0.352048,0.352048
-0.29073,0.29073
-0.228055,0.228055
-0.163997,0.163997
-0.099093,0.099093
-0.0335952,0.0335952
--0.0320826,-0.0320826
--0.0976104,-0.0976104
--0.162568,-0.162568
--0.226606,-0.226606
--0.28949,-0.28949
--0.350495,-0.350495
--0.409583,-0.409583
--0.466381,-0.466381
--0.520699,-0.520699
--0.572011,-0.572011
--0.619929,-0.619929
--0.664272,-0.664272
--0.70507,-0.70507
--0.741815,-0.741815
--0.774801,-0.774801
--0.802559,-0.802559
--0.826144,-0.826144
--0.845103,-0.845103
--0.859329,-0.859329
--0.869129,-0.869129
--0.873028,-0.873028
--0.872481,-0.872481
--0.866982,-0.866982
--0.856768,-0.856768
--0.841695,-0.841695
--0.821609,-0.821609
--0.796758,-0.796758
--0.767678,-0.767678
--0.734266,-0.734266
--0.696934,-0.696934
--0.655062,-0.655062
--0.609732,-0.609732
--0.561034,-0.561034
--0.509102,-0.509102
--0.454677,-0.454677
--0.396992,-0.396992
--0.337451,-0.337451
--0.275873,-0.275873
--0.212928,-0.212928
--0.148623,-0.148623
--0.0835123,-0.0835123
--0.0179179,-0.0179179
-0.0477399,0.0477399
-0.113218,0.113218
-0.177995,0.177995
-0.241733,0.241733
-0.304075,0.304075
-0.364772,0.364772
-0.42337,0.42337
-0.479948,0.479948
-0.53306,0.53306
-0.583602,0.583602
-0.63074,0.63074
-0.674472,0.674472
-0.714537,0.714537
-0.750022,0.750022
-0.78146,0.78146
-0.808558,0.808558
-0.831184,0.831184
-0.849363,0.849363
-0.862023,0.862023
-0.870102,0.870102
-0.873282,0.873282
+0.580324,0.580324
+0.613744,0.613744
+0.645089,0.645089
+0.673667,0.673667
+0.6996,0.6996
+0.722931,0.722931
+0.743105,0.743105
+0.760684,0.760684
+0.774898,0.774898
+0.786346,0.786346
+0.794463,0.794463
+0.799549,0.799549
+0.80147,0.80147
+0.800081,0.800081
+0.795764,0.795764
+0.788055,0.788055
+0.777407,0.777407
+0.763535,0.763535
+0.746751,0.746751
+0.726961,0.726961
+0.704286,0.704286
+0.67883,0.67883
+0.650733,0.650733
+0.619944,0.619944
+0.586887,0.586887
+0.551236,0.551236
+0.513733,0.513733
+0.473853,0.473853
+0.432445,0.432445
+0.388951,0.388951
+0.344276,0.344276
+0.298,0.298
+0.250621,0.250621
+0.20229,0.20229
+0.153015,0.153015
+0.103344,0.103344
+0.0531135,0.0531135
+0.00272798,0.00272798
+-0.0476821,-0.0476821
+-0.0979676,-0.0979676
+-0.1477,-0.1477
+-0.197001,-0.197001
+-0.245422,-0.245422
+-0.29295,-0.29295
+-0.339299,-0.339299
+-0.384245,-0.384245
+-0.427742,-0.427742
+-0.469483,-0.469483
+-0.509415,-0.509415
+-0.547315,-0.547315
+-0.583011,-0.583011
+-0.616464,-0.616464
+-0.647421,-0.647421
+-0.675841,-0.675841
+-0.701579,-0.701579
+-0.724517,-0.724517
+-0.744598,-0.744598
+-0.761775,-0.761775
+-0.775879,-0.775879
+-0.786922,-0.786922
+-0.794848,-0.794848
+-0.799631,-0.799631
+-0.801288,-0.801288
+-0.799686,-0.799686
+-0.795028,-0.795028
+-0.787044,-0.787044
+-0.776172,-0.776172
+-0.76205,-0.76205
+-0.745018,-0.745018
+-0.724937,-0.724937
+-0.702085,-0.702085
+-0.676334,-0.676334
+-0.648066,-0.648066
+-0.617106,-0.617106
+-0.583715,-0.583715
+-0.54808,-0.54808
+-0.510184,-0.510184
+-0.470353,-0.470353
+-0.428609,-0.428609
+-0.385181,-0.385181
+-0.340212,-0.340212
+-0.293941,-0.293941
+-0.246463,-0.246463
+-0.198004,-0.198004
+-0.148809,-0.148809
+-0.0989714,-0.0989714
+-0.0487642,-0.0487642
+0.00159481,0.00159481
+0.0520365,0.0520365
+0.102194,0.102194
+0.151981,0.151981
+0.201162,0.201162
+0.249538,0.249538
+0.296928,0.296928
+0.343162,0.343162
+0.38801,0.38801
+0.431339,0.431339
+0.472932,0.472932
+0.512698,0.512698
+0.550407,0.550407
+0.585903,0.585903
+0.619148,0.619148
+0.649905,0.649905
+0.678073,0.678073
+0.703582,0.703582
+0.726289,0.726289
+0.74613,0.74613
+0.763018,0.763018
+0.776883,0.776883
+0.78764,0.78764
+0.795325,0.795325
+0.799841,0.799841
+0.801179,0.801179
+0.799374,0.799374
+0.79438,0.79438
+0.786224,0.786224
+0.774959,0.774959
+0.760671,0.760671
+0.743349,0.743349
+0.723068,0.723068
+0.69991,0.69991
+0.67401,0.67401
+0.645414,0.645414
+0.614319,0.614319
+0.580714,0.580714
+0.544861,0.544861
+0.506844,0.506844
+0.46681,0.46681
+0.424913,0.424913
+0.381354,0.381354
+0.33629,0.33629
+0.289847,0.289847
+0.242364,0.242364
+0.193775,0.193775
+0.144547,0.144547
+0.0946672,0.0946672
+0.0444343,0.0444343
+-0.00596134,-0.00596134
+-0.0563291,-0.0563291
+-0.106513,-0.106513
+-0.156256,-0.156256
+-0.205333,-0.205333
+-0.253695,-0.253695
+-0.300938,-0.300938
+-0.347091,-0.347091
+-0.391821,-0.391821
+-0.43498,-0.43498
+-0.476464,-0.476464
+-0.516024,-0.516024
+-0.55356,-0.55356
+-0.588923,-0.588923
+-0.621897,-0.621897
+-0.652445,-0.652445
+-0.680428,-0.680428
+-0.705658,-0.705658
+-0.728186,-0.728186
+-0.747734,-0.747734
+-0.764365,-0.764365
+-0.777963,-0.777963
+-0.7885,-0.7885
+-0.795912,-0.795912
+-0.800128,-0.800128
+-0.801202,-0.801202
+-0.79912,-0.79912
+-0.793842,-0.793842
+-0.785489,-0.785489
+-0.77394,-0.77394
+-0.759344,-0.759344
+-0.741765,-0.741765
+-0.721286,-0.721286
+-0.697807,-0.697807
+-0.671792,-0.671792
+-0.642871,-0.642871
+-0.611606,-0.611606
+-0.577753,-0.577753
+-0.541789,-0.541789
+-0.503462,-0.503462
+-0.463393,-0.463393
+-0.421218,-0.421218
+-0.377642,-0.377642
+-0.332323,-0.332323
+-0.285911,-0.285911
+-0.238168,-0.238168
+-0.189662,-0.189662
+-0.140241,-0.140241
+-0.0904061,-0.0904061
+-0.0400821,-0.0400821
+0.01031,0.01031
+0.0606649,0.0606649
+0.110818,0.110818
+0.160525,0.160525
+0.209591,0.209591
+0.257804,0.257804
+0.305073,0.305073
+0.350983,0.350983
+0.395698,0.395698
+0.438713,0.438713
+0.480037,0.480037
+0.519414,0.519414
+0.556839,0.556839
+0.591881,0.591881
+0.624823,0.624823
+0.655076,0.655076
+0.682839,0.682839
+0.707877,0.707877
+0.730114,0.730114
+0.74944,0.74944
+0.765838,0.765838
+0.779146,0.779146
+0.789476,0.789476
+0.796521,0.796521
+0.800565,0.800565
+0.80132,0.80132
+0.798968,0.798968
+0.793477,0.793477
+0.784787,0.784787
+0.77292,0.77292
+0.758242,0.758242
+0.740227,0.740227
+0.719584,0.719584
+0.695901,0.695901
+0.669506,0.669506
+0.640487,0.640487
+0.608963,0.608963
+0.574884,0.574884
+0.538711,0.538711
+0.500269,0.500269
+0.459926,0.459926
+0.417732,0.417732
+0.373778,0.373778
+0.328629,0.328629
+0.281773,0.281773
+0.234265,0.234265
+0.185393,0.185393
+0.136066,0.136066
+0.0860656,0.0860656
+0.0358424,0.0358424
+-0.0147185,-0.0147185
+-0.0649151,-0.0649151
+-0.115291,-0.115291
+-0.164657,-0.164657
+-0.213947,-0.213947
+-0.261949,-0.261949
+-0.309111,-0.309111
+-0.355035,-0.355035
+-0.399507,-0.399507
+-0.442406,-0.442406
+-0.483651,-0.483651
+-0.522757,-0.522757
+-0.560097,-0.560097
+-0.594851,-0.594851
+-0.627646,-0.627646
+-0.65763,-0.65763
+-0.685191,-0.685191
+-0.710023,-0.710023
+-0.731887,-0.731887
+-0.751069,-0.751069
+-0.767167,-0.767167
+-0.780172,-0.780172
+-0.790269,-0.790269
+-0.79703,-0.79703
+-0.800715,-0.800715
+-0.801338,-0.801338
+-0.798564,-0.798564
+-0.792851,-0.792851
+-0.783864,-0.783864
+-0.771797,-0.771797
+-0.75669,-0.75669
+-0.738612,-0.738612
+-0.717525,-0.717525
+-0.69371,-0.69371
+-0.667072,-0.667072
+-0.637752,-0.637752
+-0.606083,-0.606083
+-0.571759,-0.571759
+-0.535425,-0.535425
+-0.496776,-0.496776
+-0.456289,-0.456289
+-0.413917,-0.413917
+-0.369969,-0.369969
+-0.324481,-0.324481
+-0.277765,-0.277765
+-0.229916,-0.229916
+-0.181234,-0.181234
+-0.131694,-0.131694
+-0.0818022,-0.0818022
+-0.0314026,-0.0314026
+0.0189072,0.0189072
+0.0694039,0.0694039
+0.119305,0.119305
+0.16911,0.16911
+0.217835,0.217835
+0.266059,0.266059
+0.31301,0.31301
+0.3588,0.3588
+0.403135,0.403135
+0.445919,0.445919
+0.486894,0.486894
+0.525966,0.525966
+0.562969,0.562969
+0.597659,0.597659
+0.630099,0.630099
+0.659951,0.659951
+0.68725,0.68725
+0.711797,0.711797
+0.733509,0.733509
+0.75238,0.75238
+0.768179,0.768179
+0.78101,0.78101
+0.790747,0.790747
+0.797266,0.797266
+0.800757,0.800757
+0.800963,0.800963
+0.798081,0.798081
+0.791957,0.791957
+0.782805,0.782805
+0.770438,0.770438
+0.755093,0.755093
+0.736737,0.736737
+0.71544,0.71544
+0.691368,0.691368
+0.664543,0.664543
+0.634996,0.634996
+0.603064,0.603064
+0.568639,0.568639
+0.532058,0.532058
+0.493315,0.493315
+0.452575,0.452575
+0.410158,0.410158
+0.365995,0.365995
+0.320487,0.320487
+0.273643,0.273643
+0.225732,0.225732
+0.176932,0.176932
+0.127458,0.127458
+0.0773677,0.0773677
+0.0271611,0.0271611
+-0.0233371,-0.0233371
+-0.0736059,-0.0736059
+-0.123683,-0.123683
+-0.173224,-0.173224
+-0.222084,-0.222084
+-0.270043,-0.270043
+-0.316969,-0.316969
+-0.362625,-0.362625
+-0.406846,-0.406846
+-0.449451,-0.449451
+-0.490268,-0.490268
+-0.529166,-0.529166
+-0.565937,-0.565937
+-0.600529,-0.600529
+-0.632672,-0.632672
+-0.662335,-0.662335
+-0.689375,-0.689375
+-0.713698,-0.713698
+-0.735198,-0.735198
+-0.75375,-0.75375
+-0.769348,-0.769348
+-0.781894,-0.781894
+-0.791345,-0.791345
+-0.797651,-0.797651
+-0.800814,-0.800814
+-0.800788,-0.800788
+-0.797601,-0.797601
+-0.791255,-0.791255
+-0.781781,-0.781781
+-0.769177,-0.769177
+-0.75359,-0.75359
+-0.734957,-0.734957
+-0.713459,-0.713459
+-0.689124,-0.689124
+-0.662021,-0.662021
+-0.632349,-0.632349
+-0.600132,-0.600132
+-0.565591,-0.565591
+-0.528753,-0.528753
+-0.489873,-0.489873
+-0.448986,-0.448986
+-0.406405,-0.406405
+-0.362119,-0.362119
+-0.316472,-0.316472
+-0.269561,-0.269561
+-0.22157,-0.22157
+-0.172693,-0.172693
+-0.123156,-0.123156
+-0.0730744,-0.0730744
+-0.0227982,-0.0227982
+0.0276646,0.0276646
+0.0779593,0.0779593
+0.127939,0.127939
+0.177468,0.177468
+0.226218,0.226218
+0.274163,0.274163
+0.320976,0.320976
+0.366452,0.366452
+0.410641,0.410641
+0.452967,0.452967
+0.493793,0.493793
+0.532386,0.532386
+0.569046,0.569046
+0.603409,0.603409
+0.635345,0.635345
+0.664781,0.664781
+0.691667,0.691667
+0.71563,0.71563
+0.737,0.737
+0.755238,0.755238
+0.770571,0.770571
+0.782899,0.782899
+0.792064,0.792064
+0.798106,0.798106
+0.800992,0.800992
+0.800682,0.800682
+0.797231,0.797231
+0.790667,0.790667
+0.780838,0.780838
+0.768094,0.768094
+0.752103,0.752103
+0.733342,0.733342
+0.711532,0.711532
+0.686921,0.686921
+0.659713,0.659713
+0.629668,0.629668
+0.597397,0.597397
+0.562516,0.562516
+0.525577,0.525577
+0.486436,0.486436
+0.445485,0.445485
+0.402691,0.402691
+0.358289,0.358289
+0.312565,0.312565
+0.26546,0.26546
+0.217434,0.217434
+0.168495,0.168495
+0.118839,0.118839
+0.0688022,0.0688022
+0.0184327,0.0184327
+-0.0319594,-0.0319594
+-0.0823143,-0.0823143
+-0.132245,-0.132245
+-0.181726,-0.181726
+-0.230477,-0.230477
+-0.278178,-0.278178
+-0.32507,-0.32507
+-0.37034,-0.37034
+-0.41445,-0.41445
+-0.456652,-0.456652
+-0.497219,-0.497219
+-0.535783,-0.535783
+-0.572173,-0.572173
+-0.6064,-0.6064
+-0.638079,-0.638079
+-0.667373,-0.667373
+-0.693905,-0.693905
+-0.717812,-0.717812
+-0.738784,-0.738784
+-0.756847,-0.756847
+-0.771959,-0.771959
+-0.783924,-0.783924
+-0.792903,-0.792903
+-0.798652,-0.798652
+-0.80127,-0.80127
+-0.800693,-0.800693
+-0.79702,-0.79702
+-0.790043,-0.790043
+-0.780155,-0.780155
+-0.766898,-0.766898
+-0.750919,-0.750919
+-0.731671,-0.731671
+-0.709745,-0.709745
+-0.684857,-0.684857
+-0.657379,-0.657379
+-0.627228,-0.627228
+-0.594568,-0.594568
+-0.559613,-0.559613
+-0.522436,-0.522436
+-0.483097,-0.483097
+-0.442067,-0.442067
+-0.398934,-0.398934
+-0.354647,-0.354647
+-0.30851,-0.30851
+-0.261533,-0.261533
+-0.213307,-0.213307
+-0.164237,-0.164237
+-0.114726,-0.114726
+-0.0643603,-0.0643603
+-0.0142236,-0.0142236
+0.0364279,0.0364279
+0.0865637,0.0865637
+0.136572,0.136572
+0.185994,0.185994
+0.234645,0.234645
+0.282398,0.282398
+0.329093,0.329093
+0.374228,0.374228
+0.418258,0.418258
+0.460298,0.460298
+0.500748,0.500748
+0.5391,0.5391
+0.575292,0.575292
+0.609283,0.609283
+0.64081,0.64081
+0.669879,0.669879
+0.696133,0.696133
+0.719849,0.719849
+0.740455,0.740455
+0.758375,0.758375
+0.773155,0.773155
+0.784865,0.784865
+0.793603,0.793603
+0.798949,0.798949
+0.80145,0.80145
diff --git a/src/test/golden_buffers/KeylockReverseTest b/src/test/golden_buffers/KeylockReverseTest
index 7d0acbfff16a..2fbdc06eff7b 100644
--- a/src/test/golden_buffers/KeylockReverseTest
+++ b/src/test/golden_buffers/KeylockReverseTest
@@ -1,512 +1,512 @@
-1.1353,1.1353
-1.00751,1.00751
-0.844492,0.844492
-0.652814,0.652814
-0.438762,0.438762
-0.209594,0.209594
--0.026582,-0.026582
--0.261159,-0.261159
--0.486578,-0.486578
--0.694821,-0.694821
--0.878613,-0.878613
--1.03171,-1.03171
--1.14881,-1.14881
--1.22592,-1.22592
--1.26053,-1.26053
--1.25106,-1.25106
--1.19874,-1.19874
--1.10454,-1.10454
--0.972258,-0.972258
--0.806569,-0.806569
--0.612944,-0.612944
--0.398471,-0.398471
--0.170617,-0.170617
-0.0632482,0.0632482
-0.293999,0.293999
-0.514741,0.514741
-0.717191,0.717191
-0.894452,0.894452
-1.04077,1.04077
-1.15036,1.15036
-1.22028,1.22028
-1.24795,1.24795
-1.23172,1.23172
-1.17344,1.17344
-1.07427,1.07427
-0.938115,0.938115
-0.769522,0.769522
-0.574346,0.574346
-0.360208,0.360208
-0.133007,0.133007
--0.0979073,-0.0979073
--0.325521,-0.325521
--0.541484,-0.541484
--0.738189,-0.738189
--0.909389,-0.909389
--1.04838,-1.04838
--1.15149,-1.15149
--1.21414,-1.21414
--1.23486,-1.23486
--1.21272,-1.21272
--1.14851,-1.14851
--1.04463,-1.04463
--0.904816,-0.904816
--0.733762,-0.733762
--0.537507,-0.537507
--0.32276,-0.32276
--0.097117,-0.097117
-0.131465,0.131465
-0.355255,0.355255
-0.566599,0.566599
-0.758118,0.758118
-0.922889,0.922889
-1.05579,1.05579
-1.15182,1.15182
-1.20766,1.20766
-1.22186,1.22186
-1.19386,1.19386
-1.1242,1.1242
-1.01598,1.01598
-0.872483,0.872483
-0.698898,0.698898
-0.50141,0.50141
-0.286921,0.286921
-0.0626452,0.0626452
--0.163641,-0.163641
--0.383873,-0.383873
--0.590702,-0.590702
--0.776532,-0.776532
--0.93586,-0.93586
--1.06219,-1.06219
--1.15163,-1.15163
--1.20107,-1.20107
--1.20904,-1.20904
--1.17503,-1.17503
--1.10033,-1.10033
--0.987663,-0.987663
--0.84097,-0.84097
--0.665364,-0.665364
--0.46683,-0.46683
--0.25234,-0.25234
--0.0293049,-0.0293049
-0.194415,0.194415
-0.411332,0.411332
-0.613686,0.613686
-0.794587,0.794587
-0.947822,0.947822
-1.06785,1.06785
-1.15119,1.15119
-1.1945,1.1945
-1.19623,1.19623
-1.15668,1.15668
-1.07713,1.07713
-0.960455,0.960455
-0.810482,0.810482
-0.63272,0.63272
-0.433199,0.433199
-0.218928,0.218928
--0.00279968,-0.00279968
--0.22424,-0.22424
--0.437695,-0.437695
--0.635654,-0.635654
--0.811467,-0.811467
--0.95923,-0.95923
--1.07358,-1.07358
--1.15042,-1.15042
--1.1879,-1.1879
--1.18384,-1.18384
--1.13862,-1.13862
--1.05453,-1.05453
--0.933813,-0.933813
--0.780992,-0.780992
--0.601051,-0.601051
--0.400641,-0.400641
--0.186584,-0.186584
-0.033899,0.033899
-0.252933,0.252933
-0.463058,0.463058
-0.656946,0.656946
-0.827924,0.827924
-0.97006,0.97006
-1.07887,1.07887
-1.14977,1.14977
-1.18123,1.18123
-1.17143,1.17143
-1.12144,1.12144
-1.03267,1.03267
-0.907929,0.907929
-0.752252,0.752252
-0.570389,0.570389
-0.369159,0.369159
-0.155217,0.155217
--0.0641559,-0.0641559
--0.2807,-0.2807
--0.487821,-0.487821
--0.677511,-0.677511
--0.843983,-0.843983
--0.980868,-0.980868
--1.0838,-1.0838
--1.1492,-1.1492
--1.17496,-1.17496
--1.1597,-1.1597
--1.1046,-1.1046
--1.01111,-1.01111
--0.882971,-0.882971
--0.724439,-0.724439
--0.540625,-0.540625
--0.338473,-0.338473
--0.124659,-0.124659
-0.0934068,0.0934068
-0.307856,0.307856
-0.511489,0.511489
-0.697672,0.697672
-0.859644,0.859644
-0.991289,0.991289
-1.08903,1.08903
-1.14851,1.14851
-1.16881,1.16881
-1.14842,1.14842
-1.08832,1.08832
-0.990483,0.990483
-0.858899,0.858899
-0.697056,0.697056
-0.511655,0.511655
-0.308632,0.308632
-0.0948792,0.0948792
--0.121858,-0.121858
--0.334435,-0.334435
--0.535255,-0.535255
--0.717452,-0.717452
--0.874801,-0.874801
--1.00184,-1.00184
--1.09389,-1.09389
--1.14845,-1.14845
--1.16299,-1.16299
--1.13759,-1.13759
--1.07246,-1.07246
--0.970677,-0.970677
--0.835157,-0.835157
--0.670895,-0.670895
--0.483406,-0.483406
--0.279452,-0.279452
--0.0657176,-0.0657176
-0.149828,0.149828
-0.36055,0.36055
-0.558566,0.558566
-0.737033,0.737033
-0.890046,0.890046
-1.01223,1.01223
-1.09931,1.09931
-1.14834,1.14834
-1.15761,1.15761
-1.12717,1.12717
-1.05736,1.05736
-0.951215,0.951215
-0.812251,0.812251
-0.645043,0.645043
-0.455761,0.455761
-0.250648,0.250648
-0.0372199,0.0372199
--0.177629,-0.177629
--0.386356,-0.386356
--0.581418,-0.581418
--0.756443,-0.756443
--0.905483,-0.905483
--1.02274,-1.02274
--1.10478,-1.10478
--1.14885,-1.14885
--1.1528,-1.1528
--1.11717,-1.11717
--1.04271,-1.04271
--0.932489,-0.932489
--0.789801,-0.789801
--0.619938,-0.619938
--0.428628,-0.428628
--0.222751,-0.222751
--0.00881796,-0.00881796
-0.204979,0.204979
-0.411906,0.411906
-0.604468,0.604468
-0.775916,0.775916
-0.92076,0.92076
-1.03358,1.03358
-1.11077,1.11077
-1.14956,1.14956
-1.14842,1.14842
-1.10781,1.10781
-1.02865,1.02865
-0.914163,0.914163
-0.767934,0.767934
-0.595273,0.595273
-0.401802,0.401802
-0.194845,0.194845
--0.0190576,-0.0190576
--0.232381,-0.232381
--0.437292,-0.437292
--0.627477,-0.627477
--0.795624,-0.795624
--0.93647,-0.93647
--1.04475,-1.04475
--1.1172,-1.1172
--1.15061,-1.15061
--1.14449,-1.14449
--1.09876,-1.09876
--1.01505,-1.01505
--0.896124,-0.896124
--0.746399,-0.746399
--0.570764,-0.570764
--0.375582,-0.375582
--0.167065,-0.167065
-0.0470556,0.0470556
-0.259545,0.259545
-0.46297,0.46297
-0.650558,0.650558
-0.81552,0.81552
-0.952441,0.952441
-1.05638,1.05638
-1.12367,1.12367
-1.15237,1.15237
-1.14095,1.14095
-1.09027,1.09027
-1.00169,1.00169
-0.87874,0.87874
-0.725253,0.725253
-0.546693,0.546693
-0.349094,0.349094
-0.139622,0.139622
--0.07506,-0.07506
--0.286831,-0.286831
--0.488798,-0.488798
--0.674077,-0.674077
--0.835769,-0.835769
--0.96893,-0.96893
--1.06823,-1.06823
--1.13104,-1.13104
--1.15441,-1.15441
--1.13795,-1.13795
--1.08217,-1.08217
--0.988906,-0.988906
--0.861468,-0.861468
--0.704181,-0.704181
--0.522558,-0.522558
--0.322828,-0.322828
--0.111857,-0.111857
-0.103174,0.103174
-0.314608,0.314608
-0.514901,0.514901
-0.69794,0.69794
-0.856532,0.856532
-0.98572,0.98572
-1.08085,1.08085
-1.13857,1.13857
-1.1569,1.1569
-1.13536,1.13536
-1.07436,1.07436
-0.976319,0.976319
-0.844411,0.844411
-0.683243,0.683243
-0.498408,0.498408
-0.296293,0.296293
-0.0838893,0.0838893
--0.131549,-0.131549
--0.342477,-0.342477
--0.541713,-0.541713
--0.722225,-0.722225
--0.877874,-0.877874
--1.0031,-1.0031
--1.09385,-1.09385
--1.14668,-1.14668
--1.15983,-1.15983
--1.1331,-1.1331
--1.06683,-1.06683
--0.963814,-0.963814
--0.827386,-0.827386
--0.662377,-0.662377
--0.47412,-0.47412
--0.269702,-0.269702
--0.0555911,-0.0555911
-0.160512,0.160512
-0.371044,0.371044
-0.568807,0.568807
-0.747138,0.747138
-0.899788,0.899788
-1.02097,1.02097
-1.10735,1.10735
-1.15525,1.15525
-1.1633,1.1633
-1.13086,1.13086
-1.05952,1.05952
-0.951536,0.951536
-0.810325,0.810325
-0.641034,0.641034
-0.449759,0.449759
-0.242372,0.242372
-0.0269037,0.0269037
--0.189947,-0.189947
--0.400109,-0.400109
--0.596745,-0.596745
--0.772844,-0.772844
--0.922171,-0.922171
--1.03968,-1.03968
--1.12137,-1.12137
--1.1643,-1.1643
--1.16681,-1.16681
--1.12927,-1.12927
--1.05225,-1.05225
--0.938926,-0.938926
--0.793061,-0.793061
--0.619725,-0.619725
--0.42477,-0.42477
--0.214859,-0.214859
-0.00264836,0.00264836
-0.220079,0.220079
-0.429892,0.429892
-0.625366,0.625366
-0.799158,0.799158
-0.945246,0.945246
-1.05884,1.05884
-1.13606,1.13606
-1.17364,1.17364
-1.17092,1.17092
-1.12741,1.12741
-1.04514,1.04514
-0.926273,0.926273
-0.775711,0.775711
-0.597743,0.597743
-0.398967,0.398967
-0.186625,0.186625
--0.032729,-0.032729
--0.251058,-0.251058
--0.460721,-0.460721
--0.654847,-0.654847
--0.826156,-0.826156
--0.969208,-0.969208
--1.07877,-1.07877
--1.15097,-1.15097
--1.18337,-1.18337
--1.17529,-1.17529
--1.12596,-1.12596
--1.03757,-1.03757
--0.913565,-0.913565
--0.75757,-0.75757
--0.575168,-0.575168
--0.372949,-0.372949
--0.1572,-0.1572
-0.0637186,0.0637186
-0.282935,0.282935
-0.492464,0.492464
-0.685136,0.685136
-0.853994,0.853994
-0.993856,0.993856
-1.09916,1.09916
-1.16653,1.16653
-1.19367,1.19367
-1.17941,1.17941
-1.12408,1.12408
-1.03016,1.03016
-0.900157,0.900157
-0.738857,0.738857
-0.552119,0.552119
-0.345653,0.345653
-0.127213,0.127213
--0.0959141,-0.0959141
--0.315723,-0.315723
--0.5249,-0.5249
--0.716222,-0.716222
--0.883048,-0.883048
--1.0191,-1.0191
--1.12024,-1.12024
--1.1825,-1.1825
--1.20375,-1.20375
--1.18368,-1.18368
--1.12215,-1.12215
--1.02223,-1.02223
--0.886213,-0.886213
--0.71964,-0.71964
--0.527802,-0.527802
--0.317545,-0.317545
--0.0962029,-0.0962029
-0.129054,0.129054
-0.349614,0.349614
-0.558807,0.558807
-0.74857,0.74857
-0.91275,0.91275
-1.04503,1.04503
-1.14173,1.14173
-1.19896,1.19896
-1.21429,1.21429
-1.18784,1.18784
-1.12013,1.12013
-1.01353,1.01353
-0.871687,0.871687
-0.699314,0.699314
-0.502638,0.502638
-0.288436,0.288436
-0.0636963,0.0636963
--0.163424,-0.163424
--0.385015,-0.385015
--0.593512,-0.593512
--0.781769,-0.781769
--0.943255,-0.943255
--1.07194,-1.07194
--1.16388,-1.16388
--1.21526,-1.21526
--1.2248,-1.2248
--1.19187,-1.19187
--1.11763,-1.11763
--1.00436,-1.00436
--0.856019,-0.856019
--0.678236,-0.678236
--0.476274,-0.476274
--0.257653,-0.257653
--0.0302052,-0.0302052
-0.199223,0.199223
-0.421241,0.421241
-0.629716,0.629716
-0.816138,0.816138
-0.974517,0.974517
-1.09925,1.09925
-1.18629,1.18629
-1.23197,1.23197
-1.23525,1.23525
-1.19543,1.19543
-1.11435,1.11435
-0.994309,0.994309
-0.839666,0.839666
-0.655548,0.655548
-0.448617,0.448617
-0.226064,0.226064
--0.00497451,-0.00497451
--0.236125,-0.236125
--0.459236,-0.459236
--0.66678,-0.66678
--0.851452,-0.851452
--1.00693,-1.00693
--1.12732,-1.12732
--1.2091,-1.2091
--1.2489,-1.2489
--1.24543,-1.24543
--1.1987,-1.1987
--1.11024,-1.11024
--0.983206,-0.983206
--0.822,-0.822
--0.631765,-0.631765
--0.419523,-0.419523
--0.19258,-0.19258
-0.0417103,0.0417103
-0.274618,0.274618
-0.498576,0.498576
-0.705083,0.705083
-0.887779,0.887779
-1.03979,1.03979
-1.15589,1.15589
-1.23222,1.23222
-1.26562,1.26562
-1.25516,1.25516
-1.20124,1.20124
-1.10536,1.10536
-0.971059,0.971059
-0.802952,0.802952
-0.606589,0.606589
-0.388663,0.388663
-0.157456,0.157456
+-0.524209,-0.524209
+-0.48325,-0.48325
+-0.44034,-0.44034
+-0.395863,-0.395863
+-0.350198,-0.350198
+-0.303047,-0.303047
+-0.255155,-0.255155
+-0.206316,-0.206316
+-0.15684,-0.15684
+-0.10704,-0.10704
+-0.0569178,-0.0569178
+-0.006903,-0.006903
+0.0431255,0.0431255
+0.0926204,0.0926204
+0.141675,0.141675
+0.189836,0.189836
+0.237231,0.237231
+0.283319,0.283319
+0.328319,0.328319
+0.371577,0.371577
+0.41352,0.41352
+0.453321,0.453321
+0.493648,0.493648
+0.52961,0.52961
+0.563827,0.563827
+0.59524,0.59524
+0.624572,0.624572
+0.651126,0.651126
+0.675032,0.675032
+0.696391,0.696391
+0.714601,0.714601
+0.730318,0.730318
+0.742712,0.742712
+0.752464,0.752464
+0.758983,0.758983
+0.762597,0.762597
+0.763212,0.763212
+0.760636,0.760636
+0.755348,0.755348
+0.746818,0.746818
+0.735573,0.735573
+0.721293,0.721293
+0.704328,0.704328
+0.684587,0.684587
+0.662192,0.662192
+0.63725,0.63725
+0.60994,0.60994
+0.580139,0.580139
+0.548396,0.548396
+0.514218,0.514218
+0.478547,0.478547
+0.440637,0.440637
+0.401565,0.401565
+0.360535,0.360535
+0.318644,0.318644
+0.275347,0.275347
+0.231153,0.231153
+0.186267,0.186267
+0.140563,0.140563
+0.0947039,0.0947039
+0.0484321,0.0484321
+0.00215811,0.00215811
+-0.043971,-0.043971
+-0.0899174,-0.0899174
+-0.135143,-0.135143
+-0.179901,-0.179901
+-0.223682,-0.223682
+-0.266536,-0.266536
+-0.308213,-0.308213
+-0.348448,-0.348448
+-0.387293,-0.387293
+-0.424399,-0.424399
+-0.459766,-0.459766
+-0.493216,-0.493216
+-0.524527,-0.524527
+-0.553774,-0.553774
+-0.580649,-0.580649
+-0.60518,-0.60518
+-0.62722,-0.62722
+-0.646691,-0.646691
+-0.66351,-0.66351
+-0.677713,-0.677713
+-0.689116,-0.689116
+-0.697727,-0.697727
+-0.703568,-0.703568
+-0.706516,-0.706516
+-0.706783,-0.706783
+-0.703996,-0.703996
+-0.698698,-0.698698
+-0.69023,-0.69023
+-0.679434,-0.679434
+-0.665624,-0.665624
+-0.649432,-0.649432
+-0.630425,-0.630425
+-0.609208,-0.609208
+-0.585318,-0.585318
+-0.559393,-0.559393
+-0.531182,-0.531182
+-0.500813,-0.500813
+-0.468703,-0.468703
+-0.434583,-0.434583
+-0.39895,-0.39895
+-0.361709,-0.361709
+-0.323136,-0.323136
+-0.283312,-0.283312
+-0.242478,-0.242478
+-0.200756,-0.200756
+-0.15825,-0.15825
+-0.11527,-0.11527
+-0.0719108,-0.0719108
+-0.0282457,-0.0282457
+0.015244,0.015244
+0.0588027,0.0588027
+0.101891,0.101891
+0.144549,0.144549
+0.186524,0.186524
+0.22768,0.22768
+0.267809,0.267809
+0.306835,0.306835
+0.344515,0.344515
+0.380749,0.380749
+0.415381,0.415381
+0.44825,0.44825
+0.479347,0.479347
+0.508305,0.508305
+0.535281,0.535281
+0.560025,0.560025
+0.582441,0.582441
+0.602466,0.602466
+0.62006,0.62006
+0.635066,0.635066
+0.647551,0.647551
+0.657323,0.657323
+0.664499,0.664499
+0.668841,0.668841
+0.670689,0.670689
+0.669554,0.669554
+0.665969,0.665969
+0.659476,0.659476
+0.650485,0.650485
+0.638704,0.638704
+0.624493,0.624493
+0.607719,0.607719
+0.588503,0.588503
+0.566907,0.566907
+0.543023,0.543023
+0.517025,0.517025
+0.48887,0.48887
+0.458903,0.458903
+0.426901,0.426901
+0.393417,0.393417
+0.358201,0.358201
+0.321682,0.321682
+0.283776,0.283776
+0.24488,0.24488
+0.204932,0.204932
+0.164195,0.164195
+0.122971,0.122971
+0.0809752,0.0809752
+0.0390817,0.0390817
+-0.00332461,-0.00332461
+-0.0453799,-0.0453799
+-0.0873974,-0.0873974
+-0.128916,-0.128916
+-0.169993,-0.169993
+-0.210246,-0.210246
+-0.249633,-0.249633
+-0.288071,-0.288071
+-0.32511,-0.32511
+-0.361054,-0.361054
+-0.395287,-0.395287
+-0.427988,-0.427988
+-0.458934,-0.458934
+-0.487913,-0.487913
+-0.514993,-0.514993
+-0.539863,-0.539863
+-0.562559,-0.562559
+-0.582927,-0.582927
+-0.600934,-0.600934
+-0.616427,-0.616427
+-0.629466,-0.629466
+-0.639842,-0.639842
+-0.647641,-0.647641
+-0.652793,-0.652793
+-0.655252,-0.655252
+-0.655061,-0.655061
+-0.652109,-0.652109
+-0.646556,-0.646556
+-0.63834,-0.63834
+-0.627467,-0.627467
+-0.614118,-0.614118
+-0.598122,-0.598122
+-0.579758,-0.579758
+-0.558973,-0.558973
+-0.535976,-0.535976
+-0.510566,-0.510566
+-0.483408,-0.483408
+-0.453841,-0.453841
+-0.422791,-0.422791
+-0.389676,-0.389676
+-0.355234,-0.355234
+-0.319038,-0.319038
+-0.28183,-0.28183
+-0.243117,-0.243117
+-0.203711,-0.203711
+-0.163174,-0.163174
+-0.122179,-0.122179
+-0.0804619,-0.0804619
+-0.0385906,-0.0385906
+0.00367346,0.00367346
+0.045715,0.045715
+0.0878443,0.0878443
+0.129416,0.129416
+0.170599,0.170599
+0.211068,0.211068
+0.250729,0.250729
+0.289352,0.289352
+0.326823,0.326823
+0.363005,0.363005
+0.397635,0.397635
+0.43078,0.43078
+0.462071,0.462071
+0.491561,0.491561
+0.518961,0.518961
+0.544381,0.544381
+0.567401,0.567401
+0.588299,0.588299
+0.606656,0.606656
+0.622558,0.622558
+0.635966,0.635966
+0.646666,0.646666
+0.654799,0.654799
+0.660175,0.660175
+0.66287,0.66287
+0.662843,0.662843
+0.660006,0.660006
+0.65453,0.65453
+0.646266,0.646266
+0.635374,0.635374
+0.621818,0.621818
+0.60571,0.60571
+0.586937,0.586937
+0.565982,0.565982
+0.542317,0.542317
+0.516688,0.516688
+0.488667,0.488667
+0.458654,0.458654
+0.426726,0.426726
+0.392952,0.392952
+0.357454,0.357454
+0.320515,0.320515
+0.282071,0.282071
+0.242512,0.242512
+0.201773,0.201773
+0.160143,0.160143
+0.117894,0.117894
+0.0748354,0.0748354
+0.0317184,0.0317184
+-0.0119588,-0.0119588
+-0.0554527,-0.0554527
+-0.098862,-0.098862
+-0.141956,-0.141956
+-0.184558,-0.184558
+-0.226447,-0.226447
+-0.267584,-0.267584
+-0.307533,-0.307533
+-0.346492,-0.346492
+-0.38393,-0.38393
+-0.419959,-0.419959
+-0.454333,-0.454333
+-0.48682,-0.48682
+-0.517471,-0.517471
+-0.546014,-0.546014
+-0.572248,-0.572248
+-0.596452,-0.596452
+-0.617854,-0.617854
+-0.637161,-0.637161
+-0.653561,-0.653561
+-0.667463,-0.667463
+-0.678579,-0.678579
+-0.686915,-0.686915
+-0.692384,-0.692384
+-0.695184,-0.695184
+-0.694783,-0.694783
+-0.691888,-0.691888
+-0.685781,-0.685781
+-0.677023,-0.677023
+-0.665382,-0.665382
+-0.650926,-0.650926
+-0.63375,-0.63375
+-0.613931,-0.613931
+-0.591444,-0.591444
+-0.56653,-0.56653
+-0.539123,-0.539123
+-0.509434,-0.509434
+-0.477561,-0.477561
+-0.443589,-0.443589
+-0.407692,-0.407692
+-0.369994,-0.369994
+-0.330656,-0.330656
+-0.289817,-0.289817
+-0.247662,-0.247662
+-0.204332,-0.204332
+-0.160081,-0.160081
+-0.114914,-0.114914
+-0.0692885,-0.0692885
+-0.0229984,-0.0229984
+0.0232713,0.0232713
+0.0697828,0.0697828
+0.116108,0.116108
+0.16203,0.16203
+0.207594,0.207594
+0.252279,0.252279
+0.29619,0.29619
+0.33896,0.33896
+0.38051,0.38051
+0.420609,0.420609
+0.459065,0.459065
+0.495887,0.495887
+0.530628,0.530628
+0.563371,0.563371
+0.593962,0.593962
+0.622014,0.622014
+0.647847,0.647847
+0.670868,0.670868
+0.69134,0.69134
+0.708954,0.708954
+0.723744,0.723744
+0.735572,0.735572
+0.744394,0.744394
+0.750192,0.750192
+0.752899,0.752899
+0.752496,0.752496
+0.749003,0.749003
+0.742391,0.742391
+0.732651,0.732651
+0.719901,0.719901
+0.704072,0.704072
+0.685349,0.685349
+0.663573,0.663573
+0.639179,0.639179
+0.611833,0.611833
+0.582012,0.582012
+0.549587,0.549587
+0.514767,0.514767
+0.477701,0.477701
+0.438507,0.438507
+0.397354,0.397354
+0.354325,0.354325
+0.309753,0.309753
+0.263642,0.263642
+0.216299,0.216299
+0.167843,0.167843
+0.118515,0.118515
+0.0687554,0.0687554
+0.0186311,0.0186311
+-0.0315551,-0.0315551
+-0.0815779,-0.0815779
+-0.131406,-0.131406
+-0.180514,-0.180514
+-0.229155,-0.229155
+-0.276643,-0.276643
+-0.32314,-0.32314
+-0.36834,-0.36834
+-0.411943,-0.411943
+-0.454062,-0.454062
+-0.494125,-0.494125
+-0.532389,-0.532389
+-0.568351,-0.568351
+-0.602105,-0.602105
+-0.63331,-0.63331
+-0.662101,-0.662101
+-0.687959,-0.687959
+-0.711344,-0.711344
+-0.731523,-0.731523
+-0.74895,-0.74895
+-0.763246,-0.763246
+-0.774397,-0.774397
+-0.782484,-0.782484
+-0.78729,-0.78729
+-0.788986,-0.788986
+-0.787425,-0.787425
+-0.782577,-0.782577
+-0.774742,-0.774742
+-0.763501,-0.763501
+-0.749321,-0.749321
+-0.732041,-0.732041
+-0.711686,-0.711686
+-0.688588,-0.688588
+-0.662482,-0.662482
+-0.633901,-0.633901
+-0.602453,-0.602453
+-0.568804,-0.568804
+-0.5326,-0.5326
+-0.494401,-0.494401
+-0.454042,-0.454042
+-0.411877,-0.411877
+-0.368036,-0.368036
+-0.322537,-0.322537
+-0.276006,-0.276006
+-0.227938,-0.227938
+-0.179308,-0.179308
+-0.129626,-0.129626
+-0.0796584,-0.0796584
+-0.0290311,-0.0290311
+0.0213593,0.0213593
+0.0720967,0.0720967
+0.122112,0.122112
+0.172078,0.172078
+0.220984,0.220984
+0.269363,0.269363
+0.316383,0.316383
+0.362278,0.362278
+0.406717,0.406717
+0.449375,0.449375
+0.490473,0.490473
+0.529352,0.529352
+0.566186,0.566186
+0.600809,0.600809
+0.632797,0.632797
+0.662454,0.662454
+0.689297,0.689297
+0.713327,0.713327
+0.734535,0.734535
+0.752721,0.752721
+0.76781,0.76781
+0.779912,0.779912
+0.788684,0.788684
+0.794359,0.794359
+0.796752,0.796752
+0.795911,0.795911
+0.791811,0.791811
+0.784568,0.784568
+0.773966,0.773966
+0.760406,0.760406
+0.743584,0.743584
+0.723796,0.723796
+0.701061,0.701061
+0.675404,0.675404
+0.647028,0.647028
+0.616044,0.616044
+0.582425,0.582425
+0.546581,0.546581
+0.508257,0.508257
+0.468103,0.468103
+0.425859,0.425859
+0.381863,0.381863
+0.336504,0.336504
+0.289315,0.289315
+0.241457,0.241457
+0.192152,0.192152
+0.142275,0.142275
+0.0917689,0.0917689
+0.0407561,0.0407561
+-0.0103185,-0.0103185
+-0.0614803,-0.0614803
+-0.112332,-0.112332
+-0.162825,-0.162825
+-0.212626,-0.212626
+-0.261664,-0.261664
+-0.309558,-0.309558
+-0.356291,-0.356291
+-0.401577,-0.401577
+-0.445251,-0.445251
+-0.487167,-0.487167
+-0.527099,-0.527099
+-0.564818,-0.564818
+-0.600508,-0.600508
+-0.633424,-0.633424
+-0.664128,-0.664128
+-0.691865,-0.691865
+-0.717009,-0.717009
+-0.73912,-0.73912
+-0.758321,-0.758321
+-0.774363,-0.774363
+-0.787289,-0.787289
+-0.797097,-0.797097
+-0.803575,-0.803575
+-0.806798,-0.806798
+-0.806814,-0.806814
+-0.803433,-0.803433
+-0.796892,-0.796892
+-0.787047,-0.787047
+-0.773953,-0.773953
+-0.757832,-0.757832
+-0.738461,-0.738461
+-0.716209,-0.716209
+-0.690966,-0.690966
+-0.66285,-0.66285
+-0.632166,-0.632166
+-0.598699,-0.598699
+-0.562979,-0.562979
+-0.524749,-0.524749
+-0.484555,-0.484555
+-0.442168,-0.442168
+-0.398159,-0.398159
+-0.352373,-0.352373
+-0.305104,-0.305104
+-0.256717,-0.256717
+-0.207015,-0.207015
+-0.156741,-0.156741
+-0.105511,-0.105511
+-0.0540654,-0.0540654
+-0.00215057,-0.00215057
+0.049682,0.049682
+0.101343,0.101343
+0.152651,0.152651
+0.203394,0.203394
+0.253262,0.253262
+0.30233,0.30233
+0.349844,0.349844
+0.396383,0.396383
diff --git a/src/test/signalpathtest.cpp b/src/test/signalpathtest.cpp
index 849d59c93a6a..a0840243e528 100644
--- a/src/test/signalpathtest.cpp
+++ b/src/test/signalpathtest.cpp
@@ -8,7 +8,7 @@ const char* BaseSignalPathTest::m_sGroup2 = "[Channel2]";
const char* BaseSignalPathTest::m_sGroup3 = "[Channel3]";
const char* BaseSignalPathTest::m_sPreviewGroup = "[PreviewDeck1]";
const char* BaseSignalPathTest::m_sSamplerGroup = "[Sampler1]";
-const double BaseSignalPathTest::kDefaultRateRange = 4.0;
+const double BaseSignalPathTest::kDefaultRateRange = 0.08;
const double BaseSignalPathTest::kDefaultRateDir = 1.0;
const double BaseSignalPathTest::kRateRangeDivisor = kDefaultRateDir * kDefaultRateRange;
const int BaseSignalPathTest::kProcessBufferSize = 1024;
diff --git a/src/widget/wnumberpos.h b/src/widget/wnumberpos.h
index 593a5c7b65ec..56569a3a3350 100644
--- a/src/widget/wnumberpos.h
+++ b/src/widget/wnumberpos.h
@@ -6,7 +6,7 @@
#include
#include "wnumber.h"
-#include "preferences/dialog/dlgprefcontrols.h"
+#include "preferences/dialog/dlgprefdeck.h"
class ControlProxy;