Adjust most audio driver settings dialogs

Adjust the dialogs of most audio driver settings dialogs by showing them
in a QGroupBox and adjusting their layouts. All dialogs now use
`QFormLayout` to layout their labels and input widgets.

Technical details
------------------
Introduce `AudioDeviceSetupGroupWidget` which is intended to
functionally replace `AudioDeviceSetupWidget` in the long run. This is
likely a temporary replacement in the sense that
`AudioDeviceSetupGroupWidget` will be renamed to
`AudioDeviceSetupWidget` once the latter has been replaced everywhere.
Both classes are very similar and the only difference is that the former
inherits from `QGroupBox` instead of `TabWidget`.

Adjust the using of AswMap so that it is now defined as a map from
`QString` to `AudioDeviceSetupGroupWidget`.

Use `QFormLayout` to layout the widgets of the setup dialogs instead of
hard coding geometries and placement.

TODOs
------
Adjust the widgets for the SoundIO and SndIo cases. These will be a bit
more effort as they are not compiled on my machine.
This commit is contained in:
Michael Gregorius
2023-07-22 22:55:02 +02:00
parent c06d9d4883
commit b53290344b
18 changed files with 152 additions and 75 deletions

View File

@@ -29,7 +29,7 @@
#ifdef LMMS_HAVE_ALSA
#include "AudioDeviceSetupWidget.h"
#include "AudioDeviceSetupGroupWidget.h"
#include "AudioAlsa.h"
@@ -41,7 +41,7 @@ namespace lmms::gui
class LcdSpinBox;
class AudioAlsaSetupWidget : public AudioDeviceSetupWidget
class AudioAlsaSetupWidget : public AudioDeviceSetupGroupWidget
{
Q_OBJECT

View File

@@ -0,0 +1,49 @@
/*
* AudioDeviceSetupGroupWidget.h - Base class for audio device setup widgets using group box
*
* Copyright (c) 2004-2015 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2004-2015 Michael Gregorius
*
* This file is part of LMMS - https://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program (see COPYING); if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
*/
#ifndef LMMS_GUI_AUDIO_DEVICE_SETUP_GROUP_WIDGET_H
#define LMMS_GUI_AUDIO_DEVICE_SETUP_GROUP_WIDGET_H
#include <QGroupBox>
namespace lmms::gui
{
class AudioDeviceSetupGroupWidget : public QGroupBox
{
Q_OBJECT
public:
AudioDeviceSetupGroupWidget( const QString & _caption, QWidget * _parent );
~AudioDeviceSetupGroupWidget() override = default;
virtual void saveSettings() = 0;
virtual void show();
};
} // namespace lmms::gui
#endif // LMMS_GUI_AUDIO_DEVICE_SETUP_GROUP_WIDGET_H

View File

@@ -26,7 +26,7 @@
#define LMMS_AUDIO_DUMMY_H
#include "AudioDevice.h"
#include "AudioDeviceSetupWidget.h"
#include "AudioDeviceSetupGroupWidget.h"
#include "AudioEngine.h"
#include "MicroTimer.h"
@@ -54,11 +54,11 @@ public:
}
class setupWidget : public gui::AudioDeviceSetupWidget
class setupWidget : public gui::AudioDeviceSetupGroupWidget
{
public:
setupWidget( QWidget * _parent ) :
gui::AudioDeviceSetupWidget( AudioDummy::name(), _parent )
gui::AudioDeviceSetupGroupWidget( AudioDummy::name(), _parent )
{
}

View File

@@ -38,7 +38,7 @@
#include <QVector>
#include "AudioDevice.h"
#include "AudioDeviceSetupWidget.h"
#include "AudioDeviceSetupGroupWidget.h"
class QLineEdit;
@@ -74,7 +74,7 @@ public:
}
class setupWidget : public gui::AudioDeviceSetupWidget
class setupWidget : public gui::AudioDeviceSetupGroupWidget
{
public:
setupWidget( QWidget * _parent );

View File

@@ -32,7 +32,7 @@
#include <QThread>
#include "AudioDevice.h"
#include "AudioDeviceSetupWidget.h"
#include "AudioDeviceSetupGroupWidget.h"
class QLineEdit;
@@ -61,7 +61,7 @@ public:
static QString probeDevice();
class setupWidget : public gui::AudioDeviceSetupWidget
class setupWidget : public gui::AudioDeviceSetupGroupWidget
{
public:
setupWidget( QWidget * _parent );

View File

@@ -35,7 +35,7 @@
# include <portaudio.h>
# include "AudioDevice.h"
# include "AudioDeviceSetupWidget.h"
# include "AudioDeviceSetupGroupWidget.h"
# if defined paNeverDropInput || defined paNonInterleaved
# define PORTAUDIO_V19
@@ -90,7 +90,7 @@ public:
unsigned long _framesPerBuffer );
class setupWidget : public gui::AudioDeviceSetupWidget
class setupWidget : public gui::AudioDeviceSetupGroupWidget
{
public:
setupWidget( QWidget * _parent );

View File

@@ -34,7 +34,7 @@
#include <QThread>
#include "AudioDevice.h"
#include "AudioDeviceSetupWidget.h"
#include "AudioDeviceSetupGroupWidget.h"
class QLineEdit;
@@ -62,7 +62,7 @@ public:
static QString probeDevice();
class setupWidget : public gui::AudioDeviceSetupWidget
class setupWidget : public gui::AudioDeviceSetupGroupWidget
{
public:
setupWidget( QWidget * _parent );

View File

@@ -37,7 +37,7 @@
#endif
#include "AudioDevice.h"
#include "AudioDeviceSetupWidget.h"
#include "AudioDeviceSetupGroupWidget.h"
class QLineEdit;
@@ -57,7 +57,7 @@ public:
}
class setupWidget : public gui::AudioDeviceSetupWidget
class setupWidget : public gui::AudioDeviceSetupGroupWidget
{
public:
setupWidget( QWidget * _parent );

View File

@@ -29,7 +29,7 @@
#include <QMap>
#include "AudioDevice.h"
#include "AudioDeviceSetupWidget.h"
#include "AudioDeviceSetupGroupWidget.h"
#include "lmmsconfig.h"
#include "MidiClient.h"
#include "MidiSetupWidget.h"
@@ -166,7 +166,7 @@ private:
bool m_vstAlwaysOnTop;
bool m_disableAutoQuit;
using AswMap = QMap<QString, AudioDeviceSetupWidget*>;
using AswMap = QMap<QString, AudioDeviceSetupGroupWidget*>;
using MswMap = QMap<QString, MidiSetupWidget*>;
using trMap = QMap<QString, QString>;

View File

@@ -27,8 +27,8 @@
#ifdef LMMS_HAVE_JACK
#include <QLineEdit>
#include <QLabel>
#include <QMessageBox>
#include <QFormLayout>
#include "Engine.h"
#include "GuiApplication.h"
@@ -452,19 +452,18 @@ void AudioJack::shutdownCallback( void * _udata )
AudioJack::setupWidget::setupWidget( QWidget * _parent ) :
AudioDeviceSetupWidget( AudioJack::name(), _parent )
AudioDeviceSetupGroupWidget( AudioJack::name(), _parent )
{
QFormLayout * form = new QFormLayout(this);
QString cn = ConfigManager::inst()->value( "audiojack", "clientname" );
if( cn.isEmpty() )
{
cn = "lmms";
}
m_clientName = new QLineEdit( cn, this );
m_clientName->setGeometry( 10, 20, 160, 20 );
auto cn_lbl = new QLabel(tr("Client name"), this);
cn_lbl->setFont( pointSize<7>( cn_lbl->font() ) );
cn_lbl->setGeometry( 10, 40, 160, 10 );
form->addRow(tr("Client name"), m_clientName);
auto m = new gui::LcdSpinBoxModel(/* this */);
m->setRange( DEFAULT_CHANNELS, SURROUND_CHANNELS );
@@ -474,8 +473,8 @@ AudioJack::setupWidget::setupWidget( QWidget * _parent ) :
m_channels = new gui::LcdSpinBox( 1, this );
m_channels->setModel( m );
m_channels->setLabel( tr( "Channels" ) );
m_channels->move( 180, 20 );
form->addRow(tr("Channels"), m_channels);
}

View File

@@ -27,7 +27,7 @@
#ifdef LMMS_HAVE_OSS
#include <QFileInfo>
#include <QLabel>
#include <QFormLayout>>
#include <QLineEdit>
#include "endian_handling.h"
@@ -318,14 +318,13 @@ void AudioOss::run()
AudioOss::setupWidget::setupWidget( QWidget * _parent ) :
AudioDeviceSetupWidget( AudioOss::name(), _parent )
AudioDeviceSetupGroupWidget( AudioOss::name(), _parent )
{
m_device = new QLineEdit( probeDevice(), this );
m_device->setGeometry( 10, 20, 160, 20 );
QFormLayout * form = new QFormLayout(this);
auto dev_lbl = new QLabel(tr("Device"), this);
dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) );
dev_lbl->setGeometry( 10, 40, 160, 10 );
m_device = new QLineEdit( probeDevice(), this );
form->addRow(tr("Device"), m_device);
auto m = new gui::LcdSpinBoxModel(/* this */);
m->setRange( DEFAULT_CHANNELS, SURROUND_CHANNELS );
@@ -335,9 +334,8 @@ AudioOss::setupWidget::setupWidget( QWidget * _parent ) :
m_channels = new gui::LcdSpinBox( 1, this );
m_channels->setModel( m );
m_channels->setLabel( tr( "Channels" ) );
m_channels->move( 180, 20 );
form->addRow(tr("Channels"), m_channels);
}

View File

@@ -49,7 +49,7 @@ void AudioPortAudioSetupUtil::updateChannels()
#ifdef LMMS_HAVE_PORTAUDIO
#include <QLabel>
#include <QFormLayout>
#include "Engine.h"
#include "ConfigManager.h"
@@ -415,23 +415,17 @@ void AudioPortAudioSetupUtil::updateChannels()
AudioPortAudio::setupWidget::setupWidget( QWidget * _parent ) :
AudioDeviceSetupWidget( AudioPortAudio::name(), _parent )
AudioDeviceSetupGroupWidget( AudioPortAudio::name(), _parent )
{
using gui::ComboBox;
m_backend = new ComboBox( this, "BACKEND" );
m_backend->setGeometry( 64, 15, 260, ComboBox::DEFAULT_HEIGHT );
QFormLayout * form = new QFormLayout(this);
auto backend_lbl = new QLabel(tr("Backend"), this);
backend_lbl->setFont( pointSize<7>( backend_lbl->font() ) );
backend_lbl->move( 8, 18 );
m_backend = new ComboBox( this, "BACKEND" );
form->addRow(tr("Backend"), m_backend);
m_device = new ComboBox( this, "DEVICE" );
m_device->setGeometry( 64, 35, 260, ComboBox::DEFAULT_HEIGHT );
auto dev_lbl = new QLabel(tr("Device"), this);
dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) );
dev_lbl->move( 8, 38 );
form->addRow(tr("Device"), m_device);
/* LcdSpinBoxModel * m = new LcdSpinBoxModel( );
m->setRange( DEFAULT_CHANNELS, SURROUND_CHANNELS );
@@ -505,7 +499,7 @@ void AudioPortAudio::setupWidget::show()
m_setupUtil.m_deviceModel.setValue( i );
}
AudioDeviceSetupWidget::show();
AudioDeviceSetupGroupWidget::show();
}
} // namespace lmms

View File

@@ -23,7 +23,7 @@
*/
#include <QLineEdit>
#include <QLabel>
#include <QFormLayout>
#include "AudioPulseAudio.h"
@@ -310,26 +310,23 @@ void AudioPulseAudio::signalConnected( bool connected )
AudioPulseAudio::setupWidget::setupWidget( QWidget * _parent ) :
AudioDeviceSetupWidget( AudioPulseAudio::name(), _parent )
AudioDeviceSetupGroupWidget( AudioPulseAudio::name(), _parent )
{
QFormLayout * form = new QFormLayout(this);
m_device = new QLineEdit( AudioPulseAudio::probeDevice(), this );
m_device->setGeometry( 10, 20, 160, 20 );
form->addRow(tr("Device"), m_device);
auto dev_lbl = new QLabel(tr("Device"), this);
dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) );
dev_lbl->setGeometry( 10, 40, 160, 10 );
auto m = new gui::LcdSpinBoxModel(/* this */);
auto m = new gui::LcdSpinBoxModel();
m->setRange( DEFAULT_CHANNELS, SURROUND_CHANNELS );
m->setStep( 2 );
m->setValue( ConfigManager::inst()->value( "audiopa",
"channels" ).toInt() );
"channels" ).toInt() );
m_channels = new gui::LcdSpinBox( 1, this );
m_channels->setModel( m );
m_channels->setLabel( tr( "Channels" ) );
m_channels->move( 180, 20 );
form->addRow(tr("Channels"), m_channels);
}

