mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 04:42:18 +02:00
UI: Sort audio controls by source name
Audio controls in OBS Mixer and Advanced Audio Properties window are not sorted at all. Every time OBS is restarted they get shuffled (Jim note: This is due to json object hashing). The order of these controls is additionally not consistent between the mixer and the advanced audio properties window. Closes obsproject/obs-studio#1242
This commit is contained in:
parent
904ad9be1d
commit
61839d8c94
@ -13,7 +13,7 @@
|
||||
#define NSEC_PER_MSEC 1000000
|
||||
#endif
|
||||
|
||||
OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *layout, obs_source_t *source_)
|
||||
OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
|
||||
: source(source_)
|
||||
{
|
||||
QHBoxLayout *hlayout;
|
||||
@ -155,20 +155,7 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *layout, obs_source_t *source_)
|
||||
QWidget::connect(mixer6, SIGNAL(clicked(bool)),
|
||||
this, SLOT(mixer6Changed(bool)));
|
||||
|
||||
int lastRow = layout->rowCount();
|
||||
|
||||
idx = 0;
|
||||
layout->addWidget(nameLabel, lastRow, idx++);
|
||||
layout->addWidget(volume, lastRow, idx++);
|
||||
layout->addWidget(forceMonoContainer, lastRow, idx++);
|
||||
layout->addWidget(panningContainer, lastRow, idx++);
|
||||
layout->addWidget(syncOffset, lastRow, idx++);
|
||||
#if defined(_WIN32) || defined(__APPLE__) || HAVE_PULSEAUDIO
|
||||
layout->addWidget(monitoringType, lastRow, idx++);
|
||||
#endif
|
||||
layout->addWidget(mixerContainer, lastRow, idx++);
|
||||
layout->layout()->setAlignment(mixerContainer,
|
||||
Qt::AlignHCenter | Qt::AlignVCenter);
|
||||
setObjectName(sourceName);
|
||||
}
|
||||
|
||||
OBSAdvAudioCtrl::~OBSAdvAudioCtrl()
|
||||
@ -184,6 +171,24 @@ OBSAdvAudioCtrl::~OBSAdvAudioCtrl()
|
||||
mixerContainer->deleteLater();
|
||||
}
|
||||
|
||||
void OBSAdvAudioCtrl::ShowAudioControl(QGridLayout *layout)
|
||||
{
|
||||
int lastRow = layout->rowCount();
|
||||
int idx = 0;
|
||||
|
||||
layout->addWidget(nameLabel, lastRow, idx++);
|
||||
layout->addWidget(volume, lastRow, idx++);
|
||||
layout->addWidget(forceMonoContainer, lastRow, idx++);
|
||||
layout->addWidget(panningContainer, lastRow, idx++);
|
||||
layout->addWidget(syncOffset, lastRow, idx++);
|
||||
#if defined(_WIN32) || defined(__APPLE__) || HAVE_PULSEAUDIO
|
||||
layout->addWidget(monitoringType, lastRow, idx++);
|
||||
#endif
|
||||
layout->addWidget(mixerContainer, lastRow, idx++);
|
||||
layout->layout()->setAlignment(mixerContainer,
|
||||
Qt::AlignHCenter | Qt::AlignVCenter);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* OBS source callbacks */
|
||||
|
||||
|
@ -51,6 +51,7 @@ public:
|
||||
virtual ~OBSAdvAudioCtrl();
|
||||
|
||||
inline obs_source_t *GetSource() const {return source;}
|
||||
void ShowAudioControl(QGridLayout *layout);
|
||||
|
||||
public slots:
|
||||
void SourceFlagsChanged(uint32_t flags);
|
||||
|
@ -28,3 +28,15 @@ class QListWidgetItem;
|
||||
QListWidgetItem *TakeListItem(QListWidget *widget, int row);
|
||||
void DeleteListItem(QListWidget *widget, QListWidgetItem *item);
|
||||
void ClearListItems(QListWidget *widget);
|
||||
|
||||
template<typename QObjectPtr>
|
||||
void InsertQObjectByName(std::vector<QObjectPtr> &controls, QObjectPtr control)
|
||||
{
|
||||
QString name = control->objectName();
|
||||
auto finder = [name](QObjectPtr elem) {
|
||||
return elem->objectName() > name;
|
||||
};
|
||||
auto found_at = std::find_if(controls.begin(), controls.end(), finder);
|
||||
|
||||
controls.insert(found_at, control);
|
||||
}
|
||||
|
@ -136,6 +136,7 @@ VolControl::VolControl(OBSSource source_, bool showConfig)
|
||||
font.setPointSize(font.pointSize()-1);
|
||||
|
||||
QString sourceName = obs_source_get_name(source);
|
||||
setObjectName(sourceName);
|
||||
|
||||
nameLabel->setText(sourceName);
|
||||
nameLabel->setFont(font);
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <QLabel>
|
||||
#include "window-basic-adv-audio.hpp"
|
||||
#include "window-basic-main.hpp"
|
||||
#include "item-widget-helpers.hpp"
|
||||
#include "adv-audio-control.hpp"
|
||||
#include "obs-app.hpp"
|
||||
#include "qt-wrappers.hpp"
|
||||
@ -133,7 +134,12 @@ void OBSBasicAdvAudio::OBSSourceRemoved(void *param, calldata_t *calldata)
|
||||
inline void OBSBasicAdvAudio::AddAudioSource(obs_source_t *source)
|
||||
{
|
||||
OBSAdvAudioCtrl *control = new OBSAdvAudioCtrl(mainLayout, source);
|
||||
controls.push_back(control);
|
||||
|
||||
InsertQObjectByName(controls, control);
|
||||
|
||||
for (auto control : controls) {
|
||||
control->ShowAudioControl(mainLayout);
|
||||
}
|
||||
}
|
||||
|
||||
void OBSBasicAdvAudio::SourceAdded(OBSSource source)
|
||||
|
@ -2514,8 +2514,11 @@ void OBSBasic::ActivateAudioSource(OBSSource source)
|
||||
connect(vol, &VolControl::ConfigClicked,
|
||||
this, &OBSBasic::VolControlContextMenu);
|
||||
|
||||
volumes.push_back(vol);
|
||||
ui->volumeWidgets->layout()->addWidget(vol);
|
||||
InsertQObjectByName(volumes, vol);
|
||||
|
||||
for (auto volume : volumes) {
|
||||
ui->volumeWidgets->layout()->addWidget(volume);
|
||||
}
|
||||
}
|
||||
|
||||
void OBSBasic::DeactivateAudioSource(OBSSource source)
|
||||
|
Loading…
Reference in New Issue
Block a user