1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-27 17:48:38 +02:00

TrackPanelResizerCell, also in 1-to-1 with TrackView, now owned by it

This commit is contained in:
Paul Licameli 2019-06-17 23:23:44 -04:00
parent 18b4c01c51
commit b4c7a8ef2a
6 changed files with 39 additions and 17 deletions

View File

@ -38,7 +38,6 @@ class LabelTrack;
class TimeTrack;
class TrackControls;
class TrackView;
class TrackPanelResizerCell;
class WaveTrack;
class NoteTrack;
class AudacityProject;
@ -297,9 +296,6 @@ class AUDACITY_DLL_API Track /* not final */
// 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
// to specify a different height for the case that the track is minimized.
virtual int GetMinimizedHeight() const;
@ -759,7 +755,6 @@ protected:
// These hold the controls:
std::shared_ptr<TrackView> mpView;
std::shared_ptr<TrackControls> mpControls;
std::shared_ptr<TrackPanelResizerCell> mpResizer;
std::weak_ptr<SelectHandle> mSelectHandle;
std::weak_ptr<TimeShiftHandle> mTimeShiftHandle;

View File

@ -101,6 +101,7 @@ is time to refresh some aspect of the screen.
#include "toolbars/ControlToolBar.h"
#include "tracks/ui/TrackControls.h"
#include "tracks/ui/TrackView.h"
#include "tracks/ui/TrackVRulerControls.h"
//This loads the appropriate set of cursors, depending on platform.
@ -2224,7 +2225,8 @@ struct ChannelGroup final : TrackPanelGroup {
channel->SubstitutePendingChangedTrack();
yy += substitute->GetHeight();
refinement.emplace_back(
yy - kSeparatorThickness, channel->GetResizer() );
yy - kSeparatorThickness,
TrackView::Get( *channel ).GetResizer() );
}
}
@ -2262,7 +2264,8 @@ struct ResizingChannelGroup final : TrackPanelGroup {
{ rect.GetTop(),
std::make_shared< LabeledChannelGroup >( mpTrack, mLeftOffset ) },
{ rect.GetTop() + rect.GetHeight() - kSeparatorThickness,
( *TrackList::Channels( mpTrack.get() ).rbegin() )->GetResizer() }
TrackView::Get( **TrackList::Channels( mpTrack.get() ).rbegin() )
.GetResizer() }
} }; }
std::shared_ptr< Track > mpTrack;
wxCoord mLeftOffset;

View File

@ -15,11 +15,13 @@ Paul Licameli split from TrackPanel.cpp
#include "TrackPanelMouseEvent.h"
#include "HitTestResult.h"
#include "tracks/ui/TrackView.h"
#include <wx/mousestate.h>
TrackPanelResizerCell::TrackPanelResizerCell(
const std::shared_ptr<Track> &pTrack )
: CommonTrackCell{ pTrack }
const std::shared_ptr<TrackView> &pView )
: mwView{ pView }
{}
std::vector<UIHandlePtr> TrackPanelResizerCell::HitTest
@ -27,7 +29,7 @@ std::vector<UIHandlePtr> TrackPanelResizerCell::HitTest
{
(void)pProject;// Compiler food
std::vector<UIHandlePtr> results;
auto pTrack = mpTrack.lock();
auto pTrack = FindTrack();
if (pTrack) {
auto result = std::make_shared<TrackPanelResizeHandle>(
pTrack, st.state.m_y );
@ -36,3 +38,11 @@ std::vector<UIHandlePtr> TrackPanelResizerCell::HitTest
}
return results;
}
std::shared_ptr<Track> TrackPanelResizerCell::DoFindTrack()
{
const auto pView = mwView.lock();
if ( pView )
return pView->FindTrack();
return {};
}

View File

@ -14,25 +14,26 @@
#include "tracks/ui/CommonTrackPanelCell.h"
class TrackPanelResizeHandle;
class TrackView;
class TrackPanelResizerCell : public CommonTrackCell
class TrackPanelResizerCell : public CommonTrackPanelCell
{
TrackPanelResizerCell(const TrackPanelResizerCell&) = delete;
TrackPanelResizerCell &operator= (const TrackPanelResizerCell&) = delete;
public:
explicit
TrackPanelResizerCell( const std::shared_ptr<Track> &pTrack );
TrackPanelResizerCell( const std::shared_ptr<TrackView> &pView );
std::vector<UIHandlePtr> HitTest
(const TrackPanelMouseState &, const AudacityProject *) override;
protected:
std::shared_ptr<Track> DoFindTrack() override
{ return mpTrack.lock(); };
std::shared_ptr<Track> DoFindTrack() override;
private:
std::weak_ptr<Track> mpTrack;
// back-pointer is weak to break a cycle
std::weak_ptr<TrackView> mwView;
std::weak_ptr<TrackPanelResizeHandle> mResizeHandle;
};

View File

@ -133,10 +133,15 @@ std::shared_ptr<const TrackVRulerControls> TrackView::GetVRulerControls() const
}
#include "../../TrackPanelResizeHandle.h"
std::shared_ptr<TrackPanelCell> Track::GetResizer()
std::shared_ptr<TrackPanelCell> TrackView::GetResizer()
{
if (!mpResizer)
// create on demand
mpResizer = std::make_shared<TrackPanelResizerCell>( SharedPointer() );
mpResizer = std::make_shared<TrackPanelResizerCell>( shared_from_this() );
return mpResizer;
}
std::shared_ptr<const TrackPanelCell> TrackView::GetResizer() const
{
return const_cast<TrackView*>(this)->GetResizer();
}

View File

@ -16,6 +16,7 @@ Paul Licameli split from class Track
class Track;
class TrackVRulerControls;
class TrackPanelResizerCell;
class TrackView /* not final */ : public CommonTrackCell
, public std::enable_shared_from_this<TrackView>
@ -37,12 +38,19 @@ public:
std::shared_ptr<TrackVRulerControls> GetVRulerControls();
std::shared_ptr<const TrackVRulerControls> GetVRulerControls() const;
// Return another, associated TrackPanelCell object that implements the
// click and drag to resize
std::shared_ptr<TrackPanelCell> GetResizer();
std::shared_ptr<const TrackPanelCell> GetResizer() const;
protected:
// Private factory to make appropriate object; class TrackView handles
// memory management thereafter
virtual std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() = 0;
std::shared_ptr<TrackVRulerControls> mpVRulerControls;
std::shared_ptr<TrackPanelResizerCell> mpResizer;
};
#endif