1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-01 16:19:43 +02:00

static ::Get functions for overlays on TrackPanel...

... not member functions of AudacityProject.

AdornedRulerPanel is not (yet) made similarly independent of its overlay
code.

Two .cpp files implementing overlays escape dependency cycles to higher levels.
This commit is contained in:
Paul Licameli 2019-04-28 07:02:40 -04:00
parent 004997cec1
commit 52abbcdc4b
8 changed files with 37 additions and 30 deletions

View File

@ -161,8 +161,6 @@ scroll information. It also has some status flags.
#include "toolbars/ToolsToolBar.h"
#include "toolbars/TranscriptionToolBar.h"
#include "tracks/ui/EditCursorOverlay.h"
#include "tracks/ui/PlayIndicatorOverlay.h"
#include "tracks/ui/Scrubbing.h"
#include "commands/ScriptCommandRelay.h"
@ -1229,23 +1227,8 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id,
mRuler);
}
mCursorOverlay = std::make_shared<EditCursorOverlay>(this);
#ifdef EXPERIMENTAL_SCRUBBING_BASIC
mScrubOverlay = std::make_shared<ScrubbingOverlay>(this);
#endif
mPlaybackScroller = std::make_unique<PlaybackScroller>(this);
mIndicatorOverlay = std::make_shared<PlayIndicatorOverlay>(this);
// Add the overlays
mTrackPanel->AddOverlay( mIndicatorOverlay );
mTrackPanel->AddOverlay( mCursorOverlay );
#ifdef EXPERIMENTAL_SCRUBBING_BASIC
mTrackPanel->AddOverlay( mScrubOverlay );
#endif
MenuManager::Get( project ).CreateMenusAndCommands( project );
// LLL: When Audacity starts or becomes active after returning from

View File

@ -55,7 +55,6 @@ class AudacityProject;
class AutoSaveFile;
class Importer;
class ODLock;
class Overlay;
class RecordingRecoveryHandler;
namespace ProjectFileIORegistry{ struct Entry; }
class TrackList;
@ -649,15 +648,6 @@ public:
private:
bool mbInitializingScrollbar{ false };
// TrackPanelOverlay objects
std::shared_ptr<Overlay>
mIndicatorOverlay, mCursorOverlay;
#ifdef EXPERIMENTAL_SCRUBBING_BASIC
std::shared_ptr<Overlay> mScrubOverlay;
private:
#endif
public:
class PlaybackScroller final : public wxEvtHandler
{

View File

@ -29,6 +29,14 @@ namespace {
}
}
static const AudacityProject::AttachedObjects::RegisteredFactory sOverlayKey{
[]( AudacityProject &parent ){
auto result = std::make_shared< EditCursorOverlay >( &parent );
parent.GetTrackPanel()->AddOverlay( result );
return result;
}
};
EditCursorOverlay::EditCursorOverlay(AudacityProject *project, bool isMaster)
: mProject(project)
, mIsMaster(isMaster)

View File

@ -12,11 +12,14 @@ Paul Licameli split from TrackPanel.cpp
#define __AUDACITY_EDIT_CURSOR_OVERLAY__
#include <memory>
#include "../../ClientData.h" // to inherit
#include "../../widgets/Overlay.h" // to inherit
class AudacityProject;
class EditCursorOverlay final : public Overlay
class EditCursorOverlay final
: public Overlay
, public ClientData::Base
{
public:
EditCursorOverlay(AudacityProject *project, bool isMaster = true);

View File

@ -115,6 +115,14 @@ void PlayIndicatorOverlayBase::Draw(OverlayPanel &panel, wxDC &dc)
wxASSERT(false);
}
static const AudacityProject::AttachedObjects::RegisteredFactory sOverlayKey{
[]( AudacityProject &parent ){
auto result = std::make_shared< PlayIndicatorOverlay >( &parent );
parent.GetTrackPanel()->AddOverlay( result );
return result;
}
};
PlayIndicatorOverlay::PlayIndicatorOverlay(AudacityProject *project)
: PlayIndicatorOverlayBase(project, true)
{

View File

@ -13,13 +13,17 @@ Paul Licameli split from TrackPanel.cpp
#include <wx/event.h> // to inherit
#include "../../MemoryX.h"
#include "../../ClientData.h"
#include "../../widgets/Overlay.h" // to inherit
class AudacityProject;
// Common class for overlaying track panel or ruler
class PlayIndicatorOverlayBase : public wxEvtHandler, public Overlay
class PlayIndicatorOverlayBase
: public wxEvtHandler
, public Overlay
, public ClientData::Base
{
public:
PlayIndicatorOverlayBase(AudacityProject *project, bool isMaster);

View File

@ -882,6 +882,14 @@ void Scrubber::Forwarder::OnMouse(wxMouseEvent &event)
///////////////////////////////////////////////////////////////////////////////
// class ScrubbingOverlay is responsible for drawing the speed numbers
static const AudacityProject::AttachedObjects::RegisteredFactory sOverlayKey{
[]( AudacityProject &parent ){
auto result = std::make_shared< ScrubbingOverlay >( &parent );
parent.GetTrackPanel()->AddOverlay( result );
return result;
}
};
ScrubbingOverlay::ScrubbingOverlay(AudacityProject *project)
: mProject(project)
, mLastScrubRect()

View File

@ -216,7 +216,10 @@ private:
};
// Specialist in drawing the scrub speed, and listening for certain events
class ScrubbingOverlay final : public wxEvtHandler, public Overlay
class ScrubbingOverlay final
: public wxEvtHandler
, public Overlay
, public ClientData::Base
{
public:
ScrubbingOverlay(AudacityProject *project);