1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "settingsdialog.h"
#include <QCheckBox>
#include <QComboBox>
#include <QDialogButtonBox>
#include <QLabel>
#include <QPushButton>
#include <QSlider>
#include <QSpinBox>
#include <QVBoxLayout>
SettingsDialog::SettingsDialog(const QList<QAudioDevice> &availableInputDevices,
const QList<QAudioDevice> &availableOutputDevices, QWidget *parent)
: QDialog(parent),
m_windowFunction(DefaultWindowFunction),
m_inputDeviceComboBox(new QComboBox(this)),
m_outputDeviceComboBox(new QComboBox(this)),
m_windowFunctionComboBox(new QComboBox(this))
{
QVBoxLayout *dialogLayout = new QVBoxLayout(this);
// Populate combo boxes
for (const QAudioDevice &device : availableInputDevices)
m_inputDeviceComboBox->addItem(device.description(), QVariant::fromValue(device));
for (const QAudioDevice &device : availableOutputDevices)
m_outputDeviceComboBox->addItem(device.description(), QVariant::fromValue(device));
m_windowFunctionComboBox->addItem(tr("None"), QVariant::fromValue(int(NoWindow)));
m_windowFunctionComboBox->addItem("Hann", QVariant::fromValue(int(HannWindow)));
m_windowFunctionComboBox->setCurrentIndex(m_windowFunction);
// Initialize default devices
if (!availableInputDevices.empty())
m_inputDevice = availableInputDevices.front();
if (!availableOutputDevices.empty())
m_outputDevice = availableOutputDevices.front();
// Add widgets to layout
std::unique_ptr<QHBoxLayout> inputDeviceLayout(new QHBoxLayout);
QLabel *inputDeviceLabel = new QLabel(tr("Input device"), this);
inputDeviceLayout->addWidget(inputDeviceLabel);
inputDeviceLayout->addWidget(m_inputDeviceComboBox);
dialogLayout->addLayout(inputDeviceLayout.release());
std::unique_ptr<QHBoxLayout> outputDeviceLayout(new QHBoxLayout);
QLabel *outputDeviceLabel = new QLabel(tr("Output device"), this);
outputDeviceLayout->addWidget(outputDeviceLabel);
outputDeviceLayout->addWidget(m_outputDeviceComboBox);
dialogLayout->addLayout(outputDeviceLayout.release());
std::unique_ptr<QHBoxLayout> windowFunctionLayout(new QHBoxLayout);
QLabel *windowFunctionLabel = new QLabel(tr("Window function"), this);
windowFunctionLayout->addWidget(windowFunctionLabel);
windowFunctionLayout->addWidget(m_windowFunctionComboBox);
dialogLayout->addLayout(windowFunctionLayout.release());
// Connect
connect(m_inputDeviceComboBox, QOverload<int>::of(&QComboBox::activated), this,
&SettingsDialog::inputDeviceChanged);
connect(m_outputDeviceComboBox, QOverload<int>::of(&QComboBox::activated), this,
&SettingsDialog::outputDeviceChanged);
connect(m_windowFunctionComboBox, QOverload<int>::of(&QComboBox::activated), this,
&SettingsDialog::windowFunctionChanged);
// Add standard buttons to layout
QDialogButtonBox *buttonBox = new QDialogButtonBox(this);
buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
dialogLayout->addWidget(buttonBox);
// Connect standard buttons
connect(buttonBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, this,
&SettingsDialog::accept);
connect(buttonBox->button(QDialogButtonBox::Cancel), &QPushButton::clicked, this,
&SettingsDialog::reject);
setLayout(dialogLayout);
}
SettingsDialog::~SettingsDialog() = default;
void SettingsDialog::windowFunctionChanged(int index)
{
m_windowFunction =
static_cast<WindowFunction>(m_windowFunctionComboBox->itemData(index).value<int>());
}
void SettingsDialog::inputDeviceChanged(int index)
{
m_inputDevice = m_inputDeviceComboBox->itemData(index).value<QAudioDevice>();
}
void SettingsDialog::outputDeviceChanged(int index)
{
m_outputDevice = m_outputDeviceComboBox->itemData(index).value<QAudioDevice>();
}
#include "moc_settingsdialog.cpp"
|