1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-22 15:20:15 +02:00

null check uses of CommonTrackPanelCell::FindTrack

This commit is contained in:
Paul Licameli 2017-06-23 18:08:15 -04:00
parent 28b40e02fb
commit 58fea6d520
7 changed files with 38 additions and 27 deletions

View File

@ -151,7 +151,7 @@ HitTestResult NoteTrackControls::HitTest
const wxRect &rect = evt.rect; const wxRect &rect = evt.rect;
if (event.ButtonDown() || event.ButtonDClick()) { if (event.ButtonDown() || event.ButtonDClick()) {
auto track = FindTrack(); auto track = FindTrack();
if (track->GetKind() == Track::Note) { if (track && track->GetKind() == Track::Note) {
HitTestResult result; HitTestResult result;
if (NULL != if (NULL !=
(result = MuteButtonHandle::HitTest (result = MuteButtonHandle::HitTest

View File

@ -61,7 +61,7 @@ HitTestResult WaveTrackControls::HitTest
const wxRect &rect = evt.rect; const wxRect &rect = evt.rect;
if (event.Button(wxMOUSE_BTN_LEFT)) { if (event.Button(wxMOUSE_BTN_LEFT)) {
auto track = FindTrack(); auto track = FindTrack();
if (track->GetKind() == Track::Wave) { if (track && track->GetKind() == Track::Wave) {
HitTestResult result; HitTestResult result;
if (NULL != if (NULL !=
(result = MuteButtonHandle::HitTest (result = MuteButtonHandle::HitTest

View File

@ -675,6 +675,8 @@ unsigned WaveTrackVRulerControls::HandleWheelRotation
evt.event.Skip(false); evt.event.Skip(false);
Track *const pTrack = FindTrack(); Track *const pTrack = FindTrack();
if (!pTrack)
return RefreshNone;
wxASSERT(pTrack->GetKind() == Track::Wave); wxASSERT(pTrack->GetKind() == Track::Wave);
auto steps = evt.steps; auto steps = evt.steps;

View File

@ -38,15 +38,19 @@ HitTestPreview ButtonHandle::HitPreview()
UIHandle::Result ButtonHandle::Click UIHandle::Result ButtonHandle::Click
(const TrackPanelMouseEvent &evt, AudacityProject *) (const TrackPanelMouseEvent &evt, AudacityProject *)
{ {
const wxMouseEvent &event = evt.event;
using namespace RefreshCode; using namespace RefreshCode;
auto pTrack = Track::Pointer(
static_cast<TrackControls*>(evt.pCell)->FindTrack() );
if ( !pTrack )
return Cancelled;
const wxMouseEvent &event = evt.event;
if (!event.Button(wxMOUSE_BTN_LEFT)) if (!event.Button(wxMOUSE_BTN_LEFT))
return Cancelled; return Cancelled;
// Come here for left click or double click // Come here for left click or double click
if (mRect.Contains(event.m_x, event.m_y)) { if (mRect.Contains(event.m_x, event.m_y)) {
mpTrack = Track::Pointer( mpTrack = pTrack;
static_cast<TrackControls*>(evt.pCell)->FindTrack() );
TrackControls::gCaptureState = mDragCode; TrackControls::gCaptureState = mDragCode;
// Toggle visible button state // Toggle visible button state
return RefreshCell; return RefreshCell;

View File

@ -808,35 +808,35 @@ UIHandle::Result SelectHandle::Drag
return RefreshNone; return RefreshNone;
} }
Track *clickedTrack = if ( auto clickedTrack =
static_cast<CommonTrackPanelCell*>(evt.pCell)->FindTrack(); static_cast<CommonTrackPanelCell*>(evt.pCell)->FindTrack() ) {
// Handle which tracks are selected
// Handle which tracks are selected Track *sTrack = pTrack.get();
Track *sTrack = pTrack.get(); Track *eTrack = clickedTrack;
Track *eTrack = clickedTrack; auto trackList = pProject->GetTracks();
auto trackList = pProject->GetTracks(); auto pMixerBoard = pProject->GetMixerBoard();
auto pMixerBoard = pProject->GetMixerBoard(); if ( sTrack && eTrack && !event.ControlDown() ) {
if ( sTrack && eTrack && !event.ControlDown() ) { auto &selectionState = pProject->GetSelectionState();
auto &selectionState = pProject->GetSelectionState(); selectionState.SelectRangeOfTracks
selectionState.SelectRangeOfTracks
( *trackList, *sTrack, *eTrack, pMixerBoard ); ( *trackList, *sTrack, *eTrack, pMixerBoard );
} }
#ifdef EXPERIMENTAL_SPECTRAL_EDITING #ifdef EXPERIMENTAL_SPECTRAL_EDITING
#ifndef SPECTRAL_EDITING_ESC_KEY #ifndef SPECTRAL_EDITING_ESC_KEY
if (mFreqSelMode == FREQ_SEL_SNAPPING_CENTER && if (mFreqSelMode == FREQ_SEL_SNAPPING_CENTER &&
!viewInfo.selectedRegion.isPoint()) !viewInfo.selectedRegion.isPoint())
MoveSnappingFreqSelection MoveSnappingFreqSelection
(pProject, viewInfo, y, mRect.y, mRect.height, pTrack.get()); (pProject, viewInfo, y, mRect.y, mRect.height, pTrack.get());
else else
#endif #endif
if (mFreqSelTrack.lock() == pTrack) if (mFreqSelTrack.lock() == pTrack)
AdjustFreqSelection( AdjustFreqSelection(
static_cast<WaveTrack*>(pTrack.get()), static_cast<WaveTrack*>(pTrack.get()),
viewInfo, y, mRect.y, mRect.height); viewInfo, y, mRect.y, mRect.height);
#endif #endif
AdjustSelection(viewInfo, x, mRect.x, clickedTrack); AdjustSelection(viewInfo, x, mRect.x, clickedTrack);
}
return RefreshNone return RefreshNone

View File

@ -203,6 +203,9 @@ unsigned TrackControls::DoContextMenu
TrackInfo::GetTitleBarRect(rect, buttonRect); TrackInfo::GetTitleBarRect(rect, buttonRect);
auto track = FindTrack(); auto track = FindTrack();
if (!track)
return RefreshCode::RefreshNone;
InitMenuData data{ track, pParent, RefreshCode::RefreshNone }; InitMenuData data{ track, pParent, RefreshCode::RefreshNone };
const auto pTable = &TrackMenuTable::Instance(); const auto pTable = &TrackMenuTable::Instance();

View File

@ -96,6 +96,8 @@ UIHandle::Result TrackSelectHandle::Click
TrackControls *const pControls = static_cast<TrackControls*>(evt.pCell); TrackControls *const pControls = static_cast<TrackControls*>(evt.pCell);
Track *const pTrack = pControls->FindTrack(); Track *const pTrack = pControls->FindTrack();
if (!pTrack)
return Cancelled;
TrackPanel *const trackPanel = pProject->GetTrackPanel(); TrackPanel *const trackPanel = pProject->GetTrackPanel();
const bool unsafe = pProject->IsAudioActive(); const bool unsafe = pProject->IsAudioActive();