From 4908bfe1a646ce1b9687c83dd05b4a9d30471ac3 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sun, 16 Jul 2023 14:11:24 +0200 Subject: [PATCH 01/18] Scalable Setup Dialog Make the setup dialog resizable and use widgets that dynamically adjust to the font size set by the user. Current status of the tabs: * General: Done * Performance: Plugins group needs adjustments * Audio: Individual settings dialogs need adjustments * MIDI: Not started yet * Paths: Done The "Autosave" and "Buffer size" tabs have been slightly redesigned so that the revert/reset button is next to the slider. Technical details ------------------ Setting a fixed size has been removed from the setup dialog so that it can be resized. The settings widget (`settings_w`) now has a layout to which the sub dialogs are added. This is done so that the layout sizes are propagated upwards, i.e. all widgets along the chain now have a layout so that size hints are determined correctly. Instances of `TabWidget` are replaced with instances of `QGroupBox`. Each group box has a layout to which its children, e.g. check boxes, are added. These group boxes are then added to the layouts of their parents. Doing so also removes the need to count how many instances have been added and calculations on where to put the children. Instances of `LedCheckBox` are replaced with instances of `QCheckBox`. This is done in the new helper lambda `addCheckBox`. It's very similar to the previously used `addLedCheckBox` but creates a `QCheckBox` instead of a `LedCheckBox`. It returns the created `QCheckBox` as a result. If a layout is provided the created check box is also added to the layout before it is returned. The helper lambda `addPathEntry` has been adjusted to create a `QGroupBox` and to put all its children in a layout. The helper method `labelWidget` has been adjusted to not set the font size of the label. The method `TabBar::addTab` had to be extended with a new default parameter which controls if the added widget is fixed to the size of it's parent or not. In the case of the setup dialog we do not want this. So far the method is only used by the setup dialog and the `LadspaBrowser` class. So once the `LadspaBrowser` has been made resizable the default parameter can be removed again and treated as always being set to false. Add `QCheckBox` to the `style.css` so that it does not get a green font due to the palette magic that's done. --- data/themes/default/style.css | 2 +- include/SetupDialog.h | 5 +- include/TabBar.h | 7 +- src/gui/modals/SetupDialog.cpp | 254 ++++++++++++++++++--------------- src/gui/widgets/TabBar.cpp | 12 +- 5 files changed, 153 insertions(+), 127 deletions(-) diff --git a/data/themes/default/style.css b/data/themes/default/style.css index a9646cfe4..ee5681f43 100644 --- a/data/themes/default/style.css +++ b/data/themes/default/style.css @@ -3,7 +3,7 @@ ********************/ /* most foreground text items */ -QLabel, QTreeWidget, QListWidget, QGroupBox, QMenuBar { +QLabel, QTreeWidget, QListWidget, QGroupBox, QMenuBar, QCheckBox { color: #d1d8e4; } diff --git a/include/SetupDialog.h b/include/SetupDialog.h index 27a4ce4f9..7fa59d244 100644 --- a/include/SetupDialog.h +++ b/include/SetupDialog.h @@ -40,6 +40,7 @@ class QComboBox; class QLabel; class QLineEdit; class QSlider; +class QCheckBox; namespace lmms::gui @@ -155,8 +156,8 @@ private: bool m_enableRunningAutoSave; QSlider * m_saveIntervalSlider; QLabel * m_saveIntervalLbl; - LedCheckBox * m_autoSave; - LedCheckBox * m_runningAutoSave; + QCheckBox * m_autoSave; + QCheckBox * m_runningAutoSave; bool m_smoothScroll; bool m_animateAFP; QLabel * m_vstEmbedLbl; diff --git a/include/TabBar.h b/include/TabBar.h index fa2703287..29c100e0c 100644 --- a/include/TabBar.h +++ b/include/TabBar.h @@ -49,7 +49,12 @@ public: TabButton * addTab( QWidget * _w, const QString & _text, int _id, bool _add_stretch = false, - bool _text_is_tooltip = false ); + bool _text_is_tooltip = false, + // TODO Remove fixWidgetToParentSize once it is used + // with false everywhere. + // At the time of writing it is only used in + // LadspaBrowser with default parameters. + bool fixWidgetToParentSize = true ); void removeTab( int _id ); inline void setExclusive( bool _on ) diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 33505c399..97de349c4 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include "AudioDeviceSetupWidget.h" #include "AudioEngine.h" @@ -79,13 +81,12 @@ inline void labelWidget(QWidget * w, const QString & txt) auto title = new QLabel(txt, w); QFont f = title->font(); f.setBold(true); - title->setFont(pointSize<12>(f)); + title->setFont(f); + QBoxLayout * boxLayout = dynamic_cast(w->layout()); + assert(boxLayout); - assert(dynamic_cast(w->layout()) != nullptr); - - dynamic_cast(w->layout())->addSpacing(5); - dynamic_cast(w->layout())->addWidget(title); + boxLayout->addWidget(title); } @@ -162,7 +163,6 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : // TODO: Equivalent to the new setWindowFlag(Qt::WindowContextHelpButtonHint, false) setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setModal(true); - setFixedSize(454, 400); Engine::projectJournal()->setJournalling(false); @@ -191,7 +191,8 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : // Settings widget. auto settings_w = new QWidget(main_w); - settings_w->setFixedSize(360, 360); + + QVBoxLayout * settingsLayout = new QVBoxLayout(settings_w); // General widget. auto general_w = new QWidget(settings_w); @@ -212,6 +213,7 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : auto generalControlsLayout = new QVBoxLayout; generalControlsLayout->setSpacing(10); + // TODO Remove once it is not used anymore auto addLedCheckBox = [&XDelta, &YDelta, this](const QString& ledText, TabWidget* tw, int& counter, bool initialState, const char* toggledSlot, bool showRestartWarning) { auto checkBox = new LedCheckBox(ledText, tw); @@ -225,63 +227,77 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : } }; - int counter = 0; + auto addCheckBox = [this](const QString& ledText, QWidget* parent, QBoxLayout * layout, + bool initialState, const char* toggledSlot, bool showRestartWarning) -> QCheckBox * { + auto checkBox = new QCheckBox(ledText, parent); + checkBox->setChecked(initialState); + connect(checkBox, SIGNAL(toggled(bool)), this, toggledSlot); + + if (showRestartWarning) + { + connect(checkBox, SIGNAL(toggled(bool)), this, SLOT(showRestartWarning())); + } + + if (layout) + { + layout->addWidget(checkBox); + } + + return checkBox; + }; // GUI tab. - auto gui_tw = new TabWidget(tr("Graphical user interface (GUI)"), generalControls); + QGroupBox * guiGroupBox = new QGroupBox(tr("Graphical user interface (GUI)"), generalControls); + QVBoxLayout * guiGroupLayout = new QVBoxLayout(guiGroupBox); - addLedCheckBox(tr("Display volume as dBFS "), gui_tw, counter, + addCheckBox(tr("Display volume as dBFS "), guiGroupBox, guiGroupLayout, m_displaydBFS, SLOT(toggleDisplaydBFS(bool)), true); - addLedCheckBox(tr("Enable tooltips"), gui_tw, counter, + addCheckBox(tr("Enable tooltips"), guiGroupBox, guiGroupLayout, m_tooltips, SLOT(toggleTooltips(bool)), true); - addLedCheckBox(tr("Enable master oscilloscope by default"), gui_tw, counter, + addCheckBox(tr("Enable master oscilloscope by default"), guiGroupBox, guiGroupLayout, m_displayWaveform, SLOT(toggleDisplayWaveform(bool)), true); - addLedCheckBox(tr("Enable all note labels in piano roll"), gui_tw, counter, + addCheckBox(tr("Enable all note labels in piano roll"), guiGroupBox, guiGroupLayout, m_printNoteLabels, SLOT(toggleNoteLabels(bool)), false); - addLedCheckBox(tr("Enable compact track buttons"), gui_tw, counter, + addCheckBox(tr("Enable compact track buttons"), guiGroupBox, guiGroupLayout, m_compactTrackButtons, SLOT(toggleCompactTrackButtons(bool)), true); - addLedCheckBox(tr("Enable one instrument-track-window mode"), gui_tw, counter, + addCheckBox(tr("Enable one instrument-track-window mode"), guiGroupBox, guiGroupLayout, m_oneInstrumentTrackWindow, SLOT(toggleOneInstrumentTrackWindow(bool)), true); - addLedCheckBox(tr("Show sidebar on the right-hand side"), gui_tw, counter, + addCheckBox(tr("Show sidebar on the right-hand side"), guiGroupBox, guiGroupLayout, m_sideBarOnRight, SLOT(toggleSideBarOnRight(bool)), true); - addLedCheckBox(tr("Let sample previews continue when mouse is released"), gui_tw, counter, + addCheckBox(tr("Let sample previews continue when mouse is released"), guiGroupBox, guiGroupLayout, m_letPreviewsFinish, SLOT(toggleLetPreviewsFinish(bool)), false); - addLedCheckBox(tr("Mute automation tracks during solo"), gui_tw, counter, + addCheckBox(tr("Mute automation tracks during solo"), guiGroupBox, guiGroupLayout, m_soloLegacyBehavior, SLOT(toggleSoloLegacyBehavior(bool)), false); - addLedCheckBox(tr("Show warning when deleting tracks"), gui_tw, counter, + addCheckBox(tr("Show warning when deleting tracks"), guiGroupBox, guiGroupLayout, m_trackDeletionWarning, SLOT(toggleTrackDeletionWarning(bool)), false); - addLedCheckBox(tr("Show warning when deleting a mixer channel that is in use"), gui_tw, counter, + addCheckBox(tr("Show warning when deleting a mixer channel that is in use"), guiGroupBox, guiGroupLayout, m_mixerChannelDeletionWarning, SLOT(toggleMixerChannelDeletionWarning(bool)), false); - gui_tw->setFixedHeight(YDelta + YDelta * counter); + generalControlsLayout->addWidget(guiGroupBox); - generalControlsLayout->addWidget(gui_tw); generalControlsLayout->addSpacing(10); - - counter = 0; - // Projects tab. - auto projects_tw = new TabWidget(tr("Projects"), generalControls); + QGroupBox * projectsGroupBox = new QGroupBox(tr("Projects"), generalControls); + QVBoxLayout * projectsGroupLayout = new QVBoxLayout(projectsGroupBox); - addLedCheckBox(tr("Compress project files by default"), projects_tw, counter, + addCheckBox(tr("Compress project files by default"), projectsGroupBox, projectsGroupLayout, m_MMPZ, SLOT(toggleMMPZ(bool)), true); - addLedCheckBox(tr("Create a backup file when saving a project"), projects_tw, counter, + addCheckBox(tr("Create a backup file when saving a project"), projectsGroupBox, projectsGroupLayout, m_disableBackup, SLOT(toggleDisableBackup(bool)), false); - addLedCheckBox(tr("Reopen last project on startup"), projects_tw, counter, + addCheckBox(tr("Reopen last project on startup"), projectsGroupBox, projectsGroupLayout, m_openLastProject, SLOT(toggleOpenLastProject(bool)), false); - projects_tw->setFixedHeight(YDelta + YDelta * counter); + generalControlsLayout->addWidget(projectsGroupBox); - generalControlsLayout->addWidget(projects_tw); generalControlsLayout->addSpacing(10); - // Language tab. - auto lang_tw = new TabWidget(tr("Language"), generalControls); - lang_tw->setFixedHeight(48); - auto changeLang = new QComboBox(lang_tw); - changeLang->move(XDelta, 20); + QGroupBox * languageGroupBox = new QGroupBox(tr("Language"), generalControls); + QVBoxLayout * languageGroupLayout = new QVBoxLayout(languageGroupBox); + + auto changeLang = new QComboBox(languageGroupBox); + languageGroupLayout->addWidget(changeLang); QDir dir(ConfigManager::inst()->localeDir()); QStringList fileNames = dir.entryList(QStringList("*.qm")); @@ -333,7 +349,7 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : connect(changeLang, SIGNAL(currentIndexChanged(int)), this, SLOT(showRestartWarning())); - generalControlsLayout->addWidget(lang_tw); + generalControlsLayout->addWidget(languageGroupBox); generalControlsLayout->addSpacing(10); // General layout ordering. @@ -341,7 +357,9 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : generalControls->setLayout(generalControlsLayout); generalScroll->setWidget(generalControls); generalScroll->setWidgetResizable(true); - general_layout->addWidget(generalScroll); + general_layout->addWidget(generalScroll, 1); + + // TODO Does not really seem to be needed general_layout->addStretch(); @@ -357,61 +375,54 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : // Autosave tab. - auto auto_save_tw = new TabWidget(tr("Autosave"), performance_w); - auto_save_tw->setFixedHeight(106); + QGroupBox * autoSaveBox = new QGroupBox(tr("Autosave"), performance_w); + QVBoxLayout * autoSaveLayout = new QVBoxLayout(autoSaveBox); + QHBoxLayout * autoSaveSubLayout = new QHBoxLayout(); - m_saveIntervalSlider = new QSlider(Qt::Horizontal, auto_save_tw); + m_saveIntervalSlider = new QSlider(Qt::Horizontal, autoSaveBox); m_saveIntervalSlider->setValue(m_saveInterval); m_saveIntervalSlider->setRange(1, 20); m_saveIntervalSlider->setTickInterval(1); m_saveIntervalSlider->setPageStep(1); - m_saveIntervalSlider->setGeometry(10, 18, 340, 18); m_saveIntervalSlider->setTickPosition(QSlider::TicksBelow); connect(m_saveIntervalSlider, SIGNAL(valueChanged(int)), this, SLOT(setAutoSaveInterval(int))); - m_saveIntervalLbl = new QLabel(auto_save_tw); - m_saveIntervalLbl->setGeometry(10, 40, 200, 24); - setAutoSaveInterval(m_saveIntervalSlider->value()); - - m_autoSave = new LedCheckBox( - tr("Enable autosave"), auto_save_tw); - m_autoSave->move(10, 70); - m_autoSave->setChecked(m_enableAutoSave); - connect(m_autoSave, SIGNAL(toggled(bool)), - this, SLOT(toggleAutoSave(bool))); - - m_runningAutoSave = new LedCheckBox( - tr("Allow autosave while playing"), auto_save_tw); - m_runningAutoSave->move(20, 88); - m_runningAutoSave->setChecked(m_enableRunningAutoSave); - connect(m_runningAutoSave, SIGNAL(toggled(bool)), - this, SLOT(toggleRunningAutoSave(bool))); - - auto autoSaveResetBtn = new QPushButton(embed::getIconPixmap("reload"), "", auto_save_tw); - autoSaveResetBtn->setGeometry(320, 70, 28, 28); + auto autoSaveResetBtn = new QPushButton(embed::getIconPixmap("reload"), "", autoSaveBox); connect(autoSaveResetBtn, SIGNAL(clicked()), - this, SLOT(resetAutoSave())); + this, SLOT(resetAutoSave())); + + autoSaveSubLayout->addWidget(m_saveIntervalSlider); + autoSaveSubLayout->addWidget(autoSaveResetBtn); + + autoSaveLayout->addLayout(autoSaveSubLayout); + + m_saveIntervalLbl = new QLabel(autoSaveBox); + setAutoSaveInterval(m_saveIntervalSlider->value()); + autoSaveLayout->addWidget(m_saveIntervalLbl); + + m_autoSave = addCheckBox(tr("Enable autosave"), autoSaveBox, autoSaveLayout, + m_enableAutoSave, SLOT(toggleAutoSave(bool)), false); + + m_runningAutoSave = addCheckBox(tr("Allow autosave while playing"), autoSaveBox, autoSaveLayout, + m_enableRunningAutoSave, SLOT(toggleRunningAutoSave(bool)), false); m_saveIntervalSlider->setEnabled(m_enableAutoSave); m_runningAutoSave->setVisible(m_enableAutoSave); - counter = 0; - // UI effect vs. performance tab. - auto ui_fx_tw = new TabWidget(tr("User interface (UI) effects vs. performance"), performance_w); + QGroupBox * uiFxBox = new QGroupBox(tr("User interface (UI) effects vs. performance"), performance_w); + QVBoxLayout * uiFxLayout = new QVBoxLayout(uiFxBox); - addLedCheckBox(tr("Smooth scroll in song editor"), ui_fx_tw, counter, + addCheckBox(tr("Smooth scroll in song editor"), uiFxBox, uiFxLayout, m_smoothScroll, SLOT(toggleSmoothScroll(bool)), false); - addLedCheckBox(tr("Display playback cursor in AudioFileProcessor"), ui_fx_tw, counter, + addCheckBox(tr("Display playback cursor in AudioFileProcessor"), uiFxBox, uiFxLayout, m_animateAFP, SLOT(toggleAnimateAFP(bool)), false); - ui_fx_tw->setFixedHeight(YDelta + YDelta * counter); - - counter = 0; + int counter = 0; // Plugins tab. auto plugins_tw = new TabWidget(tr("Plugins"), performance_w); @@ -458,8 +469,8 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : // Performance layout ordering. - performance_layout->addWidget(auto_save_tw); - performance_layout->addWidget(ui_fx_tw); + performance_layout->addWidget(autoSaveBox); + performance_layout->addWidget(uiFxBox); performance_layout->addWidget(plugins_tw); performance_layout->addStretch(); @@ -473,13 +484,12 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : labelWidget(audio_w, tr("Audio")); - // Audio interface tab. - auto audioiface_tw = new TabWidget(tr("Audio interface"), audio_w); - audioiface_tw->setFixedHeight(56); - - m_audioInterfaces = new QComboBox(audioiface_tw); - m_audioInterfaces->setGeometry(10, 20, 240, 28); + // Audio interface group + QGroupBox * audioInterfaceBox = new QGroupBox(tr("Audio interface"), audio_w); + QVBoxLayout * audioInterfaceLayout = new QVBoxLayout(audioInterfaceBox); + m_audioInterfaces = new QComboBox(audioInterfaceBox); + audioInterfaceLayout->addWidget(m_audioInterfaces); // Ifaces-settings-widget. auto as_w = new QWidget(audio_w); @@ -569,24 +579,20 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : useNaNHandler->setChecked(m_NaNHandler); } - // HQ mode LED. - auto hqaudio = new LedCheckBox(tr("HQ mode for output audio device"), audio_w); - hqaudio->move(10, 0); - hqaudio->setChecked(m_hqAudioDev); - connect(hqaudio, SIGNAL(toggled(bool)), - this, SLOT(toggleHQAudioDev(bool))); + // HQ mode checkbox + auto hqaudio = addCheckBox(tr("HQ mode for output audio device"), audioInterfaceBox, nullptr, + m_hqAudioDev, SLOT(toggleHQAudioDev(bool)), false); + // Buffer size group + QGroupBox * bufferSizeBox = new QGroupBox(tr("Buffer size"), audio_w); + QVBoxLayout * bufferSizeLayout = new QVBoxLayout(bufferSizeBox); + QHBoxLayout * bufferSizeSubLayout = new QHBoxLayout(); - // Buffer size tab. - auto bufferSize_tw = new TabWidget(tr("Buffer size"), audio_w); - bufferSize_tw->setFixedHeight(76); - - m_bufferSizeSlider = new QSlider(Qt::Horizontal, bufferSize_tw); + m_bufferSizeSlider = new QSlider(Qt::Horizontal, bufferSizeBox); m_bufferSizeSlider->setRange(1, 128); m_bufferSizeSlider->setTickInterval(8); m_bufferSizeSlider->setPageStep(8); m_bufferSizeSlider->setValue(m_bufferSize / BUFFERSIZE_RESOLUTION); - m_bufferSizeSlider->setGeometry(10, 18, 340, 18); m_bufferSizeSlider->setTickPosition(QSlider::TicksBelow); connect(m_bufferSizeSlider, SIGNAL(valueChanged(int)), @@ -594,23 +600,28 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : connect(m_bufferSizeSlider, SIGNAL(valueChanged(int)), this, SLOT(showRestartWarning())); - m_bufferSizeLbl = new QLabel(bufferSize_tw); - m_bufferSizeLbl->setGeometry(10, 40, 200, 24); + bufferSizeSubLayout->addWidget(m_bufferSizeSlider, 1); + + auto bufferSize_reset_btn = new QPushButton(embed::getIconPixmap("reload"), "", bufferSizeBox); + connect(bufferSize_reset_btn, SIGNAL(clicked()), + this, SLOT(resetBufferSize())); + bufferSize_reset_btn->setToolTip( + tr("Reset to default value")); + + bufferSizeSubLayout->addWidget(bufferSize_reset_btn); + bufferSizeLayout->addLayout(bufferSizeSubLayout); + + m_bufferSizeLbl = new QLabel(bufferSizeBox); setBufferSize(m_bufferSizeSlider->value()); - auto bufferSize_reset_btn = new QPushButton(embed::getIconPixmap("reload"), "", bufferSize_tw); - bufferSize_reset_btn->setGeometry(320, 40, 28, 28); - connect(bufferSize_reset_btn, SIGNAL(clicked()), - this, SLOT(resetBufferSize())); - bufferSize_reset_btn->setToolTip( - tr("Reset to default value")); + bufferSizeLayout->addWidget(m_bufferSizeLbl); // Audio layout ordering. - audio_layout->addWidget(audioiface_tw); + audio_layout->addWidget(audioInterfaceBox); audio_layout->addWidget(as_w); audio_layout->addWidget(hqaudio); - audio_layout->addWidget(bufferSize_tw); + audio_layout->addWidget(bufferSizeBox); audio_layout->addStretch(); @@ -749,29 +760,28 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : // Path selectors widget. auto pathSelectors = new QWidget(paths_w); - const int txtLength = 284; - const int btnStart = 300; - // Path selectors layout. auto pathSelectorsLayout = new QVBoxLayout; pathSelectorsLayout->setSpacing(10); auto addPathEntry = [&](const QString& caption, const QString& content, const char* setSlot, const char* openSlot, QLineEdit*& lineEdit, const char* pixmap = "project_open") { - auto newTw = new TabWidget(caption, pathSelectors); - newTw->setFixedHeight(48); + auto pathEntryGroupBox = new QGroupBox(caption, pathSelectors); + QHBoxLayout * pathEntryLayout = new QHBoxLayout(pathEntryGroupBox); - lineEdit = new QLineEdit(content, newTw); - lineEdit->setGeometry(10, 20, txtLength, 16); + lineEdit = new QLineEdit(content, pathEntryGroupBox); connect(lineEdit, SIGNAL(textChanged(const QString&)), this, setSlot); - auto selectBtn = new QPushButton(embed::getIconPixmap(pixmap, 16, 16), "", newTw); + pathEntryLayout->addWidget(lineEdit, 1); + + auto selectBtn = new QPushButton(embed::getIconPixmap(pixmap, 16, 16), "", pathEntryGroupBox); selectBtn->setFixedSize(24, 24); - selectBtn->move(btnStart, 16); connect(selectBtn, SIGNAL(clicked()), this, openSlot); - pathSelectorsLayout->addWidget(newTw); + pathEntryLayout->addWidget(selectBtn, 0); + + pathSelectorsLayout->addWidget(pathEntryGroupBox); pathSelectorsLayout->addSpacing(10); }; @@ -820,21 +830,29 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : paths_layout->addWidget(pathsScroll); paths_layout->addStretch(); + // Add all main widgets to the layout of the settings widget + // This is needed so that we automatically get the correct sizes. + settingsLayout->addWidget(general_w); + settingsLayout->addWidget(performance_w); + settingsLayout->addWidget(audio_w); + settingsLayout->addWidget(midi_w); + settingsLayout->addWidget(paths_w); + // Major tabs ordering. m_tabBar->addTab(general_w, - tr("General"), 0, false, true)->setIcon( + tr("General"), 0, false, true, false)->setIcon( embed::getIconPixmap("setup_general")); m_tabBar->addTab(performance_w, - tr("Performance"), 1, false, true)->setIcon( + tr("Performance"), 1, false, true, false)->setIcon( embed::getIconPixmap("setup_performance")); m_tabBar->addTab(audio_w, - tr("Audio"), 2, false, true)->setIcon( + tr("Audio"), 2, false, true, false)->setIcon( embed::getIconPixmap("setup_audio")); m_tabBar->addTab(midi_w, - tr("MIDI"), 3, false, true)->setIcon( + tr("MIDI"), 3, false, true, false)->setIcon( embed::getIconPixmap("setup_midi")); m_tabBar->addTab(paths_w, - tr("Paths"), 4, true, true)->setIcon( + tr("Paths"), 4, true, true, false)->setIcon( embed::getIconPixmap("setup_directories")); m_tabBar->setActiveTab(tab_to_open); @@ -877,9 +895,9 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : extras_layout->addSpacing(10); // Vertical layout ordering. - vlayout->addWidget(main_w); + vlayout->addWidget(main_w, 0); vlayout->addSpacing(10); - vlayout->addWidget(extras_w); + vlayout->addWidget(extras_w), 1; vlayout->addSpacing(10); show(); diff --git a/src/gui/widgets/TabBar.cpp b/src/gui/widgets/TabBar.cpp index 806a93252..e29494551 100644 --- a/src/gui/widgets/TabBar.cpp +++ b/src/gui/widgets/TabBar.cpp @@ -44,7 +44,7 @@ TabBar::TabBar( QWidget * _parent, QBoxLayout::Direction _dir ) : } TabButton * TabBar::addTab( QWidget * _w, const QString & _text, int _id, - bool _add_stretch, bool _text_is_tooltip ) + bool _add_stretch, bool _text_is_tooltip, bool fixWidgetToParentSize ) { // already tab with id? if( m_tabs.contains( _id ) ) @@ -83,10 +83,12 @@ TabButton * TabBar::addTab( QWidget * _w, const QString & _text, int _id, m_layout->addStretch(); } - - // we assume, parent-widget is a widget acting as widget-stack so all - // widgets have the same size and only the one on the top is visible - _w->setFixedSize( _w->parentWidget()->size() ); + if (fixWidgetToParentSize) + { + // we assume, parent-widget is a widget acting as widget-stack so all + // widgets have the same size and only the one on the top is visible + _w->setFixedSize( _w->parentWidget()->size() ); + } b->setFont( pointSize<8>( b->font() ) ); From c5c459f54f576d99a5c80094b1f36a5a13c29424 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sun, 16 Jul 2023 20:02:11 +0200 Subject: [PATCH 02/18] Adjust Plugins group/tab Adjust the plugins group to also use a QGroupBox and QCheckBoxes. This finishes the "Performance" page and also finally enables the removal of the local variables `XDelta` and `YDelta` as well as the lambda `addLedCheckBox`. Other changes -------------- Add a TODO to some unused code for some advanced setting. Fix layout of the main widget and the buttons widget. Remove an erroneous ",1" after a statement. --- include/SetupDialog.h | 3 +- src/gui/modals/SetupDialog.cpp | 56 +++++++++------------------------- 2 files changed, 16 insertions(+), 43 deletions(-) diff --git a/include/SetupDialog.h b/include/SetupDialog.h index 7fa59d244..a68fe89cf 100644 --- a/include/SetupDialog.h +++ b/include/SetupDialog.h @@ -30,7 +30,6 @@ #include "AudioDevice.h" #include "AudioDeviceSetupWidget.h" -#include "LedCheckBox.h" #include "lmmsconfig.h" #include "MidiClient.h" #include "MidiSetupWidget.h" @@ -163,7 +162,7 @@ private: QLabel * m_vstEmbedLbl; QComboBox* m_vstEmbedComboBox; QString m_vstEmbedMethod; - LedCheckBox * m_vstAlwaysOnTopCheckBox; + QCheckBox * m_vstAlwaysOnTopCheckBox; bool m_vstAlwaysOnTop; bool m_disableAutoQuit; diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 97de349c4..b9a92ab78 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -39,6 +39,7 @@ #include "Engine.h" #include "FileDialog.h" #include "gui_templates.h" +#include "LedCheckBox.h" #include "MainWindow.h" #include "MidiSetupWidget.h" #include "ProjectJournal.h" @@ -167,10 +168,6 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : Engine::projectJournal()->setJournalling(false); - // Constants for positioning LED check boxes. - const int XDelta = 10; - const int YDelta = 18; - // Main widget. auto main_w = new QWidget(this); @@ -213,20 +210,6 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : auto generalControlsLayout = new QVBoxLayout; generalControlsLayout->setSpacing(10); - // TODO Remove once it is not used anymore - auto addLedCheckBox = [&XDelta, &YDelta, this](const QString& ledText, TabWidget* tw, int& counter, - bool initialState, const char* toggledSlot, bool showRestartWarning) { - auto checkBox = new LedCheckBox(ledText, tw); - counter++; - checkBox->move(XDelta, YDelta * counter); - checkBox->setChecked(initialState); - connect(checkBox, SIGNAL(toggled(bool)), this, toggledSlot); - if (showRestartWarning) - { - connect(checkBox, SIGNAL(toggled(bool)), this, SLOT(showRestartWarning())); - } - }; - auto addCheckBox = [this](const QString& ledText, QWidget* parent, QBoxLayout * layout, bool initialState, const char* toggledSlot, bool showRestartWarning) -> QCheckBox * { auto checkBox = new QCheckBox(ledText, parent); @@ -422,17 +405,15 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : m_animateAFP, SLOT(toggleAnimateAFP(bool)), false); - int counter = 0; + // Plugins group + QGroupBox * pluginsBox = new QGroupBox(tr("Plugins"), performance_w); + QVBoxLayout * pluginsLayout = new QVBoxLayout(pluginsBox); - // Plugins tab. - auto plugins_tw = new TabWidget(tr("Plugins"), performance_w); - - m_vstEmbedLbl = new QLabel(plugins_tw); - m_vstEmbedLbl->move(XDelta, YDelta * ++counter); + m_vstEmbedLbl = new QLabel(pluginsBox); m_vstEmbedLbl->setText(tr("VST plugins embedding:")); + pluginsLayout->addWidget(m_vstEmbedLbl); - m_vstEmbedComboBox = new QComboBox(plugins_tw); - m_vstEmbedComboBox->move(XDelta, YDelta * ++counter); + m_vstEmbedComboBox = new QComboBox(pluginsBox); QStringList embedMethods = ConfigManager::availableVstEmbedMethods(); m_vstEmbedComboBox->addItem(tr("No embedding"), "none"); @@ -451,27 +432,19 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : m_vstEmbedComboBox->setCurrentIndex(m_vstEmbedComboBox->findData(m_vstEmbedMethod)); connect(m_vstEmbedComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(vstEmbedMethodChanged())); + pluginsLayout->addWidget(m_vstEmbedComboBox); - counter += 2; + m_vstAlwaysOnTopCheckBox = addCheckBox(tr("Keep plugin windows on top when not embedded"), pluginsBox, pluginsLayout, + m_vstAlwaysOnTop, SLOT(toggleVSTAlwaysOnTop(bool)), false); - m_vstAlwaysOnTopCheckBox = new LedCheckBox( - tr("Keep plugin windows on top when not embedded"), plugins_tw); - m_vstAlwaysOnTopCheckBox->move(20, 66); - m_vstAlwaysOnTopCheckBox->setChecked(m_vstAlwaysOnTop); - m_vstAlwaysOnTopCheckBox->setVisible(m_vstEmbedMethod == "none"); - connect(m_vstAlwaysOnTopCheckBox, SIGNAL(toggled(bool)), - this, SLOT(toggleVSTAlwaysOnTop(bool))); - - addLedCheckBox(tr("Keep effects running even without input"), plugins_tw, counter, + addCheckBox(tr("Keep effects running even without input"), pluginsBox, pluginsLayout, m_disableAutoQuit, SLOT(toggleDisableAutoQuit(bool)), false); - plugins_tw->setFixedHeight(YDelta + YDelta * counter); - // Performance layout ordering. performance_layout->addWidget(autoSaveBox); performance_layout->addWidget(uiFxBox); - performance_layout->addWidget(plugins_tw); + performance_layout->addWidget(pluginsBox); performance_layout->addStretch(); @@ -575,6 +548,7 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : // Advanced setting, hidden for now if(false) { + // TODO Handle or remove. auto useNaNHandler = new LedCheckBox(tr("Use built-in NaN handler"), audio_w); useNaNHandler->setChecked(m_NaNHandler); } @@ -895,9 +869,9 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : extras_layout->addSpacing(10); // Vertical layout ordering. - vlayout->addWidget(main_w, 0); + vlayout->addWidget(main_w, 1); vlayout->addSpacing(10); - vlayout->addWidget(extras_w), 1; + vlayout->addWidget(extras_w); vlayout->addSpacing(10); show(); From cbea8f30fc4d1a821e99f67b78ab2d124431fbea Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sun, 16 Jul 2023 20:04:55 +0200 Subject: [PATCH 03/18] Make "Paths" scroll area expandable Make the "Paths" scroll area take as much space as there is. --- src/gui/modals/SetupDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index b9a92ab78..37c5db748 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -801,7 +801,7 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : pathsScroll->setWidget(pathSelectors); pathsScroll->setWidgetResizable(true); - paths_layout->addWidget(pathsScroll); + paths_layout->addWidget(pathsScroll, 1); paths_layout->addStretch(); // Add all main widgets to the layout of the settings widget From c06d9d488319f88eaa698a33f61495f77722235f Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sun, 16 Jul 2023 23:04:09 +0200 Subject: [PATCH 04/18] First adjustments to MIDI page Use group boxes and layouts for the "MIDI interface" and automatic assignment tabs. The configuration/information dialogs for the different drivers still need adjustments. --- src/gui/modals/SetupDialog.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 37c5db748..0565b8238 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -605,15 +605,14 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : auto midi_layout = new QVBoxLayout(midi_w); midi_layout->setSpacing(10); midi_layout->setContentsMargins(0, 0, 0, 0); - labelWidget(midi_w, - tr("MIDI")); + labelWidget(midi_w, tr("MIDI")); - // MIDI interface tab. - auto midiiface_tw = new TabWidget(tr("MIDI interface"), midi_w); - midiiface_tw->setFixedHeight(56); + // MIDI interface group + QGroupBox * midiInterfaceBox = new QGroupBox(tr("MIDI interface"), midi_w); + QVBoxLayout * midiInterfaceLayout = new QVBoxLayout(midiInterfaceBox); - m_midiInterfaces = new QComboBox(midiiface_tw); - m_midiInterfaces->setGeometry(10, 20, 240, 28); + m_midiInterfaces = new QComboBox(midiInterfaceBox); + midiInterfaceLayout->addWidget(m_midiInterfaces); // Ifaces-settings-widget. auto ms_w = new QWidget(midi_w); @@ -687,12 +686,12 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : this, SLOT(midiInterfaceChanged(const QString&))); - // MIDI autoassign tab. - auto midiAutoAssign_tw = new TabWidget(tr("Automatically assign MIDI controller to selected track"), midi_w); - midiAutoAssign_tw->setFixedHeight(56); + // MIDI autoassign group + QGroupBox * midiAutoAssignBox = new QGroupBox(tr("Automatically assign MIDI controller to selected track"), midi_w); + QVBoxLayout * midiAutoAssignLayout = new QVBoxLayout(midiAutoAssignBox); - m_assignableMidiDevices = new QComboBox(midiAutoAssign_tw); - m_assignableMidiDevices->setGeometry(10, 20, 240, 28); + m_assignableMidiDevices = new QComboBox(midiAutoAssignBox); + midiAutoAssignLayout->addWidget(m_assignableMidiDevices); m_assignableMidiDevices->addItem("none"); if ( !Engine::audioEngine()->midiClient()->isRaw() ) { @@ -709,9 +708,9 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : } // MIDI layout ordering. - midi_layout->addWidget(midiiface_tw); + midi_layout->addWidget(midiInterfaceBox); midi_layout->addWidget(ms_w); - midi_layout->addWidget(midiAutoAssign_tw); + midi_layout->addWidget(midiAutoAssignBox); midi_layout->addStretch(); From b53290344b358380b40d273f3c9dc0f31fdf13ef Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sat, 22 Jul 2023 22:55:02 +0200 Subject: [PATCH 05/18] 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. --- include/AudioAlsaSetupWidget.h | 4 +- include/AudioDeviceSetupGroupWidget.h | 49 +++++++++++++++++++++++++ include/AudioDummy.h | 6 +-- include/AudioJack.h | 4 +- include/AudioOss.h | 4 +- include/AudioPortAudio.h | 4 +- include/AudioPulseAudio.h | 4 +- include/AudioSdl.h | 4 +- include/SetupDialog.h | 4 +- src/core/audio/AudioJack.cpp | 15 ++++---- src/core/audio/AudioOss.cpp | 16 ++++---- src/core/audio/AudioPortAudio.cpp | 20 ++++------ src/core/audio/AudioPulseAudio.cpp | 19 ++++------ src/core/audio/AudioSdl.cpp | 12 +++--- src/gui/AudioAlsaSetupWidget.cpp | 14 +++---- src/gui/AudioDeviceSetupGroupWidget.cpp | 42 +++++++++++++++++++++ src/gui/CMakeLists.txt | 1 + src/gui/modals/SetupDialog.cpp | 5 ++- 18 files changed, 152 insertions(+), 75 deletions(-) create mode 100644 include/AudioDeviceSetupGroupWidget.h create mode 100644 src/gui/AudioDeviceSetupGroupWidget.cpp diff --git a/include/AudioAlsaSetupWidget.h b/include/AudioAlsaSetupWidget.h index cbe99ba01..9795a3588 100644 --- a/include/AudioAlsaSetupWidget.h +++ b/include/AudioAlsaSetupWidget.h @@ -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 diff --git a/include/AudioDeviceSetupGroupWidget.h b/include/AudioDeviceSetupGroupWidget.h new file mode 100644 index 000000000..8980d0a65 --- /dev/null +++ b/include/AudioDeviceSetupGroupWidget.h @@ -0,0 +1,49 @@ +/* + * AudioDeviceSetupGroupWidget.h - Base class for audio device setup widgets using group box + * + * Copyright (c) 2004-2015 Tobias Doerffel + * 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 + +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 diff --git a/include/AudioDummy.h b/include/AudioDummy.h index e34260171..c7ac3d67f 100644 --- a/include/AudioDummy.h +++ b/include/AudioDummy.h @@ -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 ) { } diff --git a/include/AudioJack.h b/include/AudioJack.h index 2ef0f665c..4135dc5e0 100644 --- a/include/AudioJack.h +++ b/include/AudioJack.h @@ -38,7 +38,7 @@ #include #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 ); diff --git a/include/AudioOss.h b/include/AudioOss.h index 55f64de85..953c72a4f 100644 --- a/include/AudioOss.h +++ b/include/AudioOss.h @@ -32,7 +32,7 @@ #include #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 ); diff --git a/include/AudioPortAudio.h b/include/AudioPortAudio.h index 01b8f3fd7..a926b1bf0 100644 --- a/include/AudioPortAudio.h +++ b/include/AudioPortAudio.h @@ -35,7 +35,7 @@ # include # 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 ); diff --git a/include/AudioPulseAudio.h b/include/AudioPulseAudio.h index b6a998274..22e47896d 100644 --- a/include/AudioPulseAudio.h +++ b/include/AudioPulseAudio.h @@ -34,7 +34,7 @@ #include #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 ); diff --git a/include/AudioSdl.h b/include/AudioSdl.h index 62db8b68a..5f29596a5 100644 --- a/include/AudioSdl.h +++ b/include/AudioSdl.h @@ -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 ); diff --git a/include/SetupDialog.h b/include/SetupDialog.h index a68fe89cf..7097b3206 100644 --- a/include/SetupDialog.h +++ b/include/SetupDialog.h @@ -29,7 +29,7 @@ #include #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; + using AswMap = QMap; using MswMap = QMap; using trMap = QMap; diff --git a/src/core/audio/AudioJack.cpp b/src/core/audio/AudioJack.cpp index 222ebf10d..00024de63 100644 --- a/src/core/audio/AudioJack.cpp +++ b/src/core/audio/AudioJack.cpp @@ -27,8 +27,8 @@ #ifdef LMMS_HAVE_JACK #include -#include #include +#include #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); } diff --git a/src/core/audio/AudioOss.cpp b/src/core/audio/AudioOss.cpp index 5166bad79..5e0a8fc89 100644 --- a/src/core/audio/AudioOss.cpp +++ b/src/core/audio/AudioOss.cpp @@ -27,7 +27,7 @@ #ifdef LMMS_HAVE_OSS #include -#include +#include > #include #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); } diff --git a/src/core/audio/AudioPortAudio.cpp b/src/core/audio/AudioPortAudio.cpp index 0f5a4122f..cb0e4616c 100644 --- a/src/core/audio/AudioPortAudio.cpp +++ b/src/core/audio/AudioPortAudio.cpp @@ -49,7 +49,7 @@ void AudioPortAudioSetupUtil::updateChannels() #ifdef LMMS_HAVE_PORTAUDIO -#include +#include #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 diff --git a/src/core/audio/AudioPulseAudio.cpp b/src/core/audio/AudioPulseAudio.cpp index bac997075..24913c60f 100644 --- a/src/core/audio/AudioPulseAudio.cpp +++ b/src/core/audio/AudioPulseAudio.cpp @@ -23,7 +23,7 @@ */ #include -#include +#include #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); } diff --git a/src/core/audio/AudioSdl.cpp b/src/core/audio/AudioSdl.cpp index e73ccadc1..071877f0d 100644 --- a/src/core/audio/AudioSdl.cpp +++ b/src/core/audio/AudioSdl.cpp @@ -26,7 +26,7 @@ #ifdef LMMS_HAVE_SDL -#include +#include > #include #include @@ -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); } diff --git a/src/gui/AudioAlsaSetupWidget.cpp b/src/gui/AudioAlsaSetupWidget.cpp index 4ea6d4c58..015f4e8ad 100644 --- a/src/gui/AudioAlsaSetupWidget.cpp +++ b/src/gui/AudioAlsaSetupWidget.cpp @@ -23,7 +23,7 @@ */ #include -#include +#include #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); } diff --git a/src/gui/AudioDeviceSetupGroupWidget.cpp b/src/gui/AudioDeviceSetupGroupWidget.cpp new file mode 100644 index 000000000..f84c8bb8b --- /dev/null +++ b/src/gui/AudioDeviceSetupGroupWidget.cpp @@ -0,0 +1,42 @@ +/* + * AudioDeviceSetupGroupWidget.cpp - Base class for audio device setup widgets using group box + * + * Copyright (c) 2004-2015 Tobias Doerffel + * 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 diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 9f940c035..3ae16c573 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -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 diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 0565b8238..d1375c033 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -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) From 345886954ecd2e1639cf46af9b9b747237d66b3a Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sat, 22 Jul 2023 23:03:31 +0200 Subject: [PATCH 06/18] Adjust the MIDI setup dialog Adjust the MIDI setup dialog: * Show it in a QGroupBox * Make it use a `QFormLayout` to layout the label and line edit. Remove the hard coded height. --- include/MidiSetupWidget.h | 4 ++-- src/gui/MidiSetupWidget.cpp | 13 ++++++------- src/gui/modals/SetupDialog.cpp | 1 - 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/include/MidiSetupWidget.h b/include/MidiSetupWidget.h index a61b606ac..7b6606017 100644 --- a/include/MidiSetupWidget.h +++ b/include/MidiSetupWidget.h @@ -25,7 +25,7 @@ #ifndef LMMS_GUI_MIDI_SETUP_WIDGET_H #define LMMS_GUI_MIDI_SETUP_WIDGET_H -#include "TabWidget.h" +#include class QLineEdit; @@ -33,7 +33,7 @@ namespace lmms::gui { -class MidiSetupWidget : public TabWidget +class MidiSetupWidget : public QGroupBox { Q_OBJECT MidiSetupWidget( const QString & caption, const QString & configSection, diff --git a/src/gui/MidiSetupWidget.cpp b/src/gui/MidiSetupWidget.cpp index 4f620fb0e..d18c19bab 100644 --- a/src/gui/MidiSetupWidget.cpp +++ b/src/gui/MidiSetupWidget.cpp @@ -24,7 +24,7 @@ #include "MidiSetupWidget.h" -#include +#include > #include #include "ConfigManager.h" @@ -37,7 +37,7 @@ namespace lmms::gui MidiSetupWidget::MidiSetupWidget(const QString & caption, const QString & configSection, const QString & devName, QWidget * parent) : - TabWidget(TabWidget::tr("Settings for %1").arg(tr(caption.toUtf8())), parent), + QGroupBox(QGroupBox::tr("Settings for %1").arg(tr(caption.toUtf8())), parent), m_configSection(configSection), m_device(nullptr) { @@ -45,12 +45,11 @@ MidiSetupWidget::MidiSetupWidget(const QString & caption, const QString & config // to indicate that there is no editable device field if (!devName.isNull()) { - m_device = new QLineEdit(devName, 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(devName, this); + + form->addRow(tr("Device"), m_device); } } diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index d1375c033..2b6c199ba 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -617,7 +617,6 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : // Ifaces-settings-widget. auto ms_w = new QWidget(midi_w); - ms_w->setFixedHeight(60); auto ms_w_layout = new QHBoxLayout(ms_w); ms_w_layout->setSpacing(0); From 095b2066352171909b7810e05062c0d08f3cbabe Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Tue, 25 Jul 2023 17:36:48 +0200 Subject: [PATCH 07/18] Remove unused include Remove an unused include of "AudioDeviceSetupWidget.h". --- src/gui/modals/SetupDialog.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 2b6c199ba..87a54a993 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -32,7 +32,6 @@ #include #include -#include "AudioDeviceSetupWidget.h" #include "AudioEngine.h" #include "debug.h" #include "embed.h" From 9282e6c91bd212bd9cbcfd0618e97164f1b80786 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Tue, 25 Jul 2023 18:03:18 +0200 Subject: [PATCH 08/18] Remove temporary AudioDeviceSetupGroupWidget Remove the temporary class `AudioDeviceSetupGroupWidget` and move its functionality into `AudioDeviceSetupWidget`. This means to let `AudioDeviceSetupWidget` inherit from `QGroupBox` instead of `TabWidget`. Adjust all inheriting classes accordingly. Adjust usages in SetupDialog. The result should be that even the cases for `LMMS_HAVE_SOUNDIO` and `LMMS_HAVE_SNDIO` should compile again. Although their layout might look weird. --- include/AudioAlsaSetupWidget.h | 4 +- include/AudioDeviceSetupGroupWidget.h | 49 ------------------------- include/AudioDeviceSetupWidget.h | 5 ++- include/AudioDummy.h | 6 +-- include/AudioJack.h | 4 +- include/AudioOss.h | 4 +- include/AudioPortAudio.h | 4 +- include/AudioPulseAudio.h | 4 +- include/AudioSdl.h | 4 +- include/SetupDialog.h | 4 +- src/core/audio/AudioJack.cpp | 2 +- src/core/audio/AudioOss.cpp | 2 +- src/core/audio/AudioPortAudio.cpp | 4 +- src/core/audio/AudioPulseAudio.cpp | 2 +- src/core/audio/AudioSdl.cpp | 2 +- src/gui/AudioAlsaSetupWidget.cpp | 2 +- src/gui/AudioDeviceSetupGroupWidget.cpp | 42 --------------------- src/gui/AudioDeviceSetupWidget.cpp | 4 +- src/gui/CMakeLists.txt | 1 - src/gui/modals/SetupDialog.cpp | 2 +- 20 files changed, 30 insertions(+), 121 deletions(-) delete mode 100644 include/AudioDeviceSetupGroupWidget.h delete mode 100644 src/gui/AudioDeviceSetupGroupWidget.cpp diff --git a/include/AudioAlsaSetupWidget.h b/include/AudioAlsaSetupWidget.h index 9795a3588..cbe99ba01 100644 --- a/include/AudioAlsaSetupWidget.h +++ b/include/AudioAlsaSetupWidget.h @@ -29,7 +29,7 @@ #ifdef LMMS_HAVE_ALSA -#include "AudioDeviceSetupGroupWidget.h" +#include "AudioDeviceSetupWidget.h" #include "AudioAlsa.h" @@ -41,7 +41,7 @@ namespace lmms::gui class LcdSpinBox; -class AudioAlsaSetupWidget : public AudioDeviceSetupGroupWidget +class AudioAlsaSetupWidget : public AudioDeviceSetupWidget { Q_OBJECT diff --git a/include/AudioDeviceSetupGroupWidget.h b/include/AudioDeviceSetupGroupWidget.h deleted file mode 100644 index 8980d0a65..000000000 --- a/include/AudioDeviceSetupGroupWidget.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * AudioDeviceSetupGroupWidget.h - Base class for audio device setup widgets using group box - * - * Copyright (c) 2004-2015 Tobias Doerffel - * 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 - -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 diff --git a/include/AudioDeviceSetupWidget.h b/include/AudioDeviceSetupWidget.h index f56fa07a6..acc99602d 100644 --- a/include/AudioDeviceSetupWidget.h +++ b/include/AudioDeviceSetupWidget.h @@ -2,6 +2,7 @@ * AudioDeviceSetupWidget.h - Base class for audio device setup widgets * * Copyright (c) 2004-2015 Tobias Doerffel + * Copyright (c) 2023- Michael Gregorius * * This file is part of LMMS - https://lmms.io * @@ -25,12 +26,12 @@ #ifndef LMMS_GUI_AUDIO_DEVICE_SETUP_WIDGET_H #define LMMS_GUI_AUDIO_DEVICE_SETUP_WIDGET_H -#include "TabWidget.h" +#include namespace lmms::gui { -class AudioDeviceSetupWidget : public TabWidget +class AudioDeviceSetupWidget : public QGroupBox { Q_OBJECT public: diff --git a/include/AudioDummy.h b/include/AudioDummy.h index c7ac3d67f..e34260171 100644 --- a/include/AudioDummy.h +++ b/include/AudioDummy.h @@ -26,7 +26,7 @@ #define LMMS_AUDIO_DUMMY_H #include "AudioDevice.h" -#include "AudioDeviceSetupGroupWidget.h" +#include "AudioDeviceSetupWidget.h" #include "AudioEngine.h" #include "MicroTimer.h" @@ -54,11 +54,11 @@ public: } - class setupWidget : public gui::AudioDeviceSetupGroupWidget + class setupWidget : public gui::AudioDeviceSetupWidget { public: setupWidget( QWidget * _parent ) : - gui::AudioDeviceSetupGroupWidget( AudioDummy::name(), _parent ) + gui::AudioDeviceSetupWidget( AudioDummy::name(), _parent ) { } diff --git a/include/AudioJack.h b/include/AudioJack.h index 4135dc5e0..2ef0f665c 100644 --- a/include/AudioJack.h +++ b/include/AudioJack.h @@ -38,7 +38,7 @@ #include #include "AudioDevice.h" -#include "AudioDeviceSetupGroupWidget.h" +#include "AudioDeviceSetupWidget.h" class QLineEdit; @@ -74,7 +74,7 @@ public: } -class setupWidget : public gui::AudioDeviceSetupGroupWidget +class setupWidget : public gui::AudioDeviceSetupWidget { public: setupWidget( QWidget * _parent ); diff --git a/include/AudioOss.h b/include/AudioOss.h index 953c72a4f..55f64de85 100644 --- a/include/AudioOss.h +++ b/include/AudioOss.h @@ -32,7 +32,7 @@ #include #include "AudioDevice.h" -#include "AudioDeviceSetupGroupWidget.h" +#include "AudioDeviceSetupWidget.h" class QLineEdit; @@ -61,7 +61,7 @@ public: static QString probeDevice(); -class setupWidget : public gui::AudioDeviceSetupGroupWidget +class setupWidget : public gui::AudioDeviceSetupWidget { public: setupWidget( QWidget * _parent ); diff --git a/include/AudioPortAudio.h b/include/AudioPortAudio.h index a926b1bf0..01b8f3fd7 100644 --- a/include/AudioPortAudio.h +++ b/include/AudioPortAudio.h @@ -35,7 +35,7 @@ # include # include "AudioDevice.h" -# include "AudioDeviceSetupGroupWidget.h" +# include "AudioDeviceSetupWidget.h" # if defined paNeverDropInput || defined paNonInterleaved # define PORTAUDIO_V19 @@ -90,7 +90,7 @@ public: unsigned long _framesPerBuffer ); - class setupWidget : public gui::AudioDeviceSetupGroupWidget + class setupWidget : public gui::AudioDeviceSetupWidget { public: setupWidget( QWidget * _parent ); diff --git a/include/AudioPulseAudio.h b/include/AudioPulseAudio.h index 22e47896d..b6a998274 100644 --- a/include/AudioPulseAudio.h +++ b/include/AudioPulseAudio.h @@ -34,7 +34,7 @@ #include #include "AudioDevice.h" -#include "AudioDeviceSetupGroupWidget.h" +#include "AudioDeviceSetupWidget.h" class QLineEdit; @@ -62,7 +62,7 @@ public: static QString probeDevice(); - class setupWidget : public gui::AudioDeviceSetupGroupWidget + class setupWidget : public gui::AudioDeviceSetupWidget { public: setupWidget( QWidget * _parent ); diff --git a/include/AudioSdl.h b/include/AudioSdl.h index 5f29596a5..62db8b68a 100644 --- a/include/AudioSdl.h +++ b/include/AudioSdl.h @@ -37,7 +37,7 @@ #endif #include "AudioDevice.h" -#include "AudioDeviceSetupGroupWidget.h" +#include "AudioDeviceSetupWidget.h" class QLineEdit; @@ -57,7 +57,7 @@ public: } - class setupWidget : public gui::AudioDeviceSetupGroupWidget + class setupWidget : public gui::AudioDeviceSetupWidget { public: setupWidget( QWidget * _parent ); diff --git a/include/SetupDialog.h b/include/SetupDialog.h index 7097b3206..a68fe89cf 100644 --- a/include/SetupDialog.h +++ b/include/SetupDialog.h @@ -29,7 +29,7 @@ #include #include "AudioDevice.h" -#include "AudioDeviceSetupGroupWidget.h" +#include "AudioDeviceSetupWidget.h" #include "lmmsconfig.h" #include "MidiClient.h" #include "MidiSetupWidget.h" @@ -166,7 +166,7 @@ private: bool m_vstAlwaysOnTop; bool m_disableAutoQuit; - using AswMap = QMap; + using AswMap = QMap; using MswMap = QMap; using trMap = QMap; diff --git a/src/core/audio/AudioJack.cpp b/src/core/audio/AudioJack.cpp index 00024de63..75d253671 100644 --- a/src/core/audio/AudioJack.cpp +++ b/src/core/audio/AudioJack.cpp @@ -452,7 +452,7 @@ void AudioJack::shutdownCallback( void * _udata ) AudioJack::setupWidget::setupWidget( QWidget * _parent ) : - AudioDeviceSetupGroupWidget( AudioJack::name(), _parent ) + AudioDeviceSetupWidget( AudioJack::name(), _parent ) { QFormLayout * form = new QFormLayout(this); diff --git a/src/core/audio/AudioOss.cpp b/src/core/audio/AudioOss.cpp index 5e0a8fc89..b1b50907b 100644 --- a/src/core/audio/AudioOss.cpp +++ b/src/core/audio/AudioOss.cpp @@ -318,7 +318,7 @@ void AudioOss::run() AudioOss::setupWidget::setupWidget( QWidget * _parent ) : - AudioDeviceSetupGroupWidget( AudioOss::name(), _parent ) + AudioDeviceSetupWidget( AudioOss::name(), _parent ) { QFormLayout * form = new QFormLayout(this); diff --git a/src/core/audio/AudioPortAudio.cpp b/src/core/audio/AudioPortAudio.cpp index cb0e4616c..c52ae8640 100644 --- a/src/core/audio/AudioPortAudio.cpp +++ b/src/core/audio/AudioPortAudio.cpp @@ -415,7 +415,7 @@ void AudioPortAudioSetupUtil::updateChannels() AudioPortAudio::setupWidget::setupWidget( QWidget * _parent ) : - AudioDeviceSetupGroupWidget( AudioPortAudio::name(), _parent ) + AudioDeviceSetupWidget( AudioPortAudio::name(), _parent ) { using gui::ComboBox; @@ -499,7 +499,7 @@ void AudioPortAudio::setupWidget::show() m_setupUtil.m_deviceModel.setValue( i ); } - AudioDeviceSetupGroupWidget::show(); + AudioDeviceSetupWidget::show(); } } // namespace lmms diff --git a/src/core/audio/AudioPulseAudio.cpp b/src/core/audio/AudioPulseAudio.cpp index 24913c60f..390bd0ba8 100644 --- a/src/core/audio/AudioPulseAudio.cpp +++ b/src/core/audio/AudioPulseAudio.cpp @@ -310,7 +310,7 @@ void AudioPulseAudio::signalConnected( bool connected ) AudioPulseAudio::setupWidget::setupWidget( QWidget * _parent ) : - AudioDeviceSetupGroupWidget( AudioPulseAudio::name(), _parent ) + AudioDeviceSetupWidget( AudioPulseAudio::name(), _parent ) { QFormLayout * form = new QFormLayout(this); diff --git a/src/core/audio/AudioSdl.cpp b/src/core/audio/AudioSdl.cpp index 071877f0d..794c486de 100644 --- a/src/core/audio/AudioSdl.cpp +++ b/src/core/audio/AudioSdl.cpp @@ -325,7 +325,7 @@ void AudioSdl::sdlInputAudioCallback(Uint8 *_buf, int _len) { #endif AudioSdl::setupWidget::setupWidget( QWidget * _parent ) : - AudioDeviceSetupGroupWidget( AudioSdl::name(), _parent ) + AudioDeviceSetupWidget( AudioSdl::name(), _parent ) { QFormLayout * form = new QFormLayout(this); diff --git a/src/gui/AudioAlsaSetupWidget.cpp b/src/gui/AudioAlsaSetupWidget.cpp index 015f4e8ad..7db822b4b 100644 --- a/src/gui/AudioAlsaSetupWidget.cpp +++ b/src/gui/AudioAlsaSetupWidget.cpp @@ -37,7 +37,7 @@ namespace lmms::gui { AudioAlsaSetupWidget::AudioAlsaSetupWidget( QWidget * _parent ) : - AudioDeviceSetupGroupWidget( AudioAlsa::name(), _parent ), + AudioDeviceSetupWidget( AudioAlsa::name(), _parent ), m_selectedDevice(-1) { QFormLayout * form = new QFormLayout(this); diff --git a/src/gui/AudioDeviceSetupGroupWidget.cpp b/src/gui/AudioDeviceSetupGroupWidget.cpp deleted file mode 100644 index f84c8bb8b..000000000 --- a/src/gui/AudioDeviceSetupGroupWidget.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - * AudioDeviceSetupGroupWidget.cpp - Base class for audio device setup widgets using group box - * - * Copyright (c) 2004-2015 Tobias Doerffel - * 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 diff --git a/src/gui/AudioDeviceSetupWidget.cpp b/src/gui/AudioDeviceSetupWidget.cpp index b78800cec..98d03638f 100644 --- a/src/gui/AudioDeviceSetupWidget.cpp +++ b/src/gui/AudioDeviceSetupWidget.cpp @@ -28,7 +28,7 @@ namespace lmms::gui { AudioDeviceSetupWidget::AudioDeviceSetupWidget(const QString & caption, QWidget * parent) : - TabWidget(TabWidget::tr("Settings for %1").arg(tr(caption.toUtf8())), parent) + QGroupBox(QGroupBox::tr("Settings for %1").arg(tr(caption.toUtf8())), parent) { } @@ -38,4 +38,4 @@ void AudioDeviceSetupWidget::show() QWidget::show(); } -} // namespace lmms::gui \ No newline at end of file +} // namespace lmms::gui diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 3ae16c573..9f940c035 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -3,7 +3,6 @@ SET(LMMS_SRCS gui/ActionGroup.cpp gui/AudioAlsaSetupWidget.cpp gui/AudioDeviceSetupWidget.cpp - gui/AudioDeviceSetupGroupWidget.cpp gui/AutomatableModelView.cpp gui/ControlLayout.cpp gui/ControllerDialog.cpp diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 87a54a993..23e1fe5d5 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -520,7 +520,7 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : it != m_audioIfaceSetupWidgets.end(); ++it) { m_audioIfaceNames[ - AudioDeviceSetupGroupWidget::tr(it.key().toUtf8())] = it.key(); + AudioDeviceSetupWidget::tr(it.key().toUtf8())] = it.key(); } for(trMap::iterator it = m_audioIfaceNames.begin(); it != m_audioIfaceNames.end(); ++it) From a429c2f94f338579176a81f230f0253b13e84650 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Tue, 25 Jul 2023 18:15:37 +0200 Subject: [PATCH 09/18] Adjustment of AudioSndio Adjust the layout that's created in AudioSndio::setupWidget::setupWidget by using a QFormLayout. This was done in a "blind" fashion as I am not able to compile this code. Adjustments are very similar to the ones done in AudioPulseAudio::setupWidget::setupWidget with commit b53290344b3 though. --- src/core/audio/AudioSndio.cpp | 13 +++++-------- src/gui/modals/SetupDialog.cpp | 1 - 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/core/audio/AudioSndio.cpp b/src/core/audio/AudioSndio.cpp index a8ea34ce1..8a1e00653 100644 --- a/src/core/audio/AudioSndio.cpp +++ b/src/core/audio/AudioSndio.cpp @@ -28,7 +28,7 @@ #ifdef LMMS_HAVE_SNDIO #include -#include +#include #include #include "endian_handling.h" @@ -183,12 +183,10 @@ void AudioSndio::run() AudioSndio::setupWidget::setupWidget( QWidget * _parent ) : AudioDeviceSetupWidget( AudioSndio::name(), _parent ) { - m_device = new QLineEdit( "", this ); - m_device->setGeometry( 10, 20, 160, 20 ); + QFormLayout * form = new QFormLayout(this); - QLabel * dev_lbl = new QLabel( tr( "Device" ), this ); - dev_lbl->setFont( pointSize<6>( dev_lbl->font() ) ); - dev_lbl->setGeometry( 10, 40, 160, 10 ); + m_device = new QLineEdit( "", this ); + form->addRow(tr("Device"), m_device); gui::LcdSpinBoxModel * m = new gui::LcdSpinBoxModel( /* this */ ); m->setRange( DEFAULT_CHANNELS, SURROUND_CHANNELS ); @@ -198,9 +196,8 @@ AudioSndio::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); } diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 23e1fe5d5..7da234d07 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -506,7 +506,6 @@ 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); From 0759da2776139c59c98f16753d6ec1664cab44e8 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Tue, 25 Jul 2023 18:28:04 +0200 Subject: [PATCH 10/18] Layout adjustments for AudioSoundIo Use a QFormLayout in AudioSoundIo::setupWidget::setupWidget. Note: Changes have been done "blindly" as I am not able to compile this code. --- src/core/audio/AudioSoundIo.cpp | 16 +++++----------- src/gui/modals/SetupDialog.cpp | 1 - 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/core/audio/AudioSoundIo.cpp b/src/core/audio/AudioSoundIo.cpp index 633808204..23385960f 100644 --- a/src/core/audio/AudioSoundIo.cpp +++ b/src/core/audio/AudioSoundIo.cpp @@ -26,7 +26,7 @@ #ifdef LMMS_HAVE_SOUNDIO -#include +#include #include #include "Engine.h" @@ -451,19 +451,13 @@ AudioSoundIo::setupWidget::setupWidget( QWidget * _parent ) : { m_setupUtil.m_setupWidget = this; - m_backend = new gui::ComboBox( this, "BACKEND" ); - m_backend->setGeometry( 64, 15, 260, 20 ); + QFormLayout * form = new QFormLayout(this); - QLabel * backend_lbl = new QLabel( tr( "Backend" ), this ); - backend_lbl->setFont( pointSize<7>( backend_lbl->font() ) ); - backend_lbl->move( 8, 18 ); + m_backend = new gui::ComboBox( this, "BACKEND" ); + form->addRow(tr("Backend"), m_backend); m_device = new gui::ComboBox( this, "DEVICE" ); - m_device->setGeometry( 64, 35, 260, 20 ); - - QLabel * 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); // Setup models m_soundio = soundio_create(); diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 7da234d07..892155280 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -490,7 +490,6 @@ 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); From 4fac4c6c4a9a32a0d02dfd855c7685bcf1514fbb Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Tue, 25 Jul 2023 19:07:57 +0200 Subject: [PATCH 11/18] Fix a problem with some includes Remove a trailing ">" for some includes of `QFormLayout`. My local compiler did not complain but mingw rightfully does. --- src/core/audio/AudioOss.cpp | 2 +- src/core/audio/AudioSdl.cpp | 2 +- src/gui/MidiSetupWidget.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/audio/AudioOss.cpp b/src/core/audio/AudioOss.cpp index b1b50907b..0b7812fe6 100644 --- a/src/core/audio/AudioOss.cpp +++ b/src/core/audio/AudioOss.cpp @@ -27,7 +27,7 @@ #ifdef LMMS_HAVE_OSS #include -#include > +#include #include #include "endian_handling.h" diff --git a/src/core/audio/AudioSdl.cpp b/src/core/audio/AudioSdl.cpp index 794c486de..fa801f890 100644 --- a/src/core/audio/AudioSdl.cpp +++ b/src/core/audio/AudioSdl.cpp @@ -26,7 +26,7 @@ #ifdef LMMS_HAVE_SDL -#include > +#include #include #include diff --git a/src/gui/MidiSetupWidget.cpp b/src/gui/MidiSetupWidget.cpp index d18c19bab..2385def02 100644 --- a/src/gui/MidiSetupWidget.cpp +++ b/src/gui/MidiSetupWidget.cpp @@ -24,7 +24,7 @@ #include "MidiSetupWidget.h" -#include > +#include #include #include "ConfigManager.h" From b29a46edf8d27106d7e43b0b3c27d7edce5554b3 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sat, 30 Sep 2023 12:12:04 +0200 Subject: [PATCH 12/18] Ensure minimum width for setup dialog Ensure that the dialog has a minimum width so that everything is shown. --- src/gui/modals/SetupDialog.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 892155280..effece1ba 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -870,6 +870,9 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : vlayout->addWidget(extras_w); vlayout->addSpacing(10); + // Ensure that we cannot make the dialog smaller than it wants to be + setMinimumWidth(width()); + show(); } From 4f94c3b13cec0b5c2326bc9ce08402f72fb0b2ac Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sat, 30 Sep 2023 21:15:10 +0200 Subject: [PATCH 13/18] Review change - Rectangular buttons Give the reset buttons for auto save and buffer size a rectangular shape. The size is fixed but the button and the pixmap scale with different scaling factors so that should be ok. --- src/gui/modals/SetupDialog.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index effece1ba..7faa9c934 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -372,6 +372,7 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : this, SLOT(setAutoSaveInterval(int))); auto autoSaveResetBtn = new QPushButton(embed::getIconPixmap("reload"), "", autoSaveBox); + autoSaveResetBtn->setFixedSize(32, 32); connect(autoSaveResetBtn, SIGNAL(clicked()), this, SLOT(resetAutoSave())); @@ -575,6 +576,7 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : bufferSizeSubLayout->addWidget(m_bufferSizeSlider, 1); auto bufferSize_reset_btn = new QPushButton(embed::getIconPixmap("reload"), "", bufferSizeBox); + bufferSize_reset_btn->setFixedSize(32, 32); connect(bufferSize_reset_btn, SIGNAL(clicked()), this, SLOT(resetBufferSize())); bufferSize_reset_btn->setToolTip( From 85310e75d3d6e658d3f7c101de884dd5194eb910 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sun, 1 Oct 2023 09:57:13 +0200 Subject: [PATCH 14/18] Order of includes and forward declarations Fix the alphabetical order of all includes and forward declarations. --- include/SetupDialog.h | 2 +- src/core/audio/AudioJack.cpp | 2 +- src/core/audio/AudioPulseAudio.cpp | 2 +- src/gui/modals/SetupDialog.cpp | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/SetupDialog.h b/include/SetupDialog.h index f45b09dab..882ca2bed 100644 --- a/include/SetupDialog.h +++ b/include/SetupDialog.h @@ -35,11 +35,11 @@ #include "MidiSetupWidget.h" +class QCheckBox; class QComboBox; class QLabel; class QLineEdit; class QSlider; -class QCheckBox; namespace lmms::gui diff --git a/src/core/audio/AudioJack.cpp b/src/core/audio/AudioJack.cpp index f5c3c160f..83fa3c177 100644 --- a/src/core/audio/AudioJack.cpp +++ b/src/core/audio/AudioJack.cpp @@ -26,9 +26,9 @@ #ifdef LMMS_HAVE_JACK +#include #include #include -#include #include "Engine.h" #include "GuiApplication.h" diff --git a/src/core/audio/AudioPulseAudio.cpp b/src/core/audio/AudioPulseAudio.cpp index 2164a99f2..3ca8764cc 100644 --- a/src/core/audio/AudioPulseAudio.cpp +++ b/src/core/audio/AudioPulseAudio.cpp @@ -22,8 +22,8 @@ * */ -#include #include +#include #include "AudioPulseAudio.h" diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 00344b1a1..c27992fa1 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -23,14 +23,14 @@ */ +#include #include +#include #include #include #include #include #include -#include -#include #include "AudioEngine.h" #include "debug.h" From d12675af2f19dd999bfe8f9ab249f21b7171cbd2 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sun, 1 Oct 2023 10:00:52 +0200 Subject: [PATCH 15/18] Remove unnecessary addStretch Remove an unnecessary call to `addStretch` and with that a TODO. --- src/gui/modals/SetupDialog.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index c27992fa1..06231d382 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -341,10 +341,6 @@ SetupDialog::SetupDialog(ConfigTab tab_to_open) : generalScroll->setWidgetResizable(true); general_layout->addWidget(generalScroll, 1); - // TODO Does not really seem to be needed - general_layout->addStretch(); - - // Performance widget. From cc6a0e86b5942c90b4b5c538cbcd8227faaec60a Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sun, 1 Oct 2023 10:17:08 +0200 Subject: [PATCH 16/18] Remove border/shadows from scroll area Remove the border/shadows from the QScrollAreas used in the context of the setup dialog via the style sheet. --- data/themes/default/style.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/themes/default/style.css b/data/themes/default/style.css index a49618b0a..344aa0519 100644 --- a/data/themes/default/style.css +++ b/data/themes/default/style.css @@ -464,6 +464,10 @@ lmms--gui--EffectSelectDialog QScrollArea { background: #262b30; } +lmms--gui--SetupDialog QScrollArea { + border: 0px; +} + /* the inner boxes in LADSPA effect windows */ lmms--gui--EffectControlDialog QGroupBox { From 1399d5906f06d2f384e873abb1f5b0716f64ef02 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sun, 1 Oct 2023 10:21:34 +0200 Subject: [PATCH 17/18] Left align "General" and "Paths" Left align the scroll area content for "General" and "Paths" so that they look like the content on the other tabs. --- src/gui/modals/SetupDialog.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 06231d382..212ef92f0 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -208,6 +208,7 @@ SetupDialog::SetupDialog(ConfigTab tab_to_open) : // Path selectors layout. auto generalControlsLayout = new QVBoxLayout; generalControlsLayout->setSpacing(10); + generalControlsLayout->setContentsMargins(0, 0, 0, 0); auto addCheckBox = [&](const QString& ledText, QWidget* parent, QBoxLayout * layout, bool initialState, const char* toggledSlot, bool showRestartWarning) -> QCheckBox * { @@ -734,6 +735,7 @@ SetupDialog::SetupDialog(ConfigTab tab_to_open) : // Path selectors layout. auto pathSelectorsLayout = new QVBoxLayout; pathSelectorsLayout->setSpacing(10); + pathSelectorsLayout->setContentsMargins(0, 0, 0, 0); auto addPathEntry = [&](const QString& caption, const QString& content, const char* setSlot, const char* openSlot, QLineEdit*& lineEdit, const char* pixmap = "project_open") { From a54dc9a05f2ff73ea6c4f83012e9ec8a980a6979 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sun, 1 Oct 2023 10:34:21 +0200 Subject: [PATCH 18/18] Remove LedCheckBox include Enable the removal of the `LedCheckBox` include by commenting out code instead of using an `if(false)` statement. The commented out code was adjusted so that it would work with the current usage of layouts. --- src/gui/modals/SetupDialog.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/gui/modals/SetupDialog.cpp b/src/gui/modals/SetupDialog.cpp index 212ef92f0..e64d1c572 100644 --- a/src/gui/modals/SetupDialog.cpp +++ b/src/gui/modals/SetupDialog.cpp @@ -38,7 +38,6 @@ #include "Engine.h" #include "FileDialog.h" #include "gui_templates.h" -#include "LedCheckBox.h" #include "MainWindow.h" #include "MidiSetupWidget.h" #include "ProjectJournal.h" @@ -542,12 +541,10 @@ SetupDialog::SetupDialog(ConfigTab tab_to_open) : this, SLOT(audioInterfaceChanged(const QString&))); // Advanced setting, hidden for now - if(false) - { - // TODO Handle or remove. - auto useNaNHandler = new LedCheckBox(tr("Use built-in NaN handler"), audio_w); - useNaNHandler->setChecked(m_NaNHandler); - } + // // TODO Handle or remove. + // auto useNaNHandler = new LedCheckBox(tr("Use built-in NaN handler"), audio_w); + // audio_layout->addWidget(useNaNHandler); + // useNaNHandler->setChecked(m_NaNHandler); // HQ mode checkbox auto hqaudio = addCheckBox(tr("HQ mode for output audio device"), audioInterfaceBox, nullptr,