void EffectDtmf::PopulateOrExchange(ShuttleGui & S) { // dialog will be passed values from effect // Effect retrieves values from saved config // Dialog will take care of using them to initialize controls // If there is a selection, use that duration, otherwise use // value from saved config: this is useful is user wants to // replace selection with dtmf sequence S.AddSpace(0, 5); S.StartMultiColumn(2, wxCENTER); { wxTextValidator vldDtmf(wxFILTER_INCLUDE_CHAR_LIST, &dtmfSequence); vldDtmf.SetIncludes(wxArrayString(WXSIZEOF(kSymbols), kSymbols)); mDtmfSequenceT = S.Id(ID_Sequence).AddTextBox(_("DTMF sequence:"), wxT(""), 10); mDtmfSequenceT->SetValidator(vldDtmf); FloatingPointValidator<double> vldAmp(3, &dtmfAmplitude, NUM_VAL_NO_TRAILING_ZEROES); vldAmp.SetRange(MIN_Amplitude, MAX_Amplitude); S.Id(ID_Amplitude).AddTextBox(_("Amplitude (0-1):"), wxT(""), 10)->SetValidator(vldAmp); S.AddPrompt(_("Duration:")); mDtmfDurationT = safenew NumericTextCtrl(NumericConverter::TIME, S.GetParent(), ID_Duration, GetDurationFormat(), GetDuration(), mProjectRate, wxDefaultPosition, wxDefaultSize, true); mDtmfDurationT->SetName(_("Duration")); mDtmfDurationT->EnableMenu(); S.AddWindow(mDtmfDurationT); S.AddFixedText(_("Tone/silence ratio:"), false); S.SetStyle(wxSL_HORIZONTAL | wxEXPAND); mDtmfDutyCycleS = S.Id(ID_DutyCycle).AddSlider( {}, dtmfDutyCycle * SCL_DutyCycle, MAX_DutyCycle * SCL_DutyCycle, MIN_DutyCycle * SCL_DutyCycle); S.SetSizeHints(-1,-1); } S.EndMultiColumn(); S.StartMultiColumn(2, wxCENTER); { S.AddFixedText(_("Duty cycle:"), false); mDtmfDutyT = S.AddVariableText(wxString::Format(wxT("%.1f %%"), dtmfDutyCycle), false); S.AddFixedText(_("Tone duration:"), false); mDtmfSilenceT = S.AddVariableText(wxString::Format(wxString(wxT("%.0f ")) + _("ms"), dtmfTone * 1000.0), false); S.AddFixedText(_("Silence duration:"), false); mDtmfToneT = S.AddVariableText(wxString::Format(wxString(wxT("%0.f ")) + _("ms"), dtmfSilence * 1000.0), false); } S.EndMultiColumn(); }
void DtmfDialog::PopulateOrExchange( ShuttleGui & S ) { wxTextValidator vldDtmf(wxFILTER_INCLUDE_CHAR_LIST); vldDtmf.SetIncludes(wxArrayString(42, dtmfSymbols)); S.AddTitle(_("by Salvo Ventura")); S.StartMultiColumn(2, wxEXPAND); { mDtmfStringT = S.Id(ID_DTMF_STRING_TEXT).AddTextBox(_("DTMF sequence:"), wxT(""), 10); mDtmfStringT->SetValidator(vldDtmf); // The added colon to improve visual consistency was placed outside // the translatable strings to avoid breaking translations close to 2.0. // TODO: Make colon part of the translatable string after 2.0. S.TieNumericTextBox(_("Amplitude (0-1)") + wxString(wxT(":")), dAmplitude, 10); S.AddPrompt(_("Duration:")); if (mDtmfDurationT == NULL) { mDtmfDurationT = new TimeTextCtrl(this, ID_DTMF_DURATION_TEXT, wxT(""), dDuration, mEffect->mProjectRate, wxDefaultPosition, wxDefaultSize, true); /* use this instead of "seconds" because if a selection is passed to the * effect, I want it (dDuration) to be used as the duration, and with * "seconds" this does not always work properly. For example, it rounds * down to zero... */ mDtmfDurationT->SetName(_("Duration")); mDtmfDurationT->SetFormatString(mDtmfDurationT->GetBuiltinFormat(dIsSelection==true?(_("hh:mm:ss + samples")):(_("hh:mm:ss + milliseconds")))); mDtmfDurationT->EnableMenu(); } S.AddWindow(mDtmfDurationT); S.AddFixedText(_("Tone/silence ratio:"), false); S.SetStyle(wxSL_HORIZONTAL | wxEXPAND); mDtmfDutyS = S.Id(ID_DTMF_DUTYCYCLE_SLIDER).AddSlider(wxT(""), (int)dDutyCycle, DUTY_MAX, DUTY_MIN); S.SetSizeHints(-1,-1); } S.EndMultiColumn(); S.StartMultiColumn(2, wxCENTER); { S.AddFixedText(_("Duty cycle:"), false); mDtmfDutyT = S.Id(ID_DTMF_DUTYCYCLE_TEXT).AddVariableText(wxString::Format(wxT("%.1f %%"), (float) dDutyCycle/DUTY_SCALE), false); S.AddFixedText(_("Tone duration:"), false); mDtmfSilenceT = S.Id(ID_DTMF_TONELEN_TEXT).AddVariableText(wxString::Format(wxString(wxT("%d ")) + _("ms"), (int) dTone * 1000), false); S.AddFixedText(_("Silence duration:"), false); mDtmfToneT = S.Id(ID_DTMF_SILENCE_TEXT).AddVariableText(wxString::Format(wxString(wxT("%d ")) + _("ms"), (int) dSilence * 1000), false); } S.EndMultiColumn(); }
void DtmfDialog::PopulateOrExchange( ShuttleGui & S ) { wxTextValidator vldDtmf(wxFILTER_INCLUDE_CHAR_LIST); vldDtmf.SetIncludes(wxArrayString(20, dtmfSymbols)); S.AddTitle(_("by Salvo Ventura (2006)")); S.StartMultiColumn(2, wxEXPAND); { mDtmfStringT = S.Id(ID_DTMF_STRING_TEXT).AddTextBox(_("DTMF sequence:"), wxT(""), 10); mDtmfStringT->SetValidator(vldDtmf); S.AddPrompt(_("DTMF duration:")); mDtmfDurationT = new TimeTextCtrl(this, ID_DTMF_DURATION_TEXT, /* use this instead of "seconds" because if a selection is passed to the effect, I want it (dDuration) to be used as the duration, and with "seconds" this does not always work properly. For example, it rounds down to zero... */ TimeTextCtrl::GetBuiltinFormat(dIsSelection==true?(wxT("hh:mm:ss + samples")):(wxT("seconds"))), dDuration, 44100, wxDefaultPosition, wxDefaultSize, true); S.AddWindow(mDtmfDurationT); mDtmfDurationT->EnableMenu(); S.AddFixedText(_("Tone/silence ratio:"), false); S.SetStyle(wxSL_HORIZONTAL | wxEXPAND); mDtmfDutyS = S.Id(ID_DTMF_DUTYCYCLE_SLIDER).AddSlider(wxT(""), (int)dDutyCycle, DUTY_MAX); mDtmfDutyS->SetRange(DUTY_MIN, DUTY_MAX); S.SetSizeHints(-1,-1); } S.EndMultiColumn(); S.StartMultiColumn(2, wxCENTER); { S.AddFixedText(_("Duty cycle:"), false); mDtmfDutyT = S.Id(ID_DTMF_DUTYCYCLE_TEXT).AddVariableText(wxString::Format(wxT("%.1f %%"), (float) dDutyCycle/DUTY_SCALE), false); S.AddFixedText(_("Tone duration:"), false); mDtmfSilenceT = S.Id(ID_DTMF_TONELEN_TEXT).AddVariableText(wxString::Format(wxString(wxT("%d ")) + _("ms"), (int) dTone * 1000), false); S.AddFixedText(_("Silence duration:"), false); mDtmfToneT = S.Id(ID_DTMF_SILENCE_TEXT).AddVariableText(wxString::Format(wxString(wxT("%d ")) + _("ms"), (int) dSilence * 1000), false); } S.EndMultiColumn(); }