#include "controllers/controlpickermenu.h"
#include "vinylcontrol/defs_vinylcontrol.h"
#include "playermanager.h"
#include "engine/cuecontrol.h"
#include "engine/loopingcontrol.h"
#include "effects/effectrack.h"
#include "effects/effectchainslot.h"
#include "effects/effectslot.h"
#include "effects/effectparameterslot.h"
ControlPickerMenu::ControlPickerMenu(QWidget* pParent)
: QMenu(pParent) {
connect(&m_actionMapper, SIGNAL(mapped(int)),
this, SLOT(controlChosen(int)));
m_effectMasterOutputStr = tr("Master Output");
m_effectHeadphoneOutputStr = tr("Headphone Output");
m_deckStr = tr("Deck %1");
m_samplerStr = tr("Sampler %1");
m_previewdeckStr = tr("Preview Deck %1");
m_microphoneStr = tr("Microphone %1");
m_auxStr = tr("Auxiliary %1");
m_resetStr = tr("Reset to default");
m_effectRackStr = tr("Effect Rack %1");
m_effectUnitStr = tr("Unit %1");
m_effectStr = tr("Slot %1");
m_parameterStr = tr("Parameter %1");
m_libraryStr = tr("Library");
// Master Controls
QMenu* mixerMenu = addSubmenu(tr("Mixer"));
addControl("[Master]", "crossfader", tr("Crossfader"), tr("Master crossfader"), mixerMenu, true);
addControl("[Master]", "gain", tr("Master Gain"), tr("Master gain"), mixerMenu, true);
addControl("[Master]", "balance", tr("Master Balance"), tr("Master balance"), mixerMenu, true);
addControl("[Master]", "delay", tr("Master Delay"), tr("Master delay"), mixerMenu, true);
addControl("[Master]", "headGain", tr("Headphone Gain"), tr("Headphone gain"), mixerMenu, true);
addControl("[Master]", "headMix", tr("Headphone Mix"), tr("Headphone mix (pre/main)"), mixerMenu, true);
addControl("[Master]", "headSplit", tr("Headphone Split Cue"), tr("Toggle headphone split cueing"), mixerMenu);
addControl("[Master]", "headDelay", tr("Headphone Delay"), tr("Headphone delay"), mixerMenu, true);
// Transport
QMenu* transportMenu = addSubmenu(tr("Transport"));
addDeckAndSamplerAndPreviewDeckControl("play", tr("Play"), tr("Play button"), transportMenu);
// Preview deck does not go to master so volume does not matter.
addDeckAndSamplerAndPreviewDeckControl("back", tr("Fast Rewind"), tr("Fast Rewind button"), transportMenu);
addDeckAndSamplerAndPreviewDeckControl("fwd", tr("Fast Forward"), tr("Fast Forward button"), transportMenu);
addDeckAndSamplerAndPreviewDeckControl("playposition", tr("Strip Search"),
tr("Strip-search through track"), transportMenu);
addDeckAndSamplerAndPreviewDeckControl("reverse", tr("Play Reverse"), tr("Play Reverse button"), transportMenu);
addDeckAndSamplerAndPreviewDeckControl("reverseroll", tr("Reverse Roll (Censor)"),
tr("Reverse roll (Censor) button"), transportMenu);
addDeckAndSamplerAndPreviewDeckControl("start", tr("Jump To Start"), tr("Jumps to start of track"), transportMenu);
addDeckAndSamplerAndPreviewDeckControl("start_play", tr("Play From Start"),
tr("Jump to start of track and play"), transportMenu);
addDeckAndSamplerAndPreviewDeckControl("stop", tr("Stop"), tr("Stop button"), transportMenu);
addDeckAndSamplerAndPreviewDeckControl("start_stop", tr("Stop And Jump To Start"),
tr("Stop playback and jump to start of track"), transportMenu);
addDeckAndSamplerAndPreviewDeckControl("end", tr("Jump To End"), tr("Jump to end of track"), transportMenu);
addDeckAndSamplerControl("volume", tr("Volume"), tr("Volume Fader"), transportMenu, true);
addDeckAndSamplerControl("volume_set_one", tr("Full Volume"), tr("Sets volume to full"), transportMenu);
addDeckAndSamplerControl("volume_set_zero", tr("Zero Volume"), tr("Sets volume to zero"), transportMenu);
addDeckAndSamplerAndPreviewDeckControl("pregain", tr("Track Gain"), tr("Track Gain knob"), transportMenu