1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-10-21 14:02:57 +02:00

Move functions into new file SelectUtilities.cpp ...

... so that other files do not have link dependency on SelectMenus.cpp

The new file enlarges the big s.c.c. to 24
This commit is contained in:
Paul Licameli
2019-06-21 19:38:38 -04:00
parent fab648e475
commit 02e620d35f
17 changed files with 216 additions and 160 deletions

View File

@@ -0,0 +1,146 @@
/**********************************************************************
Audacity: A Digital Audio Editor
SelectUtilities.cpp
Paul Licameli split from SelectMenus.cpp
**********************************************************************/
#include "SelectUtilities.h"
#include <wx/frame.h>
#include "CommonCommandFlags.h"
#include "Menus.h"
#include "Project.h"
#include "ProjectHistory.h"
#include "ProjectSettings.h"
#include "SelectionState.h"
#include "TrackPanel.h"
#include "ViewInfo.h"
#include "WaveTrack.h"
namespace {
// Temporal selection (not TimeTrack selection)
// potentially for all wave tracks.
void DoSelectTimeAndAudioTracks
(AudacityProject &project, bool bAllTime, bool bAllTracks)
{
auto &tracks = TrackList::Get( project );
auto &trackPanel = TrackPanel::Get( project );
auto &selectedRegion = ViewInfo::Get( project ).selectedRegion;
if( bAllTime )
selectedRegion.setTimes(
tracks.GetMinOffset(), tracks.GetEndTime());
if( bAllTracks ) {
// Unselect all tracks before selecting audio.
for (auto t : tracks.Any())
t->SetSelected(false);
for (auto t : tracks.Any<WaveTrack>())
t->SetSelected(true);
ProjectHistory::Get( project ).ModifyState(false);
trackPanel.Refresh(false);
}
}
}
namespace SelectUtilities {
void DoSelectTimeAndTracks
(AudacityProject &project, bool bAllTime, bool bAllTracks)
{
auto &tracks = TrackList::Get( project );
auto &trackPanel = TrackPanel::Get( project );
auto &selectedRegion = ViewInfo::Get( project ).selectedRegion;
if( bAllTime )
selectedRegion.setTimes(
tracks.GetMinOffset(), tracks.GetEndTime());
if( bAllTracks ) {
for (auto t : tracks.Any())
t->SetSelected(true);
ProjectHistory::Get( project ).ModifyState(false);
trackPanel.Refresh(false);
}
}
void SelectNone( AudacityProject &project )
{
auto &tracks = TrackList::Get( project );
for (auto t : tracks.Any())
t->SetSelected(false);
auto &trackPanel = TrackPanel::Get( project );
trackPanel.Refresh(false);
}
// Select the full time range, if no
// time range is selected.
void SelectAllIfNone( AudacityProject &project )
{
auto &viewInfo = ViewInfo::Get( project );
auto flags = MenuManager::Get( project ).GetUpdateFlags();
if((flags & TracksSelectedFlag).none() ||
viewInfo.selectedRegion.isPoint())
DoSelectAllAudio( project );
}
void DoListSelection
(AudacityProject &project, Track *t, bool shift, bool ctrl, bool modifyState)
{
auto &tracks = TrackList::Get( project );
auto &trackPanel = TrackPanel::Get( project );
auto &selectionState = SelectionState::Get( project );
const auto &settings = ProjectSettings::Get( project );
auto &viewInfo = ViewInfo::Get( project );
auto &window = GetProjectFrame( project );
auto isSyncLocked = settings.IsSyncLocked();
selectionState.HandleListSelection(
tracks, viewInfo, *t,
shift, ctrl, isSyncLocked );
if (! ctrl )
trackPanel.SetFocusedTrack(t);
window.Refresh(false);
if (modifyState)
ProjectHistory::Get( project ).ModifyState(true);
}
void DoSelectAll(AudacityProject &project)
{
DoSelectTimeAndTracks( project, true, true );
}
void DoSelectAllAudio(AudacityProject &project)
{
DoSelectTimeAndAudioTracks( project, true, true );
}
// This function selects all tracks if no tracks selected,
// and all time if no time selected.
// There is an argument for making it just count wave tracks,
// However you could then not select a label and cut it,
// without this function selecting all tracks.
void DoSelectSomething(AudacityProject &project)
{
auto &tracks = TrackList::Get( project );
auto &selectedRegion = ViewInfo::Get( project ).selectedRegion;
bool bTime = selectedRegion.isPoint();
bool bTracks = tracks.Selected().empty();
if( bTime || bTracks )
DoSelectTimeAndTracks( project, bTime, bTracks );
}
}