MCPcopy Create free account
hub / github.com/audacity/audacity / AddTextboxAndSlider

Method AddTextboxAndSlider

src/effects/DynamicRangeProcessorEditor.cpp:408–463  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

406}
407
408void DynamicRangeProcessorEditor::AddTextboxAndSlider(
409 ShuttleGui& S, ExtendedCompressorParameter& setting)
410{
411 setting.text = S.Validator<FloatingPointValidator<double>>(
412 1, &setting.value, NumValidatorStyle::ONE_TRAILING_ZERO,
413 setting.param->Min(), setting.param->Max())
414 .AddTextBox(setting.attributes.caption, L"", 12);
415
416 setting.text->Bind(wxEVT_TEXT, [&](wxCommandEvent& evt) {
417 if (!EnableApply(mUIParent, mUIParent->TransferDataFromWindow()))
418 return;
419 setting.slider->SetValue(TextToSliderValue(setting));
420 ValidateUI();
421 UpdateUI();
422 Publish(EffectSettingChanged {});
423 });
424
425 setting.slider =
426 S.Name(setting.attributes.caption)
427 .Style(wxSL_HORIZONTAL)
428 .MinSize({ 100, -1 })
429 .AddSlider(
430 {}, TextToSliderValue(setting), setting.param->SliderMax(),
431 setting.param->SliderMin());
432
433 setting.slider->Bind(wxEVT_SLIDER, [&](wxCommandEvent& evt) {
434 setting.value = SliderToTextValue(setting.slider->GetValue(), setting);
435 setting.text->GetValidator()->TransferToWindow();
436 EnableApply(mUIParent, mUIParent->Validate());
437 ValidateUI();
438 UpdateUI();
439 Publish(EffectSettingChanged {});
440 });
441
442 // For exponential slider, for right/down arrow keys, because
443 // the setting value has precision of 1, ensure that
444 // the change in slider position results a change in value of
445 // at least 0.1, otherwise the slider position and setting value
446 // may not change.
447 setting.slider->Bind(wxEVT_SCROLL_LINEDOWN, [&](wxScrollEvent& evt) {
448 if (setting.attributes.exponentialSlider
449 && setting.value == SliderToTextValue(evt.GetInt(), setting)) {
450 setting.value += 0.1;
451 setting.slider->SetValue(std::round(TextToSliderValue(setting)));
452 }
453 });
454
455 // And similarly for left/up arrow keys.
456 setting.slider->Bind(wxEVT_SCROLL_LINEUP, [&](wxScrollEvent& evt) {
457 if (setting.attributes.exponentialSlider
458 && setting.value == SliderToTextValue(evt.GetInt(), setting)) {
459 setting.value -= 0.1;
460 setting.slider->SetValue(std::round(TextToSliderValue(setting)));
461 }
462 });
463}
464
465bool DynamicRangeProcessorEditor::ValidateUI()

Callers

nothing calls this directly

Calls 15

TextToSliderValueFunction · 0.85
SliderToTextValueFunction · 0.85
roundFunction · 0.85
AddTextBoxMethod · 0.80
BindMethod · 0.80
AddSliderMethod · 0.80
MinMethod · 0.45
MaxMethod · 0.45
SetValueMethod · 0.45
SliderMaxMethod · 0.45
SliderMinMethod · 0.45

Tested by

no test coverage detected