UI: Add ability to lock volume
This commit is contained in:
parent
fd244a6896
commit
b3601681b8
@ -93,6 +93,7 @@ Fullscreen="Fullscreen"
|
||||
Windowed="Windowed"
|
||||
Percent="Percent"
|
||||
AspectRatio="Aspect Ratio <b>%1:%2</b>"
|
||||
LockVolume="Lock Volume"
|
||||
|
||||
# warning if program already open
|
||||
AlreadyRunning.Title="OBS is already running"
|
||||
|
@ -276,6 +276,11 @@ VolControl::VolControl(OBSSource source_, bool showConfig, bool vertical)
|
||||
VolumeChanged();
|
||||
}
|
||||
|
||||
void VolControl::EnableSlider(bool enable)
|
||||
{
|
||||
slider->setEnabled(enable);
|
||||
}
|
||||
|
||||
VolControl::~VolControl()
|
||||
{
|
||||
obs_fader_remove_callback(obs_fader, OBSVolumeChanged, this);
|
||||
|
@ -252,4 +252,6 @@ public:
|
||||
|
||||
void SetMeterDecayRate(qreal q);
|
||||
void setPeakMeterType(enum obs_peak_meter_type peakMeterType);
|
||||
|
||||
void EnableSlider(bool enable);
|
||||
};
|
||||
|
@ -2842,12 +2842,38 @@ void OBSBasic::MixerRenameSource()
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool SourceVolumeLocked(obs_source_t *source)
|
||||
{
|
||||
obs_data_t *priv_settings = obs_source_get_private_settings(source);
|
||||
bool lock = obs_data_get_bool(priv_settings, "volume_locked");
|
||||
obs_data_release(priv_settings);
|
||||
|
||||
return lock;
|
||||
}
|
||||
|
||||
void OBSBasic::LockVolumeControl(bool lock)
|
||||
{
|
||||
QAction *action = reinterpret_cast<QAction *>(sender());
|
||||
VolControl *vol = action->property("volControl").value<VolControl *>();
|
||||
obs_source_t *source = vol->GetSource();
|
||||
|
||||
obs_data_t *priv_settings = obs_source_get_private_settings(source);
|
||||
obs_data_set_bool(priv_settings, "volume_locked", lock);
|
||||
obs_data_release(priv_settings);
|
||||
|
||||
vol->EnableSlider(!lock);
|
||||
}
|
||||
|
||||
void OBSBasic::VolControlContextMenu()
|
||||
{
|
||||
VolControl *vol = reinterpret_cast<VolControl *>(sender());
|
||||
|
||||
/* ------------------- */
|
||||
|
||||
QAction lockAction(QTStr("LockVolume"), this);
|
||||
lockAction.setCheckable(true);
|
||||
lockAction.setChecked(SourceVolumeLocked(vol->GetSource()));
|
||||
|
||||
QAction hideAction(QTStr("Hide"), this);
|
||||
QAction unhideAllAction(QTStr("UnhideAll"), this);
|
||||
QAction mixerRenameAction(QTStr("Rename"), this);
|
||||
@ -2870,6 +2896,8 @@ void OBSBasic::VolControlContextMenu()
|
||||
&OBSBasic::HideAudioControl, Qt::DirectConnection);
|
||||
connect(&unhideAllAction, &QAction::triggered, this,
|
||||
&OBSBasic::UnhideAllAudioControls, Qt::DirectConnection);
|
||||
connect(&lockAction, &QAction::toggled, this,
|
||||
&OBSBasic::LockVolumeControl, Qt::DirectConnection);
|
||||
connect(&mixerRenameAction, &QAction::triggered, this,
|
||||
&OBSBasic::MixerRenameSource, Qt::DirectConnection);
|
||||
|
||||
@ -2895,6 +2923,8 @@ void OBSBasic::VolControlContextMenu()
|
||||
|
||||
hideAction.setProperty("volControl",
|
||||
QVariant::fromValue<VolControl *>(vol));
|
||||
lockAction.setProperty("volControl",
|
||||
QVariant::fromValue<VolControl *>(vol));
|
||||
mixerRenameAction.setProperty("volControl",
|
||||
QVariant::fromValue<VolControl *>(vol));
|
||||
|
||||
@ -2916,6 +2946,8 @@ void OBSBasic::VolControlContextMenu()
|
||||
pasteFiltersAction.setEnabled(true);
|
||||
|
||||
QMenu popup;
|
||||
popup.addAction(&lockAction);
|
||||
popup.addSeparator();
|
||||
popup.addAction(&unhideAllAction);
|
||||
popup.addAction(&hideAction);
|
||||
popup.addAction(&mixerRenameAction);
|
||||
@ -3019,6 +3051,8 @@ void OBSBasic::ActivateAudioSource(OBSSource source)
|
||||
"VerticalVolControl");
|
||||
VolControl *vol = new VolControl(source, true, vertical);
|
||||
|
||||
vol->EnableSlider(!SourceVolumeLocked(source));
|
||||
|
||||
double meterDecayRate =
|
||||
config_get_double(basicConfig, "Audio", "MeterDecayRate");
|
||||
vol->SetMeterDecayRate(meterDecayRate);
|
||||
|
@ -660,6 +660,8 @@ private slots:
|
||||
void TBarChanged(int value);
|
||||
void TBarReleased();
|
||||
|
||||
void LockVolumeControl(bool lock);
|
||||
|
||||
private:
|
||||
/* OBS Callbacks */
|
||||
static void SceneReordered(void *data, calldata_t *params);
|
||||
|
Loading…
x
Reference in New Issue
Block a user