UI: Use grid layout for advanced audio properties

This fixes the issue where the labels wouldn't have enough space for
localization text in certain circumstances, and also fixes some issues
with alignment
This commit is contained in:
jp9000
2015-02-11 07:49:12 -08:00
parent 1fc132dc77
commit dce0afa84f
4 changed files with 60 additions and 65 deletions
+26 -25
View File
@@ -1,4 +1,5 @@
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLabel>
#include <QSpinBox>
#include <QCheckBox>
@@ -10,14 +11,10 @@
#define NSEC_PER_MSEC 1000000
#endif
OBSAdvAudioCtrl::OBSAdvAudioCtrl(obs_source_t *source_)
OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *layout, obs_source_t *source_)
: source(source_)
{
QWidget *forceMonoContainer;
QWidget *mixerContainer;
QWidget *panningContainer;
QHBoxLayout *hlayout;
QLabel *labelL, *labelR;
signal_handler_t *handler = obs_source_get_signal_handler(source);
const char *sourceName = obs_source_get_name(source);
float vol = obs_source_get_volume(source);
@@ -57,6 +54,7 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(obs_source_t *source_)
hlayout = new QHBoxLayout();
hlayout->setContentsMargins(0, 0, 0, 0);
panningContainer->setLayout(hlayout);
panningContainer->setMinimumWidth(100);
labelL->setText("L");
@@ -68,18 +66,16 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(obs_source_t *source_)
volume->setMinimum(0);
volume->setMaximum(2000);
volume->setMinimumWidth(130);
volume->setMaximumWidth(130);
volume->setValue(int(vol * 100.0f));
forceMono->setChecked((flags & OBS_SOURCE_FLAG_FORCE_MONO) != 0);
forceMonoContainer->setMinimumWidth(130);
forceMonoContainer->setMaximumWidth(130);
forceMonoContainer->layout()->addWidget(forceMono);
forceMonoContainer->layout()->setAlignment(forceMono,
Qt::AlignHCenter | Qt::AlignVCenter);
QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
panning->setMinimum(0);
panning->setMaximum(100);
panning->setTickPosition(QSlider::TicksAbove);
@@ -89,8 +85,6 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(obs_source_t *source_)
int64_t cur_sync = obs_source_get_sync_offset(source);
syncOffset->setMinimum(-20000);
syncOffset->setMaximum(20000);
syncOffset->setMinimumWidth(130);
syncOffset->setMaximumWidth(130);
syncOffset->setValue(int(cur_sync / NSEC_PER_MSEC));
mixer1->setText("1");
@@ -102,14 +96,11 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(obs_source_t *source_)
mixer4->setText("4");
mixer4->setChecked(mixers & (1<<3));
panningContainer->setMinimumWidth(140);
panningContainer->setMaximumWidth(140);
panningContainer->layout()->addWidget(labelL);
panningContainer->layout()->addWidget(panning);
panningContainer->layout()->addWidget(labelR);
panningContainer->setMaximumWidth(170);
mixerContainer->setMinimumWidth(160);
mixerContainer->setMaximumWidth(160);
mixerContainer->layout()->addWidget(mixer1);
mixerContainer->layout()->addWidget(mixer2);
mixerContainer->layout()->addWidget(mixer3);
@@ -132,16 +123,26 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(obs_source_t *source_)
QWidget::connect(mixer4, SIGNAL(clicked(bool)),
this, SLOT(mixer4Changed(bool)));
hlayout = new QHBoxLayout;
hlayout->setContentsMargins(0, 0, 0, 0);
hlayout->addWidget(nameLabel);
hlayout->addWidget(volume);
hlayout->addWidget(forceMonoContainer);
hlayout->addWidget(panningContainer);
hlayout->addWidget(syncOffset);
hlayout->addWidget(mixerContainer);
setLayout(hlayout);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
int lastRow = layout->rowCount();
layout->addWidget(nameLabel, lastRow, 0);
layout->addWidget(volume, lastRow, 1);
layout->addWidget(forceMonoContainer, lastRow, 2);
layout->addWidget(panningContainer, lastRow, 3);
layout->addWidget(syncOffset, lastRow, 4);
layout->addWidget(mixerContainer, lastRow, 5);
layout->layout()->setAlignment(mixerContainer,
Qt::AlignHCenter | Qt::AlignVCenter);
}
OBSAdvAudioCtrl::~OBSAdvAudioCtrl()
{
nameLabel->deleteLater();
volume->deleteLater();
forceMonoContainer->deleteLater();
panningContainer->deleteLater();
syncOffset->deleteLater();
mixerContainer->deleteLater();
}
/* ------------------------------------------------------------------------- */
+21 -11
View File
@@ -2,26 +2,35 @@
#include <obs.hpp>
#include <QWidget>
#include <QPointer>
class QGridLayout;
class QLabel;
class QSpinBox;
class QCheckBox;
class QSlider;
class OBSAdvAudioCtrl : public QWidget {
class OBSAdvAudioCtrl : public QObject {
Q_OBJECT
private:
OBSSource source;
QLabel *nameLabel = nullptr;
QSpinBox *volume = nullptr;
QCheckBox *forceMono = nullptr;
QSlider *panning = nullptr;
QSpinBox *syncOffset = nullptr;
QCheckBox *mixer1 = nullptr;
QCheckBox *mixer2 = nullptr;
QCheckBox *mixer3 = nullptr;
QCheckBox *mixer4 = nullptr;
QPointer<QWidget> forceMonoContainer;
QPointer<QWidget> mixerContainer;
QPointer<QWidget> panningContainer;
QPointer<QLabel> nameLabel;
QPointer<QSpinBox> volume;
QPointer<QCheckBox> forceMono;
QPointer<QSlider> panning;
QPointer<QLabel> labelL;
QPointer<QLabel> labelR;
QPointer<QSpinBox> syncOffset;
QPointer<QCheckBox> mixer1;
QPointer<QCheckBox> mixer2;
QPointer<QCheckBox> mixer3;
QPointer<QCheckBox> mixer4;
OBSSignal volChangedSignal;
OBSSignal syncOffsetSignal;
@@ -34,7 +43,8 @@ private:
static void OBSSourceMixersChanged(void *param, calldata_t *calldata);
public:
OBSAdvAudioCtrl(obs_source_t *source_);
OBSAdvAudioCtrl(QGridLayout *layout, obs_source_t *source_);
virtual ~OBSAdvAudioCtrl();
inline obs_source_t *GetSource() const {return source;}
+11 -29
View File
@@ -1,5 +1,5 @@
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QScrollArea>
#include <QLabel>
#include "window-basic-adv-audio.hpp"
@@ -18,49 +18,32 @@ OBSBasicAdvAudio::OBSBasicAdvAudio(QWidget *parent)
{
QScrollArea *scrollArea;
QVBoxLayout *vlayout;
QHBoxLayout *hlayout;
QWidget *widget;
QLabel *label;
hlayout = new QHBoxLayout;
hlayout->setContentsMargins(0, 0, 0, 0);
mainLayout = new QGridLayout;
mainLayout->setContentsMargins(0, 0, 0, 0);
label = new QLabel(QTStr("Basic.AdvAudio.Name"));
label->setMinimumWidth(170);
label->setAlignment(Qt::AlignHCenter);
hlayout->addWidget(label);
mainLayout->addWidget(label, 0, 0);
label = new QLabel(QTStr("Basic.AdvAudio.Volume"));
label->setMinimumWidth(130);
label->setMaximumWidth(130);
label->setAlignment(Qt::AlignHCenter);
hlayout->addWidget(label);
mainLayout->addWidget(label, 0, 1);
label = new QLabel(QTStr("Basic.AdvAudio.Mono"));
label->setMinimumWidth(130);
label->setMaximumWidth(130);
label->setAlignment(Qt::AlignHCenter);
hlayout->addWidget(label);
mainLayout->addWidget(label, 0, 2);
label = new QLabel(QTStr("Basic.AdvAudio.Panning"));
label->setMinimumWidth(140);
label->setMaximumWidth(140);
label->setAlignment(Qt::AlignHCenter);
hlayout->addWidget(label);
mainLayout->addWidget(label, 0, 3);
label = new QLabel(QTStr("Basic.AdvAudio.SyncOffset"));
label->setMinimumWidth(130);
label->setMaximumWidth(130);
label->setAlignment(Qt::AlignHCenter);
hlayout->addWidget(label);
mainLayout->addWidget(label, 0, 4);
label = new QLabel(QTStr("Basic.AdvAudio.AudioTracks"));
label->setMinimumWidth(160);
label->setMaximumWidth(160);
label->setAlignment(Qt::AlignHCenter);
hlayout->addWidget(label);
widget = new QWidget;
widget->setLayout(hlayout);
mainLayout->addWidget(label, 0, 5);
vlayout = new QVBoxLayout;
vlayout->setContentsMargins(0, 0, 0, 10);
vlayout->addWidget(widget);
controlArea = new QWidget;
controlArea->setLayout(vlayout);
controlArea->setLayout(mainLayout);
controlArea->setSizePolicy(QSizePolicy::Preferred,
QSizePolicy::Preferred);
@@ -128,8 +111,7 @@ void OBSBasicAdvAudio::OBSSourceRemoved(void *param, calldata_t *calldata)
inline void OBSBasicAdvAudio::AddAudioSource(obs_source_t *source)
{
OBSAdvAudioCtrl *control = new OBSAdvAudioCtrl(source);
controlArea->layout()->addWidget(control);
OBSAdvAudioCtrl *control = new OBSAdvAudioCtrl(mainLayout, source);
controls.push_back(control);
}
+2
View File
@@ -5,6 +5,7 @@
#include <vector>
class OBSAdvAudioCtrl;
class QGridLayout;
// "Basic advanced audio"? ...
@@ -13,6 +14,7 @@ class OBSBasicAdvAudio : public QDialog {
private:
QWidget *controlArea;
QGridLayout *mainLayout;
OBSSignal sourceAddedSignal;
OBSSignal sourceRemovedSignal;