View File

@@ -26,7 +26,7 @@
#ifdef LMMS_HAVE_SDL
#include <QLabel>
#include <QFormLayout>>
#include <QLineEdit>
#include <SDL.h>
@@ -325,16 +325,14 @@ void AudioSdl::sdlInputAudioCallback(Uint8 *_buf, int _len) {
#endif
AudioSdl::setupWidget::setupWidget( QWidget * _parent ) :
AudioDeviceSetupWidget( AudioSdl::name(), _parent )
AudioDeviceSetupGroupWidget( AudioSdl::name(), _parent )
{
QFormLayout * form = new QFormLayout(this);
QString dev = ConfigManager::inst()->value( "audiosdl", "device" );
m_device = new QLineEdit( dev, this );
m_device->setGeometry( 10, 20, 160, 20 );
auto dev_lbl = new QLabel(tr("Device"), this);
dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) );
dev_lbl->setGeometry( 10, 40, 160, 10 );
form->addRow(tr("Device"), m_device);
}

View File

@@ -23,7 +23,7 @@
*/
#include <QComboBox>
#include <QLabel>
#include <QFormLayout>
#include "AudioAlsaSetupWidget.h"
@@ -37,9 +37,11 @@ namespace lmms::gui
{
AudioAlsaSetupWidget::AudioAlsaSetupWidget( QWidget * _parent ) :
AudioDeviceSetupWidget( AudioAlsa::name(), _parent ),
AudioDeviceSetupGroupWidget( AudioAlsa::name(), _parent ),
m_selectedDevice(-1)
{
QFormLayout * form = new QFormLayout(this);
m_deviceInfos = AudioAlsa::getAvailableDevices();
QString deviceText = ConfigManager::inst()->value( "audioalsa", "device" );
@@ -62,14 +64,11 @@ AudioAlsaSetupWidget::AudioAlsaSetupWidget( QWidget * _parent ) :
m_selectedDevice = m_deviceComboBox->currentIndex();
m_deviceComboBox->setGeometry( 10, 20, 160, 20 );
connect(m_deviceComboBox,
SIGNAL(currentIndexChanged(int)),
SLOT(onCurrentIndexChanged(int)));
auto dev_lbl = new QLabel(tr("DEVICE"), this);
dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) );
dev_lbl->setGeometry( 10, 40, 160, 10 );
form->addRow(tr("Device"), m_deviceComboBox);
auto m = new LcdSpinBoxModel(/* this */);
m->setRange( DEFAULT_CHANNELS, SURROUND_CHANNELS );
@@ -79,9 +78,8 @@ AudioAlsaSetupWidget::AudioAlsaSetupWidget( QWidget * _parent ) :
m_channels = new LcdSpinBox( 1, this );
m_channels->setModel( m );
m_channels->setLabel( tr( "CHANNELS" ) );
m_channels->move( 180, 20 );
form->addRow(tr("Channels"), m_channels);
}

