1 #include "engine/channels/enginechannel.h"
2 
3 #include "control/controlobject.h"
4 #include "control/controlpushbutton.h"
5 #include "moc_enginechannel.cpp"
6 
EngineChannel(const ChannelHandleAndGroup & handle_group,EngineChannel::ChannelOrientation defaultOrientation,EffectsManager * pEffectsManager,bool isTalkoverChannel,bool isPrimaryDeck)7 EngineChannel::EngineChannel(const ChannelHandleAndGroup& handle_group,
8         EngineChannel::ChannelOrientation defaultOrientation,
9         EffectsManager* pEffectsManager,
10         bool isTalkoverChannel,
11         bool isPrimaryDeck)
12         : m_group(handle_group),
13           m_pEffectsManager(pEffectsManager),
14           m_vuMeter(getGroup()),
15           m_pSampleRate(new ControlProxy("[Master]", "samplerate")),
16           m_sampleBuffer(nullptr),
17           m_bIsPrimaryDeck(isPrimaryDeck),
18           m_bIsTalkoverChannel(isTalkoverChannel),
19           m_channelIndex(-1) {
20     m_pPFL = new ControlPushButton(ConfigKey(getGroup(), "pfl"));
21     m_pPFL->setButtonMode(ControlPushButton::TOGGLE);
22     m_pMaster = new ControlPushButton(ConfigKey(getGroup(), "master"));
23     m_pMaster->setButtonMode(ControlPushButton::POWERWINDOW);
24     m_pOrientation = new ControlPushButton(ConfigKey(getGroup(), "orientation"));
25     m_pOrientation->setButtonMode(ControlPushButton::TOGGLE);
26     m_pOrientation->setStates(3);
27     m_pOrientation->set(defaultOrientation);
28     m_pOrientationLeft = new ControlPushButton(ConfigKey(getGroup(), "orientation_left"));
29     connect(m_pOrientationLeft, &ControlObject::valueChanged,
30             this, &EngineChannel::slotOrientationLeft, Qt::DirectConnection);
31     m_pOrientationRight = new ControlPushButton(ConfigKey(getGroup(), "orientation_right"));
32     connect(m_pOrientationRight, &ControlObject::valueChanged,
33             this, &EngineChannel::slotOrientationRight, Qt::DirectConnection);
34     m_pOrientationCenter = new ControlPushButton(ConfigKey(getGroup(), "orientation_center"));
35     connect(m_pOrientationCenter, &ControlObject::valueChanged,
36             this, &EngineChannel::slotOrientationCenter, Qt::DirectConnection);
37     m_pTalkover = new ControlPushButton(ConfigKey(getGroup(), "talkover"));
38     m_pTalkover->setButtonMode(ControlPushButton::POWERWINDOW);
39 
40     if (m_pEffectsManager != nullptr) {
41         m_pEffectsManager->registerInputChannel(handle_group);
42     }
43 }
44 
~EngineChannel()45 EngineChannel::~EngineChannel() {
46     delete m_pMaster;
47     delete m_pPFL;
48     delete m_pOrientation;
49     delete m_pOrientationLeft;
50     delete m_pOrientationRight;
51     delete m_pOrientationCenter;
52     delete m_pSampleRate;
53     delete m_pTalkover;
54 }
55 
setPfl(bool enabled)56 void EngineChannel::setPfl(bool enabled) {
57     m_pPFL->set(enabled ? 1.0 : 0.0);
58 }
59 
isPflEnabled() const60 bool EngineChannel::isPflEnabled() const {
61     return m_pPFL->toBool();
62 }
63 
setMaster(bool enabled)64 void EngineChannel::setMaster(bool enabled) {
65     m_pMaster->set(enabled ? 1.0 : 0.0);
66 }
67 
isMasterEnabled() const68 bool EngineChannel::isMasterEnabled() const {
69     return m_pMaster->toBool();
70 }
71 
setTalkover(bool enabled)72 void EngineChannel::setTalkover(bool enabled) {
73     m_pTalkover->set(enabled ? 1.0 : 0.0);
74 }
75 
isTalkoverEnabled() const76 bool EngineChannel::isTalkoverEnabled() const {
77     return m_pTalkover->toBool();
78 }
79 
slotOrientationLeft(double v)80 void EngineChannel::slotOrientationLeft(double v) {
81     if (v > 0) {
82         m_pOrientation->set(LEFT);
83     }
84 }
85 
slotOrientationRight(double v)86 void EngineChannel::slotOrientationRight(double v) {
87     if (v > 0) {
88         m_pOrientation->set(RIGHT);
89     }
90 }
91 
slotOrientationCenter(double v)92 void EngineChannel::slotOrientationCenter(double v) {
93     if (v > 0) {
94         m_pOrientation->set(CENTER);
95     }
96 }
97 
getOrientation() const98 EngineChannel::ChannelOrientation EngineChannel::getOrientation() const {
99     double dOrientation = m_pOrientation->get();
100     if (dOrientation == LEFT) {
101         return LEFT;
102     } else if (dOrientation == CENTER) {
103         return CENTER;
104     } else if (dOrientation == RIGHT) {
105         return RIGHT;
106     }
107     return CENTER;
108 }
109