Files
DrumMachine/widgets/loopstationsampleswidget.h

63 lines
1.4 KiB
C++

#pragma once
#include <QWidget>
#include <QTimer>
#include <memory>
#include <array>
#include <functional>
#include "loopstationpresets.h"
namespace Ui { class LoopStationSamplesWidget; }
namespace midi { struct MidiMessage; }
class QNetworkAccessManager;
class LoopStationSampleWidget;
class DrumMachineSettings;
struct frame_t;
class LoopStationSamplesWidget : public QWidget
{
Q_OBJECT
public:
explicit LoopStationSamplesWidget(QWidget *parent = nullptr);
~LoopStationSamplesWidget() override;
void loadSettings(DrumMachineSettings &settings);
void setPreset(const loopstation_presets::Preset &preset);
void midiReceived(const midi::MidiMessage &message);
void writeSamples(frame_t *begin, frame_t *end);
void injectNetworkAccessManager(QNetworkAccessManager &networkAccessManager);
void injectDecodingThread(QThread &thread);
void unsendColors();
void sendColors();
signals:
void sendMidi(const midi::MidiMessage &midiMsg);
private slots:
void showSettings();
void timeout();
void tempoChanged(int tempo);
void loopEnabledChanged(bool loopEnabled, quint8 category);
void playPausePressed();
void stopPressed();
private:
std::array<std::reference_wrapper<LoopStationSampleWidget>, 48> getWidgets();
const std::unique_ptr<Ui::LoopStationSamplesWidget> m_ui;
DrumMachineSettings *m_settings{};
QTimer m_timer;
quint8 m_pos{};
};