mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
New Track virtual eliminates a track_cast in CommonCommandFlags...
... Also a better name for one of the command flags This allows removal of special mention of TimeTrack
This commit is contained in:
parent
89f572f798
commit
badb1643fa
@ -41,16 +41,16 @@ cycles.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Really means, some track is selected, that isn't a time track
|
// Strong predicate excludes tracks that do not support basic editing.
|
||||||
bool TracksSelectedPred( const AudacityProject &project )
|
bool EditableTracksSelectedPred( const AudacityProject &project )
|
||||||
{
|
{
|
||||||
auto range = TrackList::Get( project ).Selected()
|
auto range = TrackList::Get( project ).Selected()
|
||||||
- []( const Track *pTrack ){
|
- []( const Track *pTrack ){
|
||||||
return track_cast<const TimeTrack*>( pTrack ); };
|
return !pTrack->SupportsBasicEditing(); };
|
||||||
return !range.empty();
|
return !range.empty();
|
||||||
};
|
};
|
||||||
|
|
||||||
// This predicate includes time tracks too.
|
// Weaker predicate.
|
||||||
bool AnyTracksSelectedPred( const AudacityProject &project )
|
bool AnyTracksSelectedPred( const AudacityProject &project )
|
||||||
{
|
{
|
||||||
auto range = TrackList::Get( project ).Selected();
|
auto range = TrackList::Get( project ).Selected();
|
||||||
@ -177,8 +177,8 @@ const ReservedCommandFlag&
|
|||||||
CommandFlagOptions{}.DisableDefaultMessage()
|
CommandFlagOptions{}.DisableDefaultMessage()
|
||||||
}; return flag; }
|
}; return flag; }
|
||||||
const ReservedCommandFlag&
|
const ReservedCommandFlag&
|
||||||
TracksSelectedFlag() { static ReservedCommandFlag flag{
|
EditableTracksSelectedFlag() { static ReservedCommandFlag flag{
|
||||||
TracksSelectedPred, // exclude TimeTracks
|
EditableTracksSelectedPred,
|
||||||
{ []( const TranslatableString &Name ){ return
|
{ []( const TranslatableString &Name ){ return
|
||||||
// i18n-hint: %s will be replaced by the name of an action, such as "Remove Tracks".
|
// 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( Name );
|
XO("\"%s\" requires one or more tracks to be selected.").Format( Name );
|
||||||
@ -186,7 +186,7 @@ const ReservedCommandFlag&
|
|||||||
}; return flag; }
|
}; return flag; }
|
||||||
const ReservedCommandFlag&
|
const ReservedCommandFlag&
|
||||||
AnyTracksSelectedFlag() { static ReservedCommandFlag flag{
|
AnyTracksSelectedFlag() { static ReservedCommandFlag flag{
|
||||||
AnyTracksSelectedPred, // Allow TimeTracks
|
AnyTracksSelectedPred,
|
||||||
{ []( const TranslatableString &Name ){ return
|
{ []( const TranslatableString &Name ){ return
|
||||||
// i18n-hint: %s will be replaced by the name of an action, such as "Remove Tracks".
|
// 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( Name );
|
XO("\"%s\" requires one or more tracks to be selected.").Format( Name );
|
||||||
|
@ -15,7 +15,7 @@ Paul Licameli split from Menus.cpp
|
|||||||
|
|
||||||
#include "commands/CommandFlag.h"
|
#include "commands/CommandFlag.h"
|
||||||
|
|
||||||
bool TracksSelectedPred( const AudacityProject &project );
|
bool EditableTracksSelectedPred( const AudacityProject &project );
|
||||||
bool AudioIOBusyPred( const AudacityProject &project );
|
bool AudioIOBusyPred( const AudacityProject &project );
|
||||||
bool TimeSelectedPred( const AudacityProject &project );
|
bool TimeSelectedPred( const AudacityProject &project );
|
||||||
extern const CommandFlagOptions &cutCopyOptions();
|
extern const CommandFlagOptions &cutCopyOptions();
|
||||||
@ -27,7 +27,7 @@ extern AUDACITY_DLL_API const ReservedCommandFlag
|
|||||||
&TimeSelectedFlag(), // This is equivalent to check if there is a valid selection, so it's used for Zoom to Selection too
|
&TimeSelectedFlag(), // This is equivalent to check if there is a valid selection, so it's used for Zoom to Selection too
|
||||||
&WaveTracksSelectedFlag(),
|
&WaveTracksSelectedFlag(),
|
||||||
&TracksExistFlag(),
|
&TracksExistFlag(),
|
||||||
&TracksSelectedFlag(),
|
&EditableTracksSelectedFlag(),
|
||||||
&AnyTracksSelectedFlag(),
|
&AnyTracksSelectedFlag(),
|
||||||
&TrackPanelHasFocus(); //lll
|
&TrackPanelHasFocus(); //lll
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ void SelectAllIfNone( AudacityProject &project )
|
|||||||
{
|
{
|
||||||
auto &viewInfo = ViewInfo::Get( project );
|
auto &viewInfo = ViewInfo::Get( project );
|
||||||
auto flags = MenuManager::Get( project ).GetUpdateFlags();
|
auto flags = MenuManager::Get( project ).GetUpdateFlags();
|
||||||
if((flags & TracksSelectedFlag()).none() ||
|
if((flags & EditableTracksSelectedFlag()).none() ||
|
||||||
viewInfo.selectedRegion.isPoint())
|
viewInfo.selectedRegion.isPoint())
|
||||||
DoSelectAllAudio( project );
|
DoSelectAllAudio( project );
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ bool SelectAllIfNoneAndAllowed( AudacityProject &project )
|
|||||||
auto &viewInfo = ViewInfo::Get( project );
|
auto &viewInfo = ViewInfo::Get( project );
|
||||||
auto flags = MenuManager::Get( project ).GetUpdateFlags();
|
auto flags = MenuManager::Get( project ).GetUpdateFlags();
|
||||||
|
|
||||||
if((flags & TracksSelectedFlag()).none() ||
|
if((flags & EditableTracksSelectedFlag()).none() ||
|
||||||
viewInfo.selectedRegion.isPoint()) {
|
viewInfo.selectedRegion.isPoint()) {
|
||||||
if (!allowed) {
|
if (!allowed) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -131,6 +131,11 @@ void TimeTrack::SetRangeUpper(double upper)
|
|||||||
mEnvelope->SetRangeUpper( upper );
|
mEnvelope->SetRangeUpper( upper );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TimeTrack::SupportsBasicEditing() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Track::Holder TimeTrack::Cut( double t0, double t1 )
|
Track::Holder TimeTrack::Cut( double t0, double t1 )
|
||||||
{
|
{
|
||||||
auto result = Copy( t0, t1, false );
|
auto result = Copy( t0, t1, false );
|
||||||
|
@ -40,6 +40,8 @@ class TimeTrack final : public Track {
|
|||||||
virtual ~TimeTrack();
|
virtual ~TimeTrack();
|
||||||
|
|
||||||
|
|
||||||
|
bool SupportsBasicEditing() const override;
|
||||||
|
|
||||||
Holder Cut( double t0, double t1 ) override;
|
Holder Cut( double t0, double t1 ) override;
|
||||||
Holder Copy( double t0, double t1, bool forClipboard ) const override;
|
Holder Copy( double t0, double t1, bool forClipboard ) const override;
|
||||||
void Clear(double t0, double t1) override;
|
void Clear(double t0, double t1) override;
|
||||||
|
@ -1224,6 +1224,11 @@ std::shared_ptr<const Track> Track::SubstituteOriginalTrack() const
|
|||||||
return SharedPointer();
|
return SharedPointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Track::SupportsBasicEditing() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
auto Track::GetIntervals() const -> ConstIntervals
|
auto Track::GetIntervals() const -> ConstIntervals
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
|
@ -318,6 +318,9 @@ class AUDACITY_DLL_API Track /* not final */
|
|||||||
using ConstInterval = ConstTrackInterval;
|
using ConstInterval = ConstTrackInterval;
|
||||||
using ConstIntervals = std::vector< ConstInterval >;
|
using ConstIntervals = std::vector< ConstInterval >;
|
||||||
|
|
||||||
|
//! Whether this track type implements cut-copy-paste; by default, true
|
||||||
|
virtual bool SupportsBasicEditing() const;
|
||||||
|
|
||||||
//! Report times on the track where important intervals begin and end, for UI to snap to
|
//! Report times on the track where important intervals begin and end, for UI to snap to
|
||||||
/*!
|
/*!
|
||||||
Some intervals may be empty, and no ordering of the intervals is assumed.
|
Some intervals may be empty, and no ordering of the intervals is assumed.
|
||||||
|
@ -1004,7 +1004,7 @@ static const ReservedCommandFlag
|
|||||||
if (
|
if (
|
||||||
TimeSelectedPred( project )
|
TimeSelectedPred( project )
|
||||||
&&
|
&&
|
||||||
TracksSelectedPred( project )
|
EditableTracksSelectedPred( project )
|
||||||
)
|
)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -1020,7 +1020,7 @@ BaseItemSharedPtr EditMenu()
|
|||||||
using Options = CommandManager::Options;
|
using Options = CommandManager::Options;
|
||||||
|
|
||||||
static const auto NotBusyTimeAndTracksFlags =
|
static const auto NotBusyTimeAndTracksFlags =
|
||||||
AudioIONotBusyFlag() | TimeSelectedFlag() | TracksSelectedFlag();
|
AudioIONotBusyFlag() | TimeSelectedFlag() | EditableTracksSelectedFlag();
|
||||||
|
|
||||||
// The default shortcut key for Redo is different on different platforms.
|
// The default shortcut key for Redo is different on different platforms.
|
||||||
static constexpr auto redoKey =
|
static constexpr auto redoKey =
|
||||||
@ -1065,7 +1065,7 @@ BaseItemSharedPtr EditMenu()
|
|||||||
AudioIONotBusyFlag() | CutCopyAvailableFlag() | NoAutoSelect(),
|
AudioIONotBusyFlag() | CutCopyAvailableFlag() | NoAutoSelect(),
|
||||||
wxT("Ctrl+X") ),
|
wxT("Ctrl+X") ),
|
||||||
Command( wxT("Delete"), XXO("&Delete"), FN(OnDelete),
|
Command( wxT("Delete"), XXO("&Delete"), FN(OnDelete),
|
||||||
AudioIONotBusyFlag() | TracksSelectedFlag() | TimeSelectedFlag() | NoAutoSelect(),
|
AudioIONotBusyFlag() | EditableTracksSelectedFlag() | TimeSelectedFlag() | NoAutoSelect(),
|
||||||
wxT("Ctrl+K") ),
|
wxT("Ctrl+K") ),
|
||||||
/* i18n-hint: (verb)*/
|
/* i18n-hint: (verb)*/
|
||||||
Command( wxT("Copy"), XXO("&Copy"), FN(OnCopy),
|
Command( wxT("Copy"), XXO("&Copy"), FN(OnCopy),
|
||||||
@ -1160,7 +1160,7 @@ BaseItemSharedPtr ExtraEditMenu()
|
|||||||
{
|
{
|
||||||
using Options = CommandManager::Options;
|
using Options = CommandManager::Options;
|
||||||
static const auto flags =
|
static const auto flags =
|
||||||
AudioIONotBusyFlag() | TracksSelectedFlag() | TimeSelectedFlag();
|
AudioIONotBusyFlag() | EditableTracksSelectedFlag() | TimeSelectedFlag();
|
||||||
static BaseItemSharedPtr menu{
|
static BaseItemSharedPtr menu{
|
||||||
( FinderScope{ findCommandHandler },
|
( FinderScope{ findCommandHandler },
|
||||||
Menu( wxT("Edit"), XXO("&Edit"),
|
Menu( wxT("Edit"), XXO("&Edit"),
|
||||||
@ -1184,7 +1184,7 @@ auto selectAll = []( AudacityProject &project, CommandFlag flagsRqd ){
|
|||||||
|
|
||||||
RegisteredMenuItemEnabler selectTracks{{
|
RegisteredMenuItemEnabler selectTracks{{
|
||||||
[]{ return TracksExistFlag(); },
|
[]{ return TracksExistFlag(); },
|
||||||
[]{ return TracksSelectedFlag(); },
|
[]{ return EditableTracksSelectedFlag(); },
|
||||||
canSelectAll,
|
canSelectAll,
|
||||||
selectAll
|
selectAll
|
||||||
}};
|
}};
|
||||||
|
@ -1059,7 +1059,7 @@ BaseItemSharedPtr SelectMenu()
|
|||||||
,
|
,
|
||||||
Command( wxT("SelSyncLockTracks"), XXO("In All &Sync-Locked Tracks"),
|
Command( wxT("SelSyncLockTracks"), XXO("In All &Sync-Locked Tracks"),
|
||||||
FN(OnSelectSyncLockSel),
|
FN(OnSelectSyncLockSel),
|
||||||
TracksSelectedFlag() | IsSyncLockedFlag(),
|
EditableTracksSelectedFlag() | IsSyncLockedFlag(),
|
||||||
Options{ wxT("Ctrl+Shift+Y"), XO("Select Sync-Locked") } )
|
Options{ wxT("Ctrl+Shift+Y"), XO("Select Sync-Locked") } )
|
||||||
#endif
|
#endif
|
||||||
),
|
),
|
||||||
@ -1131,7 +1131,7 @@ BaseItemSharedPtr SelectMenu()
|
|||||||
|
|
||||||
Section( "",
|
Section( "",
|
||||||
Command( wxT("ZeroCross"), XXO("At &Zero Crossings"),
|
Command( wxT("ZeroCross"), XXO("At &Zero Crossings"),
|
||||||
FN(OnZeroCrossing), TracksSelectedFlag(),
|
FN(OnZeroCrossing), EditableTracksSelectedFlag(),
|
||||||
Options{ wxT("Z"), XO("Select Zero Crossing") } )
|
Options{ wxT("Z"), XO("Select Zero Crossing") } )
|
||||||
)
|
)
|
||||||
) ) };
|
) ) };
|
||||||
@ -1216,11 +1216,11 @@ BaseItemSharedPtr CursorMenu()
|
|||||||
|
|
||||||
Command( wxT("CursTrackStart"), XXO("Track &Start"),
|
Command( wxT("CursTrackStart"), XXO("Track &Start"),
|
||||||
FN(OnCursorTrackStart),
|
FN(OnCursorTrackStart),
|
||||||
TracksSelectedFlag(),
|
EditableTracksSelectedFlag(),
|
||||||
Options{ wxT("J"), XO("Cursor to Track Start") } ),
|
Options{ wxT("J"), XO("Cursor to Track Start") } ),
|
||||||
Command( wxT("CursTrackEnd"), XXO("Track &End"),
|
Command( wxT("CursTrackEnd"), XXO("Track &End"),
|
||||||
FN(OnCursorTrackEnd),
|
FN(OnCursorTrackEnd),
|
||||||
TracksSelectedFlag(),
|
EditableTracksSelectedFlag(),
|
||||||
Options{ wxT("K"), XO("Cursor to Track End") } ),
|
Options{ wxT("K"), XO("Cursor to Track End") } ),
|
||||||
|
|
||||||
Command( wxT("CursProjectStart"), XXO("&Project Start"),
|
Command( wxT("CursProjectStart"), XXO("&Project Start"),
|
||||||
|
@ -1356,9 +1356,9 @@ BaseItemSharedPtr TracksMenu()
|
|||||||
Command( wxT("UnmuteAllTracks"), XXO("&Unmute All Tracks"),
|
Command( wxT("UnmuteAllTracks"), XXO("&Unmute All Tracks"),
|
||||||
FN(OnUnmuteAllTracks), TracksExistFlag(), wxT("Ctrl+Shift+U") ),
|
FN(OnUnmuteAllTracks), TracksExistFlag(), wxT("Ctrl+Shift+U") ),
|
||||||
Command( wxT("MuteTracks"), XXO("Mut&e Tracks"),
|
Command( wxT("MuteTracks"), XXO("Mut&e Tracks"),
|
||||||
FN(OnMuteSelectedTracks), TracksSelectedFlag(), wxT("Ctrl+Alt+U") ),
|
FN(OnMuteSelectedTracks), EditableTracksSelectedFlag(), wxT("Ctrl+Alt+U") ),
|
||||||
Command( wxT("UnmuteTracks"), XXO("U&nmute Tracks"),
|
Command( wxT("UnmuteTracks"), XXO("U&nmute Tracks"),
|
||||||
FN(OnUnmuteSelectedTracks), TracksSelectedFlag(), wxT("Ctrl+Alt+Shift+U") )
|
FN(OnUnmuteSelectedTracks), EditableTracksSelectedFlag(), wxT("Ctrl+Alt+Shift+U") )
|
||||||
),
|
),
|
||||||
|
|
||||||
Menu( wxT("Pan"), XXO("&Pan"),
|
Menu( wxT("Pan"), XXO("&Pan"),
|
||||||
@ -1367,13 +1367,13 @@ BaseItemSharedPtr TracksMenu()
|
|||||||
// in the project could very easily be lost unless we
|
// in the project could very easily be lost unless we
|
||||||
// require the tracks to be selected.
|
// require the tracks to be selected.
|
||||||
Command( wxT("PanLeft"), XXO("&Left"), FN(OnPanLeft),
|
Command( wxT("PanLeft"), XXO("&Left"), FN(OnPanLeft),
|
||||||
TracksSelectedFlag(),
|
EditableTracksSelectedFlag(),
|
||||||
Options{}.LongName( XO("Pan Left") ) ),
|
Options{}.LongName( XO("Pan Left") ) ),
|
||||||
Command( wxT("PanRight"), XXO("&Right"), FN(OnPanRight),
|
Command( wxT("PanRight"), XXO("&Right"), FN(OnPanRight),
|
||||||
TracksSelectedFlag(),
|
EditableTracksSelectedFlag(),
|
||||||
Options{}.LongName( XO("Pan Right") ) ),
|
Options{}.LongName( XO("Pan Right") ) ),
|
||||||
Command( wxT("PanCenter"), XXO("&Center"), FN(OnPanCenter),
|
Command( wxT("PanCenter"), XXO("&Center"), FN(OnPanCenter),
|
||||||
TracksSelectedFlag(),
|
EditableTracksSelectedFlag(),
|
||||||
Options{}.LongName( XO("Pan Center") ) )
|
Options{}.LongName( XO("Pan Center") ) )
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
@ -1387,14 +1387,14 @@ BaseItemSharedPtr TracksMenu()
|
|||||||
{ wxT("EndToEnd"), XXO("&Align End to End") },
|
{ wxT("EndToEnd"), XXO("&Align End to End") },
|
||||||
{ wxT("Together"), XXO("Align &Together") },
|
{ wxT("Together"), XXO("Align &Together") },
|
||||||
},
|
},
|
||||||
FN(OnAlignNoSync), AudioIONotBusyFlag() | TracksSelectedFlag())
|
FN(OnAlignNoSync), AudioIONotBusyFlag() | EditableTracksSelectedFlag())
|
||||||
),
|
),
|
||||||
|
|
||||||
Section( "",
|
Section( "",
|
||||||
// Alignment commands using selection or zero
|
// Alignment commands using selection or zero
|
||||||
CommandGroup(wxT("Align"),
|
CommandGroup(wxT("Align"),
|
||||||
alignLabels(),
|
alignLabels(),
|
||||||
FN(OnAlign), AudioIONotBusyFlag() | TracksSelectedFlag())
|
FN(OnAlign), AudioIONotBusyFlag() | EditableTracksSelectedFlag())
|
||||||
),
|
),
|
||||||
|
|
||||||
Section( "",
|
Section( "",
|
||||||
@ -1411,7 +1411,7 @@ BaseItemSharedPtr TracksMenu()
|
|||||||
// Do we need this sub-menu at all?
|
// Do we need this sub-menu at all?
|
||||||
Menu( wxT("MoveSelectionAndTracks"), XO("Move Sele&ction and Tracks"), {
|
Menu( wxT("MoveSelectionAndTracks"), XO("Move Sele&ction and Tracks"), {
|
||||||
CommandGroup(wxT("AlignMove"), alignLabels(),
|
CommandGroup(wxT("AlignMove"), alignLabels(),
|
||||||
FN(OnAlignMoveSel), AudioIONotBusyFlag() | TracksSelectedFlag()),
|
FN(OnAlignMoveSel), AudioIONotBusyFlag() | EditableTracksSelectedFlag()),
|
||||||
} ),
|
} ),
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user