void TruncSilenceDialog::PopulateOrExchange(ShuttleGui & S) { S.AddSpace(0, 5); S.StartHorizontalLay(); { // Action choices wxArrayString processChoices; processChoices.Add(_("Truncate Detected Silence")); processChoices.Add(_("Compress Excess Silence")); S.Id(ID_PROCESS_CHOICE).TieChoice(wxT(""), mEffect->mProcessIndex, &processChoices); S.SetSizeHints(-1, -1); } S.EndHorizontalLay(); S.StartStatic(_("Detect Silence")); { S.StartMultiColumn(3, wxALIGN_CENTER_HORIZONTAL); { // Threshold wxArrayString choices(Enums::NumDbChoices, Enums::GetDbChoices()); S.TieChoice(_("Level:"), mEffect->mTruncDbChoiceIndex, &choices); S.SetSizeHints(-1, -1); S.AddSpace(0); // 'choices' aleady includes units. // Ignored silence S.Id(ID_DETECT_SILENCE).TieNumericTextBox(_("Duration:"), mEffect->mInitialAllowedSilence, 12); S.AddUnits(wxT("seconds")); } S.EndMultiColumn(); } S.EndStatic(); S.StartMultiColumn(3, wxALIGN_CENTER_HORIZONTAL); { // Truncation / Compression factor S.Id( ID_TRUNCATION_DURATION ).TieNumericTextBox(_("Truncate to:"), mEffect->mTruncLongestAllowedSilence, 12); S.AddUnits(wxT("seconds")); S.Id( ID_COMPRESS_FACTOR ).TieNumericTextBox(_("Compress to:"), mEffect->mSilenceCompressPercent, 12); S.AddUnits(wxT("percent")); } S.EndMultiColumn(); // Warnings pWarning = S.AddVariableText( wxT("") ); UpdateUI(); }
void TruncSilenceDialog::PopulateOrExchange(ShuttleGui & S) { S.StartHorizontalLay(wxCENTER, false); { S.AddTitle(_("by Lynn Allan")); } S.EndHorizontalLay(); S.StartHorizontalLay(wxCENTER, false); { // Add a little space } S.EndHorizontalLay(); S.StartThreeColumn(); { wxArrayString choices(Enums::NumDbChoices, Enums::GetDbChoices()); S.Id( ID_LONGEST_SILENCE_TEXT ).TieTextBox(_("Max silence duration:"), mEffect->mTruncLongestAllowedSilentMs, 10); S.AddUnits( _("milliseconds") ); //S.AddUnits(_("(9999999 or greater is off)")); S.TieChoice(_("Threshold for silence:"), mEffect->mTruncDbChoiceIndex, &choices); } S.EndTwoColumn(); pWarning = S.AddVariableText( wxT("") ); }
void ChangeSpeedDialog::PopulateOrExchange(ShuttleGui & S) { S.SetBorder(10); S.StartHorizontalLay(wxCENTER, false); { S.AddTitle(_("Change Speed, affecting both Tempo and Pitch") + wxString(wxT("\n\n")) + _("by Vaughan Johnson && Dominic Mazzoni") + wxString(wxT("\n")) + _("using SampleRate, by Erik de Castro Lopo")); } S.EndHorizontalLay(); S.SetBorder(5); // S.StartMultiColumn(2, wxCENTER); { mpTextCtrl_PercentChange = S.Id(ID_TEXT_PERCENTCHANGE).AddTextBox(_("Percent Change:"), wxT(""), 12); wxTextValidator validator(wxFILTER_NUMERIC); mpTextCtrl_PercentChange->SetValidator(validator); } S.EndMultiColumn(); // S.StartHorizontalLay(wxEXPAND); { S.SetStyle(wxSL_HORIZONTAL); mpSlider_PercentChange = S.Id(ID_SLIDER_PERCENTCHANGE).AddSlider(wxT(""), 0, (int)PERCENTCHANGE_MAX, (int)PERCENTCHANGE_MIN); mpSlider_PercentChange->SetName(_("Percent Change")); } S.EndHorizontalLay(); // S.StartMultiColumn(5, wxCENTER); { S.AddUnits(_("Standard Vinyl RPM:")); wxArrayString rpmStrings; rpmStrings.Add(wxT("33 1/3")); rpmStrings.Add(wxT("45")); rpmStrings.Add(wxT("78")); /* i18n-hint: n/a is an English abbreviation meaning "not applicable". */ rpmStrings.Add(_("n/a")); mpChoice_FromVinyl = S.Id(ID_CHOICE_FROMVINYL).AddChoice(_("from"), wxT(""), &rpmStrings); mpChoice_FromVinyl->SetName(_("From RPM")); mpChoice_FromVinyl->SetSizeHints(100, -1); mpChoice_ToVinyl = S.Id(ID_CHOICE_TOVINYL).AddChoice(_("to"), wxT(""), &rpmStrings); mpChoice_ToVinyl->SetName(_("To RPM")); mpChoice_ToVinyl->SetSizeHints(100, -1); } S.EndMultiColumn(); }
void ChangeTempoDialog::PopulateOrExchange(ShuttleGui & S) { wxTextValidator nullvld(wxFILTER_INCLUDE_CHAR_LIST); wxTextValidator numvld(wxFILTER_NUMERIC); S.SetBorder(10); S.StartHorizontalLay(wxCENTER, false); { S.AddTitle(_("Change Tempo without Changing Pitch") + wxString(wxT("\n\n")) + _("by Vaughan Johnson && Dominic Mazzoni") + wxString(wxT("\n")) + _("using SoundTouch, by Olli Parviainen")); } S.EndHorizontalLay(); S.SetBorder(5); // S.StartMultiColumn(2, wxCENTER); { m_pTextCtrl_PercentChange = S.Id(ID_TEXT_PERCENTCHANGE) .AddTextBox(_("Percent Change:"), wxT(""), 12); m_pTextCtrl_PercentChange->SetValidator(numvld); } S.EndMultiColumn(); // S.StartHorizontalLay(wxEXPAND); { S.SetStyle(wxSL_HORIZONTAL); m_pSlider_PercentChange = S.Id(ID_SLIDER_PERCENTCHANGE) .AddSlider(wxT(""), 0, (int)PERCENTCHANGE_MAX, (int)PERCENTCHANGE_MIN); m_pSlider_PercentChange->SetName(_("Percent Change")); } S.EndHorizontalLay(); // S.StartMultiColumn(5, wxCENTER); { // S.AddUnits(_("Beats per minute:")); m_pTextCtrl_FromBPM = S.Id(ID_TEXT_FROMBPM) .AddTextBox(_("from"), wxT(""), 12); m_pTextCtrl_FromBPM->SetName(_("From beats per minute")); m_pTextCtrl_FromBPM->SetValidator(numvld); m_pTextCtrl_ToBPM = S.Id(ID_TEXT_TOBPM) .AddTextBox(_("to"), wxT(""), 12); m_pTextCtrl_ToBPM->SetName(_("To beats per minute")); m_pTextCtrl_ToBPM->SetValidator(numvld); // S.AddUnits(_("Length (seconds):")); m_pTextCtrl_FromLength = S.Id(ID_TEXT_FROMLENGTH) .AddTextBox(_("from"), wxT(""), 12); m_pTextCtrl_FromLength->SetName(_("From length in seconds")); m_pTextCtrl_FromLength->SetValidator(nullvld); m_pTextCtrl_ToLength = S.Id(ID_TEXT_TOLENGTH) .AddTextBox(_("to"), wxT(""), 12); m_pTextCtrl_ToLength->SetName(_("To length in seconds")); m_pTextCtrl_ToLength->SetValidator(numvld); } S.EndMultiColumn(); return; }
void TagsEditor::PopulateOrExchange(ShuttleGui & S) { bool bShow; gPrefs->Read(wxT("/AudioFiles/ShowId3Dialog"), &bShow, true ); S.StartVerticalLay(); { S.StartHorizontalLay(wxALIGN_LEFT, 0); { S.AddUnits(_("Use arrow keys (or ENTER key after editing) to navigate fields.")); } S.EndHorizontalLay(); if (mGrid == NULL) { mGrid = safenew Grid(S.GetParent(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER); mGrid->RegisterDataType(wxT("Combo"), (mStringRenderer = safenew wxGridCellStringRenderer), (mComboEditor = safenew ComboEditor(wxArrayString(), true))); mGrid->SetColLabelSize(mGrid->GetDefaultRowSize()); auto cs = names(); // Build the initial (empty) grid mGrid->CreateGrid(0, 2); mGrid->SetRowLabelSize(0); mGrid->SetDefaultCellAlignment(wxALIGN_LEFT, wxALIGN_CENTER); mGrid->SetColLabelValue(0, _("Tag")); mGrid->SetColLabelValue(1, _("Value")); // Resize the name column and set default row height. wxComboBox tc(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDefaultSize, cs); mGrid->SetColSize(0, tc.GetSize().x); mGrid->SetColMinimalWidth(0, tc.GetSize().x); } S.Prop(1); S.AddWindow(mGrid, wxEXPAND | wxALL); S.StartMultiColumn(4, wxALIGN_CENTER); { S.Id(AddID).AddButton(_("&Add")); S.Id(RemoveID).AddButton(_("&Remove")); S.AddTitle( {} ); S.Id(ClearID).AddButton(_("Cl&ear")); } S.EndMultiColumn(); S.StartHorizontalLay(wxALIGN_CENTRE, 0); { S.StartStatic(_("Genres")); { S.StartMultiColumn(4, wxALIGN_CENTER); { S.Id(EditID).AddButton(_("E&dit...")); S.Id(ResetID).AddButton(_("Rese&t...")); } S.EndMultiColumn(); } S.EndStatic(); S.StartStatic(_("Template")); { S.StartMultiColumn(4, wxALIGN_CENTER); { S.Id(LoadID).AddButton(_("&Load...")); S.Id(SaveID).AddButton(_("&Save...")); S.AddTitle( {} ); S.Id(SaveDefaultsID).AddButton(_("Set De&fault")); } S.EndMultiColumn(); } S.EndStatic(); } S.EndHorizontalLay(); S.StartHorizontalLay(wxALIGN_LEFT, 0); { S.Id( DontShowID ).AddCheckBox( _("Don't show this when exporting audio"), !bShow ); } S.EndHorizontalLay(); } S.EndVerticalLay(); S.AddStandardButtons(eOkButton | eCancelButton | eHelpButton); }
void TagsEditor::PopulateOrExchange(ShuttleGui & S) { S.StartVerticalLay(); { S.StartHorizontalLay(wxALIGN_LEFT, false); { S.AddUnits(_("Use arrow keys (or RETURN key after editing) to navigate fields.")); } S.EndHorizontalLay(); if (mGrid == NULL) { mGrid = new Grid(S.GetParent(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER); mStringRenderer = new wxGridCellStringRenderer; mComboEditor = new ComboEditor(wxArrayString(), true); mGrid->RegisterDataType(wxT("Combo"), mStringRenderer, mComboEditor); mGrid->SetColLabelSize(mGrid->GetDefaultRowSize()); wxArrayString cs(WXSIZEOF(names), names); // Build the initial (empty) grid mGrid->CreateGrid(0, 2); mGrid->SetRowLabelSize(0); mGrid->SetDefaultCellAlignment(wxALIGN_LEFT, wxALIGN_CENTER); mGrid->SetColLabelValue(0, _("Tag")); mGrid->SetColLabelValue(1, _("Value")); // Resize the name column and set default row height. wxComboBox tc(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDefaultSize, cs); mGrid->SetColSize(0, tc.GetSize().x); mGrid->SetColMinimalWidth(0, tc.GetSize().x); } S.Prop(true); S.AddWindow(mGrid, wxEXPAND | wxALL); S.StartMultiColumn(4, wxALIGN_CENTER); { S.Id(AddID).AddButton(_("&Add")); S.Id(RemoveID).AddButton(_("&Remove")); S.AddTitle(wxT(" ")); S.Id(ClearID).AddButton(_("Cl&ear")); } S.EndMultiColumn(); S.StartHorizontalLay(wxALIGN_CENTRE, false); { S.StartStatic(_("Genres")); { S.StartMultiColumn(4, wxALIGN_CENTER); { S.Id(EditID).AddButton(_("E&dit...")); S.Id(ResetID).AddButton(_("Rese&t...")); } S.EndMultiColumn(); } S.EndStatic(); S.StartStatic(_("Template")); { S.StartMultiColumn(4, wxALIGN_CENTER); { S.Id(LoadID).AddButton(_("&Load...")); S.Id(SaveID).AddButton(_("&Save...")); S.AddTitle(wxT(" ")); S.Id(SaveDefaultsID).AddButton(_("Set De&fault")); } S.EndMultiColumn(); } S.EndStatic(); } S.EndHorizontalLay(); } S.EndVerticalLay(); S.AddStandardButtons(eOkButton | eCancelButton); }
void EffectAutoDuck::PopulateOrExchange(ShuttleGui & S) { S.SetBorder(5); S.StartVerticalLay(true); { S.AddSpace(0, 5); mPanel = safenew EffectAutoDuckPanel(S.GetParent(), this); S.AddWindow(mPanel); S.AddSpace(0, 5); S.StartMultiColumn(6, wxCENTER); { FloatingPointValidator<double> vldDuckAmountDb(1, &mDuckAmountDb, NUM_VAL_NO_TRAILING_ZEROES); vldDuckAmountDb.SetRange(MIN_DuckAmountDb, MAX_DuckAmountDb); mDuckAmountDbBox = S.AddTextBox(_("Duck amount:"), wxT(""), 10); mDuckAmountDbBox->SetValidator(vldDuckAmountDb); S.AddUnits(_("dB")); FloatingPointValidator<double> vldMaximumPause(2, &mMaximumPause, NUM_VAL_NO_TRAILING_ZEROES); vldMaximumPause.SetRange(MIN_MaximumPause, MAX_MaximumPause); mMaximumPauseBox = S.AddTextBox(_("Maximum pause:"), wxT(""), 10); mMaximumPauseBox->SetValidator(vldMaximumPause); S.AddUnits(_("seconds")); FloatingPointValidator<double> vldOuterFadeDownLen(2, &mOuterFadeDownLen, NUM_VAL_NO_TRAILING_ZEROES); vldOuterFadeDownLen.SetRange(MIN_OuterFadeDownLen, MAX_OuterFadeDownLen); mOuterFadeDownLenBox = S.AddTextBox(_("Outer fade down length:"), wxT(""), 10); mOuterFadeDownLenBox->SetValidator(vldOuterFadeDownLen); S.AddUnits(_("seconds")); FloatingPointValidator<double> vldOuterFadeUpLen(2, &mOuterFadeUpLen, NUM_VAL_NO_TRAILING_ZEROES); vldOuterFadeUpLen.SetRange(MIN_OuterFadeUpLen, MAX_OuterFadeUpLen); mOuterFadeUpLenBox = S.AddTextBox(_("Outer fade up length:"), wxT(""), 10); mOuterFadeUpLenBox->SetValidator(vldOuterFadeUpLen); S.AddUnits(_("seconds")); FloatingPointValidator<double> vldInnerFadeDownLen(2, &mInnerFadeDownLen, NUM_VAL_NO_TRAILING_ZEROES); vldInnerFadeDownLen.SetRange(MIN_InnerFadeDownLen, MAX_InnerFadeDownLen); mInnerFadeDownLenBox = S.AddTextBox(_("Inner fade down length:"), wxT(""), 10); mInnerFadeDownLenBox->SetValidator(vldInnerFadeDownLen); S.AddUnits(_("seconds")); FloatingPointValidator<double> vldInnerFadeUpLen(2, &mInnerFadeUpLen, NUM_VAL_NO_TRAILING_ZEROES); vldInnerFadeUpLen.SetRange(MIN_InnerFadeUpLen, MAX_InnerFadeUpLen); mInnerFadeUpLenBox = S.AddTextBox(_("Inner fade up length:"), wxT(""), 10); mInnerFadeUpLenBox->SetValidator(vldInnerFadeUpLen); S.AddUnits(_("seconds")); } S.EndMultiColumn(); S.StartMultiColumn(3, wxCENTER); { FloatingPointValidator<double> vldThresholdDb(2, &mThresholdDb, NUM_VAL_NO_TRAILING_ZEROES); vldThresholdDb.SetRange(MIN_ThresholdDb, MAX_ThresholdDb); mThresholdDbBox = S.AddTextBox(_("Threshold:"), wxT(""), 10); mThresholdDbBox->SetValidator(vldThresholdDb); S.AddUnits(_("dB")); } S.EndMultiColumn(); } S.EndVerticalLay(); return; }
void ChangePitchDialog::PopulateOrExchange(ShuttleGui & S) { wxTextValidator nullvld(wxFILTER_INCLUDE_CHAR_LIST); wxTextValidator numvld(wxFILTER_NUMERIC); wxArrayString pitch; pitch.Add(wxT("C")); pitch.Add(wxT("C#/Db")); pitch.Add(wxT("D")); pitch.Add(wxT("D#/Eb")); pitch.Add(wxT("E")); pitch.Add(wxT("F")); pitch.Add(wxT("F#/Gb")); pitch.Add(wxT("G")); pitch.Add(wxT("G#/Ab")); pitch.Add(wxT("A")); pitch.Add(wxT("A#/Bb")); pitch.Add(wxT("B")); S.SetBorder(10); S.StartHorizontalLay(wxCENTER, false); { S.AddTitle(_("Change Pitch without Changing Tempo") + wxString(wxT("\n\n")) + _("by Vaughan Johnson && Dominic Mazzoni") + wxString(wxT("\n")) + _("using SoundTouch, by Olli Parviainen")); } S.EndHorizontalLay(); S.SetBorder(5); // S.StartMultiColumn(6, wxCENTER); { // S.AddUnits(_("Pitch:")); S.StartHorizontalLay(wxALIGN_CENTER_VERTICAL); { m_pChoice_FromPitch = S.Id(ID_CHOICE_FROMPITCH) .AddChoice(_("From:"), wxT(""), &pitch); m_pChoice_FromPitch->SetName(_("From Pitch")); m_pChoice_FromPitch->SetSizeHints(100, -1); } S.EndHorizontalLay(); S.StartStatic(wxT("")); { S.StartVerticalLay(); { S.SetBorder(3); m_pRadioButton_PitchUp = S.Id(ID_RADIOBUTTON_PITCHUPDOWN) .AddRadioButton(_("Up")); m_pRadioButton_PitchDown = S.Id(ID_RADIOBUTTON_PITCHUPDOWN) .AddRadioButtonToGroup(_("Down")); S.SetBorder(5); } S.EndVerticalLay(); } S.EndStatic(); S.StartHorizontalLay(wxALIGN_CENTER_VERTICAL); { m_pChoice_ToPitch = S.Id(ID_CHOICE_TOPITCH) .AddChoice(_("To:"), wxT(""), &pitch); m_pChoice_ToPitch->SetName(_("To Pitch")); m_pChoice_ToPitch->SetSizeHints(100, -1); } S.EndHorizontalLay(); } S.EndMultiColumn(); // S.StartMultiColumn(2, wxCENTER); { // S.AddPrompt(_("Semitones (half-steps):")); S.StartHorizontalLay(wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, false); { m_pTextCtrl_SemitonesChange = S.Id(ID_TEXT_SEMITONESCHANGE) .AddTextBox(wxT(""), wxT(""), 12); m_pTextCtrl_SemitonesChange->SetName(_("Semitones in half-steps")); m_pTextCtrl_SemitonesChange->SetValidator(numvld); } S.EndHorizontalLay(); // S.AddPrompt(_("Frequency (Hz):")); S.StartHorizontalLay(wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, false); { m_pTextCtrl_FromFrequency = S.Id(ID_TEXT_FROMFREQUENCY) .AddTextBox(_("from"), wxT(""), 12); m_pTextCtrl_FromFrequency->SetName(_("From frequency in hertz")); m_pTextCtrl_FromFrequency->SetValidator(nullvld); m_pTextCtrl_ToFrequency = S.Id(ID_TEXT_TOFREQUENCY) .AddTextBox(_("to"), wxT(""), 12); m_pTextCtrl_ToFrequency->SetName(_("To frequency in seconds")); m_pTextCtrl_ToFrequency->SetValidator(numvld); } S.EndHorizontalLay(); // S.AddPrompt(_("Percent Change:")); S.StartHorizontalLay(wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, false); { m_pTextCtrl_PercentChange = S.Id(ID_TEXT_PERCENTCHANGE) .AddTextBox(wxT(""), wxT(""), 12); m_pTextCtrl_PercentChange->SetName(_("Percent Change")); m_pTextCtrl_PercentChange->SetValidator(numvld); } S.EndHorizontalLay(); } S.EndMultiColumn(); // S.StartHorizontalLay(wxEXPAND); { S.SetStyle(wxSL_HORIZONTAL); m_pSlider_PercentChange = S.Id(ID_SLIDER_PERCENTCHANGE) .AddSlider(wxT(""), 0, (int)PERCENTCHANGE_MAX, (int)PERCENTCHANGE_MIN); m_pSlider_PercentChange->SetName(_("Percent Change")); } S.EndHorizontalLay(); return; }
void EffectChangePitch::PopulateOrExchange(ShuttleGui & S) { DeduceFrequencies(); // Set frequency-related control values based on sample. wxArrayString pitch; pitch.Add(wxT("C")); pitch.Add(wxT("C#/Db")); pitch.Add(wxT("D")); pitch.Add(wxT("D#/Eb")); pitch.Add(wxT("E")); pitch.Add(wxT("F")); pitch.Add(wxT("F#/Gb")); pitch.Add(wxT("G")); pitch.Add(wxT("G#/Ab")); pitch.Add(wxT("A")); pitch.Add(wxT("A#/Bb")); pitch.Add(wxT("B")); S.SetBorder(5); S.StartVerticalLay(0); { S.StartVerticalLay(); { S.AddTitle(_("Change Pitch without Changing Tempo")); S.AddTitle( wxString::Format(_("Estimated Start Pitch: %s%d (%.3f Hz)"), pitch[m_nFromPitch].c_str(), m_nFromOctave, m_FromFrequency)); } S.EndVerticalLay(); /* i18n-hint: (noun) Musical pitch.*/ S.StartStatic(_("Pitch")); { S.StartMultiColumn(6, wxALIGN_CENTER); // 6 controls, because each AddChoice adds a wxStaticText and a wxChoice. { m_pChoice_FromPitch = S.Id(ID_FromPitch).AddChoice(_("from"), wxT(""), &pitch); m_pChoice_FromPitch->SetName(_("from")); m_pChoice_FromPitch->SetSizeHints(80, -1); m_pSpin_FromOctave = S.Id(ID_FromOctave).AddSpinCtrl(wxT(""), m_nFromOctave, INT_MAX, INT_MIN); m_pSpin_FromOctave->SetName(_("from Octave")); m_pSpin_FromOctave->SetSizeHints(50, -1); m_pChoice_ToPitch = S.Id(ID_ToPitch).AddChoice(_("to"), wxT(""), &pitch); m_pChoice_ToPitch->SetName(_("to")); m_pChoice_ToPitch->SetSizeHints(80, -1); m_pSpin_ToOctave = S.Id(ID_ToOctave).AddSpinCtrl(wxT(""), m_nToOctave, INT_MAX, INT_MIN); m_pSpin_ToOctave->SetName(_("to Octave")); m_pSpin_ToOctave->SetSizeHints(50, -1); } S.EndMultiColumn(); S.StartHorizontalLay(wxALIGN_CENTER); { FloatingPointValidator<double> vldSemitones(2, &m_dSemitonesChange, NUM_VAL_TWO_TRAILING_ZEROES); m_pTextCtrl_SemitonesChange = S.Id(ID_SemitonesChange).AddTextBox(_("Semitones (half-steps):"), wxT(""), 12); m_pTextCtrl_SemitonesChange->SetName(_("Semitones (half-steps)")); m_pTextCtrl_SemitonesChange->SetValidator(vldSemitones); } S.EndHorizontalLay(); } S.EndStatic(); S.StartStatic(_("Frequency")); { S.StartMultiColumn(5, wxALIGN_CENTER); // 5, because AddTextBox adds a wxStaticText and a wxTextCtrl. { FloatingPointValidator<double> vldFromFrequency(3, &m_FromFrequency, NUM_VAL_THREE_TRAILING_ZEROES); vldFromFrequency.SetMin(0.0); m_pTextCtrl_FromFrequency = S.Id(ID_FromFrequency).AddTextBox(_("from"), wxT(""), 12); m_pTextCtrl_FromFrequency->SetName(_("from (Hz)")); m_pTextCtrl_FromFrequency->SetValidator(vldFromFrequency); FloatingPointValidator<double> vldToFrequency(3, &m_ToFrequency, NUM_VAL_THREE_TRAILING_ZEROES); vldToFrequency.SetMin(0.0); m_pTextCtrl_ToFrequency = S.Id(ID_ToFrequency).AddTextBox(_("to"), wxT(""), 12); m_pTextCtrl_ToFrequency->SetName(_("to (Hz)")); m_pTextCtrl_ToFrequency->SetValidator(vldToFrequency); S.AddUnits(_("Hz")); } S.EndMultiColumn(); S.StartHorizontalLay(wxALIGN_CENTER); { FloatingPointValidator<double> vldPercentage(3, &m_dPercentChange, NUM_VAL_THREE_TRAILING_ZEROES); vldPercentage.SetRange(MIN_Percentage, MAX_Percentage); m_pTextCtrl_PercentChange = S.Id(ID_PercentChange).AddTextBox(_("Percent Change:"), wxT(""), 12); m_pTextCtrl_PercentChange->SetValidator(vldPercentage); } S.EndHorizontalLay(); S.StartHorizontalLay(wxEXPAND); { S.SetStyle(wxSL_HORIZONTAL); m_pSlider_PercentChange = S.Id(ID_PercentChange) .AddSlider(wxT(""), 0, (int)kSliderMax, (int)MIN_Percentage); m_pSlider_PercentChange->SetName(_("Percent Change")); } S.EndHorizontalLay(); } S.EndStatic(); } S.EndVerticalLay(); return; }
void EffectTruncSilence::PopulateOrExchange(ShuttleGui & S) { wxASSERT(nActions == WXSIZEOF(kActionStrings)); S.AddSpace(0, 5); S.StartStatic(_("Detect Silence")); { S.StartMultiColumn(3, wxALIGN_CENTER_HORIZONTAL); { // Threshold FloatingPointValidator<double> vldThreshold(3, &mThresholdDB, NumValidatorStyle::NO_TRAILING_ZEROES); vldThreshold.SetRange(MIN_Threshold, MAX_Threshold); mThresholdText = S.AddTextBox(_("Threshold:"), wxT(""), 0); mThresholdText->SetValidator(vldThreshold); S.AddUnits(_("dB")); // Ignored silence FloatingPointValidator<double> vldDur(3, &mInitialAllowedSilence, NumValidatorStyle::NO_TRAILING_ZEROES); vldDur.SetRange(MIN_Minimum, MAX_Minimum); mInitialAllowedSilenceT = S.AddTextBox(_("Duration:"), wxT(""), 12); mInitialAllowedSilenceT->SetValidator(vldDur); S.AddUnits(_("seconds")); } S.EndMultiColumn(); } S.EndStatic(); S.StartStatic(_("Action")); { S.StartHorizontalLay(); { // Action choices auto actionChoices = LocalizedStrings(kActionStrings, nActions); mActionChoice = S.AddChoice( {}, wxT(""), &actionChoices); mActionChoice->SetValidator(wxGenericValidator(&mActionIndex)); S.SetSizeHints(-1, -1); } S.EndHorizontalLay(); S.StartMultiColumn(3, wxALIGN_CENTER_HORIZONTAL); { // Truncation / Compression factor FloatingPointValidator<double> vldTrunc(3, &mTruncLongestAllowedSilence, NumValidatorStyle::NO_TRAILING_ZEROES); vldTrunc.SetRange(MIN_Truncate, MAX_Truncate); mTruncLongestAllowedSilenceT = S.AddTextBox(_("Truncate to:"), wxT(""), 12); mTruncLongestAllowedSilenceT->SetValidator(vldTrunc); S.AddUnits(_("seconds")); FloatingPointValidator<double> vldComp(3, &mSilenceCompressPercent, NumValidatorStyle::NO_TRAILING_ZEROES); vldComp.SetRange(MIN_Compress, MAX_Compress); mSilenceCompressPercentT = S.AddTextBox(_("Compress to:"), wxT(""), 12); mSilenceCompressPercentT->SetValidator(vldComp); S.AddUnits(_("%")); } S.EndMultiColumn(); S.StartMultiColumn(2, wxALIGN_CENTER_HORIZONTAL); { mIndependent = S.AddCheckBox(_("Truncate tracks independently"), mbIndependent ? wxT("true") : wxT("false")); } S.EndMultiColumn(); } S.EndStatic(); UpdateUI(); }
void EffectChangeSpeed::PopulateOrExchange(ShuttleGui & S) { GetPrivateConfig(GetCurrentSettingsGroup(), wxT("TimeFormat"), mFormat, mFormat); GetPrivateConfig(GetCurrentSettingsGroup(), wxT("VinylChoice"), mFromVinyl, mFromVinyl); S.SetBorder(5); S.StartVerticalLay(0); { S.AddSpace(0, 5); S.AddTitle(_("Change Speed, affecting both Tempo and Pitch")); S.AddSpace(0, 10); // Speed multiplier and percent change controls. S.StartMultiColumn(4, wxCENTER); { FloatingPointValidator<double> vldMultiplier(3, &mMultiplier, NUM_VAL_THREE_TRAILING_ZEROES); vldMultiplier.SetRange(MIN_Percentage / 100.0, ((MAX_Percentage / 100.0) + 1)); mpTextCtrl_Multiplier = S.Id(ID_Multiplier).AddTextBox(_("Speed Multiplier:"), wxT(""), 12); mpTextCtrl_Multiplier->SetValidator(vldMultiplier); FloatingPointValidator<double> vldPercentage(3, &m_PercentChange, NUM_VAL_THREE_TRAILING_ZEROES); vldPercentage.SetRange(MIN_Percentage, MAX_Percentage); mpTextCtrl_PercentChange = S.Id(ID_PercentChange).AddTextBox(_("Percent Change:"), wxT(""), 12); mpTextCtrl_PercentChange->SetValidator(vldPercentage); } S.EndMultiColumn(); // Percent change slider. S.StartHorizontalLay(wxEXPAND); { S.SetStyle(wxSL_HORIZONTAL); mpSlider_PercentChange = S.Id(ID_PercentChange).AddSlider(wxT(""), 0, (int)kSliderMax, (int)MIN_Percentage); mpSlider_PercentChange->SetName(_("Percent Change")); } S.EndHorizontalLay(); // Vinyl rpm controls. S.StartMultiColumn(5, wxCENTER); { /* i18n-hint: "rpm" is an English abbreviation meaning "revolutions per minute". */ S.AddUnits(_("Standard Vinyl rpm:")); wxASSERT(kNumVinyl == WXSIZEOF(kVinylStrings)); wxArrayString vinylChoices; for (int i = 0; i < kNumVinyl; i++) { if (i == kVinyl_NA) { vinylChoices.Add(wxGetTranslation(kVinylStrings[i])); } else { vinylChoices.Add(kVinylStrings[i]); } } mpChoice_FromVinyl = S.Id(ID_FromVinyl).AddChoice(_("from"), wxT(""), &vinylChoices); mpChoice_FromVinyl->SetName(_("From rpm")); mpChoice_FromVinyl->SetSizeHints(100, -1); mpChoice_ToVinyl = S.Id(ID_ToVinyl).AddChoice(_("to"), wxT(""), &vinylChoices); mpChoice_ToVinyl->SetName(_("To rpm")); mpChoice_ToVinyl->SetSizeHints(100, -1); } S.EndMultiColumn(); // From/To time controls. S.StartStatic(_("Selection Length"), 0); { S.StartMultiColumn(2, wxALIGN_LEFT); { S.AddPrompt(_("Current Length:")); mpFromLengthCtrl = safenew NumericTextCtrl(NumericConverter::TIME, S.GetParent(), wxID_ANY, mFormat, mFromLength, mProjectRate); mpFromLengthCtrl->SetName(_("from")); mpFromLengthCtrl->SetToolTip(_("Current length of selection.")); mpFromLengthCtrl->SetReadOnly(true); mpFromLengthCtrl->EnableMenu(false); S.AddWindow(mpFromLengthCtrl, wxALIGN_LEFT); S.AddPrompt(_("New Length:")); mpToLengthCtrl = safenew NumericTextCtrl(NumericConverter::TIME, S.GetParent(), ID_ToLength, mFormat, mToLength, mProjectRate); mpToLengthCtrl->SetName(_("to")); mpToLengthCtrl->EnableMenu(); S.AddWindow(mpToLengthCtrl, wxALIGN_LEFT); } S.EndMultiColumn(); } S.EndStatic(); } S.EndVerticalLay(); }
void EffectScienFilter::PopulateOrExchange(ShuttleGui & S) { wxWindow *parent = S.GetParent(); S.AddSpace(5); S.SetSizerProportion(1); S.StartMultiColumn(3, wxEXPAND); { S.SetStretchyCol(1); S.SetStretchyRow(0); // ------------------------------------------------------------------- // ROW 1: Freq response panel and sliders for vertical scale // ------------------------------------------------------------------- S.StartVerticalLay(); { mdBRuler = new RulerPanel(parent, wxID_ANY); mdBRuler->ruler.SetBounds(0, 0, 100, 100); // Ruler can't handle small sizes mdBRuler->ruler.SetOrientation(wxVERTICAL); mdBRuler->ruler.SetRange(30.0, -120.0); mdBRuler->ruler.SetFormat(Ruler::LinearDBFormat); mdBRuler->ruler.SetUnits(_("dB")); mdBRuler->ruler.SetLabelEdges(true); int w; mdBRuler->ruler.GetMaxSize(&w, NULL); mdBRuler->SetSize(wxSize(w, 150)); // height needed for wxGTK S.SetBorder(1); S.AddSpace(1, 1); S.Prop(1); S.AddWindow(mdBRuler, wxALIGN_RIGHT | wxTOP); S.AddSpace(1, 1); } S.EndVerticalLay(); mPanel = new EffectScienFilterPanel(this, parent); mPanel->SetFreqRange(mLoFreq, mNyquist); S.SetBorder(5); S.Prop(1); S.AddWindow(mPanel, wxEXPAND | wxRIGHT); S.SetSizeHints(-1, -1); S.StartVerticalLay(); { S.AddVariableText(_("+ dB"), false, wxCENTER); S.SetStyle(wxSL_VERTICAL | wxSL_INVERSE); mdBMaxSlider = S.Id(ID_dBMax).AddSlider(wxT(""), 10, 20, 0); #if wxUSE_ACCESSIBILITY mdBMaxSlider->SetName(_("Max dB")); mdBMaxSlider->SetAccessible(new SliderAx(mdBMaxSlider, wxString(wxT("%d ")) + _("dB"))); #endif S.SetStyle(wxSL_VERTICAL | wxSL_INVERSE); mdBMinSlider = S.Id(ID_dBMin).AddSlider(wxT(""), -10, -10, -120); S.AddVariableText(_("- dB"), false, wxCENTER); #if wxUSE_ACCESSIBILITY mdBMinSlider->SetName(_("Min dB")); mdBMinSlider->SetAccessible(new SliderAx(mdBMinSlider, wxString(wxT("%d ")) + _("dB"))); #endif } S.EndVerticalLay(); // ------------------------------------------------------------------- // ROW 2: Frequency ruler // ------------------------------------------------------------------- S.AddSpace(1, 1); mfreqRuler = new RulerPanel(parent, wxID_ANY); mfreqRuler->ruler.SetBounds(0, 0, 100, 100); // Ruler can't handle small sizes mfreqRuler->ruler.SetOrientation(wxHORIZONTAL); mfreqRuler->ruler.SetLog(true); mfreqRuler->ruler.SetRange(mLoFreq, mNyquist); mfreqRuler->ruler.SetFormat(Ruler::IntFormat); mfreqRuler->ruler.SetUnits(wxT("")); mfreqRuler->ruler.SetFlip(true); mfreqRuler->ruler.SetLabelEdges(true); int h; mfreqRuler->ruler.GetMaxSize(NULL, &h); mfreqRuler->SetMinSize(wxSize(-1, h)); S.Prop(1); S.AddWindow(mfreqRuler, wxEXPAND | wxALIGN_LEFT | wxRIGHT); S.AddSpace(1, 1); // ------------------------------------------------------------------- // ROW 3 and 4: Type, Order, Ripple, Subtype, Cutoff // ------------------------------------------------------------------- S.AddSpace(1, 1); S.SetSizerProportion(0); S.StartMultiColumn(8, wxALIGN_CENTER); { wxASSERT(kNumTypes == WXSIZEOF(kTypeStrings)); wxArrayString typeChoices; for (int i = 0; i < kNumTypes; i++) { typeChoices.Add(wxGetTranslation(kTypeStrings[i])); } mFilterTypeCtl = S.Id(ID_Type).AddChoice(_("&Filter Type:"), wxT(""), &typeChoices); mFilterTypeCtl->SetValidator(wxGenericValidator(&mFilterType)); S.SetSizeHints(-1, -1); wxArrayString orders; for (int i = 1; i <= 10; i++) { orders.Add(wxString::Format(wxT("%d"), i)); } /*i18n-hint: 'Order' means the complexity of the filter, and is a number between 1 and 10.*/ mFilterOrderCtl = S.Id(ID_Order).AddChoice(_("O&rder:"), wxT(""), &orders); mFilterOrderCtl->SetValidator(wxGenericValidator(&mOrderIndex)); S.SetSizeHints(-1, -1); S.AddSpace(1, 1); FloatingPointValidator<float> vldRipple(1, &mRipple); vldRipple.SetRange(MIN_Passband, MAX_Passband); mRippleCtlP = S.AddVariableText(_("&Passband Ripple:"), false, wxALL | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); mRippleCtl = S.Id(ID_Ripple).AddTextBox(wxT(""), wxT(""), 10); mRippleCtl->SetName(_("Passband Ripple (dB)")); mRippleCtl->SetValidator(vldRipple); mRippleCtlU = S.AddVariableText(_("dB"), false, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); wxASSERT(kNumSubTypes == WXSIZEOF(kSubTypeStrings)); wxArrayString subTypeChoices; for (int i = 0; i < kNumSubTypes; i++) { subTypeChoices.Add(wxGetTranslation(kSubTypeStrings[i])); } mFilterSubTypeCtl = S.Id(ID_SubType).AddChoice(_("&Subtype:"), wxT(""), &subTypeChoices); mFilterSubTypeCtl->SetValidator(wxGenericValidator(&mFilterSubtype)); S.SetSizeHints(-1, -1); FloatingPointValidator<float> vldCutoff(1, &mCutoff); vldCutoff.SetRange(MIN_Cutoff, mNyquist - 1); mCutoffCtl = S.Id(ID_Cutoff).AddTextBox(_("C&utoff:"), wxT(""), 10); mCutoffCtl->SetName(_("Cutoff (Hz)")); mCutoffCtl->SetValidator(vldCutoff); S.AddUnits(_("Hz")); FloatingPointValidator<float> vldStopbandRipple(1, &mStopbandRipple); vldStopbandRipple.SetRange(MIN_Stopband, MAX_Stopband); mStopbandRippleCtlP = S.AddVariableText(_("Minimum S&topband Attenuation:"), false, wxALL | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); mStopbandRippleCtl = S.Id(ID_StopbandRipple).AddTextBox(wxT(""), wxT(""), 10); mStopbandRippleCtl->SetName(_("Minimum S&topband Attenuation (dB)")); mStopbandRippleCtl->SetValidator(vldStopbandRipple); mStopbandRippleCtlU = S.AddVariableText(_("dB"), false, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); } S.EndMultiColumn(); S.AddSpace(1, 1); } S.EndMultiColumn(); mFilterTypeCtl->SetFocus(); return; }
void AudioIOPrefs::PopulateOrExchange( ShuttleGui & S ) { /// \todo /// JKC: I think setting paths in gPrefs is bad practice. /// Suppose we are using gPrefs from elsewhere at the same time? /// Change these all to full paths? gPrefs->SetPath(wxT("/AudioIO")); S.SetBorder( 2 ); S.StartHorizontalLay(wxEXPAND, 0 ); S.StartStatic( _("Playback"),1 ); { S.StartMultiColumn(2, wxEXPAND); S.SetStretchyCol(1); S.TieChoice( _("Device") + wxString(wxT(":")), wxT("PlaybackDevice"), wxT(""), mmPlayNames, mmPlayLabels ); S.AddPrompt( _("Using:") ); wxString ver = _("Portaudio v"); #if USE_PORTAUDIO_V19 ver += wxT("19"); #else ver += wxT("18"); #endif S.AddFixedText( ver ); S.EndMultiColumn(); } S.EndStatic(); S.StartStatic( _("Recording"), 1 ); { S.StartMultiColumn(2, wxEXPAND); S.SetStretchyCol(1); S.TieChoice( _("Device") + wxString(wxT(":")), wxT("RecordingDevice"), wxT(""), mmRecordNames, mmRecordLabels ); S.TieChoice( _("Channels") + wxString(wxT(":")), wxT("RecordChannels"), 2, mmChannelNames, mmChannelLabels ); S.EndMultiColumn(); } S.EndStatic(); S.EndHorizontalLay(); S.StartStatic( _("Playthrough") ); { S.TieCheckBox( _("&Play other tracks while recording new one"), wxT("Duplex"),true); #ifdef __MACOSX__ S.TieCheckBox( _("&Hardware Playthrough (Play new track while recording it)"), wxT("Playthrough"),false); #endif S.TieCheckBox( _("&Software Playthrough (Play new track while recording it)"), wxT("SWPlaythrough"),false); } S.EndStatic(); S.StartHorizontalLay( wxEXPAND, 0 ); S.StartStatic( _("Cut Preview"),1 ); { S.StartThreeColumn(); S.TieTextBox( _("Play before cut region:"), wxT("CutPreviewBeforeLen"),1.0,9); S.AddUnits( _("seconds") ); S.TieTextBox( _("Play after cut region:"),wxT("CutPreviewAfterLen"), 1.0,9); S.AddUnits( _("seconds") ); S.EndThreeColumn(); } S.EndStatic(); S.StartStatic( _("Latency"),1 ); { S.StartThreeColumn(); #if USE_PORTAUDIO_V19 // only show the following controls if we use Portaudio v19, because // for Portaudio v19 we always use default buffer sizes S.TieTextBox( _("Audio to buffer:"),wxT("LatencyDuration"),100.0,9); S.AddUnits( _("milliseconds") ); #endif S.TieTextBox( _("Latency correction:"),wxT("LatencyCorrection"),0.0,9); S.AddUnits( _("milliseconds") ); S.EndThreeColumn(); } S.EndStatic(); S.EndHorizontalLay(); S.StartHorizontalLay( wxEXPAND, 0 ); S.StartStatic( _("Seek Time"),1 ); { S.StartThreeColumn(); S.TieTextBox( _("Short period:"), wxT("SeekShortPeriod"),1.0,9); S.AddUnits( _("seconds") ); S.TieTextBox( _("Long period:"),wxT("SeekLongPeriod"), 15.0,9); S.AddUnits( _("seconds") ); S.EndThreeColumn(); } S.EndStatic(); S.StartStatic( _("Effects Preview"),1 ); { S.StartThreeColumn(); S.TieTextBox( _("Play when previewing:"), wxT("EffectsPreviewLen"), 3.0,9); S.AddUnits( _("seconds") ); S.EndThreeColumn(); } gPrefs->SetPath(wxT("/")); }
void RecordingPrefs::PopulateOrExchange(ShuttleGui & S) { wxTextCtrl *w; S.SetBorder(2); S.StartStatic(_("Playthrough")); { S.TieCheckBox(_("Overdub: &Play other tracks while recording new one"), wxT("/AudioIO/Duplex"), true); #if defined(__WXMAC__) S.TieCheckBox(_("&Hardware Playthrough: Listen while recording or monitoring new track"), wxT("/AudioIO/Playthrough"), false); #endif S.TieCheckBox(_("&Software Playthrough: Listen while recording or monitoring new track"), wxT("/AudioIO/SWPlaythrough"), false); #if !defined(__WXMAC__) S.AddUnits(wxString(wxT(" ")) + _("(uncheck when recording \"stereo mix\")")); #endif } S.EndStatic(); S.StartStatic( _("Latency")); { S.StartThreeColumn(); { // only show the following controls if we use Portaudio v19, because // for Portaudio v18 we always use default buffer sizes w = S.TieNumericTextBox(_("Audio to &buffer:"), wxT("/AudioIO/LatencyDuration"), DEFAULT_LATENCY_DURATION, 9); S.AddUnits(_("milliseconds (higher = more latency)")); w->SetName(w->GetName() + wxT(" ") + _("milliseconds (higher = more latency)")); w = S.TieNumericTextBox(_("L&atency correction:"), wxT("/AudioIO/LatencyCorrection"), DEFAULT_LATENCY_CORRECTION, 9); S.AddUnits(_("milliseconds (negative = backwards)")); w->SetName(w->GetName() + wxT(" ") + _("milliseconds (negative = backwards)")); } S.EndThreeColumn(); } S.EndStatic(); S.StartStatic(_("Sound Activated Recording")); { S.TieCheckBox(_("Sound Activated &Recording"), wxT("/AudioIO/SoundActivatedRecord"), false); S.StartMultiColumn(2, wxEXPAND); { S.SetStretchyCol(1); int dBRange = gPrefs->Read(wxT("/GUI/EnvdBRange"), ENV_DB_RANGE); S.TieSlider(_("Sound Activation Le&vel (dB):"), wxT("/AudioIO/SilenceLevel"), -50, 0, -dBRange); } S.EndMultiColumn(); } S.EndStatic(); #ifdef AUTOMATED_INPUT_LEVEL_ADJUSTMENT S.StartStatic(_("AutomatedRecording Level Adjustment")); { S.TieCheckBox(_("Enable Automated Recordingt Level Adjustment."), wxT("/AudioIO/AutomatedInputLevelAdjustment"), false); S.StartMultiColumn(2, wxEXPAND); { S.SetStretchyCol(1); /* i18n-hint: Desired maximum (peak) volume for sound */ S.TieSlider(_("Target Peak:"), wxT("/AudioIO/TargetPeak"), AILA_DEF_TARGET_PEAK, 100, 0); S.TieSlider(_("Within:"), wxT("/AudioIO/DeltaPeakVolume"), AILA_DEF_DELTA_PEAK, 100, 0); } S.EndMultiColumn(); S.StartThreeColumn(); { S.TieNumericTextBox(_("Analysis Time:"), wxT("/AudioIO/AnalysisTime"), AILA_DEF_ANALYSIS_TIME, 9); S.AddUnits(_("milliseconds (time of one analysis)")); S.TieNumericTextBox(_("Number of consecutive analysis:"), wxT("/AudioIO/NumberAnalysis"), AILA_DEF_NUMBER_ANALYSIS, 2); S.AddUnits(_("0 means endless")); } S.EndThreeColumn(); } S.EndStatic(); #endif }
void VampEffect::PopulateOrExchange(ShuttleGui & S) { Vamp::Plugin::ProgramList programs = mPlugin->getPrograms(); mParameters = mPlugin->getParameterDescriptors(); auto count = mParameters.size(); mToggles.reinit( count ); mSliders.reinit( count ); mFields.reinit( count ); mLabels.reinit( count ); mChoices.reinit( count ); mValues.reinit( count ); S.SetStyle(wxVSCROLL | wxTAB_TRAVERSAL); wxScrolledWindow *scroller = S.StartScroller(2); { S.StartStatic(_("Plugin Settings")); { S.StartMultiColumn(5, wxEXPAND); { S.SetStretchyCol(3); if (!programs.empty()) { wxString currentProgram = wxString::FromUTF8(mPlugin->getCurrentProgram().c_str()); wxArrayStringEx choices; for (size_t i = 0, cnt = programs.size(); i < cnt; i++) { choices.push_back(wxString::FromUTF8(programs[i].c_str())); } S.AddPrompt(_("Program")); S.Id(ID_Program); mProgram = S.AddChoice( {}, choices, choices.Index( currentProgram ) ); mProgram->SetName(_("Program")); mProgram->SetSizeHints(-1, -1); wxSizer *s = mProgram->GetContainingSizer(); s->GetItem(mProgram)->SetFlag(wxEXPAND | wxALIGN_CENTER_VERTICAL | wxALL); S.AddSpace(1, 1); S.AddSpace(1, 1); S.AddSpace(1, 1); } for (size_t p = 0; p < count; p++) { wxString tip = wxString::FromUTF8(mParameters[p].description.c_str()); wxString unit = wxString::FromUTF8(mParameters[p].unit.c_str()); float value = mPlugin->getParameter(mParameters[p].identifier); mToggles[p] = NULL; mChoices[p] = NULL; mSliders[p] = NULL; mFields[p] = NULL; mValues[p] = 0.0; wxString labelText = wxString::FromUTF8(mParameters[p].name.c_str()); if (!unit.empty()) { labelText += wxT(" (") + unit + wxT(")"); } S.AddPrompt(labelText + wxT(":")); if (mParameters[p].isQuantized && mParameters[p].quantizeStep == 1.0 && mParameters[p].minValue == 0.0 && mParameters[p].maxValue == 1.0) { S.Id(ID_Toggles + p); mToggles[p] = S.AddCheckBox( {}, value > 0.5); mToggles[p]->SetName(labelText); if (!tip.empty()) { mToggles[p]->SetToolTip(tip); } wxSizer *s = mToggles[p]->GetContainingSizer(); s->GetItem(mToggles[p])->SetFlag(wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL); S.AddSpace(1, 1); S.AddSpace(1, 1); S.AddSpace(1, 1); } else if (mParameters[p].isQuantized && mParameters[p].quantizeStep == 1.0 && !mParameters[p].valueNames.empty()) { wxArrayStringEx choices; int selected = -1; for (size_t i = 0, cnt = mParameters[p].valueNames.size(); i < cnt; i++) { wxString choice = wxString::FromUTF8(mParameters[p].valueNames[i].c_str()); if (size_t(value - mParameters[p].minValue + 0.5) == i) { selected = i; } choices.push_back(choice); } S.Id(ID_Choices + p); mChoices[p] = S.AddChoice( {}, choices, selected ); mChoices[p]->SetName(labelText); mChoices[p]->SetSizeHints(-1, -1); if (!tip.empty()) { mChoices[p]->SetToolTip(tip); } wxSizer *s = mChoices[p]->GetContainingSizer(); s->GetItem(mChoices[p])->SetFlag(wxEXPAND | wxALIGN_CENTER_VERTICAL | wxALL); S.AddSpace(1, 1); S.AddSpace(1, 1); S.AddSpace(1, 1); } else { mValues[p] = value; FloatingPointValidator<float> vld(6, &mValues[p]); vld.SetRange(mParameters[p].minValue, mParameters[p].maxValue); float range = mParameters[p].maxValue - mParameters[p].minValue; auto style = range < 10 ? NumValidatorStyle::THREE_TRAILING_ZEROES : range < 100 ? NumValidatorStyle::TWO_TRAILING_ZEROES : NumValidatorStyle::ONE_TRAILING_ZERO; vld.SetStyle(style); S.Id(ID_Texts + p); mFields[p] = S.AddTextBox( {}, wxT(""), 12); mFields[p]->SetName(labelText); mFields[p]->SetValidator(vld); if (!tip.empty()) { mFields[p]->SetToolTip(tip); } wxSizer *s = mFields[p]->GetContainingSizer(); s->GetItem(mFields[p])->SetFlag(wxALIGN_CENTER_VERTICAL | wxALL); wxString str = Internat::ToDisplayString(mParameters[p].minValue); S.AddPrompt(str); S.SetStyle(wxSL_HORIZONTAL); S.Id(ID_Sliders + p); mSliders[p] = S.AddSlider( {}, 0, 1000, 0); mSliders[p]->SetName(labelText); mSliders[p]->SetSizeHints(150, -1); if (!tip.empty()) { mSliders[p]->SetToolTip(tip); } str = Internat::ToDisplayString(mParameters[p].maxValue); S.AddUnits(str); } } } S.EndMultiColumn(); } S.EndStatic(); } S.EndScroller(); scroller->SetScrollRate(0, 20); return; }
void EffectChangePitch::PopulateOrExchange(ShuttleGui & S) { DeduceFrequencies(); // Set frequency-related control values based on sample. wxArrayString pitch; for (int ii = 0; ii < 12; ++ii) pitch.Add( PitchName( ii, PitchNameChoice::Both ) ); S.SetBorder(5); S.StartVerticalLay(0); { S.StartVerticalLay(); { S.AddTitle(_("Change Pitch without Changing Tempo")); S.AddTitle( wxString::Format(_("Estimated Start Pitch: %s%d (%.3f Hz)"), pitch[m_nFromPitch], m_nFromOctave, m_FromFrequency)); } S.EndVerticalLay(); /* i18n-hint: (noun) Musical pitch.*/ S.StartStatic(_("Pitch")); { S.StartMultiColumn(6, wxALIGN_CENTER); // 6 controls, because each AddChoice adds a wxStaticText and a wxChoice. { m_pChoice_FromPitch = S.Id(ID_FromPitch).AddChoice(_("from"), wxT(""), &pitch); m_pChoice_FromPitch->SetName(_("from")); m_pChoice_FromPitch->SetSizeHints(80, -1); m_pSpin_FromOctave = S.Id(ID_FromOctave).AddSpinCtrl( {}, m_nFromOctave, INT_MAX, INT_MIN); m_pSpin_FromOctave->SetName(_("from Octave")); m_pSpin_FromOctave->SetSizeHints(50, -1); m_pChoice_ToPitch = S.Id(ID_ToPitch).AddChoice(_("to"), wxT(""), &pitch); m_pChoice_ToPitch->SetName(_("to")); m_pChoice_ToPitch->SetSizeHints(80, -1); m_pSpin_ToOctave = S.Id(ID_ToOctave).AddSpinCtrl( {}, m_nToOctave, INT_MAX, INT_MIN); m_pSpin_ToOctave->SetName(_("to Octave")); m_pSpin_ToOctave->SetSizeHints(50, -1); } S.EndMultiColumn(); S.StartHorizontalLay(wxALIGN_CENTER); { FloatingPointValidator<double> vldSemitones(2, &m_dSemitonesChange, NumValidatorStyle::TWO_TRAILING_ZEROES); m_pTextCtrl_SemitonesChange = S.Id(ID_SemitonesChange).AddTextBox(_("Semitones (half-steps):"), wxT(""), 12); m_pTextCtrl_SemitonesChange->SetName(_("Semitones (half-steps)")); m_pTextCtrl_SemitonesChange->SetValidator(vldSemitones); } S.EndHorizontalLay(); } S.EndStatic(); S.StartStatic(_("Frequency")); { S.StartMultiColumn(5, wxALIGN_CENTER); // 5, because AddTextBox adds a wxStaticText and a wxTextCtrl. { FloatingPointValidator<double> vldFromFrequency(3, &m_FromFrequency, NumValidatorStyle::THREE_TRAILING_ZEROES); vldFromFrequency.SetMin(0.0); m_pTextCtrl_FromFrequency = S.Id(ID_FromFrequency).AddTextBox(_("from"), wxT(""), 12); m_pTextCtrl_FromFrequency->SetName(_("from (Hz)")); m_pTextCtrl_FromFrequency->SetValidator(vldFromFrequency); FloatingPointValidator<double> vldToFrequency(3, &m_ToFrequency, NumValidatorStyle::THREE_TRAILING_ZEROES); vldToFrequency.SetMin(0.0); m_pTextCtrl_ToFrequency = S.Id(ID_ToFrequency).AddTextBox(_("to"), wxT(""), 12); m_pTextCtrl_ToFrequency->SetName(_("to (Hz)")); m_pTextCtrl_ToFrequency->SetValidator(vldToFrequency); S.AddUnits(_("Hz")); } S.EndMultiColumn(); S.StartHorizontalLay(wxALIGN_CENTER); { FloatingPointValidator<double> vldPercentage(3, &m_dPercentChange, NumValidatorStyle::THREE_TRAILING_ZEROES); vldPercentage.SetRange(MIN_Percentage, MAX_Percentage); m_pTextCtrl_PercentChange = S.Id(ID_PercentChange).AddTextBox(_("Percent Change:"), wxT(""), 12); m_pTextCtrl_PercentChange->SetValidator(vldPercentage); } S.EndHorizontalLay(); S.StartHorizontalLay(wxEXPAND); { S.SetStyle(wxSL_HORIZONTAL); m_pSlider_PercentChange = S.Id(ID_PercentChange) .AddSlider( {}, 0, (int)kSliderMax, (int)MIN_Percentage); m_pSlider_PercentChange->SetName(_("Percent Change")); } S.EndHorizontalLay(); } S.EndStatic(); #if USE_SBSMS S.StartMultiColumn(2); { mUseSBSMSCheckBox = S.AddCheckBox(_("Use high quality stretching (slow)"), mUseSBSMS? wxT("true") : wxT("false")); mUseSBSMSCheckBox->SetValidator(wxGenericValidator(&mUseSBSMS)); } S.EndMultiColumn(); #endif } S.EndVerticalLay(); return; }
void EffectTruncSilence::PopulateOrExchange(ShuttleGui & S) { wxASSERT(kNumActions == WXSIZEOF(kActionStrings)); wxArrayString actionChoices; for (int i = 0; i < kNumActions; i++) { actionChoices.Add(wxGetTranslation(kActionStrings[i])); } S.AddSpace(0, 5); S.StartStatic(_("Detect Silence")); { S.StartMultiColumn(3, wxALIGN_CENTER_HORIZONTAL); { // Threshold mTruncDbChoice = S.AddChoice(_("Level:"), wxT(""), &mDbChoices); mTruncDbChoice->SetValidator(wxGenericValidator(&mTruncDbChoiceIndex)); S.SetSizeHints(-1, -1); S.AddSpace(0); // 'choices' already includes units. // Ignored silence FloatingPointValidator<double> vldDur(3, &mInitialAllowedSilence, NUM_VAL_NO_TRAILING_ZEROES); vldDur.SetRange(MIN_Minimum, MAX_Minimum); mInitialAllowedSilenceT = S.AddTextBox(_("Duration:"), wxT(""), 12); mInitialAllowedSilenceT->SetValidator(vldDur); S.AddUnits(wxT("seconds")); } S.EndMultiColumn(); } S.EndStatic(); S.StartStatic(_("Action")); { S.StartHorizontalLay(); { // Action choices mActionChoice = S.AddChoice(wxT(""), wxT(""), &actionChoices); mActionChoice->SetValidator(wxGenericValidator(&mActionIndex)); S.SetSizeHints(-1, -1); } S.EndHorizontalLay(); S.StartMultiColumn(3, wxALIGN_CENTER_HORIZONTAL); { // Truncation / Compression factor FloatingPointValidator<double> vldTrunc(3, &mTruncLongestAllowedSilence, NUM_VAL_NO_TRAILING_ZEROES); vldTrunc.SetRange(MIN_Truncate, MAX_Truncate); mTruncLongestAllowedSilenceT = S.AddTextBox(_("Truncate to:"), wxT(""), 12); mTruncLongestAllowedSilenceT->SetValidator(vldTrunc); S.AddUnits(wxT("seconds")); FloatingPointValidator<double> vldComp(3, &mSilenceCompressPercent, NUM_VAL_NO_TRAILING_ZEROES); vldComp.SetRange(MIN_Compress, MAX_Compress); mSilenceCompressPercentT = S.AddTextBox(_("Compress to:"), wxT(""), 12); mSilenceCompressPercentT->SetValidator(vldComp); S.AddUnits(wxT("percent")); } S.EndMultiColumn(); S.StartMultiColumn(2, wxALIGN_CENTER_HORIZONTAL); { mIndependent = S.AddCheckBox(_("Truncate tracks independently"), mbIndependent ? wxT("true") : wxT("false")); } S.EndMultiColumn(); } S.EndStatic(); UpdateUI(); }
void EffectChangeTempo::PopulateOrExchange(ShuttleGui & S) { S.StartVerticalLay(0); { S.AddSpace(0, 5); S.AddTitle(_("Change Tempo without Changing Pitch")); S.SetBorder(5); // S.StartMultiColumn(2, wxCENTER); { FloatingPointValidator<double> vldPercentage(3, &m_PercentChange, NUM_VAL_THREE_TRAILING_ZEROES); vldPercentage.SetRange(MIN_Percentage, MAX_Percentage); m_pTextCtrl_PercentChange = S.Id(ID_PercentChange) .AddTextBox(_("Percent Change:"), wxT(""), 12); m_pTextCtrl_PercentChange->SetValidator(vldPercentage); } S.EndMultiColumn(); // S.StartHorizontalLay(wxEXPAND); { S.SetStyle(wxSL_HORIZONTAL); m_pSlider_PercentChange = S.Id(ID_PercentChange) .AddSlider(wxT(""), 0, (int)kSliderMax, (int)MIN_Percentage); m_pSlider_PercentChange->SetName(_("Percent Change")); } S.EndHorizontalLay(); // S.StartMultiColumn(5, wxCENTER); { // S.AddUnits(_("Beats per minute:")); FloatingPointValidator<double> vldFromBPM(3, &m_FromBPM, NUM_VAL_THREE_TRAILING_ZEROES | NUM_VAL_ZERO_AS_BLANK); m_pTextCtrl_FromBPM = S.Id(ID_FromBPM) .AddTextBox(_("from"), wxT(""), 12); m_pTextCtrl_FromBPM->SetName(_("From beats per minute")); m_pTextCtrl_FromBPM->SetValidator(vldFromBPM); FloatingPointValidator<double> vldToBPM(3, &m_ToBPM, NUM_VAL_THREE_TRAILING_ZEROES | NUM_VAL_ZERO_AS_BLANK); m_pTextCtrl_ToBPM = S.Id(ID_ToBPM) .AddTextBox(_("to"), wxT(""), 12); m_pTextCtrl_ToBPM->SetName(_("To beats per minute")); m_pTextCtrl_ToBPM->SetValidator(vldToBPM); // S.AddUnits(_("Length (seconds):")); int precission = 2; FloatingPointValidator<double> vldFromLength(precission, &m_FromLength, NUM_VAL_TWO_TRAILING_ZEROES); m_pTextCtrl_FromLength = S.Id(ID_FromLength) .AddTextBox(_("from"), wxT(""), 12); m_pTextCtrl_FromLength->SetName(_("From length in seconds")); m_pTextCtrl_FromLength->SetValidator(vldFromLength); m_pTextCtrl_FromLength->Enable(false); // Disable because the value comes from the user selection. FloatingPointValidator<double> vldToLength(2, &m_ToLength, NUM_VAL_TWO_TRAILING_ZEROES); // min and max need same precision as what we're validating (bug 963) double minLength = (m_FromLength * 100.0) / (100.0 + MAX_Percentage); double maxLength = (m_FromLength * 100.0) / (100.0 + MIN_Percentage); minLength = Internat::CompatibleToDouble(Internat::ToString(minLength, precission)); maxLength = Internat::CompatibleToDouble(Internat::ToString(maxLength, precission)); vldToLength.SetRange(minLength, maxLength); m_pTextCtrl_ToLength = S.Id(ID_ToLength) .AddTextBox(_("to"), wxT(""), 12); m_pTextCtrl_ToLength->SetName(_("To length in seconds")); m_pTextCtrl_ToLength->SetValidator(vldToLength); } S.EndMultiColumn(); } S.EndVerticalLay(); return; }