mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-27 09:38:39 +02:00
TrackPanelResizerCell, also in 1-to-1 with TrackView, now owned by it
This commit is contained in:
parent
18b4c01c51
commit
b4c7a8ef2a
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 {};
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user