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.
This commit is contained in:
Michael Gregorius
2023-07-16 14:11:24 +02:00
parent c53f3d981b
commit 4908bfe1a6
5 changed files with 153 additions and 127 deletions

View File

@@ -3,7 +3,7 @@
********************/
/* most foreground text items */
QLabel, QTreeWidget, QListWidget, QGroupBox, QMenuBar {
QLabel, QTreeWidget, QListWidget, QGroupBox, QMenuBar, QCheckBox {
color: #d1d8e4;
}

View File

@@ -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;

View File

@@ -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 )

View File

@@ -29,6 +29,8 @@
#include <QLayout>
#include <QLineEdit>
#include <QScrollArea>
#include <QGroupBox>
#include <QCheckBox>
#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<QBoxLayout *>(w->layout());
assert(boxLayout);
assert(dynamic_cast<QBoxLayout *>(w->layout()) != nullptr);
dynamic_cast<QBoxLayout *>(w->layout())->addSpacing(5);
dynamic_cast<QBoxLayout *>(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();

View File

@@ -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() ) );