| 406 | } |
| 407 | |
| 408 | void 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 | |
| 465 | bool DynamicRangeProcessorEditor::ValidateUI() |
nothing calls this directly
no test coverage detected