diff --git a/plugins/AudioFileProcessor/AudioFileProcessorView.cpp b/plugins/AudioFileProcessor/AudioFileProcessorView.cpp index 43882222f..d16b1d019 100644 --- a/plugins/AudioFileProcessor/AudioFileProcessorView.cpp +++ b/plugins/AudioFileProcessor/AudioFileProcessorView.cpp @@ -184,12 +184,12 @@ void AudioFileProcessorView::newWaveView() delete m_waveView; m_waveView = 0; } - m_waveView = new AudioFileProcessorWaveView(this, 245, 75, &castModel()->sample()); - m_waveView->move(2, 172); - m_waveView->setKnobs( + m_waveView = new AudioFileProcessorWaveView(this, 245, 75, &castModel()->sample(), dynamic_cast(m_startKnob), dynamic_cast(m_endKnob), dynamic_cast(m_loopKnob)); + m_waveView->move(2, 172); + m_waveView->show(); } diff --git a/plugins/AudioFileProcessor/AudioFileProcessorWaveView.cpp b/plugins/AudioFileProcessor/AudioFileProcessorWaveView.cpp index f130ca41c..507c4e7c0 100644 --- a/plugins/AudioFileProcessor/AudioFileProcessorWaveView.cpp +++ b/plugins/AudioFileProcessor/AudioFileProcessorWaveView.cpp @@ -65,7 +65,8 @@ f_cnt_t AudioFileProcessorWaveView::range() const return m_to - m_from; } -AudioFileProcessorWaveView::AudioFileProcessorWaveView(QWidget * parent, int w, int h, Sample const * buf) : +AudioFileProcessorWaveView::AudioFileProcessorWaveView(QWidget* parent, int w, int h, Sample const* buf, + knob* start, knob* end, knob* loop) : QWidget(parent), m_sample(buf), m_graph(QPixmap(w - 2 * s_padding, h - 2 * s_padding)), @@ -74,9 +75,9 @@ AudioFileProcessorWaveView::AudioFileProcessorWaveView(QWidget * parent, int w, m_last_from(0), m_last_to(0), m_last_amp(0), - m_startKnob(0), - m_endKnob(0), - m_loopKnob(0), + m_startKnob(start), + m_endKnob(end), + m_loopKnob(loop), m_isDragging(false), m_reversed(false), m_framesPlayed(0), @@ -85,6 +86,8 @@ AudioFileProcessorWaveView::AudioFileProcessorWaveView(QWidget * parent, int w, setFixedSize(w, h); setMouseTracking(true); + configureKnobRelationsAndWaveViews(); + updateSampleRange(); m_graph.fill(Qt::transparent); @@ -399,21 +402,6 @@ void AudioFileProcessorWaveView::slide(int px) slideSampleByFrames(step); } -void AudioFileProcessorWaveView::setKnobs(knob * start, knob * end, knob * loop) -{ - m_startKnob = start; - m_endKnob = end; - m_loopKnob = loop; - - m_startKnob->setWaveView(this); - m_startKnob->setRelatedKnob(m_endKnob); - - m_endKnob->setWaveView(this); - m_endKnob->setRelatedKnob(m_startKnob); - - m_loopKnob->setWaveView(this); -} - void AudioFileProcessorWaveView::slideSamplePointByPx(Point point, int px) { slideSamplePointByFrames( @@ -511,6 +499,17 @@ void AudioFileProcessorWaveView::updateCursor(QMouseEvent * me) setCursor(Qt::OpenHandCursor); } +void AudioFileProcessorWaveView::configureKnobRelationsAndWaveViews() +{ + m_startKnob->setWaveView(this); + m_startKnob->setRelatedKnob(m_endKnob); + + m_endKnob->setWaveView(this); + m_endKnob->setRelatedKnob(m_startKnob); + + m_loopKnob->setWaveView(this); +} + void AudioFileProcessorWaveView::knob::slideTo(double v, bool check_bound) { if (check_bound && ! checkBound(v)) diff --git a/plugins/AudioFileProcessor/AudioFileProcessorWaveView.h b/plugins/AudioFileProcessor/AudioFileProcessorWaveView.h index 713064580..f40b69d12 100644 --- a/plugins/AudioFileProcessor/AudioFileProcessorWaveView.h +++ b/plugins/AudioFileProcessor/AudioFileProcessorWaveView.h @@ -146,8 +146,8 @@ private: friend class AudioFileProcessorView; public: - AudioFileProcessorWaveView(QWidget* parent, int w, int h, Sample const* buf); - void setKnobs(knob* start, knob* end, knob* loop); + AudioFileProcessorWaveView(QWidget* parent, int w, int h, Sample const* buf, + knob* start, knob* end, knob* loop); void updateSampleRange(); @@ -170,6 +170,8 @@ private: void reverse(); void updateCursor(QMouseEvent* me = nullptr); + void configureKnobRelationsAndWaveViews(); + static bool isCloseTo(int a, int b) { return qAbs(a - b) < 4;