... They are:
Effect
EffectManager, EffectRack (in a cycle of 2)
Nyquist
There is also one new file, RealtimeEffectManager. Making AudioIO use that,
instead of the whole of EffectManager, was essential to this improvement of
the graph.
... and simplify, using a std::atomic instead of a critical section.
(But did this before, and does this now, correctly synchronize across threads?
I defer that question.)
... though in a small cycle with each other, by moving RealtimeEffectManager to
new files, which remain in the big component.
Net loss of 1, the big component now has 27 files
... Breaking up an s.c.c. of 6 into 3 components:
ODManager, ODTask, ODWaveTrackTaskQueue
UndoManager
WaveClip, WaveTrack
Rewrite the OD tasks and queues to hold weak pointers to tracks, so the
track destructor need not notify them.
... from the second-largest s.c.c. which shrinks to 9
The 11 are:
AutoRecovery
Clipboard
NoteTrack
ODComputeSummaryTask
ProjectFileIO
ProjectHistory
Track
TrackControls
TrackPanelResizeHandle, TrackPanelResizerCell, TrackView in a small cycle
... It is const, renamed CopyTo, and invokes the create-on-demand factory in
the destination track; this means Track.cpp doesn't need to do that, and so
does not need TrackView.h
... because we undo the move,
"Demote vertical zooming code into WaveTrack.cpp ..." done at 1f4bf26
That was done so that WaveTrack would not depend on WaveTrackVZoomHandle, but
made it instead depend on ProjectHistory, which is undesirable.
But since then, commit 3797a52 moved the special minimizing code for WaveTrack
into WaveTrackView.
... from the Track subclasses, caused by splitting their virtual function
definitions, making dependencies that scripts/graph.pl did not detect.
Instead use a new system for registering tables of factory functions and
type-switching on the Track objects' RTTI to get to the right function.
... non-intrusively in the Track suclasses, registering functions instead.
For each abstract factory function (of two), build a table of concrete factory
functions, paralleling the hierarchy of Track subclesses. Dispatch using
runt time type information in the Track objects.
They are:
LabelTrack
Snap
TimeShiftHandle
The code, about 2000 lines, moved mostly into LabelTrackView, with some into
LabelTextHandle and LabelGlyphHandle.
With this commit, Track and its four subclasses are all free from the big
s.c.c, which has 29 remaining files, according to scripts/graph.pl.
But in truth there are still linkage dependencies not shown in the graph,
because overrides of Track::DoGetView and Track::DoGetControls are still in
scattered places, and they are needed to populate the virtual function tables
of those classes.
Thus dependency on LabelTrack still really implies dependency on LabelTrackView
and likewise for the other three Track subclasses.
... and LabelTrack listens to its own events, to update certain state.
This is roundabout for now, but that state is view-related and will move into
another class.