mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-17 16:40:07 +02:00
Merge ESC key aborts selection drag, restores time, frequency selection, selected tracks
This commit is contained in:
commit
797109d97f
@ -590,6 +590,8 @@ TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id,
|
|||||||
mLastScrubTime = 0;
|
mLastScrubTime = 0;
|
||||||
mLastScrubPosition = 0;
|
mLastScrubPosition = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
mInitialTrackSelection = new std::vector<bool>;
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackPanel::~TrackPanel()
|
TrackPanel::~TrackPanel()
|
||||||
@ -651,6 +653,8 @@ TrackPanel::~TrackPanel()
|
|||||||
#if !wxUSE_ACCESSIBILITY
|
#if !wxUSE_ACCESSIBILITY
|
||||||
delete mAx;
|
delete mAx;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
delete mInitialTrackSelection;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrackPanel::BuildMenus(void)
|
void TrackPanel::BuildMenus(void)
|
||||||
@ -1472,6 +1476,19 @@ void TrackPanel::HandleEscapeKey()
|
|||||||
{
|
{
|
||||||
switch (mMouseCapture)
|
switch (mMouseCapture)
|
||||||
{
|
{
|
||||||
|
case IsSelecting:
|
||||||
|
{
|
||||||
|
TrackListIterator iter(mTracks);
|
||||||
|
std::vector<bool>::const_iterator
|
||||||
|
it = mInitialTrackSelection->begin(),
|
||||||
|
end = mInitialTrackSelection->end();
|
||||||
|
for (Track *t = iter.First(); t; t = iter.Next()) {
|
||||||
|
wxASSERT(it != end);
|
||||||
|
t->SetSelected(*it++);
|
||||||
|
}
|
||||||
|
mViewInfo->selectedRegion = mInitialSelection;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case IsZooming:
|
case IsZooming:
|
||||||
case IsVZooming:
|
case IsVZooming:
|
||||||
break;
|
break;
|
||||||
@ -2228,14 +2245,39 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event,
|
|||||||
Track * pTrack, wxRect r)
|
Track * pTrack, wxRect r)
|
||||||
{
|
{
|
||||||
Track *rightTrack = NULL;
|
Track *rightTrack = NULL;
|
||||||
bool nextTrackIsLinkFromPTrack = false;
|
|
||||||
mCapturedTrack = pTrack;
|
mCapturedTrack = pTrack;
|
||||||
mCapturedRect = r;
|
mCapturedRect = r;
|
||||||
|
|
||||||
mMouseClickX = event.m_x;
|
mMouseClickX = event.m_x;
|
||||||
mMouseClickY = event.m_y;
|
mMouseClickY = event.m_y;
|
||||||
bool startNewSelection = true;
|
|
||||||
mMouseCapture=IsSelecting;
|
mMouseCapture=IsSelecting;
|
||||||
|
mInitialSelection = mViewInfo->selectedRegion;
|
||||||
|
|
||||||
|
// Save initial state of track selections, also,
|
||||||
|
// if the shift button is down and no track is selected yet,
|
||||||
|
// at least select the track we clicked into.
|
||||||
|
bool isAtLeastOneTrackSelected = false;
|
||||||
|
mInitialTrackSelection->clear();
|
||||||
|
{
|
||||||
|
bool nextTrackIsLinkFromPTrack = false;
|
||||||
|
TrackListIterator iter(mTracks);
|
||||||
|
for (Track *t = iter.First(); t; t = iter.Next()) {
|
||||||
|
const bool isSelected = t->GetSelected();
|
||||||
|
mInitialTrackSelection->push_back(isSelected);
|
||||||
|
if (isSelected) {
|
||||||
|
isAtLeastOneTrackSelected = true;
|
||||||
|
}
|
||||||
|
if (!isAtLeastOneTrackSelected) {
|
||||||
|
if (t == pTrack && t->GetLinked()) {
|
||||||
|
nextTrackIsLinkFromPTrack = true;
|
||||||
|
}
|
||||||
|
else if (nextTrackIsLinkFromPTrack) {
|
||||||
|
rightTrack = t;
|
||||||
|
nextTrackIsLinkFromPTrack = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// We create a new snap manager in case any snap-points have changed
|
// We create a new snap manager in case any snap-points have changed
|
||||||
if (mSnapManager)
|
if (mSnapManager)
|
||||||
@ -2264,23 +2306,6 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event,
|
|||||||
&& !stretch
|
&& !stretch
|
||||||
#endif
|
#endif
|
||||||
) {
|
) {
|
||||||
// If the shift button is down and no track is selected yet,
|
|
||||||
// at least select the track we clicked into.
|
|
||||||
bool isAtLeastOneTrackSelected = false;
|
|
||||||
|
|
||||||
TrackListIterator iter(mTracks);
|
|
||||||
for (Track *t = iter.First(); t; t = iter.Next()) {
|
|
||||||
if (t->GetSelected()) {
|
|
||||||
isAtLeastOneTrackSelected = true;
|
|
||||||
break;
|
|
||||||
} else if (t == pTrack && t->GetLinked()) {
|
|
||||||
nextTrackIsLinkFromPTrack = true;
|
|
||||||
} else if (nextTrackIsLinkFromPTrack) {
|
|
||||||
rightTrack = t;
|
|
||||||
nextTrackIsLinkFromPTrack = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isAtLeastOneTrackSelected) {
|
if (!isAtLeastOneTrackSelected) {
|
||||||
pTrack->SetSelected(true);
|
pTrack->SetSelected(true);
|
||||||
if (rightTrack)
|
if (rightTrack)
|
||||||
@ -2351,10 +2376,15 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event,
|
|||||||
mLastScrubPosition = PositionToTime(event.m_x, GetLeftOffset());
|
mLastScrubPosition = PositionToTime(event.m_x, GetLeftOffset());
|
||||||
#else
|
#else
|
||||||
StartOrJumpPlayback(event);
|
StartOrJumpPlayback(event);
|
||||||
|
|
||||||
|
// Not starting a drag
|
||||||
|
SetCapturedTrack(NULL, IsUncaptured);
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Make sure you are within the selected track
|
//Make sure you are within the selected track
|
||||||
|
bool startNewSelection = true;
|
||||||
if (pTrack && pTrack->GetSelected()) {
|
if (pTrack && pTrack->GetSelected()) {
|
||||||
// Adjusting selection edges can be turned off in the
|
// Adjusting selection edges can be turned off in the
|
||||||
// preferences now
|
// preferences now
|
||||||
@ -2438,9 +2468,12 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event,
|
|||||||
|
|
||||||
// IF the user clicked a label, THEN select all other tracks by Label
|
// IF the user clicked a label, THEN select all other tracks by Label
|
||||||
if (lt->IsSelected()) {
|
if (lt->IsSelected()) {
|
||||||
mTracks->Select( lt );
|
mTracks->Select(lt);
|
||||||
SelectTracksByLabel( lt );
|
SelectTracksByLabel( lt );
|
||||||
DisplaySelection();
|
DisplaySelection();
|
||||||
|
|
||||||
|
// Not starting a drag
|
||||||
|
SetCapturedTrack(NULL, IsUncaptured);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#define __AUDACITY_TRACK_PANEL__
|
#define __AUDACITY_TRACK_PANEL__
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include <wx/dcmemory.h>
|
#include <wx/dcmemory.h>
|
||||||
#include <wx/dynarray.h>
|
#include <wx/dynarray.h>
|
||||||
@ -573,6 +574,10 @@ protected:
|
|||||||
|
|
||||||
wxLongLong mLastSelectionAdjustment;
|
wxLongLong mLastSelectionAdjustment;
|
||||||
|
|
||||||
|
SelectedRegion mInitialSelection;
|
||||||
|
// Extra indirection to avoid the stupid MSW compiler warnings! Rrrr!
|
||||||
|
std::vector<bool> *mInitialTrackSelection;
|
||||||
|
|
||||||
bool mSelStartValid;
|
bool mSelStartValid;
|
||||||
double mSelStart;
|
double mSelStart;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user