@@ -1146,86 +1146,143 @@ ChooseAudioOptionsVorbisPage::ChooseAudioOptionsVorbisPage(Configuration &config
11461146
11471147wxWindow *ChooseAudioOptionsVorbisPage::CreatePanel (wxWindow *parent) {
11481148 wxWindow *panel = WizardPage::CreatePanel (parent);
1149-
1150-
1149+
1150+ wxSizer *sizer = new wxBoxSizer (wxVERTICAL);
1151+
11511152 /* Vorbis mode params
11521153 " -b <rate> <rate> is the nominal bitrate (default:unset)\n" \
11531154 " -m <rate> <rate> is the minimum bitrate (default:unset)\n" \
11541155 " -M <rate> <rate> is the maximum bitrate (default:unset)\n" \
11551156 " -q <value> specifies the value (0 - 10) of VBR quality (10=best) (default:" oggqualDef_str ")\n" \
11561157 " --silent the output of oggenc is hidden (default:disabled)\n" \
11571158 */
1159+
1160+
1161+ // Grid
1162+ _gridSizer = new wxFlexGridSizer (5 , 2 , 10 , 25 );
1163+ _gridSizer->AddGrowableCol (1 );
1164+
1165+
1166+ // Compression target type
1167+ _gridSizer->Add (new wxStaticText (panel, wxID_ANY, wxT (" Target Type:" )));
1168+
1169+ wxRadioButton *qualityButton = new wxRadioButton (
1170+ panel, wxID_ANY, wxT (" Quality Factor" ),
1171+ wxDefaultPosition, wxDefaultSize, 0 , wxDefaultValidator, wxT (" Quality" ));
1172+
1173+ wxSizer *radioSizer = new wxBoxSizer (wxHORIZONTAL);
1174+ radioSizer->Add (qualityButton);
1175+
1176+ wxRadioButton *bitrateButton = new wxRadioButton (
1177+ panel, wxID_ANY, wxT (" Nominal Bitrate" ),
1178+ wxDefaultPosition, wxDefaultSize, 0 , wxDefaultValidator, wxT (" Bitrate" ));
1179+ radioSizer->Add (bitrateButton);
1180+
1181+ _gridSizer->Add (radioSizer, wxSizerFlags ().Expand ());
1182+
1183+
1184+ // Quality
1185+ const int possibleQualityCount = 11 ;
1186+ wxString possibleQualities[possibleQualityCount + 1 ];
1187+ for (int i = 0 ; i <= possibleQualityCount; ++i) {
1188+ possibleQualities[i] << i;
1189+ }
1190+
1191+ _qualityFactorLabel = new wxStaticText (panel, wxID_ANY, wxT (" Quality:" ));
1192+ _gridSizer->Add (_qualityFactorLabel);
1193+
1194+ _qualityFactor = new wxChoice (
1195+ panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
1196+ possibleQualityCount, possibleQualities, 0 , wxDefaultValidator, wxT (" QualityFactor" ));
1197+ _gridSizer->Add (_qualityFactor, wxSizerFlags ().Expand ().Border (wxRIGHT, 100 ));
11581198
1159- wxFlexGridSizer *sizer = new wxFlexGridSizer (4 , 2 , 10 , 25 );
1160- sizer->AddGrowableCol (1 );
11611199
11621200 // Bitrates
11631201 const int possibleBitrateCount = 160 / 8 ;
1164- wxString possibleBitrates[possibleBitrateCount + 1 ];
1165- for (int i = 0 ; i <= possibleBitrateCount; ++i) {
1202+ wxString possibleBitrates[possibleBitrateCount];
1203+ wxString possibleMinMaxBitrates[possibleBitrateCount + 1 ];
1204+ possibleMinMaxBitrates[0 ] = wxT (" None" );
1205+ for (int i = 0 ; i < possibleBitrateCount; ++i) {
11661206 possibleBitrates[i] << (i+1 )*8 ;
1207+ possibleMinMaxBitrates[i+1 ] << (i+1 )*8 ;
11671208 }
1209+
1210+ _nominalBitrateLabel = new wxStaticText (panel, wxID_ANY, wxT (" Nominal Bitrate:" ));
1211+ _gridSizer->Add (_nominalBitrateLabel);
11681212
1169- sizer->Add (new wxStaticText (panel, wxID_ANY, wxT (" Minimum Bitrate:" )));
1213+ _nominalBitrate = new wxChoice (
1214+ panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
1215+ possibleBitrateCount, possibleBitrates, 0 , wxDefaultValidator, wxT (" NominalBitrate" ));
1216+ _gridSizer->Add (_nominalBitrate, wxSizerFlags ().Expand ().Border (wxRIGHT, 100 ));
11701217
1171- wxChoice *MinBitrate = new wxChoice (
1172- panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
1173- possibleBitrateCount, possibleBitrates, 0 , wxDefaultValidator, wxT (" MinimumBitrate" ));
1174- sizer->Add (MinBitrate, wxSizerFlags ().Expand ().Border (wxRIGHT, 100 ));
11751218
1176-
1177- sizer->Add (new wxStaticText (panel, wxID_ANY, wxT (" Nominal Bitrate:" )));
1178-
1179- wxChoice *AvgBitrate = new wxChoice (
1180- panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
1181- possibleBitrateCount, possibleBitrates, 0 , wxDefaultValidator, wxT (" NominalBitrate" ));
1182- sizer->Add (AvgBitrate, wxSizerFlags ().Expand ().Border (wxRIGHT, 100 ));
1183-
1184-
1185- sizer->Add (new wxStaticText (panel, wxID_ANY, wxT (" Maximum Bitrate:" )));
1219+ _gridSizer->Add (new wxStaticText (panel, wxID_ANY, wxT (" Minimum Bitrate:" )));
1220+
1221+ wxChoice *MinBitrate = new wxChoice (
1222+ panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
1223+ possibleBitrateCount+1 , possibleMinMaxBitrates, 0 , wxDefaultValidator, wxT (" MinimumBitrate" ));
1224+ _gridSizer->Add (MinBitrate, wxSizerFlags ().Expand ().Border (wxRIGHT, 100 ));
1225+
1226+
1227+ _gridSizer->Add (new wxStaticText (panel, wxID_ANY, wxT (" Maximum Bitrate:" )));
11861228
11871229 wxChoice *MaxBitrate = new wxChoice (
1188- panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
1189- possibleBitrateCount, possibleBitrates, 0 , wxDefaultValidator, wxT (" MaximumBitrate" ));
1190- sizer->Add (MaxBitrate, wxSizerFlags ().Expand ().Border (wxRIGHT, 100 ));
1230+ panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
1231+ possibleBitrateCount+1 , possibleMinMaxBitrates, 0 , wxDefaultValidator, wxT (" MaximumBitrate" ));
1232+ _gridSizer->Add (MaxBitrate, wxSizerFlags ().Expand ().Border (wxRIGHT, 100 ));
1233+
11911234
1192- // Quality
1193- const int possibleQualityCount = 11 ;
1194- wxString possibleQualities[possibleQualityCount + 1 ];
1195- for (int i = 0 ; i <= possibleQualityCount; ++i) {
1196- possibleQualities[i] << i;
1197- }
1235+ qualityButton->Connect (wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler (ChooseAudioOptionsVorbisPage::onChangeTargetType), NULL , this );
1236+ bitrateButton->Connect (wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler (ChooseAudioOptionsVorbisPage::onChangeTargetType), NULL , this );
11981237
1199- sizer->Add (new wxStaticText (panel, wxID_ANY, wxT (" Quality:" )));
1200-
1201- wxChoice *quality = new wxChoice (
1202- panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
1203- possibleQualityCount, possibleQualities, 0 , wxDefaultValidator, wxT (" Quality" ));
1204- sizer->Add (quality, wxSizerFlags ().Expand ().Border (wxRIGHT, 100 ));
12051238
12061239 // Finish the window
1240+ sizer->Add (_gridSizer, wxSizerFlags ().Expand ());
12071241 SetAlignedSizer (panel, sizer);
12081242
1209-
12101243 // Load settings
12111244 MinBitrate->SetStringSelection (_configuration.oggMinBitrate );
1212- AvgBitrate->SetStringSelection (_configuration.oggAvgBitrate );
12131245 MaxBitrate->SetStringSelection (_configuration.oggMaxBitrate );
1214- quality ->SetStringSelection (_configuration.oggQuality );
1246+ _qualityFactor->SetStringSelection (_configuration.oggQuality );
1247+ _nominalBitrate->SetStringSelection (_configuration.oggAvgBitrate );
1248+ if (_configuration.useOggQuality )
1249+ qualityButton->SetValue (true );
1250+ else
1251+ bitrateButton->SetValue (true );
1252+
1253+ updateFields (panel);
12151254
12161255 return panel;
12171256}
12181257
12191258void ChooseAudioOptionsVorbisPage::save (wxWindow *panel) {
1220- wxChoice *minBitrate = static_cast <wxChoice *>(panel->FindWindowByName (wxT (" MinimumBitrate" )));
1221- wxChoice *avgBitrate = static_cast <wxChoice *>(panel->FindWindowByName (wxT (" NominalBitrate" )));
1222- wxChoice *maxBitrate = static_cast <wxChoice *>(panel->FindWindowByName (wxT (" MaximumBitrate" )));
1223- wxChoice *quality = static_cast <wxChoice *>(panel->FindWindowByName (wxT (" Quality" )));
1259+ wxRadioButton *quality = static_cast <wxRadioButton *>(panel->FindWindowByName (wxT (" Quality" )));
1260+ wxChoice *minBitrate = static_cast <wxChoice *>(panel->FindWindowByName (wxT (" MinimumBitrate" )));
1261+ wxChoice *maxBitrate = static_cast <wxChoice *>(panel->FindWindowByName (wxT (" MaximumBitrate" )));
12241262
1263+ _configuration.useOggQuality = quality->GetValue ();
12251264 _configuration.oggMinBitrate = minBitrate->GetStringSelection ();
1226- _configuration.oggAvgBitrate = avgBitrate ->GetStringSelection ();
1265+ _configuration.oggAvgBitrate = _nominalBitrate ->GetStringSelection ();
12271266 _configuration.oggMaxBitrate = maxBitrate->GetStringSelection ();
1228- _configuration.oggQuality = quality ->GetStringSelection ();
1267+ _configuration.oggQuality = _qualityFactor->GetStringSelection ();
1268+ }
1269+
1270+ void ChooseAudioOptionsVorbisPage::updateFields (wxWindow *panel) {
1271+ wxRadioButton *quality = static_cast <wxRadioButton *>(panel->FindWindowByName (wxT (" Quality" )));
1272+
1273+ bool isQualitySelected = quality->GetValue ();
1274+ _gridSizer->Show (_qualityFactor, isQualitySelected);
1275+ _gridSizer->Show (_qualityFactorLabel, isQualitySelected);
1276+ _gridSizer->Show (_nominalBitrate, !isQualitySelected);
1277+ _gridSizer->Show (_nominalBitrateLabel, !isQualitySelected);
1278+
1279+ _gridSizer->Layout ();
1280+ }
1281+
1282+ void ChooseAudioOptionsVorbisPage::onChangeTargetType (wxCommandEvent &evt) {
1283+ wxRadioButton *btn = static_cast <wxRadioButton *>(evt.GetEventObject ());
1284+ wxWindow *parent = btn->GetParent ();
1285+ updateFields (parent);
12291286}
12301287
12311288void ChooseAudioOptionsVorbisPage::onNext (wxWindow *panel) {
0 commit comments