Better separation
This commit is contained in:
@ -11,6 +11,11 @@ win32: {
|
||||
LIBS += -lwinmm
|
||||
}
|
||||
|
||||
unix: {
|
||||
DEFINES += __LINUX_ALSA__
|
||||
LIBS += -lasound
|
||||
}
|
||||
|
||||
DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000
|
||||
|
||||
SOURCES += \
|
||||
|
@ -17,9 +17,12 @@ MainWindow::MainWindow(const presets::PresetsConfig &presetsConfig, QWidget *par
|
||||
m_presetsModel{*presetsConfig.presets}
|
||||
{
|
||||
m_ui->setupUi(this);
|
||||
m_ui->splitter->setSizes({99999, 1});
|
||||
|
||||
connect(&m_midiIn, &MidiInWrapper::messageReceived, this, &MainWindow::messageReceived);
|
||||
|
||||
connect(m_ui->sequencerWidget, &SequencerWidget::triggerSample, m_ui->samplesWidget, &SamplesWidget::sequencerTriggerSample);
|
||||
|
||||
updateMidiDevices();
|
||||
|
||||
connect(m_ui->pushButtonMidiController, &QAbstractButton::pressed, this, [this](){
|
||||
@ -99,6 +102,7 @@ void MainWindow::currentRowChanged(const QModelIndex ¤t)
|
||||
|
||||
m_ui->presetDetailWidget->setPreset(preset);
|
||||
m_filesModel.setPreset(preset);
|
||||
m_ui->sequencerWidget->setPreset(preset);
|
||||
m_ui->samplesWidget->setPreset(preset);
|
||||
}
|
||||
|
||||
|
@ -192,7 +192,16 @@
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="SamplesWidget" name="samplesWidget" native="true"/>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<layout class="QVBoxLayout" stretch="1,0">
|
||||
<item>
|
||||
<widget class="SequencerWidget" name="sequencerWidget" native="true"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="SamplesWidget" name="samplesWidget" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@ -222,6 +231,12 @@
|
||||
<header>presetdetailwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>SequencerWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>sequencerwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
@ -28,8 +28,6 @@ SamplesWidget::SamplesWidget(QWidget *parent) :
|
||||
for (const auto &ref : getWidgets())
|
||||
connect(&ref.get(), &SampleWidget::chokeTriggered, this, &SamplesWidget::chokeTriggered);
|
||||
|
||||
connect(m_ui->sequencerWidget, &SequencerWidget::triggerSample, this, &SamplesWidget::sequencerTriggerSample);
|
||||
|
||||
m_ui->sampleWidget_1->setNote(48);
|
||||
m_ui->sampleWidget_2->setNote(50);
|
||||
m_ui->sampleWidget_3->setNote(52);
|
||||
@ -58,8 +56,6 @@ void SamplesWidget::setPreset(const presets::Preset &preset)
|
||||
{
|
||||
m_preset = preset;
|
||||
|
||||
m_ui->sequencerWidget->setPreset(preset);
|
||||
|
||||
updateWidgets();
|
||||
}
|
||||
|
||||
@ -95,6 +91,17 @@ void SamplesWidget::setAudioDevice(const QAudioDeviceInfo &device)
|
||||
}
|
||||
}
|
||||
|
||||
void SamplesWidget::sequencerTriggerSample(int index)
|
||||
{
|
||||
const auto widgets = getWidgets();
|
||||
if (index < 0 || index >= std::size(widgets))
|
||||
{
|
||||
qDebug() << "index out of range" << index;
|
||||
return;
|
||||
}
|
||||
widgets[index].get().pressed(127);
|
||||
}
|
||||
|
||||
void SamplesWidget::chokeTriggered(int choke)
|
||||
{
|
||||
for (const auto &ref : getWidgets())
|
||||
@ -124,17 +131,6 @@ void SamplesWidget::updateWidgets()
|
||||
widgetsIter->get().setFile(*m_preset.id, *filesIter);
|
||||
}
|
||||
|
||||
void SamplesWidget::sequencerTriggerSample(int index)
|
||||
{
|
||||
const auto widgets = getWidgets();
|
||||
if (index < 0 || index >= std::size(widgets))
|
||||
{
|
||||
qDebug() << "index out of range" << index;
|
||||
return;
|
||||
}
|
||||
widgets[index].get().pressed(127);
|
||||
}
|
||||
|
||||
void SamplesWidget::stopAll()
|
||||
{
|
||||
for (const auto &ref : getWidgets())
|
||||
|
@ -28,10 +28,12 @@ public:
|
||||
|
||||
void setAudioDevice(const QAudioDeviceInfo &device);
|
||||
|
||||
public slots:
|
||||
void sequencerTriggerSample(int index);
|
||||
|
||||
private slots:
|
||||
void chokeTriggered(int choke);
|
||||
void updateWidgets();
|
||||
void sequencerTriggerSample(int index);
|
||||
void stopAll();
|
||||
|
||||
private:
|
||||
|
273
sampleswidget.ui
273
sampleswidget.ui
@ -13,145 +13,26 @@
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout" rowstretch="1,0,1,0,0,0,0,1" columnstretch="1,0,0,0,1,0,0,0,1">
|
||||
<item row="3" column="5">
|
||||
<widget class="SampleWidget" name="sampleWidget_13" native="true"/>
|
||||
</item>
|
||||
<item row="6" column="2">
|
||||
<widget class="SampleWidget" name="sampleWidget_11" native="true"/>
|
||||
</item>
|
||||
<item row="2" column="4">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="SampleWidget" name="sampleWidget_4" native="true"/>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="SampleWidget" name="sampleWidget_2" native="true"/>
|
||||
</item>
|
||||
<item row="4" column="7">
|
||||
<widget class="SampleWidget" name="sampleWidget_18" native="true"/>
|
||||
</item>
|
||||
<item row="3" column="8">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="6" column="5">
|
||||
<widget class="SampleWidget" name="sampleWidget_22" native="true"/>
|
||||
</item>
|
||||
<item row="5" column="5">
|
||||
<widget class="SampleWidget" name="sampleWidget_19" native="true"/>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="SampleWidget" name="sampleWidget_8" native="true"/>
|
||||
</item>
|
||||
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0" columnstretch="0,0,0,0,0,0,0,0,0">
|
||||
<item row="3" column="3">
|
||||
<widget class="SampleWidget" name="sampleWidget_3" native="true"/>
|
||||
</item>
|
||||
<item row="5" column="7">
|
||||
<widget class="SampleWidget" name="sampleWidget_21" native="true"/>
|
||||
</item>
|
||||
<item row="6" column="7">
|
||||
<widget class="SampleWidget" name="sampleWidget_24" native="true"/>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="SampleWidget" name="sampleWidget_7" native="true"/>
|
||||
</item>
|
||||
<item row="6" column="3">
|
||||
<widget class="SampleWidget" name="sampleWidget_12" native="true"/>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="SampleWidget" name="sampleWidget_5" native="true"/>
|
||||
</item>
|
||||
<item row="4" column="6">
|
||||
<widget class="SampleWidget" name="sampleWidget_17" native="true"/>
|
||||
</item>
|
||||
<item row="3" column="7">
|
||||
<widget class="SampleWidget" name="sampleWidget_15" native="true"/>
|
||||
</item>
|
||||
<item row="3" column="4">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="5" column="6">
|
||||
<widget class="SampleWidget" name="sampleWidget_20" native="true"/>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="SampleWidget" name="sampleWidget_1" native="true"/>
|
||||
</item>
|
||||
<item row="4" column="3">
|
||||
<widget class="SampleWidget" name="sampleWidget_6" native="true"/>
|
||||
</item>
|
||||
<item row="4" column="5">
|
||||
<widget class="SampleWidget" name="sampleWidget_16" native="true"/>
|
||||
</item>
|
||||
<item row="6" column="6">
|
||||
<widget class="SampleWidget" name="sampleWidget_23" native="true"/>
|
||||
</item>
|
||||
<item row="3" column="6">
|
||||
<widget class="SampleWidget" name="sampleWidget_14" native="true"/>
|
||||
</item>
|
||||
<item row="7" column="4">
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="SampleWidget" name="sampleWidget_10" native="true"/>
|
||||
</item>
|
||||
<item row="5" column="3">
|
||||
<widget class="SampleWidget" name="sampleWidget_9" native="true"/>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="9">
|
||||
<item row="4" column="3">
|
||||
<widget class="SampleWidget" name="sampleWidget_12" native="true"/>
|
||||
</item>
|
||||
<item row="1" column="5">
|
||||
<widget class="SampleWidget" name="sampleWidget_13" native="true"/>
|
||||
</item>
|
||||
<item row="1" column="7">
|
||||
<widget class="SampleWidget" name="sampleWidget_15" native="true"/>
|
||||
</item>
|
||||
<item row="2" column="7">
|
||||
<widget class="SampleWidget" name="sampleWidget_18" native="true"/>
|
||||
</item>
|
||||
<item row="4" column="6">
|
||||
<widget class="SampleWidget" name="sampleWidget_23" native="true"/>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="9">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
@ -166,30 +47,6 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Sequencer</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="SequencerWidget" name="sequencerWidget" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBox">
|
||||
<property name="text">
|
||||
@ -219,19 +76,99 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<spacer name="verticalSpacer_3">
|
||||
<item row="3" column="2">
|
||||
<widget class="SampleWidget" name="sampleWidget_8" native="true"/>
|
||||
</item>
|
||||
<item row="4" column="7">
|
||||
<widget class="SampleWidget" name="sampleWidget_24" native="true"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="SampleWidget" name="sampleWidget_1" native="true"/>
|
||||
</item>
|
||||
<item row="3" column="5">
|
||||
<widget class="SampleWidget" name="sampleWidget_19" native="true"/>
|
||||
</item>
|
||||
<item row="3" column="7">
|
||||
<widget class="SampleWidget" name="sampleWidget_21" native="true"/>
|
||||
</item>
|
||||
<item row="1" column="8">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="SampleWidget" name="sampleWidget_5" native="true"/>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="SampleWidget" name="sampleWidget_2" native="true"/>
|
||||
</item>
|
||||
<item row="2" column="6">
|
||||
<widget class="SampleWidget" name="sampleWidget_17" native="true"/>
|
||||
</item>
|
||||
<item row="3" column="6">
|
||||
<widget class="SampleWidget" name="sampleWidget_20" native="true"/>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="5">
|
||||
<widget class="SampleWidget" name="sampleWidget_16" native="true"/>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="SampleWidget" name="sampleWidget_4" native="true"/>
|
||||
</item>
|
||||
<item row="4" column="5">
|
||||
<widget class="SampleWidget" name="sampleWidget_22" native="true"/>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="SampleWidget" name="sampleWidget_11" native="true"/>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="SampleWidget" name="sampleWidget_3" native="true"/>
|
||||
</item>
|
||||
<item row="1" column="6">
|
||||
<widget class="SampleWidget" name="sampleWidget_14" native="true"/>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="SampleWidget" name="sampleWidget_10" native="true"/>
|
||||
</item>
|
||||
<item row="2" column="3">
|
||||
<widget class="SampleWidget" name="sampleWidget_6" native="true"/>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="SampleWidget" name="sampleWidget_7" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
@ -241,12 +178,6 @@
|
||||
<header>samplewidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>SequencerWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>sequencerwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
@ -2,7 +2,6 @@
|
||||
#include "ui_samplewidget.h"
|
||||
|
||||
#include <QAbstractEventDispatcher>
|
||||
#include <QAudioDeviceInfo>
|
||||
#include <QSoundEffect>
|
||||
#include <QDebug>
|
||||
|
||||
@ -32,14 +31,14 @@ SampleWidget::SampleWidget(QWidget *parent) :
|
||||
|
||||
connect(m_ui->pushButton, &QAbstractButton::pressed, this, [this](){ pressed(127); });
|
||||
connect(m_ui->pushButton, &QAbstractButton::released, this, &SampleWidget::released);
|
||||
connect(m_ui->toolButtonReload, &QAbstractButton::pressed, this, &SampleWidget::createEffect);
|
||||
|
||||
updateStatus();
|
||||
}
|
||||
|
||||
SampleWidget::~SampleWidget()
|
||||
{
|
||||
if (m_effect)
|
||||
QMetaObject::invokeMethod(m_effect.get(), [effect=m_effect.release()](){ delete effect; });
|
||||
destroyEffect();
|
||||
}
|
||||
|
||||
void SampleWidget::setFile(const QString &presetId, const presets::File &file)
|
||||
@ -112,7 +111,9 @@ void SampleWidget::pressed(quint8 velocity)
|
||||
Q_UNUSED(velocity)
|
||||
|
||||
if (m_effect)
|
||||
{
|
||||
QMetaObject::invokeMethod(m_effect.get(), &QSoundEffect::play);
|
||||
}
|
||||
|
||||
if (m_file && m_file->choke && *m_file->choke)
|
||||
emit chokeTriggered(*m_file->choke);
|
||||
@ -130,8 +131,16 @@ void SampleWidget::forceStop()
|
||||
|
||||
void SampleWidget::setupAudioThread(const QAudioDeviceInfo &device, QThread &thread)
|
||||
{
|
||||
const auto setupEffect = [this,device](){
|
||||
m_effect = std::make_unique<QSoundEffect>(device);
|
||||
m_device = device;
|
||||
m_thread = &thread;
|
||||
|
||||
createEffect();
|
||||
}
|
||||
|
||||
void SampleWidget::createEffect()
|
||||
{
|
||||
QMetaObject::invokeMethod(QAbstractEventDispatcher::instance(m_thread), [this](){
|
||||
m_effect = std::make_unique<QSoundEffect>(m_device);
|
||||
|
||||
connect(m_effect.get(), &QSoundEffect::playingChanged, this, &SampleWidget::updateStatus);
|
||||
connect(m_effect.get(), &QSoundEffect::statusChanged, this, &SampleWidget::updateStatus);
|
||||
@ -141,10 +150,7 @@ void SampleWidget::setupAudioThread(const QAudioDeviceInfo &device, QThread &thr
|
||||
m_effect->setSource(sampleUrl);
|
||||
|
||||
QMetaObject::invokeMethod(this, &SampleWidget::updateStatus);
|
||||
};
|
||||
|
||||
QMetaObject::invokeMethod(QAbstractEventDispatcher::instance(&thread), setupEffect);
|
||||
//setupEffect();
|
||||
});
|
||||
}
|
||||
|
||||
void SampleWidget::updateStatus()
|
||||
@ -183,6 +189,12 @@ void SampleWidget::updateStatus()
|
||||
m_ui->statusLabel->setText(toString(m_effect->status()));
|
||||
}
|
||||
|
||||
void SampleWidget::destroyEffect()
|
||||
{
|
||||
if (m_effect)
|
||||
QMetaObject::invokeMethod(m_effect.get(), [effect=m_effect.release()](){ delete effect; });
|
||||
}
|
||||
|
||||
QUrl SampleWidget::sampleUrl() const
|
||||
{
|
||||
if (!m_file || !m_file->filename)
|
||||
|
@ -3,12 +3,12 @@
|
||||
#include <memory>
|
||||
|
||||
#include <QFrame>
|
||||
#include <QAudioDeviceInfo>
|
||||
|
||||
#include "presets.h"
|
||||
|
||||
namespace Ui { class SampleWidget; }
|
||||
class QThread;
|
||||
class QAudioDeviceInfo;
|
||||
class QSoundEffect;
|
||||
|
||||
class SampleWidget : public QFrame
|
||||
@ -40,9 +40,12 @@ signals:
|
||||
void chokeTriggered(int choke);
|
||||
|
||||
private slots:
|
||||
void createEffect();
|
||||
void updateStatus();
|
||||
|
||||
private:
|
||||
void destroyEffect();
|
||||
|
||||
QUrl sampleUrl() const;
|
||||
|
||||
const std::unique_ptr<Ui::SampleWidget> m_ui;
|
||||
@ -51,4 +54,7 @@ private:
|
||||
std::optional<presets::File> m_file;
|
||||
|
||||
std::unique_ptr<QSoundEffect> m_effect;
|
||||
|
||||
QThread *m_thread{};
|
||||
QAudioDeviceInfo m_device;
|
||||
};
|
||||
|
@ -33,7 +33,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toolButton">
|
||||
<widget class="QToolButton" name="toolButtonReload">
|
||||
<property name="text">
|
||||
<string>↻</string>
|
||||
</property>
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
#include "presets.h"
|
||||
|
||||
SequencerWidget::SequencerWidget(QWidget *parent) :
|
||||
@ -30,6 +32,9 @@ void SequencerWidget::setPreset(const presets::Preset &preset)
|
||||
if (preset.tempo)
|
||||
m_ui->spinBoxTempo->setValue(*preset.tempo);
|
||||
|
||||
for (int i = 0; i < 24; i++)
|
||||
qobject_cast<QLabel*>(m_ui->gridLayout->itemAtPosition(2+(i*2), 0)->widget())->setText(*preset.files->at(i).filename);
|
||||
|
||||
m_selectedSequence = nullptr;
|
||||
m_ui->horizontalSlider->setMaximum(0);
|
||||
|
||||
|
@ -2,12 +2,14 @@
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <array>
|
||||
|
||||
#include <QWidget>
|
||||
#include <QTimer>
|
||||
|
||||
namespace Ui { class SequencerWidget; }
|
||||
namespace presets { class Preset; class Sequence; }
|
||||
class QLabel;
|
||||
|
||||
class SequencerWidget : public QWidget
|
||||
{
|
||||
@ -41,4 +43,5 @@ private:
|
||||
QTimer m_timer;
|
||||
|
||||
int m_pos;
|
||||
std::array<QLabel*, 24> m_sampleLabels;
|
||||
};
|
||||
|
@ -6,16 +6,16 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>412</width>
|
||||
<height>65</height>
|
||||
<width>912</width>
|
||||
<height>611</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,1">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0,0,0,0,1">
|
||||
<item>
|
||||
<widget class="QSpinBox" name="spinBoxTempo">
|
||||
<property name="suffix">
|
||||
@ -62,13 +62,457 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="horizontalSlider">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="horizontalSlider">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>878</width>
|
||||
<height>921</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout" columnstretch="0,0,1">
|
||||
<item row="38" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="34" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="19" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="15" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="41" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="44" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="47" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="29" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="32" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="12" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="27" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="48" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="28" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="18" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="16" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="25" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="40" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="30" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="26" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="43" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="42" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="39" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="21" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="31" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="23" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="37" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="35" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="20" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="17" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="36" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" rowspan="49" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::VLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="33" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="22" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="46" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="45" column="0" colspan="3">
|
||||
<widget class="QFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="24" column="0">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
Reference in New Issue
Block a user