mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-01 15:49:51 +08:00
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:
+26
-25
@@ -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
@@ -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;}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user