diff --git a/src/BatchCommands.cpp b/src/BatchCommands.cpp index 7f2e6e1eb..cee980dca 100644 --- a/src/BatchCommands.cpp +++ b/src/BatchCommands.cpp @@ -549,11 +549,19 @@ bool MacroCommands::ApplyEffectCommand( AudacityProject *project = &mProject; - // FIXME: for later versions may want to not select-all in batch mode. - // IF nothing selected, THEN select everything + // IF nothing selected, THEN select everything depending + // on preferences setting. // (most effects require that you have something selected). if( plug->GetPluginType() != PluginTypeAudacityCommand ) - SelectUtilities::SelectAllIfNone( *project ); + { + if( !SelectUtilities::SelectAllIfNoneAndAllowed( *project ) ) + { + AudacityMessageBox( + // i18n-hint: %s will be replaced by the name of an action, such as "Remove Tracks". + XO("\"%s\" requires one or more tracks to be selected.").Format(friendlyCommand)); + return false; + } + } bool res = false; diff --git a/src/SelectUtilities.cpp b/src/SelectUtilities.cpp index a382a758f..db0db6037 100644 --- a/src/SelectUtilities.cpp +++ b/src/SelectUtilities.cpp @@ -90,6 +90,24 @@ void SelectAllIfNone( AudacityProject &project ) DoSelectAllAudio( project ); } +// Select the full time range, if no time range is selected and +// selecting is allowed. Returns "false" selecting not allowed. +bool SelectAllIfNoneAndAllowed( AudacityProject &project ) +{ + auto allowed = gPrefs->ReadBool(wxT("/GUI/SelectAllOnNone"), false); + auto &viewInfo = ViewInfo::Get( project ); + auto flags = MenuManager::Get( project ).GetUpdateFlags(); + + if((flags & TracksSelectedFlag()).none() || + viewInfo.selectedRegion.isPoint()) { + if (!allowed) { + return false; + } + DoSelectAllAudio( project ); + } + return true; +} + void DoListSelection (AudacityProject &project, Track *t, bool shift, bool ctrl, bool modifyState) { diff --git a/src/SelectUtilities.h b/src/SelectUtilities.h index 920537e4e..06ab7f56e 100644 --- a/src/SelectUtilities.h +++ b/src/SelectUtilities.h @@ -20,6 +20,7 @@ namespace SelectUtilities { void DoSelectTimeAndTracks( AudacityProject &project, bool bAllTime, bool bAllTracks); void SelectAllIfNone( AudacityProject &project ); +bool SelectAllIfNoneAndAllowed( AudacityProject &project ); void SelectNone( AudacityProject &project ); void DoListSelection( AudacityProject &project, Track *t, diff --git a/src/commands/ImportExportCommands.cpp b/src/commands/ImportExportCommands.cpp index 287d33c0b..9e7a4e216 100644 --- a/src/commands/ImportExportCommands.cpp +++ b/src/commands/ImportExportCommands.cpp @@ -21,8 +21,10 @@ #include "../ProjectFileManager.h" #include "../ViewInfo.h" #include "../export/Export.h" +#include "../SelectUtilities.h" #include "../Shuttle.h" #include "../ShuttleGui.h" +#include "../Track.h" #include "../wxFileNameWrapper.h" #include "CommandContext.h" @@ -47,9 +49,18 @@ void ImportCommand::PopulateOrExchange(ShuttleGui & S) S.EndMultiColumn(); } -bool ImportCommand::Apply(const CommandContext & context){ - return ProjectFileManager::Get( context.project ) +bool ImportCommand::Apply(const CommandContext & context) +{ + bool wasEmpty = TrackList::Get( context.project ).Any().empty(); + bool success = ProjectFileManager::Get( context.project ) .Import(mFileName, false); + + if (success && wasEmpty) + { + SelectUtilities::SelectAllIfNone( context.project ); + } + + return success; }