160
161
LabelsSelectedFlag = 0x00020000,
161
162
AudioIOBusyFlag = 0x00040000, //lll
162
163
PlayRegionLockedFlag = 0x00080000, //msmeyer
163
PlayRegionNotLockedFlag= 0x00100000 //msmeyer
164
PlayRegionNotLockedFlag= 0x00100000, //msmeyer
165
CutCopyAvailableFlag = 0x00200000 //lll
168
wxString SHOW(const wxString &toolbarName)
170
/* i18n-hint: here, %s is the name of a toolbar, e.g. "Control Toolbar" */
171
return wxString::Format(_("Show %s"), toolbarName.c_str());
174
wxString HIDE(const wxString &toolbarName)
176
/* i18n-hint: here, %s is the name of a toolbar, e.g. "Control Toolbar" */
177
return wxString::Format(_("Hide %s"), toolbarName.c_str());
166
180
#define FN(X) new AudacityProjectCommandFunctor(this, &AudacityProject:: X )
168
182
/// CreateMenusAndCommands builds the menus, and also rebuilds them after
230
244
c->AddSeparator();
232
c->BeginSubMenu(_("&Export As..."));
233
c->AddItem(wxT("Export"), _("&WAV..."), FN(OnExportMix));
234
c->AddItem(wxT("ExportMP3"), _("&MP3..."), FN(OnExportMP3Mix));
236
c->AddItem(wxT("ExportOgg"), _("Ogg &Vorbis..."), FN(OnExportOggMix));
237
// Enable Export commands only when there are tracks
238
c->SetCommandFlags(AudioIONotBusyFlag | TracksExistFlag,
239
AudioIONotBusyFlag | TracksExistFlag,
240
wxT("ExportOgg"), NULL);
243
c->AddItem(wxT("ExportFLAC"), _("&FLAC..."), FN(OnExportFLACMix));
244
c->SetCommandFlags(AudioIONotBusyFlag | TracksExistFlag,
245
AudioIONotBusyFlag | TracksExistFlag,
246
wxT("ExportFLAC"), NULL);
248
#ifdef USE_LIBTWOLAME
249
c->AddItem(wxT("ExportMP2"), _("MP&2..."), FN(OnExportMP2Mix));
250
c->SetCommandFlags(AudioIONotBusyFlag | TracksExistFlag,
251
AudioIONotBusyFlag | TracksExistFlag,
252
wxT("ExportMP2"), NULL);
256
c->BeginSubMenu(_("Expo&rt Selection As..."));
257
c->AddItem(wxT("ExportSel"), _("&WAV..."), FN(OnExportSelection));
258
c->AddItem(wxT("ExportMP3Sel"), _("&MP3..."), FN(OnExportMP3Selection));
260
c->AddItem(wxT("ExportOggSel"), _("Ogg &Vorbis..."), FN(OnExportOggSelection));
261
// Enable Export Selection commands only when there's a selection
262
c->SetCommandFlags(AudioIONotBusyFlag | TimeSelectedFlag | TracksSelectedFlag,
263
AudioIONotBusyFlag | TimeSelectedFlag | TracksSelectedFlag,
264
wxT("ExportOggSel"), NULL);
267
c->AddItem(wxT("ExportFLACSel"), _("&FLAC..."), FN(OnExportFLACSelection));
268
c->SetCommandFlags(AudioIONotBusyFlag | TracksExistFlag | TracksSelectedFlag,
269
AudioIONotBusyFlag | TracksExistFlag | TracksSelectedFlag,
270
wxT("ExportFLACSel"), NULL);
272
#ifdef USE_LIBTWOLAME
273
c->AddItem(wxT("ExportMP2Sel"), _("&MP&2..."), FN(OnExportMP2Selection));
274
c->SetCommandFlags(AudioIONotBusyFlag | TracksExistFlag | TracksSelectedFlag,
275
AudioIONotBusyFlag | TracksExistFlag | TracksSelectedFlag,
276
wxT("ExportMP2Sel"), NULL);
280
// Enable Export commands only when there are tracks
281
c->SetCommandFlags(AudioIONotBusyFlag | TracksExistFlag,
282
AudioIONotBusyFlag | TracksExistFlag,
283
wxT("Export"), wxT("ExportMP3"), NULL);
284
// Enable Export Selection commands only when there's a selection
285
c->SetCommandFlags(AudioIONotBusyFlag | TimeSelectedFlag | TracksSelectedFlag,
286
AudioIONotBusyFlag | TimeSelectedFlag | TracksSelectedFlag,
287
wxT("ExportSel"), wxT("ExportMP3Sel"), NULL);
246
c->AddItem(wxT("Export"), _("&Export..."), FN(OnExport));
247
// Enable Export commands only when there are tracks
248
c->SetCommandFlags(wxT("Export"),
249
AudioIONotBusyFlag | TracksExistFlag,
250
AudioIONotBusyFlag | TracksExistFlag);
252
c->AddItem(wxT("ExportSel"), _("Expo&rt Selection..."), FN(OnExportSelection));
253
// Enable Export Selection commands only when there's a selection
254
c->SetCommandFlags(wxT("ExportSel"),
255
AudioIONotBusyFlag | TimeSelectedFlag | TracksSelectedFlag,
256
AudioIONotBusyFlag | TimeSelectedFlag | TracksSelectedFlag);
289
258
c->AddSeparator();
290
259
c->AddItem(wxT("ExportLabels"), _("Export &Labels..."), FN(OnExportLabels));
303
272
if( mCleanSpeechMode )
306
c->BeginSubMenu(_("&Export As..."));
307
c->AddItem(wxT("Export"), _("&WAV..."), FN(OnExportMix));
308
c->AddItem(wxT("ExportMP3"), _("&MP3..."), FN(OnExportMP3Mix));
311
c->BeginSubMenu(_("Expo&rt Selection As..."));
312
c->AddItem(wxT("ExportSel"), _("&WAV..."), FN(OnExportSelection));
313
c->AddItem(wxT("ExportMP3Sel"), _("&MP3..."), FN(OnExportMP3Selection));
275
c->AddItem(wxT("Export"), _("&Export..."), FN(OnExport));
316
276
// Enable Export commands only when there are tracks
317
c->SetCommandFlags(AudioIONotBusyFlag | TracksExistFlag,
277
c->SetCommandFlags(wxT("Export"),
318
278
AudioIONotBusyFlag | TracksExistFlag,
319
wxT("Export"), wxT("ExportMP3"), NULL);
279
AudioIONotBusyFlag | TracksExistFlag);
281
c->AddItem(wxT("ExportSel"), _("Expo&rt Selection..."), FN(OnExportSelection));
320
282
// Enable Export Selection commands only when there's a selection
321
c->SetCommandFlags(AudioIONotBusyFlag | TimeSelectedFlag | TracksSelectedFlag,
283
c->SetCommandFlags(wxT("ExportSel"),
322
284
AudioIONotBusyFlag | TimeSelectedFlag | TracksSelectedFlag,
323
wxT("ExportSel"), wxT("ExportMP3Sel"), NULL);
285
AudioIONotBusyFlag | TimeSelectedFlag | TracksSelectedFlag);
325
287
c->AddSeparator();
327
c->AddItem(wxT("ApplyChain"), _("CleanSpeech C&hain..."), FN(OnApplyChain));
289
c->AddItem(wxT("ApplyChain"), wxT("CleanSpeech C&hain..."), FN(OnApplyChain));
328
290
c->AddItem(wxT("EditChains"), _("Edit C&hains..."), FN(OnEditChains));
329
c->AddItem(wxT("ExportCcSettings"), _("Export CleanSpeech &Presets..."), FN(OnExportCleanSpeechPresets));
330
c->AddItem(wxT("ImportCcSettings"), _("I&mport CleanSpeech Presets..."), FN(OnImportCleanSpeechPresets));
291
c->AddItem(wxT("ExportCcSettings"), wxT("Export CleanSpeech &Presets..."), FN(OnExportCleanSpeechPresets));
292
c->AddItem(wxT("ImportCcSettings"), wxT("I&mport CleanSpeech Presets..."), FN(OnImportCleanSpeechPresets));
331
293
c->SetCommandFlags(wxT("BatchProcess"), AudioIONotBusyFlag, AudioIONotBusyFlag);
332
294
#ifdef __WXDEBUG__
333
295
gPrefs->Write(wxT("/Validate/DebugBuild"), "Y");
406
368
c->AddSeparator();
407
369
c->AddItem(wxT("Cut"), _("Cu&t\tCtrl+X"), FN(OnCut));
370
c->SetCommandFlags(wxT("Cut"),
371
AudioIONotBusyFlag | CutCopyAvailableFlag,
372
AudioIONotBusyFlag | CutCopyAvailableFlag);
408
373
c->AddItem(wxT("SplitCut"), _("Spl&it Cut\tCtrl+Alt+X"), FN(OnSplitCut));
409
374
c->AddItem(wxT("Copy"), _("&Copy\tCtrl+C"), FN(OnCopy));
375
c->SetCommandFlags(wxT("Copy"),
376
AudioIONotBusyFlag | CutCopyAvailableFlag,
377
AudioIONotBusyFlag | CutCopyAvailableFlag);
410
378
c->AddItem(wxT("Paste"), _("&Paste\tCtrl+V"), FN(OnPaste));
411
379
c->SetCommandFlags(wxT("Paste"),
412
380
AudioIONotBusyFlag | ClipboardFlag,
422
390
AudioIONotBusyFlag | WaveTracksSelectedFlag,
423
391
AudioIONotBusyFlag | WaveTracksSelectedFlag);
393
c->AddItem(wxT("SplitNew"), _("Split Ne&w\tCtrl+Alt+I"), FN(OnSplitNew));
394
c->SetCommandFlags(wxT("SplitNew"),
395
AudioIONotBusyFlag | WaveTracksSelectedFlag,
396
AudioIONotBusyFlag | WaveTracksSelectedFlag);
425
398
c->AddItem(wxT("Join"), _("&Join\tCtrl+J"), FN(OnJoin));
426
399
c->AddItem(wxT("Disjoin"), _("Disj&oin\tCtrl+Alt+J"), FN(OnDisjoin));
439
412
c->AddSeparator();
441
414
c->BeginSubMenu( _( "Labeled Re&gions..." ) );
415
/* i18n-hint: Labeled Regions submenu */
442
416
c->AddItem( wxT( "CutLabels" ), _( "&Cut\tAlt+X" ),
443
417
FN( OnCutLabels ) );
444
418
c->SetCommandFlags( wxT( "CutLabels" ), LabelsSelectedFlag,
445
419
LabelsSelectedFlag );
420
/* i18n-hint: Labeled Regions submenu */
446
421
c->AddItem( wxT( "SplitCutLabels" ), _( "&Split Cut\tShift+Alt+X" ),
447
422
FN( OnSplitCutLabels ) );
448
423
c->SetCommandFlags( wxT( "SplitCutLabels" ), LabelsSelectedFlag,
449
424
LabelsSelectedFlag );
425
/* i18n-hint: Labeled Regions submenu */
450
426
c->AddItem( wxT( "CopyLabels" ), _( "Co&py\tShift+Alt+C" ),
451
427
FN( OnCopyLabels ) );
452
428
c->SetCommandFlags( wxT( "CopyLabels" ), LabelsSelectedFlag,
453
429
LabelsSelectedFlag );
454
430
c->AddSeparator();
431
/* i18n-hint: Labeled Regions submenu */
455
432
c->AddItem( wxT( "DeleteLabels" ), _( "&Delete\tAlt+K" ),
456
433
FN( OnDeleteLabels ) );
457
434
c->SetCommandFlags( wxT( "DeleteLabels" ), LabelsSelectedFlag,
458
435
LabelsSelectedFlag );
436
/* i18n-hint: Labeled Regions submenu */
459
437
c->AddItem( wxT( "SplitDeleteLabels" ), _( "Sp&lit Delete\tShift+Alt+K" ),
460
438
FN( OnSplitDeleteLabels ) );
461
439
c->SetCommandFlags( wxT( "SplitDeleteLabels" ), LabelsSelectedFlag,
462
440
LabelsSelectedFlag );
441
/* i18n-hint: Labeled Regions submenu */
463
442
c->AddItem( wxT( "SilenceLabels" ), _( "Sile&nce\tAlt+L" ),
464
443
FN( OnSilenceLabels ) );
465
444
c->SetCommandFlags( wxT( "SilenceLabels" ), LabelsSelectedFlag,
466
445
LabelsSelectedFlag );
467
446
c->AddSeparator();
447
/* i18n-hint: Labeled Regions submenu */
468
448
c->AddItem( wxT( "SplitLabels" ), _( "Spli&t\tAlt+I" ),
469
449
FN( OnSplitLabels ) );
470
450
c->SetCommandFlags( wxT( "SplitLabels" ), LabelsSelectedFlag,
471
451
LabelsSelectedFlag );
452
/* i18n-hint: Labeled Regions submenu */
472
453
c->AddItem( wxT( "JoinLabels" ), _( "&Join\tAlt+J" ),
473
454
FN( OnJoinLabels ) );
474
455
c->SetCommandFlags( wxT( "JoinLabels" ), LabelsSelectedFlag,
475
456
LabelsSelectedFlag );
457
/* i18n-hint: Labeled Regions submenu */
476
458
c->AddItem( wxT( "DisjoinLabels" ), _( "Disj&oin\tShift+Alt+J" ),
477
459
FN( OnDisjoinLabels ) );
478
460
c->SetCommandFlags( wxT( "DisjoinLabels" ), LabelsSelectedFlag,
479
461
LabelsSelectedFlag );
482
c->BeginSubMenu(_("Select..."));
464
c->BeginSubMenu(_("&Select..."));
483
465
c->AddItem(wxT("SelectAll"), _("&All\tCtrl+A"), FN(OnSelectAll));
484
c->SetCommandFlags(wxT("SelectAll"),
485
TracksExistFlag, TracksExistFlag);
466
c->AddItem(wxT("SelectNone"), _("&None\tCtrl+Shift+A"), FN(OnSelectNone));
467
c->SetCommandFlags(TracksExistFlag, TracksExistFlag,
468
wxT("SelectAll"), wxT("SelectNone"), NULL);
487
470
c->AddItem(wxT("SetLeftSelection"),_("Left at Playback Position\t["), FN(OnSetLeftSelection));
488
471
c->AddItem(wxT("SetRightSelection"),_("Right at Playback Position\t]"), FN(OnSetRightSelection));
590
573
c->AddSeparator();
591
574
c->BeginSubMenu(_("&Toolbars..."));
592
c->AddItem(wxT("ShowControlTB"), _("Show Control Toolbar"), FN(OnShowControlToolBar));
593
c->AddItem(wxT("ShowDeviceTB"), _("Show Device Toolbar"), FN(OnShowDeviceToolBar));
594
c->AddItem(wxT("ShowEditTB"), _("Show Edit Toolbar"), FN(OnShowEditToolBar));
595
c->AddItem(wxT("ShowMeterTB"), _("Show Meter Toolbar"), FN(OnShowMeterToolBar));
596
c->AddItem(wxT("ShowMixerTB"), _("Show Mixer Toolbar"), FN(OnShowMixerToolBar));
597
c->AddItem(wxT("ShowSelectionTB"), _("Show Selection Toolbar"), FN(OnShowSelectionToolBar));
598
c->AddItem(wxT("ShowToolsTB"), _("Show Tools Toolbar"), FN(OnShowToolsToolBar));
599
c->AddItem(wxT("ShowTranscriptionTB"), _("Show Transcription Toolbar"), FN(OnShowTranscriptionToolBar));
575
c->AddItem(wxT("ShowControlTB"), SHOW(_("Control Toolbar")), FN(OnShowControlToolBar));
576
c->AddItem(wxT("ShowDeviceTB"), SHOW(_("Device Toolbar")), FN(OnShowDeviceToolBar));
577
c->AddItem(wxT("ShowEditTB"), SHOW(_("Edit Toolbar")), FN(OnShowEditToolBar));
578
c->AddItem(wxT("ShowMeterTB"), SHOW(_("Meter Toolbar")), FN(OnShowMeterToolBar));
579
c->AddItem(wxT("ShowMixerTB"), SHOW(_("Mixer Toolbar")), FN(OnShowMixerToolBar));
580
c->AddItem(wxT("ShowSelectionTB"), SHOW(_("Selection Toolbar")), FN(OnShowSelectionToolBar));
581
c->AddItem(wxT("ShowToolsTB"), SHOW(_("Tools Toolbar")), FN(OnShowToolsToolBar));
582
c->AddItem(wxT("ShowTranscriptionTB"), SHOW(_("Transcription Toolbar")), FN(OnShowTranscriptionToolBar));
584
c->AddItem(wxT("ResetToolbars"), _("Reset Toolbars"), FN(OnResetToolBars));
796
781
c->BeginMenu(_("&Help"));
797
782
c->SetDefaultFlags(0, 0);
798
c->AddItem(wxT("Help"), _("&Contents..."), FN(OnHelp));
800
if( mCleanSpeechMode )
783
if( mCleanSpeechMode )
801
784
c->AddItem(wxT("About"), _("&About Audacity CleanSpeech..."), FN(OnAbout));
803
c->AddItem(wxT("About"), _("&About Audacity..."), FN(OnAbout));
786
c->AddItem(wxT("About"), _("&About Audacity..."), FN(OnAbout));
805
#if 1 // Benchmark is enabled in unstable builds
806
if( !mCleanSpeechMode )
809
c->AddItem(wxT("Benchmark"), _("&Run Benchmark..."), FN(OnBenchmark));
788
#if 1 // Debugging tools are enabled in unstable builds
789
if( !mCleanSpeechMode )
792
c->AddItem(wxT("Screenshot"), _("&Screenshot Tools..."), FN(OnScreenshot));
794
c->AddItem(wxT("Benchmark"), _("&Run Benchmark..."), FN(OnBenchmark));
817
800
SetMenuBar(menubar);
819
802
c->SetDefaultFlags(0, 0);
869
852
c->SetDefaultFlags(TracksExistFlag | TrackPanelHasFocus,
870
853
TracksExistFlag | TrackPanelHasFocus);
871
c->AddCommand(wxT("PrevTrack"), _("Move to Previous Track\tUp"), FN(OnCursorUp));
872
c->AddCommand(wxT("ShiftUp"), _("Move to Previous and Change Selection\tShift+Up"), FN(OnShiftUp));
873
c->AddCommand(wxT("NextTrack"), _("Move to Next Track\tDown"), FN(OnCursorDown));
874
c->AddCommand(wxT("ShiftDown"), _("Move to Next and Change Selection\tShift+Down"), FN(OnShiftDown));
854
c->AddCommand(wxT("PrevTrack"), _("Move Focus to Previous Track\tUp"), FN(OnCursorUp));
855
c->AddCommand(wxT("ShiftUp"), _("Move Focus to Previous and Change Selection\tShift+Up"), FN(OnShiftUp));
856
c->AddCommand(wxT("NextTrack"), _("Move Focus to Next Track\tDown"), FN(OnCursorDown));
857
c->AddCommand(wxT("ShiftDown"), _("Move Focus to Next and Change Selection\tShift+Down"), FN(OnShiftDown));
875
858
c->AddCommand(wxT("Toggle"), _("Toggle Focused Track\tReturn"), FN(OnToggle));
876
859
c->AddCommand(wxT("Toggle1"), _("Toggle Focused Track\tNUMPAD_ENTER"), FN(OnToggle));
877
860
c->AddCommand(wxT("Toggle2"), _("Toggle Focused Track\tCtrl+Spacebar"), FN(OnToggle));
935
918
// when calling an effect.
936
919
void AudacityProject::ResolveEffectIndices(EffectArray *effects)
921
mNormalizeIndex = -1;
922
mStereoToMonoIndex = -1;
938
924
for (unsigned int i = 0; i < effects->GetCount(); i++) {
939
wxString effectName = (*effects)[i]->GetEffectName();
940
if (effectName == wxT("Normalize...")) {
925
wxString effectIdentifier = (*effects)[i]->GetEffectIdentifier();
926
if (effectIdentifier == wxT("Normalize")) {
941
927
mNormalizeIndex = i;
943
else if (effectName == wxT("Stereo To Mono")) {
929
else if (effectIdentifier == wxT("StereoToMono")) {
944
930
mStereoToMonoIndex = i;
949
void AudacityProject::ModifyExportMenus()
951
int format = ReadExportFormatPref();
952
wxString pcmFormat = sf_header_shortname(format & SF_FORMAT_TYPEMASK);
954
mCommandManager.Modify(wxT("Export"),
955
wxString::Format(_("&%s..."),
957
mCommandManager.Modify(wxT("ExportSel"),
958
wxString::Format(_("&%s..."),
962
935
void AudacityProject::ModifyUndoMenus()
1089
1062
Track *t = iter.First();
1091
1064
flags |= TracksExistFlag;
1092
if (t->GetKind() == Track::Label)
1065
if (t->GetKind() == Track::Label) {
1066
LabelTrack *lt = (LabelTrack *) t;
1094
1068
flags |= LabelTracksExistFlag;
1095
if( t->GetSelected() )
1070
if (lt->GetSelected()) {
1097
1071
flags |= TracksSelectedFlag;
1099
LabelTrack *lt = ( LabelTrack* )t;
1100
for( int i = 0; i < lt->GetNumLabels(); i++ )
1102
const LabelStruct *ls = lt->GetLabel( i );
1103
if( ls->t >= mViewInfo.sel0 && ls->t1 <= mViewInfo.sel1 )
1072
for (int i = 0; i < lt->GetNumLabels(); i++) {
1073
const LabelStruct *ls = lt->GetLabel(i);
1074
if (ls->t >= mViewInfo.sel0 && ls->t1 <= mViewInfo.sel1) {
1105
1075
flags |= LabelsSelectedFlag;
1110
if (((LabelTrack *)t)->IsTextClipSupported())
1111
flags |= TextClipFlag;
1081
if (lt->IsTextSelected()) {
1082
flags |= CutCopyAvailableFlag;
1085
if (lt->IsTextClipSupported()) {
1086
flags |= TextClipFlag;
1114
1089
else if (t->GetKind() == Track::Wave) {
1169
1152
mCommandManager.Modify(wxT("ShowControlTB"),
1170
1153
mToolManager->IsVisible(ControlBarID ) ?
1171
_("Hide Control Toolbar") :
1172
_("Show Control Toolbar"));
1154
HIDE(_("Control Toolbar")) :
1155
SHOW(_("Control Toolbar")));
1173
1156
mCommandManager.Modify(wxT("ShowDeviceTB"),
1174
1157
mToolManager->IsVisible(DeviceBarID) ?
1175
_("Hide Device Toolbar") :
1176
_("Show Device Toolbar"));
1158
HIDE(_("Device Toolbar")) :
1159
SHOW(_("Device Toolbar")));
1177
1160
mCommandManager.Modify(wxT("ShowEditTB"),
1178
1161
mToolManager->IsVisible(EditBarID) ?
1179
_("Hide Edit Toolbar") :
1180
_("Show Edit Toolbar"));
1162
HIDE(_("Edit Toolbar")) :
1163
SHOW(_("Edit Toolbar")));
1181
1164
mCommandManager.Modify(wxT("ShowMeterTB"),
1182
1165
mToolManager->IsVisible(MeterBarID) ?
1183
_("Hide Meter Toolbar") :
1184
_("Show Meter Toolbar"));
1166
HIDE(_("Meter Toolbar")) :
1167
SHOW(_("Meter Toolbar")));
1185
1168
mCommandManager.Modify(wxT("ShowMixerTB"),
1186
1169
mToolManager->IsVisible(MixerBarID) ?
1187
_("Hide Mixer Toolbar") :
1188
_("Show Mixer Toolbar"));
1170
HIDE(_("Mixer Toolbar")) :
1171
SHOW(_("Mixer Toolbar")));
1189
1172
mCommandManager.Modify(wxT("ShowSelectionTB"),
1190
1173
mToolManager->IsVisible(SelectionBarID) ?
1191
_("Hide Selection Toolbar") :
1192
_("Show Selection Toolbar"));
1174
HIDE(_("Selection Toolbar")) :
1175
SHOW(_("Selection Toolbar")));
1193
1176
mCommandManager.Modify(wxT("ShowToolsTB"),
1194
1177
mToolManager->IsVisible(ToolsBarID) ?
1195
_("Hide Tools Toolbar") :
1196
_("Show Tools Toolbar"));
1178
HIDE(_("Tools Toolbar")) :
1179
SHOW(_("Tools Toolbar")));
1197
1180
mCommandManager.Modify(wxT("ShowTranscriptionTB"),
1198
1181
mToolManager->IsVisible(TranscriptionBarID) ?
1199
_("Hide Transcription Toolbar") :
1200
_("Show Transcription Toolbar"));
1182
HIDE(_("Transcription Toolbar")) :
1183
SHOW(_("Transcription Toolbar")));
1203
1186
void AudacityProject::UpdateMenus()
1794
1782
void AudacityProject::OnTrackMenu()
1796
mTrackPanel->OnTrackMenu();
1784
// LLL: There's a slight problem on Windows that I was not able to track
1785
// down to the actual cause. I "think" it might be a problem in wxWidgets
1786
// on Windows, but I'm not sure.
1788
// Let's say the user has SHIFT+M assigned as the keyboard shortcut for
1789
// bringing up the track menu. If there is only 1 wave track and the user
1790
// uses the shortcut, the menu is display and immediately disappears. But,
1791
// if there are 2 or more wave tracks, then the menu is displayed.
1793
// However, what is actually happening is that the popup menu is processing
1794
// the "M" as the menu item to select after the menu is displayed. With only
1795
// 1 track, the only (enabled) menu item that begins with "M" is Mono and
1796
// that's what gets selected.
1798
// With 2+ wave tracks, there's 2 menu items that begin with "M" and Mono
1799
// is only highlighted by not selected, so the menu doesn't get dismissed.
1801
// While the 1 or 2 track example above is a way to recreate the issue, the
1802
// real problem is when there's only one enabled menu item that begins with
1803
// the selected shortcut key.
1805
// The workaround is to queue a context menu event, allowing the key press
1806
// event to complete.
1807
wxContextMenuEvent e(wxEVT_CONTEXT_MENU, GetId());
1808
mTrackPanel->AddPendingEvent(e);
1799
1811
void AudacityProject::OnTrackMute()
2169
void AudacityProject::OnExportMix()
2183
void AudacityProject::OnExport()
2171
::ExportPCM(this, false, 0.0, mTracks->GetEndTime());
2187
e.Process(this, false, 0.0, mTracks->GetEndTime());
2174
2190
void AudacityProject::OnExportSelection()
2176
::ExportPCM(this, true, mViewInfo.sel0, mViewInfo.sel1);
2179
void AudacityProject::OnExportMP3Mix()
2181
::ExportCompressed(this, wxT("MP3"), false, 0.0, mTracks->GetEndTime());
2184
void AudacityProject::OnExportMP3Selection()
2186
::ExportCompressed(this, wxT("MP3"), true, mViewInfo.sel0, mViewInfo.sel1);
2189
void AudacityProject::OnExportMP2Mix()
2191
::ExportCompressed(this, wxT("MP2"), false, 0.0, mTracks->GetEndTime());
2194
void AudacityProject::OnExportMP2Selection()
2196
::ExportCompressed(this, wxT("MP2"), true, mViewInfo.sel0, mViewInfo.sel1);
2199
void AudacityProject::OnExportOggMix()
2201
::ExportCompressed(this, wxT("OGG"), false, 0.0, mTracks->GetEndTime());
2204
void AudacityProject::OnExportFLACMix()
2206
::ExportCompressed(this, wxT("FLAC"), false, 0.0, mTracks->GetEndTime());
2209
void AudacityProject::OnExportOggSelection()
2211
::ExportCompressed(this, wxT("OGG"), true, mViewInfo.sel0, mViewInfo.sel1);
2214
void AudacityProject::OnExportFLACSelection()
2216
::ExportCompressed(this, wxT("FLAC"), true, mViewInfo.sel0, mViewInfo.sel1);
2194
e.Process(this, true, mViewInfo.sel0, mViewInfo.sel1);
2219
2197
void AudacityProject::OnExportMultiple()
2221
::ExportMultiple(this);
2199
ExportMultiple em(this);
2224
2204
void AudacityProject::OnPreferences()
2976
void AudacityProject::OnSplitNew()
2978
TrackListIterator iter(mTracks);
2979
Track *n = iter.First();
2982
TrackList newTracks;
2986
if (n->GetSelected()) {
2988
if (n->GetKind() == Track::Wave)
2990
((WaveTrack*)n)->SplitCut(mViewInfo.sel0, mViewInfo.sel1, &dest);
2993
n->Cut(mViewInfo.sel0, mViewInfo.sel1, &dest);
2996
dest->SetChannel(n->GetChannel());
2997
dest->SetTeamed(n->GetTeamed()); // do first
2998
dest->SetLinked(n->GetLinked());
2999
dest->SetName(n->GetName());
3000
dest->SetOffset(wxMax(mViewInfo.sel0, n->GetOffset()));
3001
newTracks.Add(dest);
3007
TrackListIterator nIter(&newTracks);
3014
PushState(_("Split to new track"), _("Split New"));
2988
3020
void AudacityProject::OnSplitLabelsToTracks()
2990
3022
TrackListIterator iter(mTracks);
3473
3528
wxString path = gPrefs->Read(wxT("/DefaultOpenPath"),::wxGetCwd());
3475
3530
wxString fileName =
3476
wxFileSelector(_("Select a text file containing labels..."),
3479
wxT(".txt"), // Extension
3480
_("Text files (*.txt)|*.txt|All files (*.*)|*.*"),
3531
FileSelector(_("Select a text file containing labels..."),
3534
wxT(".txt"), // Extension
3535
_("Text files (*.txt)|*.txt|All files (*.*)|*.*"),
3484
3539
if (fileName != wxT("")) {
3485
3540
path =::wxPathOnly(fileName);
3896
3952
void AudacityProject::OnNewTimeTrack()
3898
TrackListIterator iter(mTracks);
3899
Track *t = iter.First();
3900
bool alreadyHaveTimeTrack = false;
3904
if (t->GetKind() == Track::Time)
3906
alreadyHaveTimeTrack = true;
3912
if( alreadyHaveTimeTrack )
3915
msg.Printf(_("The version of Audacity you are using does not support multiple time tracks."));
3920
TimeTrack *t = new TimeTrack(mDirManager);
3923
mTracks->AddToHead(t);
3924
t->SetSelected(true);
3926
PushState(_("Created new time track"), _("New Track"));
3929
TrackListIterator iter(mTracks);
3930
for( Track *tr = iter.First(); (tr); tr = iter.Next() )
3931
tr->SetTimeTrack( t );
3935
mTrackPanel->EnsureVisible(t);
3954
if (mTracks->GetTimeTrack()) {
3955
wxMessageBox(_("The version of Audacity you are using does not support multiple time tracks."));
3959
TimeTrack *t = new TimeTrack(mDirManager);
3963
mTracks->AddToHead(t);
3964
t->SetSelected(true);
3966
PushState(_("Created new time track"), _("New Track"));
3969
mTrackPanel->EnsureVisible(t);
3939
3972
void AudacityProject::OnSmartRecord()
4134
4167
int lenPreset = sizeof(preset);
4135
4168
int count = presetsFile.Read(preset, lenPreset);
4136
4169
if (preset[0] != PRESET_FORMAT) {
4137
wxMessageBox(wxString::Format(_("Preset may be invalid or corrupted.\nExpected format %d ... found %d"), PRESET_FORMAT, preset[0]),
4138
_("Error opening preset"),
4170
wxMessageBox(wxString::Format(wxT("Preset may be invalid or corrupted.\nExpected format %d ... found %d"), PRESET_FORMAT, preset[0]),
4171
wxT("Error opening preset"),
4139
4172
wxOK | wxCENTRE | wxICON_WARNING, this);