View File

@@ -0,0 +1,42 @@
/*
* AudioDeviceSetupGroupWidget.cpp - Base class for audio device setup widgets using group box
*
* Copyright (c) 2004-2015 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2004-2015 Michael Gregorius
*
* This file is part of LMMS - https://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program (see COPYING); if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
*/
#include "AudioDeviceSetupGroupWidget.h"
namespace lmms::gui
{
AudioDeviceSetupGroupWidget::AudioDeviceSetupGroupWidget(const QString & caption, QWidget * parent) :
QGroupBox(QGroupBox::tr("Settings for %1").arg(tr(caption.toUtf8())), parent)
{
}
void AudioDeviceSetupGroupWidget::show()
{
parentWidget()->show();
QWidget::show();
}
} // namespace lmms::gui

View File

@@ -3,6 +3,7 @@ SET(LMMS_SRCS
gui/ActionGroup.cpp
gui/AudioAlsaSetupWidget.cpp
gui/AudioDeviceSetupWidget.cpp
gui/AudioDeviceSetupGroupWidget.cpp
gui/AutomatableModelView.cpp
gui/ControlLayout.cpp
gui/ControllerDialog.cpp

View File

@@ -466,7 +466,6 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) :
// Ifaces-settings-widget.
auto as_w = new QWidget(audio_w);
as_w->setFixedHeight(60);
auto as_w_layout = new QHBoxLayout(as_w);
as_w_layout->setSpacing(0);
@@ -492,6 +491,7 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) :
new AudioPortAudio::setupWidget(as_w);
#endif
// TODO !!!
#ifdef LMMS_HAVE_SOUNDIO
m_audioIfaceSetupWidgets[AudioSoundIo::name()] =
new AudioSoundIo::setupWidget(as_w);
@@ -507,6 +507,7 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) :
new AudioOss::setupWidget(as_w);
#endif
// TODO !!!
#ifdef LMMS_HAVE_SNDIO
m_audioIfaceSetupWidgets[AudioSndio::name()] =
new AudioSndio::setupWidget(as_w);
@@ -520,7 +521,7 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) :
it != m_audioIfaceSetupWidgets.end(); ++it)
{
m_audioIfaceNames[
AudioDeviceSetupWidget::tr(it.key().toUtf8())] = it.key();
AudioDeviceSetupGroupWidget::tr(it.key().toUtf8())] = it.key();
}
for(trMap::iterator it = m_audioIfaceNames.begin();
it != m_audioIfaceNames.end(); ++it)