mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-29 16:53:51 +01:00
Manage TrackPanelResizerCell by shared_ptr, no singleton
This commit is contained in:
@@ -38,6 +38,7 @@ class LabelTrack;
|
|||||||
class TimeTrack;
|
class TimeTrack;
|
||||||
class TrackControls;
|
class TrackControls;
|
||||||
class TrackVRulerControls;
|
class TrackVRulerControls;
|
||||||
|
class TrackPanelResizerCell;
|
||||||
class WaveTrack;
|
class WaveTrack;
|
||||||
class NoteTrack;
|
class NoteTrack;
|
||||||
class AudacityProject;
|
class AudacityProject;
|
||||||
@@ -144,6 +145,10 @@ class AUDACITY_DLL_API Track /* not final */
|
|||||||
// mouse actions for the vertical ruler
|
// mouse actions for the vertical ruler
|
||||||
std::shared_ptr<TrackPanelCell> GetVRulerControl();
|
std::shared_ptr<TrackPanelCell> GetVRulerControl();
|
||||||
|
|
||||||
|
// Return another, associated TrackPanelCell object that implements the
|
||||||
|
// click and drag to resize
|
||||||
|
std::shared_ptr<TrackPanelCell> GetResizer();
|
||||||
|
|
||||||
// This just returns a constant and can be overriden by subclasses
|
// This just returns a constant and can be overriden by subclasses
|
||||||
// to specify a different height for the case that the track is minimized.
|
// to specify a different height for the case that the track is minimized.
|
||||||
virtual int GetMinimizedHeight() const;
|
virtual int GetMinimizedHeight() const;
|
||||||
@@ -302,6 +307,7 @@ protected:
|
|||||||
// These hold the controls:
|
// These hold the controls:
|
||||||
std::shared_ptr<TrackControls> mpControls;
|
std::shared_ptr<TrackControls> mpControls;
|
||||||
std::shared_ptr<TrackVRulerControls> mpVRulerContols;
|
std::shared_ptr<TrackVRulerControls> mpVRulerContols;
|
||||||
|
std::shared_ptr<TrackPanelResizerCell> mpResizer;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AUDACITY_DLL_API AudioTrack /* not final */ : public Track
|
class AUDACITY_DLL_API AudioTrack /* not final */ : public Track
|
||||||
|
|||||||
@@ -3118,9 +3118,7 @@ TrackPanelCellIterator &TrackPanelCellIterator::operator++ ()
|
|||||||
mpCell = mpTrack->GetVRulerControl().get();
|
mpCell = mpTrack->GetVRulerControl().get();
|
||||||
break;
|
break;
|
||||||
case CellType::Resizer: {
|
case CellType::Resizer: {
|
||||||
auto instance = &TrackPanelResizerCell::Instance();
|
mpCell = mpTrack->GetResizer().get();
|
||||||
instance->mpTrack = mpTrack;
|
|
||||||
mpCell = instance;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -384,11 +384,9 @@ UIHandle::Result TrackPanelResizeHandle::Cancel(AudacityProject *pProject)
|
|||||||
return RefreshCode::RefreshAll;
|
return RefreshCode::RefreshAll;
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackPanelResizerCell &TrackPanelResizerCell::Instance()
|
TrackPanelResizerCell::TrackPanelResizerCell( std::shared_ptr<Track> pTrack )
|
||||||
{
|
: mpTrack{ pTrack }
|
||||||
static TrackPanelResizerCell instance;
|
{}
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
HitTestResult TrackPanelResizerCell::HitTest
|
HitTestResult TrackPanelResizerCell::HitTest
|
||||||
(const TrackPanelMouseEvent &event, const AudacityProject *pProject)
|
(const TrackPanelMouseEvent &event, const AudacityProject *pProject)
|
||||||
|
|||||||
@@ -68,20 +68,21 @@ private:
|
|||||||
|
|
||||||
class TrackPanelResizerCell : public CommonTrackPanelCell
|
class TrackPanelResizerCell : public CommonTrackPanelCell
|
||||||
{
|
{
|
||||||
TrackPanelResizerCell() {}
|
|
||||||
TrackPanelResizerCell(const TrackPanelResizerCell&) = delete;
|
TrackPanelResizerCell(const TrackPanelResizerCell&) = delete;
|
||||||
TrackPanelResizerCell &operator= (const TrackPanelResizerCell&) = delete;
|
TrackPanelResizerCell &operator= (const TrackPanelResizerCell&) = delete;
|
||||||
public:
|
public:
|
||||||
static TrackPanelResizerCell &Instance();
|
|
||||||
|
explicit
|
||||||
|
TrackPanelResizerCell( std::shared_ptr<Track> pTrack );
|
||||||
|
|
||||||
HitTestResult HitTest
|
HitTestResult HitTest
|
||||||
(const TrackPanelMouseEvent &event,
|
(const TrackPanelMouseEvent &event,
|
||||||
const AudacityProject *pProject) override;
|
const AudacityProject *pProject) override;
|
||||||
|
|
||||||
Track *FindTrack() override { return mpTrack; };
|
Track *FindTrack() override { return mpTrack.lock().get(); };
|
||||||
private:
|
private:
|
||||||
friend class TrackPanelCellIterator;
|
friend class TrackPanelCellIterator;
|
||||||
Track *mpTrack {};
|
std::weak_ptr<Track> mpTrack;
|
||||||
bool mBetweenTracks {};
|
bool mBetweenTracks {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -74,3 +74,12 @@ std::shared_ptr<TrackPanelCell> Track::GetVRulerControl()
|
|||||||
mpVRulerContols = GetVRulerControls();
|
mpVRulerContols = GetVRulerControls();
|
||||||
return mpVRulerContols;
|
return mpVRulerContols;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "TrackPanelResizeHandle.h"
|
||||||
|
std::shared_ptr<TrackPanelCell> Track::GetResizer()
|
||||||
|
{
|
||||||
|
if (!mpResizer)
|
||||||
|
// create on demand
|
||||||
|
mpResizer = std::make_shared<TrackPanelResizerCell>( Pointer( this ) );
|
||||||
|
return mpResizer;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user